|
本人剛學(xué)沒多久,求各位大佬幫忙看一下,看看有沒有錯(cuò)誤,歡迎大家指正
步進(jìn)電機(jī)驅(qū)動(dòng)模塊為ULN2003,人體紅外傳感器為HC-SR501
單片機(jī)源程序如下(有注釋):
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- /*********************
- + ---- +4.5-20v //正極輸入電壓在+4.5v到20v之間
- out --- P10 //輸出接到P10端口
- - --- GND //負(fù)極接地
- IN1 ---- P00 //IN1接 P00端口 (電機(jī)驅(qū)動(dòng)模塊)
- IN2 ---- P01 //IN2接 P01端口 (電機(jī)驅(qū)動(dòng)模塊)
- IN3 ---- P02 //IN3接 P02端口 (電機(jī)驅(qū)動(dòng)模塊)
- IN4 ---- P03 //IN4接 P03端口 (電機(jī)驅(qū)動(dòng)模塊)
- + ---- +5V //正極接正5v
- - ---- GND //負(fù)極接地
- *********************/
- sbit out=P2^0 ; //對輸出out進(jìn)行位定義,定義單片機(jī)I/O口 P1.0的偽名稱叫out
- sbit led1=P1^3;
- sbit led2=P1^7;
- #define MotorData P0 //對步進(jìn)電機(jī)的控制接口進(jìn)行定義
- #define time 500 //控制正反轉(zhuǎn)的角度'
-
- uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正轉(zhuǎn) 電機(jī)導(dǎo)通相序 D-C-B-A
- uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反轉(zhuǎn) 電機(jī)導(dǎo)通相序 A-B-C-D
- //ms 延時(shí)函數(shù)封裝
- void Delay_xms(uint x) //定義一個(gè)無符號(hào)整數(shù) x (x是什么?) 帶參函數(shù)
- {
- uint i,j; //uint等價(jià)于unsigned int,無符號(hào)整數(shù) ;定義兩個(gè)無符號(hào)整數(shù) i和 j
- for(i=0;i<x;i++) //令 i的初始值為 0,當(dāng) i<x的時(shí)候,i=i+1
- for(j=0;j<112;j++); //令 j的初始值為 0,當(dāng) i<112的時(shí)候,j=j+1
- }
- //順時(shí)針轉(zhuǎn)動(dòng)函數(shù)封裝
- void MotorCW(void) //void MotorCW(void) 不能輸入?yún)?shù)
- {
- uchar i; //定義一個(gè)無符號(hào)字符型 i
- for(i=0;i<4;i++) //令 i的初始值為 0,當(dāng) i<4的時(shí)候,執(zhí)行{}內(nèi)的程序段,然后進(jìn)行 i=i+1再禁入循環(huán)
- {
- MotorData=phasecw[i]; //步進(jìn)電機(jī)的控制接口輸出正轉(zhuǎn)且電機(jī)導(dǎo)通相序 D-C-B-A 的信號(hào)驅(qū)動(dòng)步進(jìn)電機(jī)工作
- Delay_xms(4); //延時(shí)函數(shù),調(diào)節(jié)轉(zhuǎn)速 (意思是延時(shí)4毫秒嗎?)
- }
- }
- //逆時(shí)針轉(zhuǎn)動(dòng)函數(shù)封裝
- void MotorCCW(void)
- {
- uchar i; //定義一個(gè)無符號(hào)字符型 i
- for(i=0;i<4;i++) //令 i的初始值為 0,當(dāng) i<4的時(shí)候,執(zhí)行{}內(nèi)的程序段,然后進(jìn)行 i=i+1再禁入循環(huán)
- {
- MotorData=phaseccw[i]; //步進(jìn)電機(jī)的控制接口輸出反轉(zhuǎn)且電機(jī)導(dǎo)通相序 A-B-C-D 的信號(hào)驅(qū)動(dòng)步進(jìn)電機(jī)工作
- Delay_xms(4); //延時(shí)函數(shù),調(diào)節(jié)轉(zhuǎn)速(意思是延時(shí)4毫秒嗎?)
- }
- }
- //停止轉(zhuǎn)動(dòng)函數(shù)封裝
- void MotorStop(void)
- {
- MotorData=0x00; //步進(jìn)電機(jī)的控制接口輸出置 0信號(hào) ,使步進(jìn)電機(jī)停止工作
- }
- //程序主函數(shù)
- void main(void)
- {
- uint i; //定義一個(gè)無符號(hào)整型 i
- Delay_xms(50); //延時(shí)函數(shù)(意思是延時(shí)4s嗎?)(目的是啥?等系統(tǒng)穩(wěn)定是嗎?)
- while(1) // 不斷循環(huán)
- {
- led1=1;
- led2=1;
- if(out == 1) //如果out等于1的話,那么執(zhí)行{}內(nèi)的程序
- {
- for(i=0;i<time;i++) //對于i=0,當(dāng)i<time值時(shí),執(zhí)行順時(shí)針轉(zhuǎn)動(dòng)函數(shù),然后i=i+1后重新進(jìn)入循環(huán)
- {
- led1=0;
- MotorCW(); //順時(shí)針轉(zhuǎn)動(dòng)函數(shù),驅(qū)動(dòng)步進(jìn)電機(jī)順時(shí)針轉(zhuǎn)動(dòng),直到i等于time值時(shí)結(jié)束循環(huán)
-
- }
- MotorStop(); //停止轉(zhuǎn)動(dòng)函數(shù),是步進(jìn)電機(jī)停止轉(zhuǎn)動(dòng)
-
- Delay_xms(1000); //延時(shí)函數(shù),延時(shí)1000毫秒的意思是嗎?
-
- if(out == 0) //如果out等于0的話,那么執(zhí)行{}內(nèi)的程序
- {
- for(i=0;i<time;i++) //對于i=0,當(dāng)i<time值時(shí),執(zhí)行逆時(shí)針轉(zhuǎn)動(dòng)函數(shù),然后i=i+1后重新進(jìn)入循環(huán)
- {
- led2=0;
- MotorCCW(); //逆時(shí)針轉(zhuǎn)動(dòng)函數(shù),驅(qū)動(dòng)步進(jìn)電機(jī)逆時(shí)針轉(zhuǎn)動(dòng),直到i等于time值時(shí)結(jié)束循環(huán)
- }
- MotorStop(); //停止轉(zhuǎn)動(dòng)函數(shù),使步進(jìn)電機(jī)停止轉(zhuǎn)動(dòng)
- }
- }
- }
- }
復(fù)制代碼
|
|