百度知道 - 信息提示

日期:2025-01-13 11:03:17 人气:1

百度知道 - 信息提示

    A+
热门评论

单片机控制步进电机要求:有加速、减速、停止、正转、反转按钮,电机是四相五线,控制两个步进电机,c程序

我用的是控制一个步进电机的,这个是我以前写的,你的要求在下面的程序做修改就行了;程序如下: #include #define uchar unsigned char #define uint unsigned int //uchar table[]={0x18,0x30,0x60,0x48,0x48,0x60,0x30,0x18}; //二相励磁 uchar table[]={0x08,0x10,0x20,0x40,0x40,0x20,0x10,0x08}; //一相励磁 uchar num=0,maichong,zhengfan; sbit add_key=P3^2; //加速键 sbit reduce_key=P3^3; //减速键 sbit zhengfan_key=P3^4; //正反转按键 void delay(uint z) //延时1ms { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); } void only_key() //按键处理 { static uchar flag; //定义成静态只被定义一次 if(zhengfan_key==0) //检测正反按键是否被按下 { delay(5); if(zhengfan_key==0) { flag=~flag; //取反 if(flag==0) zhengfan=0; //正转,取数组前四位 else zhengfan=4; //反转,取数组后四位 while(!zhengfan_key); } } if(add_key==0) //检测加按键是否被按下 { delay(5); if(add_key==0) //消抖 { num++; //加速键按下,速度标志加1 if(num==4) //已达到最大值3 num=3; while(!add_key); } } if(reduce_key==0) //检测减按键是否被按下 { delay(5); if(reduce_key==0) { if(num!=0) num--; //减速键按下,速度标志减1 else num=0; //减速到0则保持 while(!reduce_key); } } } void deal() //根据速度标志进行数据处理 { switch(num) { case 0: P0=0x06; //数据管显示1 maichong=5; //转速最慢 break; case 1: P0=0x5b; //数据管显示2 maichong=4; break; case 2: P0=0x4f; //数据管显示3 maichong=3; break; case 3: P0=0x66; //数据管显示4 maichong=2; //转速最快 break; } } void start() //电机速度和正反控制处理 { uchar i,j; for(i=zhengfan;i<4+zhengfan;i++) { P1=table[i]; for(j=0;j<maichong;j++) //延时越小,转速越快,但也不得太小 delay(2); } } void main() { while(1) { only_key(); deal(); start(); } }

阅读全文