找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2027|回复: 0
打印 上一主题 下一主题
收起左侧

单片机步进电机按键控制源码

[复制链接]
跳转到指定楼层
楼主
ID:327677 发表于 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延时函数,含有输入参数 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延时函数,含有输入参数 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.                     主函数
  43. ------------------------------------------------*/
  44. main()
  45. {
  46. unsigned int i=512;//旋转一周时间

  47. EA=1;          //全局中断开
  48. EX0=1;         //外部中断0开
  49. IT0=1;         //1表示边沿触发

  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);         //改变这个参数可以调整电机转速 ,
  58.                              //数字越小,转速越大,力矩越小
  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);         //改变这个参数可以调整电机转速 ,
  80.                              //数字越小,转速越大,力矩越小
  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. }

复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表