此源代码包含了电机的正反转控制,加减速,显示模块还没开始弄,还望各路大神多多指教
单片机源程序如下:
- //采用一相励磁方式,即四根信号线每次只有一个为高电平。步进电机型号28BYJ-48,5V,DC,四相八拍
- #include<reg52.h>
- #define uchar unsigned char
-
- sbit jia_key=P3^2; //电机加速I/O口定义
- sbit jian_key=P3^3; //电机减速I/O口定义
- sbit zf_key=P3^4; //电机正反转I/O口定义
- bit flag=0; //电机正反转标志位,flag为0时正转,flag为1时为反转
- uchar num=0,maichong=4,table_begin=0;
- uchar code table1[]={0x01,0x02,0x04,0x08, 0x08,0x04,0x02,0x01}; //电机正反转I/O口的高低电平对应表
- //延时函数
- void delay(uchar i)
- {
- uchar j,k;
- for(j=i;j>0;j--)
- for(k=120;k>0;k--); //12M晶振
- }
- //按键检测处理函数
- void key ()
- {
- if(jia_key==0)
- {
- delay(5);
- if(jia_key==0) //key=0按下
- {
- num++;
- if(num==4)
- num=3; //最大则保持3
- while(jia_key==0);//等待松开按键
- }
- }
- if(jian_key==0)
- {
- delay(5);
- if(jian_key==0)
- {
- if(num!=0) //判断是否最小速
- num--;
- else
- num=0;
- while(jian_key==0); //等待按键释放,若按键没有释放则jian_key始终等于0,程序就一直停在while语句处,直到按键释放jian_key=1跳出while循环。
- //通常我们在检测单片机按键时,要等待按键释放才去执行相应代码
- }
- }
- if(zf_key==0) //电机正反转标志
- {
- delay(5);
- if(zf_key==0) //按键按下为0则反转
- {
- flag=~flag; //正反转标识取反
- while(zf_key==0);
- }
- }
- }
- //根据速度标识进行数据处理
- void dispose()
- {
- switch(num)
- {
- case 0:
- //show_num=2;
- maichong=8;
- break;
- case 1:
- // show_num=4;
- maichong=6;
- break;
- case 2:
- //show_num=6;
- maichong=4;
- break;
- case 3:
- // show_num=8;
- maichong=2;
- break;
- }
- if(flag==0)
- {
- table_begin=0;
- }
- else
- table_begin=4;
- }
- //电机速度,和正反转控制
- void qudong()
- {
- uchar i,j;
- for(j=table_begin;j<4+table_begin;j++)
- {
- P1=table1[j];
- for(i=0;i<maichong;i++)
- {
- //display();
- delay(5);
- }
- }
- }
- //主函数
- void main()
- {
- while(1)
- {
- key();
- dispose();
- qudong();
- }
- }
复制代码
所有资料51hei提供下载:
步进电机.zip
(4.39 KB, 下载次数: 8)
|