找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2335|回復(fù): 0
收起左側(cè)

單片機步進電機按鍵控制源碼

[復(fù)制鏈接]
ID:327677 發(fā)表于 2018-5-14 10:27 | 顯示全部樓層 |閱讀模式
  1. #include <reg52.h>



  2. sbit A1=P1^0; //定義步進電機連接端口
  3. sbit B1=P1^1;
  4. sbit C1=P1^2;
  5. sbit D1=P1^3;


  6. #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
  7. #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
  8. #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
  9. #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  10. #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
  11. #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
  12. #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
  13. #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  14. #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電

  15. unsigned char Speed;
  16. bit Flag;
  17. /*------------------------------------------------
  18. uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  19. unsigned char 是定義無符號字符變量,其值的范圍是
  20. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  21. 長度如下 T=tx2+5 uS
  22. ------------------------------------------------*/
  23. void DelayUs2x(unsigned char t)
  24. {   
  25. while(--t);
  26. }
  27. /*------------------------------------------------
  28. mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  29. unsigned char 是定義無符號字符變量,其值的范圍是
  30. 0~255 這里使用晶振12M,精確延時請使用匯編
  31. ------------------------------------------------*/
  32. void DelayMs(unsigned char t)
  33. {

  34. while(t--)
  35. {
  36.      //大致延時1mS
  37.      DelayUs2x(245);
  38.          DelayUs2x(245);
  39. }
  40. }
  41. /*------------------------------------------------
  42.                     主函數(shù)
  43. ------------------------------------------------*/
  44. main()
  45. {
  46. unsigned int i=512;//旋轉(zhuǎn)一周時間

  47. EA=1;          //全局中斷開
  48. EX0=1;         //外部中斷0開
  49. IT0=1;         //1表示邊沿觸發(fā)

  50. Speed=10;
  51. while(1){
  52. Coil_OFF
  53. while((i--)&&Flag)  //正向
  54.   {  Coil_A1      
  55.      DelayMs(Speed);
  56.      Coil_AB1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  57.      DelayMs(Speed);         //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速 ,
  58.                              //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
  59.          Coil_B1      
  60.      DelayMs(Speed);
  61.      Coil_BC1
  62.      DelayMs(Speed);
  63.          Coil_C1      
  64.      DelayMs(Speed);
  65.      Coil_CD1
  66.      DelayMs(Speed);
  67.          Coil_D1      
  68.      DelayMs(Speed);
  69.      Coil_DA1
  70.      DelayMs(Speed);
  71.   }
  72.   Coil_OFF
  73.   i=512;
  74.   while((i--)&&(!Flag))//反向
  75.   {  
  76.      Coil_A1      
  77.      DelayMs(Speed);
  78.      Coil_DA1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  79.      DelayMs(Speed);         //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速 ,
  80.                              //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
  81.          Coil_D1      
  82.      DelayMs(Speed);
  83.      Coil_CD1
  84.      DelayMs(Speed);
  85.          Coil_C1      
  86.      DelayMs(Speed);
  87.      Coil_BC1
  88.      DelayMs(Speed);
  89.          Coil_B1      
  90.      DelayMs(Speed);
  91.      Coil_AB1
  92.      DelayMs(Speed);
  93.   }
  94. }
  95. }

  96. /*------------------------------------------------
  97.                  外部中斷程序
  98. ------------------------------------------------*/
  99. void ISR_INT0(void) interrupt 0
  100. {

  101. if(!INT0)
  102.    {
  103.    DelayMs(10);//在此處可以添加去抖動程序,防止按鍵抖動造成錯誤
  104.    if(!INT0)
  105.    //while(!INT1);//等待按鍵釋放
  106.      {
  107.      Flag=!Flag;   
  108.      }
  109.    }
  110. }

復(fù)制代碼
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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