找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2651|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)控制步進(jìn)電機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:395404 發(fā)表于 2018-9-8 16:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include <reg52.h>
  2. #define uchar unsigned char  //無(wú)符號(hào)字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無(wú)符號(hào)整型 宏定義        變量范圍0~65535


  4. unsigned char code zheng[4]={0x08,0x04,0x02,0x01};//正轉(zhuǎn)表格
  5. unsigned char code fan[4]={0x01,0x02,0x04,0x08};//反轉(zhuǎn)表格

  6. uchar flag_start ;     //啟動(dòng)標(biāo)志位  1為起動(dòng)步進(jìn)電機(jī) 否則關(guān)閉電機(jī)
  7. uchar flag_z_f;        //正反標(biāo)志位  0為順時(shí)鐘 1為逆時(shí)史上轉(zhuǎn)
  8. uchar flag_shudu;      //4種速度 0,1,2,3,
  9. uint flag_shudu_value = 400;


  10. void Delay(unsigned int i)//延時(shí)
  11. {
  12. while(--i);
  13. }

  14. uchar key_can;
  15. /********************獨(dú)立按鍵程序*****************/
  16. void key()
  17. {
  18.         static uchar key_new;
  19.         key_can = 20;                                //按鍵值還原
  20.         if((P3 & 0xf0) != 0xf0)                //按鍵按下
  21.         {
  22.                 Delay(5);                                //按鍵消抖動(dòng)
  23.                 if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
  24.                 {                                                //確認(rèn)是按鍵按下
  25.                         key_new = 0;
  26.                         switch(P3 & 0xf0)
  27.                         {
  28.                                 case 0xe0:  key_can = 1;  break;         //得到按鍵值
  29.                                 case 0xd0:  key_can = 2;  break;         //得到按鍵值
  30.                                 case 0xb0:  key_can = 3;  break;         //得到按鍵值
  31.                                 case 0x70:  key_can = 4;  break;         //得到按鍵值
  32.                         }                                
  33.                 }        
  34.         }
  35.         else           //按鍵松開(kāi)
  36.                 key_new = 1;        
  37. }


  38. /******************主程序**********************/
  39. void main()
  40. {
  41.         unsigned char i;        
  42.         while(1)
  43.         {
  44.                 key();
  45.                 if(key_can < 10)
  46.                 {                                                
  47.                          if(key_can == 1)         //啟動(dòng)鍵
  48.                         {
  49.                                 if(flag_start == 0)          //啟動(dòng)
  50.                                 {
  51.                                         flag_start = 1;        
  52.                                         switch(flag_shudu)
  53.                                         {
  54.                                                 case 0:  flag_shudu_value = 500; P2 = 0xf0;  break;        //速度1  最快
  55.                                                 case 1:  flag_shudu_value = 800; P2 = 0xf9;  break;
  56.                                                 case 2:  flag_shudu_value = 1000; P2 = 0xfc;  break;
  57.                                                 case 3:  flag_shudu_value = 1500;P2 = 0xfe;  break;        //速度4  最慢
  58.                                         }
  59.                                 }
  60.                                 else         //停止
  61.                                 {
  62.                                         flag_start = 0;        
  63.                                         P2 = 0XFF;                //關(guān)閉指示燈
  64.         
  65.                                 }
  66.                         }if(key_can == 2)         //正反轉(zhuǎn)鍵
  67.                         {
  68.                                 flag_z_f = ~flag_z_f;    //

  69.                         }if(key_can == 3)          //減速
  70.                         {
  71.                                 flag_shudu ++;
  72.                                 if(flag_shudu >= 4)
  73.                                         flag_shudu = 0;
  74.                                 switch(flag_shudu)
  75.                                 {
  76.                                         case 0:  flag_shudu_value = 500; P2 = 0xf0;  break;        //速度1  最快
  77.                                         case 1:  flag_shudu_value = 800; P2 = 0xf9;  break;
  78.                                         case 2:  flag_shudu_value = 1000; P2 = 0xfc;  break;
  79.                                         case 3:  flag_shudu_value = 1500;P2 = 0xfe;  break;        //速度4  最慢
  80.                                 }
  81.                         }if(key_can == 4)         //加速
  82.                         {
  83.                                 if(flag_shudu == 0)
  84.                                         flag_shudu = 4;
  85.                                 flag_shudu --;
  86.                                 switch(flag_shudu)
  87.                                 {
  88.                                         case 0:  flag_shudu_value = 500; P2 = 0xf0;  break;        //速度1  最快
  89.                                         case 1:  flag_shudu_value = 800; P2 = 0xf8;  break;
  90.                                         case 2:  flag_shudu_value = 1000; P2 = 0xfc;  break;
  91.                                         case 3:  flag_shudu_value = 1500;P2 = 0xfe;  break;        //速度4  最慢
  92.                                 }
  93.                         }
  94.                 }
  95.                 if(flag_start == 1)
  96.                 {
  97.                         for(i=0;i<4;i++)                    //4相
  98.                         {
  99.                                 if(flag_z_f == 0)
  100.                                         P1=zheng[i];      //電機(jī)正轉(zhuǎn)
  101.                                 else
  102.                                         P1=fan[i];        //電機(jī)反轉(zhuǎn)
  103.                                 Delay(flag_shudu_value);        //改變這個(gè)參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速
  104.                         }
  105.                 }
  106.         }
  107. }
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2018-9-8 18:16 | 只看該作者
補(bǔ)全原理圖或者詳細(xì)說(shuō)明一下電路連接即可獲得100+黑幣
回復(fù)

使用道具 舉報(bào)

板凳
ID:435943 發(fā)表于 2018-11-30 13:36 | 只看該作者
很不錯(cuò)的例子
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表