【C51开发应用】基于C51单片机开发的循迹灭火机器人
基于C51單片機(jī)開發(fā)的循跡滅火機(jī)器人
- 一、作品摘要
- 二、系統(tǒng)設(shè)計(jì)步驟
- 三、方案設(shè)計(jì)
- 3.1???小車主體設(shè)計(jì)
- 3.1.1???購買玩具小車進(jìn)行改裝
- 3.1.2???自己設(shè)計(jì)小車主體結(jié)構(gòu)
- 3.2???電機(jī)驅(qū)動(dòng)模塊
- 3.2.1???使用MOSFET構(gòu)成H橋式驅(qū)動(dòng)電路
- 3.2.2???使用直流電機(jī)驅(qū)動(dòng)芯片L298N
- 3.3???紅外循跡模塊
- 3.4???火焰識(shí)別模塊
- 3.4.1???使用紫外傳感器識(shí)別火焰
- 3.4.2???使用紅外傳感器識(shí)別火焰
- 3.5??? 滅火模塊
- 3.5.1???用水滅火
- 3.5.2???用風(fēng)扇滅火
- 3.6??? 滅火模塊
- 四、機(jī)器人的設(shè)計(jì)與組成
- 4.1??? 1路循跡模塊
- 4.2??? 火焰?zhèn)鞲衅?/li>
- 4.3??? L298N驅(qū)動(dòng)模塊
- 4.4??? 舵機(jī)
- 4.5??? 風(fēng)機(jī)
- 4.6??? 開發(fā)系統(tǒng)
- 4.7??? 直流繼電器
- 五、編程思路
- 5.1??? 循跡部分
- 5.2??? 火焰識(shí)別部分
- 5.3??? 滅火部分
- 六、程序
- 6.1??? 循跡滅火機(jī)器人.c
- 6.2??? duoji.h
一、作品摘要
???????本設(shè)計(jì)由電機(jī)驅(qū)動(dòng)模塊、紅外循跡模塊、火焰識(shí)別模塊、滅火模塊以及MCU 控制模塊五大部分構(gòu)成。本設(shè)計(jì)采用深圳宏晶科技有限公司的STC89C52RC單片機(jī)作為小車的控制核心,實(shí)現(xiàn)對(duì)各個(gè)模塊的通訊和控制。循跡部分由集成式紅外探頭組成,將采集到的數(shù)據(jù)處理后反饋至單片機(jī)。尋火部分由火焰?zhèn)鞲衅髂K組成。滅火部分由升壓電路和風(fēng)扇組成。電機(jī)由以L298N為核心部件的電路驅(qū)動(dòng)。該小車具有按照指定的軌跡巡線,發(fā)現(xiàn)火源進(jìn)行滅火的功能。基于穩(wěn)定的硬件電路設(shè)計(jì)以及精確可靠的軟件算法,小車能夠?qū)崿F(xiàn)預(yù)期功能。
二、系統(tǒng)設(shè)計(jì)步驟
(1)根據(jù)設(shè)計(jì)要求,確定控制方案;
(2)將各個(gè)模塊進(jìn)行組裝并進(jìn)行簡單調(diào)試;
(3)畫出程序流程圖,使用C語言進(jìn)行編程;
(4)將程序燒錄到單片機(jī)內(nèi);
(5)進(jìn)行調(diào)試以實(shí)現(xiàn)控制功能。
?
三、方案設(shè)計(jì)
3.1???小車主體設(shè)計(jì)
3.1.1???購買玩具小車進(jìn)行改裝
???????采用玩具小車來改裝,加入自己的控制系統(tǒng)即可,這樣的優(yōu)勢是,省去了制作車體的功夫。另外小車主體布局也比較合理,可以較好地完成任務(wù)。
3.1.2???自己設(shè)計(jì)小車主體結(jié)構(gòu)
???????自己設(shè)計(jì)制造小車主體結(jié)構(gòu),能夠按照布局設(shè)計(jì)思路來完成小車主體結(jié)構(gòu)的調(diào)整,保證電路部分和機(jī)械部分的全面協(xié),可以合理地安放傳感器。但是自己設(shè)計(jì)的小車難免會(huì)外表粗糙,費(fèi)時(shí)費(fèi)力。
???????綜合考慮各種利弊,兼顧小車制作周期問題,選擇了購買小車主體結(jié)構(gòu),從而縮短小車的制作周期。
?
3.2???電機(jī)驅(qū)動(dòng)模塊
???????鑒于價(jià)格和功能的考慮,我們選擇了直流電機(jī),通過PWM控制小車的速度以及方向。電機(jī)驅(qū)動(dòng)部分有以下兩種方案:
3.2.1???使用MOSFET構(gòu)成H橋式驅(qū)動(dòng)電路
???????利用PWM波形來控制小車的速度,再用單片機(jī)兩個(gè)I/O口控制電機(jī)旋轉(zhuǎn)方向,此電路驅(qū)動(dòng)功率比較大,小車的轉(zhuǎn)速比較快。
3.2.2???使用直流電機(jī)驅(qū)動(dòng)芯片L298N
???????L298N作為集成芯片,一塊芯片能夠輸出兩路PWM波形,控制兩個(gè)電機(jī),而且還帶有控制使能端。用該芯片作為電機(jī)驅(qū)動(dòng),操作方便,穩(wěn)定性好,性能優(yōu)良。相對(duì)于由MOSFET構(gòu)成的H橋式驅(qū)動(dòng)電路來說具有電路焊接簡單,焊接完成后不易出差錯(cuò)的優(yōu)點(diǎn)。二者價(jià)格上差別不大,所以我們優(yōu)先選擇了方案(2)。
?
3.3???紅外循跡模塊
???????每一路的傳感器的紅外發(fā)射管不斷發(fā)射紅外線,當(dāng)發(fā)射出的紅外線沒有被反射回來或被反射回來但強(qiáng)度不夠大時(shí),紅外接收管一直處于關(guān)斷狀態(tài),此時(shí)模塊的TTL輸出端為高電平,相應(yīng)指示二極管一直處于熄滅狀態(tài);當(dāng)被檢測物體出現(xiàn)在檢測范圍內(nèi)時(shí),紅外線被反射回來且強(qiáng)度足夠大,紅外接收管導(dǎo)通,此時(shí)模塊的TTL輸出端為低電平,指示二極管被點(diǎn)亮。黑線檢測電路,可以將紅外探頭放在車的底盤上,這樣檢測比較精準(zhǔn)。在連接電路時(shí),要做成可以調(diào)節(jié)探測距離的電路,完成之后調(diào)節(jié)傳感器使得小車能夠準(zhǔn)確探測到黑線,從而做出正確的動(dòng)作。
???????鑒于各種循跡模塊均大同小異,選擇采用性價(jià)比較高的FC-123紅外循跡傳感器。
?
3.4???火焰識(shí)別模塊
???????火焰檢測有溫度傳感器、煙霧傳感器、紅外傳感器、紫外傳感器以及CCD傳感器。綜合論證這幾種傳感器,因本設(shè)計(jì)使用蠟燭模擬火源,對(duì)環(huán)境溫度影響小,煙霧少,排除了溫度傳感器、煙霧傳感器。考慮到易用性,排除了CCD傳感器,從而主要考慮以下兩種方案。
3.4.1???使用紫外傳感器識(shí)別火焰
???????紫外線傳感器只對(duì)185~260NM狹窄范圍內(nèi)的紫外線進(jìn)行響應(yīng),而對(duì)其它頻譜范圍的光線不敏感,利用它可以對(duì)火焰中的紫外線進(jìn)行檢測。具有靈敏度高,檢測及時(shí)準(zhǔn)確、抗干擾性強(qiáng)的特點(diǎn)。主要缺點(diǎn)是價(jià)格是紅外傳感器的8-10倍。
3.4.2???使用紅外傳感器識(shí)別火焰
???????紅外火焰?zhèn)鞲衅骺梢杂脕硖綔y火源或其它一些波長在700納米~1000納米范圍內(nèi)的熱源。利用它可以對(duì)燃燒時(shí)發(fā)出大量紅外光進(jìn)行檢測。價(jià)格低廉,但是容易受到外界光的干擾。綜合考慮,采用紅外傳感器識(shí)別火焰,并采取相應(yīng)措施排除干擾。
???????綜合考慮各種因素,兼顧火焰識(shí)別模塊的成本問題,選擇用紅外傳感器識(shí)別火焰。
?
3.5??? 滅火模塊
3.5.1???用水滅火
???????水可以很好的將蠟燭澆滅。但是不管是擠壓噴水還是使用水泵噴水,在噴水的遠(yuǎn)近和廣度難以控制,并且使用大電流電機(jī)對(duì)電源的沖擊相當(dāng)大,難以保證系統(tǒng)的穩(wěn)定性。
3.5.2???用風(fēng)扇滅火
???????雖然風(fēng)能助長火勢,但是在火源比較小的情況下,風(fēng)將可燃物的溫度降到燃點(diǎn)之下,實(shí)現(xiàn)滅火。
???????采用風(fēng)扇已經(jīng)可以滿足模擬滅火需求,而且選用風(fēng)扇在硬件制作和軟件編程上更簡單、更容易操控。
?
3.6??? 滅火模塊
???????電源部分,可以使用幾節(jié)5號(hào)電池串聯(lián),但是這樣電池使用效率比較低,而且5號(hào)電池功率不夠大,容量也太小,不能長時(shí)間供電,最后決定使用4節(jié)鋰電池(3.7V 18650鋰電池串聯(lián)而成),為電機(jī)和風(fēng)扇供電,再利用降壓模塊來產(chǎn)生5V的直流電壓,為電路中的各個(gè)芯片提供正常工作電壓。
?
四、機(jī)器人的設(shè)計(jì)與組成
4.1??? 1路循跡模塊
???????TCRT5000傳感器的紅外發(fā)射二極管不斷發(fā)射紅外線,當(dāng)發(fā)射出的紅外線沒有被反射回來或被反射回來但強(qiáng)度不夠大時(shí),紅外接收管一直處于關(guān)斷狀態(tài),此時(shí)模塊的輸出端為低電平,指示二極管一直處于熄滅狀態(tài);被檢測物體出現(xiàn)在檢測范圍內(nèi)時(shí),紅外線被反射回來且強(qiáng)度足夠大,紅外接收管飽和,此時(shí)模塊的輸出端為高電平,指示二極管被點(diǎn)亮。
圖4.1???1路循跡模塊4.2??? 火焰?zhèn)鞲衅?/h3>
???????火焰?zhèn)鞲衅鲗?duì)太陽光有反應(yīng),并且對(duì)火焰光特別敏感。可檢測一定范圍內(nèi)的光源,探測角度為60度左右,可用于火焰預(yù)警、火焰識(shí)別。
???????公共端、常閉、常開三個(gè)端口相當(dāng)于一個(gè)雙控開關(guān)。繼電器線圈有電時(shí),公共端與常開端導(dǎo)通;無電時(shí),公共端與常閉端導(dǎo)通。
???????可以通過調(diào)節(jié)電位器來設(shè)定傳感器對(duì)火焰感應(yīng)的強(qiáng)度。當(dāng)火焰超過閥定值,繼電器吸合,公共端與常開端導(dǎo)通;當(dāng)火焰低于閥定值,繼電器斷開,公共端與常閉端導(dǎo)通。
4.3??? L298N驅(qū)動(dòng)模塊
???????L298N作為集成芯片,一塊芯片能夠輸出兩路PWM波形,控制兩個(gè)電機(jī),而且還帶有控制使能端。用該芯片作為電機(jī)驅(qū)動(dòng),操作方便,穩(wěn)定性好,性能優(yōu)良。
???????具備大容量濾波電容,續(xù)流保護(hù)二極管,可以提高可靠性。
???????采用標(biāo)準(zhǔn)邏輯電平信號(hào)控制;具有兩個(gè)使能控制端,在不受輸入信號(hào)影響的情況下允許或禁止器件工作有一個(gè)邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作。
4.4??? 舵機(jī)
???????主要是由外殼、電路板、驅(qū)動(dòng)馬達(dá)、減速器與位置檢測元件所構(gòu)成,如滾轉(zhuǎn)運(yùn)動(dòng)等都是靠舵機(jī)相互配合完成的。轉(zhuǎn)動(dòng)角度:0-180°。
圖4.4???舵機(jī)4.5??? 風(fēng)機(jī)
???????采用8cm×8cm規(guī)格的風(fēng)機(jī),以簡單的風(fēng)機(jī)轉(zhuǎn)動(dòng),達(dá)到利用空氣熄滅蠟燭火焰的效果。轉(zhuǎn)速參考:4000±10%RPM,噪音參考:18DB,風(fēng)量參考:18.17-25.97CFM。
圖4.5???風(fēng)機(jī)4.6??? 開發(fā)系統(tǒng)
???????具備了DC取電口/ISP下載口/RS232串口/USB轉(zhuǎn)串口等這幾個(gè)必需的實(shí)驗(yàn)接口;8路LED燈,紅外線接收頭可用于紅外遙控解碼;已集成USB轉(zhuǎn)串口電路,可用一根USB線就可完成下載燒寫及供電,即可當(dāng)STC編程器使用。具備51/AVR雙復(fù)位電路,以及18B20單總線溫度傳感器接口。
圖4.6???開發(fā)系統(tǒng)4.7??? 直流繼電器
???????這是由手工焊制而成的直流繼電器模塊,可以控制并驅(qū)動(dòng)12V直流風(fēng)機(jī)。
???????特點(diǎn):1.采用松樂—繼電器控制;2.信號(hào)輸入端有低電平信號(hào)時(shí),公共端和常開端會(huì)導(dǎo)通;3.繼電器可以直接控制各種設(shè)備和負(fù)載;4.有一個(gè)常開和一個(gè)常閉觸點(diǎn)。
?
五、編程思路
圖5.0.1???程序控制示意圖5.1??? 循跡部分
???????循跡主要解決以下幾種情況:(左右情況剛好相反,現(xiàn)以其中一種情況為例介紹說明)
| 圖1??情況一 | 圖2??情況二 | 圖3??情況三 |
5.2??? 火焰識(shí)別部分
???????因?yàn)榛鹪次挥谲壽E兩側(cè),所以火焰識(shí)別模塊只需布置在小車兩側(cè)即可滿足尋火。同時(shí)在每一側(cè)各布置3個(gè)并排的火焰識(shí)別模塊,這樣可以提高小車滅火的容錯(cuò)性,從而達(dá)到 滅火要求。
圖5.2.1???火焰識(shí)別部分結(jié)構(gòu)示意圖5.3??? 滅火部分
???????舵機(jī)安裝在紅色部分的位置,當(dāng)任意一側(cè)的任一個(gè)或多個(gè)火焰識(shí)別模塊檢測到火源時(shí),舵機(jī)會(huì)根據(jù)信號(hào)反饋轉(zhuǎn)向檢測到的方向,同時(shí)繼電器常開端吸合,風(fēng)機(jī)打開,開始滅火。當(dāng)火源被撲滅后,由于火焰識(shí)別模塊未檢測到火源,繼電器常開端斷開,風(fēng)機(jī)停止工作,舵機(jī)復(fù)位,小車?yán)^續(xù)循跡。
圖5.3.1???滅火部分結(jié)構(gòu)示意圖六、程序
6.1??? 循跡滅火機(jī)器人.c
#include <AT89X52.H> #include <duoji.h> #define uint unsigned int #define uchar unsigned char//火焰識(shí)別模塊輸入I/O口 sbit relay1=P2^0; sbit relay2=P2^1; sbit relay3=P2^2; sbit relay4=P2^3; sbit relay5=P2^4; sbit relay6=P2^5;sbit fan=P2^7;//風(fēng)扇+繼電器信號(hào)端 sbit duoji=P2^6;//舵機(jī)信號(hào)端//定義小車驅(qū)動(dòng)模塊輸入IO口 sbit EN1=P0^5; sbit IN1=P0^1; sbit IN2=P0^2; sbit IN3=P0^3; sbit IN4=P0^4; sbit EN2=P0^0;#define Left_1_led P1_3 // 左傳感器 #define Left_2_led P1_2 // 左傳感器 #define Right_2_led P1_0 //右傳感器 #define Right_1_led P1_1 //右傳感器 #define Left_moto_pwm P0_5 //PWM信號(hào)端 #define Right_moto_pwm P0_0 //PWM信號(hào)端#define Left_moto_go {IN1=0,IN2=1;} //左電機(jī)向前走 #define Left_moto_back {IN1=1,IN2=0;} //左邊電機(jī)向后轉(zhuǎn) #define Left_moto_Stop {EN2=0;} //左邊電機(jī)停轉(zhuǎn) #define Right_moto_go {IN3=0,IN4=1;} //右邊電機(jī)向前走 #define Right_moto_back {IN3=1,IN4=0;} //右邊電機(jī)向后走 #define Right_moto_Stop {EN1=0;} //右邊電機(jī)停轉(zhuǎn) uchar pwm_val_left =0;//變量定義 uchar push_val_left =0;//左電機(jī)占空比N/20 uchar pwm_val_right =0; uchar push_val_right=0;//右電機(jī)占空比N/20bit Right_moto_stop=1; bit Left_moto_stop =1; uint time=0;/************************************************************************/ //延時(shí)函數(shù) void delay(uint k) { uint x,y;for(x=0;x<k;x++) for(y=0;y<2000;y++); }/************************************************************************/ //前速前進(jìn) void run(void) {push_val_left=3.5; //速度調(diào)節(jié)變量 0-20。。。0最小,20最大push_val_right=3.5;Left_moto_go ; //左電機(jī)往前走Right_moto_go ; //右電機(jī)往前走delay(1); }//后退函數(shù) void backrun(void) {push_val_left=3.5; //速度調(diào)節(jié)變量 0-20。。。0最小,20最大push_val_right=3.5;Left_moto_back; //左電機(jī)往前走Right_moto_back; //右電機(jī)往前走 }//左轉(zhuǎn) void leftrun(void) { // push_val_left=5;push_val_right=3.5;Right_moto_go ; //右電機(jī)往前走Left_moto_Stop ; //左電機(jī)停止 }void leftrun1(void) { // push_val_left=5;push_val_right=4;Right_moto_go ; //右電機(jī)往前走Left_moto_Stop ; //左電機(jī)停止 }void leftrun2(void) { // push_val_left=5;push_val_right=5;Right_moto_go ; //右電機(jī)往前走Left_moto_Stop ; //左電機(jī)停止 }void leftrun3(void) { // push_val_left=5;push_val_right=5.5;Right_moto_go ; //右電機(jī)往前走Left_moto_Stop ; //左電機(jī)停止 }//右轉(zhuǎn) void rightrun(void) { push_val_left=3.5; // push_val_right=6;Left_moto_go ; //左電機(jī)往前走Right_moto_Stop ; //右電機(jī) }void rightrun1(void) { push_val_left=4; // push_val_right=6;Left_moto_go; //左電機(jī)往前走Right_moto_Stop; //右電機(jī) }void rightrun2(void) { push_val_left=5; // push_val_right=6;Left_moto_go ; //左電機(jī)往前走Right_moto_Stop ; //右電機(jī) }void rightrun3(void) { push_val_left=5.5; // push_val_right=6;Left_moto_go ; //左電機(jī)往前走Right_moto_Stop; //右電機(jī) }//停止函數(shù) void stop(void) { fan=0; Right_moto_Stop; //右電機(jī)Left_moto_Stop; //左電機(jī)停止 }/************************************************************************/ /* PWM調(diào)制電機(jī)轉(zhuǎn)速 */ /************************************************************************/ /* 左電機(jī)調(diào)速 */ /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比 */ void pwm_out_left_moto(void) { if(Left_moto_stop){if(pwm_val_left<=push_val_left){Left_moto_pwm=1; // Left_moto_pwm1=1; }else {Left_moto_pwm=0; // Left_moto_pwm1=0; }if(pwm_val_left>=20)pwm_val_left=0;}else {Left_moto_pwm=0; // eft_moto_pwm1=0; } }void xunji()//循跡函數(shù) {fan=1;//有信號(hào)為0 沒有信號(hào)為1if(Left_1_led==1&&Left_2_led==1&&Right_2_led==1&&Right_1_led==1) //檢測信號(hào)1111run(); //調(diào)用前進(jìn)函數(shù)else{ if(Left_1_led==1&&Left_2_led==0&&Right_2_led==0&&Right_1_led==1) //檢測信號(hào)1001run(); //調(diào)用前進(jìn)函數(shù)if(Left_1_led==1&&Left_2_led==1&&Right_2_led==0&&Right_1_led==1) //右邊檢測到紅外信號(hào)1101rightrun(); //調(diào)用小車右轉(zhuǎn)函數(shù)if(Left_1_led==1&&Left_2_led==1&&Right_2_led==0&&Right_1_led==0) //右邊檢測到紅外信號(hào)1100rightrun1(); //調(diào)用小車右轉(zhuǎn)函數(shù)1if(Left_1_led==1&&Left_2_led==1&&Right_2_led==1&&Right_1_led==0) //右邊檢測到紅外信號(hào)1110rightrun2(); //調(diào)用小車右轉(zhuǎn)函數(shù)2if(Left_1_led==1&&Left_2_led==0&&Right_2_led==0&&Right_1_led==0) //右邊檢測到紅外信號(hào)1000rightrun3(); //調(diào)用小車右轉(zhuǎn)函數(shù)3 if(Left_1_led==1&&Left_2_led==0&&Right_2_led==1&&Right_1_led==1) //左邊檢測到紅外信號(hào)1011 leftrun(); //調(diào)用小車左轉(zhuǎn)函數(shù)if(Left_1_led==0&&Left_2_led==0&&Right_2_led==1&&Right_1_led==1) //左邊檢測到紅外信號(hào)0011 leftrun1(); //調(diào)用小車左轉(zhuǎn)函數(shù)1if(Left_1_led==0&&Left_2_led==1&&Right_2_led==1&&Right_1_led==1) //左邊檢測到紅外信號(hào)0111 leftrun2(); //調(diào)用小車左轉(zhuǎn)函數(shù)2if(Left_1_led==0&&Left_2_led==0&&Right_2_led==0&&Right_1_led==1) //左邊檢測到紅外信號(hào)0001 leftrun3(); //調(diào)用小車左轉(zhuǎn)函數(shù)3if(Left_1_led==0&&Left_2_led==0&&Right_2_led==0&&Right_1_led==0) //檢測信號(hào)0000 stop(); //調(diào)用小車停止函數(shù)//run(); //調(diào)用前進(jìn)函數(shù)} }void xunhuo()//滅火函數(shù) {if(relay1==0||relay2==0||relay3==0||relay4==0||relay5==0||relay6==0){djmain();if(relay1==0||relay2==0||relay3==0){angle=9; }if(relay4==0||relay5==0||relay6==0){angle=3; }stop();TR1=0;}else { angle=6; xunji();} }void init() {fan=1;TMOD=0X01;TH0= 0XFc; //1ms定時(shí)TL0= 0X18;TR0= 1;ET0= 1;EA = 1; //開總中斷 }/******************************************************************/ /* 右電機(jī)調(diào)速 */ void pwm_out_right_moto(void) { if(Right_moto_stop){ if(pwm_val_right<=push_val_right){Right_moto_pwm=1; // Right_moto_pwm1=1; }else {Right_moto_pwm=0; // Right_moto_pwm1=0; }if(pwm_val_right>=20)pwm_val_right=0;}else {Right_moto_pwm=0; // Right_moto_pwm1=0; } }/***************************************************/ ///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/ void timer0()interrupt 1 using 2 {TH0=0XFc; //1Ms定時(shí)TL0=0X18;time++;pwm_val_left++;pwm_val_right++;pwm_out_left_moto();pwm_out_right_moto(); }void main()//主函數(shù) { init();while(1) //無限循環(huán){ xunhuo(); } }6.2??? duoji.h
#include <AT89X52.H> #define uint unsigned int #define uchar unsigned charsbit dj=P3^6; //與舵機(jī)相連的信號(hào)口 uchar djpwm; //舵機(jī)的pwm uchar angle=6; //控制舵機(jī)角度的變量,默認(rèn)為45度,范圍2到10,對(duì)應(yīng)0到180度//***********************************************************************************///* void djdelay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}*/void Timer1_Init(void) {TMOD=0x20;TH1=6; //設(shè)定為0.25觸發(fā)一次定時(shí)器中斷TL1=6;ET1=1;EA=1;TR1=1; }//主函數(shù) void djmain() {Timer1_Init(); //定時(shí)器一中斷初始化 } //***********************************************************************************// //定時(shí)器1中斷 void Time1_Isr() interrupt 3 {djpwm++; //判斷自加if(djpwm==angle) //與角度變量比較{dj=0; //接舵機(jī)IO置0}if(djpwm==80) //0.25*80=20ms???{djpwm=0; //清零dj=1; //接舵機(jī)IO置一} }總結(jié)
以上是生活随笔為你收集整理的【C51开发应用】基于C51单片机开发的循迹灭火机器人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ps 证件照替换背景色
- 下一篇: oppo怎么广告接入_oppo信息流广告