标题: 51单片机步进电机极简驱动程序 [打印本页]

作者: BAAABBB    时间: 2023-11-6 15:17
标题: 51单片机步进电机极简驱动程序
花了一点时间写的,只有55行代码,大约1KB(实际上是846B),可以实现正反转,停止功能,带有指示灯。
单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code ffw[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
  5. uchar code rev[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};

  6. sbit k1=P3^0;
  7. sbit k2=P3^1;
  8. sbit k3=P3^2;

  9. void delayms(uint ms){
  10.         uchar i;
  11.         while(ms--){
  12.                 for(i=0;i<120;i++);//120
  13.         }
  14. }
  15. void step_motor_ffw(uint n){
  16.         uint i,j;
  17.         for(i=0;i<512*n;i++){
  18.                 for(j=0;j<8;j++){
  19.                         if(k3==0){
  20.                                 break;
  21.                         }
  22.                         delayms(1);
  23.                         P1=ffw[j];
  24.                 }
  25.         }
  26. }
  27. void step_motor_rev(uint n){
  28.         uint i,j;
  29.         for(i=0;i<512*n;i++){
  30.                 for(j=0;j<8;j++){
  31.                         if(k3==0){
  32.                                 break;
  33.                         }
  34.                         delayms(1);
  35.                         P1=rev[j];
  36.                 }
  37.         }
  38. }
  39. void main(){
  40.         uint x=1;
  41.         while(1){
  42.                 if(k1==0){
  43.                         P2=0xfe;
  44.                         step_motor_ffw(x);
  45.                 }else if(k2==0){
  46.                         P2=0xfd;
  47.                         step_motor_rev(x);
  48.                 }else{
  49.                         P2=0xfb;
  50.                         P1=0x00;
  51.                 }
  52.         }
  53. }
复制代码


屏幕截图 2023-11-06 144848.png (1.02 MB, 下载次数: 86)

屏幕截图 2023-11-06 144848.png

作者: 花少广    时间: 2023-11-24 11:34
为什么没有P0引脚的定义,但是仿真接了?
作者: BAAABBB    时间: 2023-11-24 19:05
花少广 发表于 2023-11-24 11:34
为什么没有P0引脚的定义,但是仿真接了?

接的是P1
作者: 红了脚丫    时间: 2024-1-2 00:14
外面那个循环什么意思,250*n
作者: BAAABBB    时间: 2024-1-2 23:56
红了脚丫 发表于 2024-1-2 00:14
外面那个循环什么意思,250*n

因为要转一圈要循环512次才行
作者: jovew    时间: 2024-11-11 18:19
三个按键都不起作用。
K1,K2,键,可以启动电机,K3,不能停止电机。怎么修改程序,才能停止电机?
作者: lkc8210    时间: 2024-11-13 16:10
jovew 发表于 2024-11-11 18:19
三个按键都不起作用。
K1,K2,键,可以启动电机,K3,不能停止电机。怎么修改程序,才能停止电机?

break;改return;
作者: 手机刷机菜鸟    时间: 2024-11-16 00:52
双轴会实现不




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1