|
單片機(jī)源程序如下:
- #include<reg52.h>
- typedef unsigned int uint;
- typedef unsigned char uchar;
- int a=0;
- sbit IN1=P1^0; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
- sbit IN2=P1^1; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
- sbit IN3=P1^2; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
- sbit IN4=P1^3; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
- sbit IN5=P1^4; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
- sbit IN6=P1^5; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
- sbit IN7=P1^6; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
- sbit IN8=P1^7; //定義電機(jī)驅(qū)動(dòng)信號(hào)輸出端
- sbit out1=P3^2;//定義尋聲模塊信號(hào)左輸入端 //可有可無中斷自動(dòng)觸發(fā)
- sbit out2=P3^3;//定義尋聲模塊信號(hào)右輸入端
- char L_pwm,R_pwm,t;
- void L_qian()
- {
- IN1=1;
- IN2=0;
- IN3=1;
- IN4=0;
- }
- void R_qian()
- {
- IN5=1;
- IN6=0;
- IN7=1;
- IN8=0;
- }
- void L_ting()
- {
- IN1=0;
- IN2=0;
- IN3=0;
- IN4=0;
- }
- void R_ting()
- {
- IN5=0;
- IN6=0;
- IN7=0;
- IN8=0;
- }
- void L_hou()
- {
- IN1=0;
- IN2=1;
- IN3=0;
- IN4=1;
- }
- void R_hou()
- {
- IN5=0;
- IN6=1;
- IN7=0;
- IN8=1;
- }
- void zuozhuan()interrupt 0
- {
- if(a==0)
- { L_pwm=0;R_pwm=40;a=1;}
- else a=0;
- }
- void youzhuan()interrupt 2
- {
- if(a==0)
- { L_pwm=40;R_pwm=0;a=1;}
- else a=0;
- }
- void timer0() interrupt 1
- { TH1 = 0x0FE;
- TL1 = 0x33;
- if(L_pwm>=0)if(t<L_pwm) L_qian(); //當(dāng)L_pwm為0時(shí)根據(jù)我們的思維:電機(jī)不應(yīng)該轉(zhuǎn)。將0代入左邊
- else L_ting(); //L_pwm,發(fā)現(xiàn)不管t取0~39范圍內(nèi)何值時(shí),都不會(huì)執(zhí)行L_qian(),
- else if(t<~L_pwm) L_hou(); //當(dāng)L_pwm為0時(shí)根據(jù)我們的思維:電機(jī)不應(yīng)該轉(zhuǎn)。將0代入左邊
- else L_ting(); //L_pwm,發(fā)現(xiàn)不管t取0~39范圍內(nèi)何值時(shí),都不會(huì)執(zhí)行L_qian(),
- if(R_pwm>=0)if(t<R_pwm) R_qian(); //當(dāng)L_pwm為0時(shí)根據(jù)我們的思維:電機(jī)不應(yīng)該轉(zhuǎn)。將0代入左邊
- else R_ting(); //L_pwm,發(fā)現(xiàn)不管t取0~39范圍內(nèi)何值時(shí),都不會(huì)執(zhí)行L_qian(),
- else if(t<~R_pwm) R_hou(); //當(dāng)L_pwm為0時(shí)根據(jù)我們的思維:電機(jī)不應(yīng)該轉(zhuǎn)。將0代入左邊
- else R_ting(); //L_pwm,發(fā)現(xiàn)不管t取0~39范圍內(nèi)何值時(shí),都不會(huì)執(zhí)行L_qian(),
- t++;
- t%=40;//使每個(gè)pwm周期內(nèi)t的取值都是0~39變化
- }
復(fù)制代碼
|
|