版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于89c52單片機(jī)的智能循跡測速避障小車為了參加我校舉辦的電子科技競賽,剛剛開始學(xué)習(xí)單片機(jī)的我們,經(jīng)過討論,決定做一輛智能循跡測速小車,綜合我們搜集的材料以及自己的修改,我們做出了我們的作品。以下是我們整理的材料:一、 原理圖1、 最小系統(tǒng) 我們采用的是89c52單片機(jī)來做小車的最小系統(tǒng),針對(duì)自己的需要只把要用到的排針口接了上去,具體電路圖如下:2、 電機(jī)驅(qū)動(dòng)我們采用l293d作為驅(qū)動(dòng)芯片,l293d是一種直流電機(jī)控制器件,具有外圍電路簡單,易于集成、控制等特點(diǎn),電路圖如下:其中我們用tlp521-4光耦器作為電機(jī)的穩(wěn)定,即穩(wěn)定的是電機(jī)的電壓,避免電機(jī)的電流過大燒壞單片機(jī),起到保護(hù)單片機(jī)的作
2、用,增加安全性,減少電路干擾,簡化電路設(shè)計(jì)。其電路圖如下:3、 測速電路我們采用rpr220反射式光電傳感器作為測速器,反射式紅外光電傳感器模塊是一種利用反射式紅外光電傳感器制成的在傳感器的有效檢測距離范圍內(nèi)對(duì)被測物體的存在性進(jìn)行檢測的電路裝置,由紅外光發(fā)射接收器、電壓變化檢測電路、檢測靈敏度調(diào)節(jié)電位器、檢測狀態(tài)指示 led 燈等四個(gè)主要部分組成,額定工作電壓 dc3.3v 或 dc5.5v(兼容支持 dc3vdc5.5v,而無需額外的硬件配置),dc5v 工作電壓條件下,約為 60ma,最大不超過 80 ma。具體電路圖如下:4、探測器我們?nèi)圆捎胷pr220反射式光電傳感器作為探測器,基于它
3、受被測物體的紅外反射特性影響很大,亦能通過檢測靈敏度調(diào)節(jié)電位器進(jìn)行調(diào)節(jié),我們用它來探測黑線(即路線),實(shí)現(xiàn)循跡功能。事實(shí)證明它的靈敏度是很高的,具體電路如下:相應(yīng)的放大電路我們采用lm339芯片作為放大器,lm339芯片通常用作電壓比較器,該電壓比較器的特點(diǎn)是:1)失調(diào)電壓小,典型值為2mv;2)電源電壓范圍寬,單電源為2-36v,雙電源電壓為±1v-±18v;3)對(duì)比較信號(hào)源的內(nèi)阻限制較寬;4)共模范圍很大,為0(ucc-1.5v)vo;5)差動(dòng)輸入電壓范圍較大,大到可以等于電源電壓;6)輸出端電位可靈活方便地選用。lm339類似于增益不可調(diào)的運(yùn)算放大器,在本裝置中,我們
4、將它用來放大探測信號(hào)。電路圖如下:5、電源我們采用l7805作為電源的穩(wěn)壓芯片,雖然用lm78/lm79系列三端穩(wěn)壓ic來組成穩(wěn)壓電源所需的外圍元件極少,但是電路內(nèi)部還有過流、過熱及調(diào)整管的保護(hù)電路,使用起來可靠、方便,而且價(jià)格便宜。電路圖如下:6、我們用dyp-me007超聲波作為避障部分,dyp-me007超聲波測距模塊可提供3cm3.5m的肥接觸式距離感測功能。下圖為dyp-me007外觀,包括超聲波發(fā)射器、接收器與控制電路。其基本工作原理為給予此超聲波測距模塊一觸發(fā)信號(hào)后發(fā)射超聲波,當(dāng)超聲波投射到物體上后反射回來時(shí),模塊輸出一回響信號(hào),以觸發(fā)信號(hào)和回響信號(hào)間的間差,來判定物體的距離。7
5、、程序驅(qū)動(dòng)程序如下:#include<reg52.h> /包含單片機(jī)寄存器的頭文件#include<stdlib.h> /包含隨機(jī)函數(shù)rand()的定義文件#include<intrins.h> /包含_nop_()函數(shù)定義的頭文件#include<math.h> #define uchar unsigned char; /char單字節(jié)整型數(shù)據(jù)或字符型數(shù)據(jù)#define uint unsigned int;#define cm 3sbit rs=p27; /寄存器選擇位,將rs位定義為p2.0引腳sbit rw=p26; /讀寫選擇位,將rw位
6、定義為p2.1引腳sbit e=p25; /使能信號(hào)位,將e位定義為p2.2引腳sbit bf=p07; /忙碌標(biāo)志位,將bf位定義為p0.7引腳sbit s_left=p14;/左輪測速器sbit s_right=p15;/右輪測速器sbit en12=p36;/電機(jī)1使能端sbit in1=p21;/電機(jī)1前進(jìn)驅(qū)動(dòng)sbit in2=p22;/電機(jī)1后退驅(qū)動(dòng)sbit en34=p37;/電機(jī)2使能端sbit in3=p16; /電機(jī)2前進(jìn)驅(qū)動(dòng)sbit in4=p17; /電機(jī)2后退驅(qū)動(dòng)sbit d1=p10;/定義探測器1sbit d2=p11;/定義探測器2sbit d3=p12;/定義探
7、測器3sbit d4=p13;/定義探測器4sbit spk=p20;/定義蜂鳴器sbit ex=p34;/超聲波接收端 sbit tx=p35;/超聲波發(fā)送端 /*延時(shí)函數(shù) uint count0=0,w=0,w2=0,h,l;/定義需要用到的變量 float w0,w3,w1,w4;/unsigned int p,j,k,s,m;/unsigned char code digit ="0123456789" /定義字符數(shù)組顯示數(shù)字unsigned char code string ="" /定義字符數(shù)組顯示提示信息/unsigned char cou
8、nt,count2,count3; /定義變量統(tǒng)計(jì)中斷累計(jì)次數(shù)uint pwm=20;/定義占空比 /*/ void delay1(int ms)/延時(shí)函數(shù) unsigned char y; while(ms-) for(y = 0; y<250; y+) _nop_(); _nop_(); _nop_(); _nop_(); void forward()/ 前進(jìn)函數(shù)in1=1;in2=0;in3=1;in4=0;pwm=85;tr0=1; void forward2()/前進(jìn)函數(shù)2in1=1;in2=0;in3=1;in4=0;pwm=90;tr0=1; void stop1()/停止
9、函數(shù)in1=0;in2=0;in3=0;in4=0;tr0=0; void turnleft()/左轉(zhuǎn)函數(shù)in1=1;in2=0;in3=0;in4=0;pwm=50;tr0=1;void turnright()/ 右轉(zhuǎn)函數(shù) in1=0;in2=0;in3=1;in4=0;pwm=50;tr0=1;void back()/后退函數(shù)in1=0;in2=0;in3=0;in4=1;pwm=60;tr0=1;/- 蜂鳴void delay5(unsigned int cnt)while(-cnt);void speak()unsigned char i,j;for(i=0;i<3;i+)for
10、(j=0;j<200;j+)/ 喇叭發(fā)聲的時(shí)間循環(huán),改變大小可以改變發(fā)聲時(shí)間長短delay5(80); / 參數(shù)決定發(fā)聲的頻率,估算值,可以自行更改參數(shù)并spk=!spk;spk=1; / 喇叭停止工作,間歇的時(shí)間,可更改delay5(20000); void delay1ms() unsigned char i,j;for(i=0;i<10;i+)for(j=0;j<33;j+); void delay(unsigned char n) unsigned char i; for(i=0;i<n;i+) delay1ms();unsigned char busytest
11、(void) bit result; rs=0; /根據(jù)規(guī)定,rs為低電平,rw為高電平時(shí),可以讀狀態(tài) rw=1; e=1; /e=1,才允許讀寫 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 result=bf; /將忙碌標(biāo)志電平賦給result e=0; /將e恢復(fù)低電平 return result;void writeinstruction (unsigned char dictate) while(busytest()=1); /如果忙就等待rs=0; /根據(jù)規(guī)定,rs和r/w同時(shí)為低電平時(shí),可以寫入指令rw=0
12、; e=0; /e置低電平(根據(jù)表8-6,寫指令時(shí),e為高脈沖, / 就是讓e從0到1發(fā)生正跳變,所以應(yīng)先置"0"_nop_();_nop_(); /空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間p0=dictate; /將數(shù)據(jù)送入p0口,即寫入指令或地址_nop_();_nop_();_nop_();_nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間e=1; /e置高電平_nop_();_nop_();_nop_();_nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 e=0; /當(dāng)e由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令 void writeaddress(unsig
13、ned char x) writeinstruction(x|0x80); /顯示位置的確定方法規(guī)定為"80h+地址碼x" void writedata(unsigned char y) while(busytest()=1); rs=1; /rs為高電平,rw為低電平時(shí),可以寫入數(shù)據(jù) rw=0; e=0; /e置低電平(根據(jù)表8-6,寫指令時(shí),e為高脈沖, / 就是讓e從0到1發(fā)生正跳變,所以應(yīng)先置"0" p0=y; /將數(shù)據(jù)送入p0口,即將數(shù)據(jù)寫入液晶模塊 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,
14、給硬件反應(yīng)時(shí)間 e=1; /e置高電平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 e=0; /當(dāng)e由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令 void lcdinitiate(void) delay(15); /延時(shí)15ms,首次寫指令時(shí)應(yīng)給lcd一段較長的反應(yīng)時(shí)間writeinstruction(0x38); /顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口delay(5); /延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間writeinstruction(0x38);delay(5);writeinstruct
15、ion(0x38); /連續(xù)三次,確保初始化成功delay(5);writeinstruction(0x0c); /顯示模式設(shè)置:顯示開,無光標(biāo),光標(biāo)不閃爍delay(5);writeinstruction(0x06); /顯示模式設(shè)置:光標(biāo)右移,字符不移delay(5);writeinstruction(0x01); /清屏幕指令,將以前的顯示內(nèi)容清除delay(5);void displaysecond() unsigned int i,j,k,q,t,d,z; i=s/10; /取整運(yùn)算,求得十位數(shù)字j=s%10; /取余運(yùn)算,求得各位數(shù)字 writeaddress(0x44); /寫顯
16、示地址,將十位數(shù)字顯示在第2行第11列writedata(digiti); /將十位數(shù)字的字符常量寫入lcdwritedata(digitj);k=m%10; /將個(gè)位數(shù)字的字符常量寫入lcdwriteaddress(0x42);writedata(digitk);writedata(':');q=p/1000;t=(p/100)%10;d=(p/10)%10;z=p%10;writeaddress(0x4a);writedata(digitq);writedata(digitt);writedata(digitd);writedata(digitz);writeaddress
17、(0x48);writedata('s');writedata(':');/- 定時(shí)器 1 用于輸出 pwm 信號(hào)控制電機(jī)速度void init()tmod=0x11;th1=(65536-100)/256;/100us溢出一次tl1=(65536-100)%256;et1=1;ea=1;tr1=1;/定時(shí)器1void time1()interrupt 3/產(chǎn)生pwmint speed;th1=(65536-100)/256;tl1=(65536-100)%256;speed+;if(speed=pwm)en12=0;en34=0;if(speed=100)sp
18、eed=0;en12=1;en34=1;void time0(void ) interrupt 1 using 1 /定時(shí)器t0的中斷編號(hào)為1,使用第1組工作寄存器unsigned char count,count2,count3; /定義變量統(tǒng)計(jì)中斷累計(jì)次數(shù)count+; /每產(chǎn)生1次中斷,中斷累計(jì)次數(shù)加1if(count=20) /如果中斷次數(shù)計(jì)滿20次count=0; /中斷累計(jì)次數(shù)清0s+; /秒加1 if(s=60) /如果計(jì)滿60秒s=0; /秒清0m+; /分鐘加1if(m=100)s=0;count2+;if(count2=1&&s_left=1)j+=cm;c
19、ount2=0;if(count2>1&&count2<20&&s_left=1)j+=cm;count2=0;count3+;if(count3=1&&s_right=1)k+=cm;count3=0;if(count3>1&&count3<20&&s_right=1)k+=cm;count3=0; p=(j+k)/2; th0=(65536-50000)/256; /定時(shí)器t0高8位重新賦初值 tl0=(65536-50000)%256; /定時(shí)器t0低8位重新賦初值void main(
20、) unsigned char i; lcdinitiate(); /調(diào)用lcd初始化函數(shù)init();tmod=0x11; /使用定時(shí)器t0的模式1th0=(65536-50000)/256; /定時(shí)器t0的高8位設(shè)置初值tl0=(65536-50000)%256; /定時(shí)器t0的低8位設(shè)置初值ea=1; /開總中斷et0=1; /定時(shí)器t0中斷允許tr0=1; /啟動(dòng)定時(shí)器t0ex0=1;it0=0;s=0;p=0; /秒初始化為0 writeaddress(0x00); /寫地址,從第1行第4列開始顯示i=0; /從字符數(shù)組的第1個(gè)元素開始顯示while(stringi!='0&
21、#39;) /只要沒有顯示到字符串的結(jié)束標(biāo)志'0',就繼續(xù)writedata(stringi); /將第i個(gè)字符數(shù)組元素寫入lcdi+; /指向下一個(gè)數(shù)組元素 while(1) /無限循環(huán) displaysecond(); /顯示秒 delay(5); /給硬件一點(diǎn)反應(yīng)時(shí)間 forward2();/上電后先前進(jìn) tx=0; tx=1; delay1(1); tx=0; th2=0; tl2=0; tr2=0; while(!ex); tr2=1; while(ex)if(th1=50)th2=0;tl2=0;break; tr2=0; h=th2; l=tl2; h=th2;
22、h=th2; l=tl2; h=th2; w=h*256+l;/放入16位的高8位 w0=(float)w;/ w1=w0*340/10000/2; /由空氣中的聲速轉(zhuǎn)為厘米 w2=(int)w1; /取整 w3=w1-w2;/ 差值即為距離 w4=w3*10;/小數(shù)取十位 writeaddress(0x00); writedata('c'); writedata('e'); writedata('j'); writedata('u'); writedata(':'); writedata(w2/100+0x30); writedata(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 稅務(wù)會(huì)計(jì)練習(xí)試題附答案
- 接觸網(wǎng)工學(xué)習(xí)通練習(xí)試題(一)
- 2025年質(zhì)子交換膜燃料電池(REMFC)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 工業(yè)化學(xué)練習(xí)試題
- 2025年梭織服裝項(xiàng)目申請(qǐng)報(bào)告模板
- 調(diào)車長練習(xí)試題及答案
- 2025年堿錳電池項(xiàng)目申請(qǐng)報(bào)告模稿
- 2025年溫室節(jié)能遮蔭保溫幕項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025屆浙江省舟山市普陀區(qū)重點(diǎn)達(dá)標(biāo)名校中考生物模試卷含解析
- 3 小數(shù)除法(說課稿)-2024-2025學(xué)年五年級(jí)上冊(cè)數(shù)學(xué)人教版
- 《安的種子》幼兒故事
- 機(jī)械工程師筆試題目
- 實(shí)用衛(wèi)生統(tǒng)計(jì)學(xué)題庫(附參考答案)
- 浙江省杭州市拱墅區(qū)2023-2024學(xué)年數(shù)學(xué)三年級(jí)第一學(xué)期期末質(zhì)量檢測試題含答案
- 傷口敷料種類及作用-課件
- 電力安全工作規(guī)程(變電部分)課件
- 高考語文復(fù)習(xí):作文主題訓(xùn)練自然情懷
- 減速機(jī)基礎(chǔ)知識(shí)-課件
- 2023年小學(xué)生六年級(jí)畢業(yè)班評(píng)語
- 單位干部職工捐款情況統(tǒng)計(jì)表
- 環(huán)保設(shè)施安全風(fēng)險(xiǎn)告知卡
評(píng)論
0/150
提交評(píng)論