包含程序和仿真
功能:按鍵或串口發(fā)送字符指令,控制步進(jìn)電機(jī)正轉(zhuǎn)、反轉(zhuǎn)、停止、加速、減速動(dòng)作
仿真過程可直接通過按下電腦鍵盤控制
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖片4.png (19.45 KB, 下載次數(shù): 95)
下載附件
2017-8-11 08:36 上傳
圖片3.png (19.54 KB, 下載次數(shù): 85)
下載附件
2017-8-11 08:36 上傳
圖片2.png (19.24 KB, 下載次數(shù): 93)
下載附件
2017-8-11 08:36 上傳
圖片1.png (19.63 KB, 下載次數(shù): 100)
下載附件
2017-8-11 08:36 上傳
0.png (46.42 KB, 下載次數(shù): 84)
下載附件
2017-8-11 17:26 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- //------8拍-----
- uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正轉(zhuǎn)
- uchar code fz[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反轉(zhuǎn)
- sbit K1=P3^0; //停止
- sbit K2=P3^1; //正轉(zhuǎn)
- sbit K3=P3^2; //反轉(zhuǎn)
- sbit K4=P3^3; //加速
- sbit K5=P3^4; //減速
- uchar state=0; //狀態(tài)變量
- uint Time=60; //延時(shí)時(shí)間,用于調(diào)速
- unsigned char receiveData='0';
- void UsartConfiguration(); //初始化串口
- void delay(uint ms) //延時(shí),用于調(diào)速
- {
- uint t;
- while(ms--)
- for(t=0;t<120;t++);
- }
- void motor_zz() //正傳函數(shù)
- {
- uint j;
- for(j=0;j<8;j++)
- {
- if(P3==0xfb)
- break;
- P1=zz[j];
- delay(Time);
- }
- }
- void motor_fz() //反轉(zhuǎn)函數(shù)
- {
- uint j;
- for(j=0;j<8;j++)
- {
- if(P3==0xfb)
- break;
- P1=fz[j];
- delay(Time);
- }
- }
- void main()
- {
- UsartConfiguration();
- while(1)
- {
- while(state==0) //狀態(tài)0,停止
- {
- if((K2==0)||(receiveData=='z')) //按下K2或串口接收到'z',電機(jī)正轉(zhuǎn)
- {
- state=1;
- receiveData='0';
- break;
- }
- if((K3==0)||(receiveData=='f')) //按下K3或串口接收到'f',電機(jī)反轉(zhuǎn)
- {
- state=2;
- receiveData='0';
- break;
- }
- P0=0xfb;
- P1=0x03;
- }
-
- while(state==1) //狀態(tài)1,正轉(zhuǎn)
- {
- if((K1==0)||(receiveData=='t')) //按下K1或串口接收到'f',電機(jī)反轉(zhuǎn)
- {
- state=0;
- receiveData='0';
- break;
- }
- if((K2==0)||(receiveData=='z')) //按下K2或串口接收到'z',電機(jī)正轉(zhuǎn)
- {
- state=1;
- receiveData='0';
- break;
- }
- if((K3==0)||(receiveData=='f')) //按下K3或串口接收到'f',電機(jī)反轉(zhuǎn)
- {
- state=2;
- receiveData='0';
- break;
- }
- if((K4==0)||(receiveData=='+')) //按下K4或串口接收到'+',電機(jī)加速
- {
- Time=Time-5;
- if(Time<20)
- Time=20;
- while(K4==0);
- }
- if((K5==0)||(receiveData=='-')) //按下K5或串口接收到'-',電機(jī)減速
- {
- Time=Time+5;
- if(Time>100)
- Time=100;
- while(K5==0);
- }
- motor_zz(); //狀態(tài)1,正轉(zhuǎn)
- }
- while(state==2) //狀態(tài)2,反轉(zhuǎn)
- {
- if((K1==0)||(receiveData=='t')) //按下K1或串口接收到'f',電機(jī)反轉(zhuǎn)
- {
- state=0;
- receiveData='0';
- break;
- }
- if((K2==0)||(receiveData=='z')) //按下K2或串口接收到'z',電機(jī)正轉(zhuǎn)
- {
- state=1;
- receiveData='0';
- break;
- }
- if((K3==0)||(receiveData=='f')) //按下K3或串口接收到'f',電機(jī)反轉(zhuǎn)
- {
- state=2;
- receiveData='0';
- break;
- }
- if((K4==0)||(receiveData=='+')) //按下K4或串口接收到'+',電機(jī)加速
- {
- Time=Time-5;
- if(Time<20)
- Time=20;
- while(K4==0);
- }
- if((K5==0)||(receiveData=='-')) //按下K5或串口接收到'-',電機(jī)減速
- {
- Time=Time+5;
- if(Time>100)
- Time=100;
- while(K5==0);
- }
- motor_fz(); //狀態(tài)2,反轉(zhuǎn)
- }
- }
- }
- /************************************************************************
- * 函數(shù)名 :UsartConfiguration()
- * 函數(shù)功能 :設(shè)置串口
- * 輸入 : 無
- * 輸出 : 無
- *************************************************************************/
- void UsartConfiguration()
- {
- SCON=0X50; //設(shè)置為工作方式1
- //TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
- TMOD=0X21; //設(shè)置計(jì)數(shù)器工作方式2 和定時(shí)器0
- PCON=0X80; //波特率加倍
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
按鍵&串口控制步進(jìn)電機(jī)正反轉(zhuǎn)調(diào)速.zip
(163.03 KB, 下載次數(shù): 644)
2017-8-11 08:40 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|