標(biāo)題: 以下是我弄的步進(jìn)電機(jī)源代碼 [打印本頁(yè)]

作者: FLC123    時(shí)間: 2018-6-24 09:46
標(biāo)題: 以下是我弄的步進(jìn)電機(jī)源代碼
此源代碼包含了電機(jī)的正反轉(zhuǎn)控制,加減速,顯示模塊還沒(méi)開(kāi)始弄,還望各路大神多多指教

單片機(jī)源程序如下:


  1. //采用一相勵(lì)磁方式,即四根信號(hào)線每次只有一個(gè)為高電平。步進(jìn)電機(jī)型號(hào)28BYJ-48,5V,DC,四相八拍
  2. #include<reg52.h>
  3. #define uchar unsigned char
  4.        
  5. sbit jia_key=P3^2;                           //電機(jī)加速I/O口定義
  6. sbit jian_key=P3^3;                          //電機(jī)減速I/O口定義
  7. sbit zf_key=P3^4;                          //電機(jī)正反轉(zhuǎn)I/O口定義
  8. bit flag=0;                                        //電機(jī)正反轉(zhuǎn)標(biāo)志位,flag為0時(shí)正轉(zhuǎn),flag為1時(shí)為反轉(zhuǎn)

  9. uchar num=0,maichong=4,table_begin=0;

  10. uchar code table1[]={0x01,0x02,0x04,0x08, 0x08,0x04,0x02,0x01};  //電機(jī)正反轉(zhuǎn)I/O口的高低電平對(duì)應(yīng)表

  11. //延時(shí)函數(shù)
  12. void delay(uchar i)
  13. {
  14.     uchar j,k;
  15.     for(j=i;j>0;j--)
  16.          for(k=120;k>0;k--);  //12M晶振
  17. }

  18. //按鍵檢測(cè)處理函數(shù)
  19. void key ()
  20. {
  21.         if(jia_key==0)
  22.         {
  23.                 delay(5);
  24.                 if(jia_key==0)   //key=0按下
  25.                 {
  26.                         num++;
  27.                         if(num==4)
  28.                                 num=3;              //最大則保持3
  29.                         while(jia_key==0);//等待松開(kāi)按鍵
  30.                 }
  31.         }
  32.         if(jian_key==0)
  33.         {
  34.                 delay(5);
  35.                 if(jian_key==0)
  36.                 {
  37.                         if(num!=0)     //判斷是否最小速
  38.                                 num--;
  39.                         else
  40.                                 num=0;
  41.                         while(jian_key==0);  //等待按鍵釋放,若按鍵沒(méi)有釋放則jian_key始終等于0,程序就一直停在while語(yǔ)句處,直到按鍵釋放jian_key=1跳出while循環(huán)。
  42.                                                                                 //通常我們?cè)跈z測(cè)單片機(jī)按鍵時(shí),要等待按鍵釋放才去執(zhí)行相應(yīng)代碼
  43.                 }
  44.         }
  45.         if(zf_key==0)  //電機(jī)正反轉(zhuǎn)標(biāo)志
  46.         {
  47.                 delay(5);
  48.                 if(zf_key==0)       //按鍵按下為0則反轉(zhuǎn)
  49.                 {
  50.                         flag=~flag;    //正反轉(zhuǎn)標(biāo)識(shí)取反
  51.                         while(zf_key==0);
  52.                 }
  53.         }
  54. }


  55. //根據(jù)速度標(biāo)識(shí)進(jìn)行數(shù)據(jù)處理
  56. void dispose()
  57. {
  58.   switch(num)
  59.   {
  60.     case 0:
  61.              //show_num=2;
  62.                    maichong=8;
  63.                     break;
  64.                 case 1:
  65.                  // show_num=4;
  66.                    maichong=6;
  67.                     break;
  68.                 case 2:
  69.                   //show_num=6;
  70.                    maichong=4;
  71.                     break;
  72.            case 3:
  73.                  // show_num=8;
  74.                    maichong=2;
  75.                     break;
  76.         }
  77.         if(flag==0)
  78.         {
  79.           table_begin=0;
  80.         }
  81.         else
  82.           table_begin=4;
  83. }

  84. //電機(jī)速度,和正反轉(zhuǎn)控制
  85. void qudong()
  86. {
  87.     uchar i,j;
  88.         for(j=table_begin;j<4+table_begin;j++)
  89.         {
  90.           P1=table1[j];
  91.            for(i=0;i<maichong;i++)
  92.            {
  93.              //display();
  94.                          delay(5);
  95.            }
  96.         }
  97. }


  98. //主函數(shù)
  99. void main()
  100.   {
  101.     while(1)
  102.            {
  103.            key();
  104.                  dispose();
  105.                  qudong();
  106.            }
  107.   }
復(fù)制代碼

所有資料51hei提供下載:
步進(jìn)電機(jī).zip (4.39 KB, 下載次數(shù): 8)







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1