找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3258|回复: 8
收起左侧

51单片机步进电机极简驱动程序

  [复制链接]
ID:1091661 发表于 2023-11-6 15:17 | 显示全部楼层 |阅读模式
花了一点时间写的,只有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黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:314651 发表于 2023-11-24 11:34 | 显示全部楼层
为什么没有P0引脚的定义,但是仿真接了?
回复

使用道具 举报

ID:1091661 发表于 2023-11-24 19:05 | 显示全部楼层
花少广 发表于 2023-11-24 11:34
为什么没有P0引脚的定义,但是仿真接了?

接的是P1
回复

使用道具 举报

ID:371895 发表于 2024-1-2 00:14 来自手机 | 显示全部楼层
外面那个循环什么意思,250*n
回复

使用道具 举报

ID:1091661 发表于 2024-1-2 23:56 | 显示全部楼层
红了脚丫 发表于 2024-1-2 00:14
外面那个循环什么意思,250*n

因为要转一圈要循环512次才行
回复

使用道具 举报

ID:97678 发表于 2024-11-11 18:19 | 显示全部楼层
三个按键都不起作用。
K1,K2,键,可以启动电机,K3,不能停止电机。怎么修改程序,才能停止电机?
回复

使用道具 举报

ID:161164 发表于 2024-11-13 16:10 | 显示全部楼层
jovew 发表于 2024-11-11 18:19
三个按键都不起作用。
K1,K2,键,可以启动电机,K3,不能停止电机。怎么修改程序,才能停止电机?

break;改return;
回复

使用道具 举报

ID:918440 发表于 2024-11-16 00:52 | 显示全部楼层
双轴会实现不
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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