步进机加速转,LED提示灯
仿真原理图如下
单片机源程序如下:
- #include
//包含单片机头文件 - //宏定义方便使用
- #define uint unsigned int
- #define uchar unsigned char
- uchar code FFW[]= //8拍编码
- {
- 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
- };
- sbit K1 = P3^0;//定义用符号k1来表示P3.0引脚
- sbit K2 = P3^1;
- sbit K3 = P3^2;
- sbit K4 = P3^3;
- sbit K5 = P3^4;
- uchar Pos_N=1; //定义正转圈数变量
- uchar Inv_N=2; //定义反转圈数变量
- uchar Run_flag=0; //电机运行的标志
- uint speed=20;
- /*-----------------------------------
- 延时函数
- ------------------------------------*/
- void DelayMS(uint ms)
- {
- uchar i;
- while(ms--)
- {
- for(i=0;i<20;i++);
- }
- }
- /*-----------------------------------
- 正转函数
- ------------------------------------*/
- void SETP_MOTOR_FFW()
- {
- static uint i=0,j=0;
- if(++i>speed*10) //延时
- {
- i=0;
- P1=FFW[j]; //送8拍
- if(++j>7)j=0;
- }
-
- }
- /*-----------------------------------
- 反转函数
- ------------------------------------*/
- void SETP_MOTOR_REV()
- {
- static uint i=0,j=0;
- if(++i>speed*10) //延时
- {
- i=0;
- P1=FFW[7-j]; //倒序送八拍编码
- if(++j>7)j=0;
- }
- }
- //*********************************
- //按键扫描程序
- //mode:0,不支持连续按;1,支持连续按;
- //*********************************
- uchar KEY_Scan()
- {
- static uchar key_up=1;//按键按松开标志
- if(key_up&&(K1==0||K2==0||K3==0||K4==0||K5==0))
- {
- DelayMS(5);//去抖动
- if(K1==0||K2==0||K3==0||K4==0||K5==0)
- {
- key_up=0;
- if(K1==0)return 1;
- else if(K2==0)return 2;
- else if(K3==0)return 3;
- else if(K4==0)return 4;
- else if(K5==0)return 5;
- }
- else
- {
- return 0;
- }
- }else if(K1==1&&K2==1&&K3==1&&K4==1&&K5==1)key_up=1;
- return 0;// 无按键按下
- }
- /*-----------------------------------
- 主函数
- ------------------------------------*/
- void main()
- {
- uchar key_num=0;
- P1=0x01; //电机初始位置
- P2=0xfb; //停止指示灯
- while(1)
- {
- key_num=KEY_Scan(); //扫面按键
- if(key_num==1) //正转
- {
- P2=0xfe; //正转指示灯
- Run_flag=1;//正转标志
- }
- else if(key_num==2)//反转
- {
- P2=0xfd; //反转指示灯
- Run_flag=2;//反转标志
- }
- else if(key_num==3)//停止
- {
- P2=0xfb; //停止指示灯
- P1=0x01; //回到初始位置
- Run_flag=0;//停止标志
- }
- else if(key_num==4)//加速
- {
- if(speed!=0)
- {
- speed-=1;
- }
- }
- else if(key_num==5)//减速
- {
- speed+=1;
- if(speed>100) //限定调速范围0-100
- {
- speed=100;
- }
- }
- if(Run_flag==1)//正转标志
- {
- SETP_MOTOR_FFW();
- }
- else if(Run_flag==2)//反转标志
- {
- SETP_MOTOR_REV();
- }
- else
- {
- P2=0xfb; //停止指示灯
- }
-
- }
- }