多功能小車的設計
《多功能小車的設計》由會員分享,可在線閱讀,更多相關《多功能小車的設計(11頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、基于探測用途多功能小車的設計 摘要: 這是一個基于80C52單片機 溫度傳感器 超聲波測距模塊的一個智能小車系統(tǒng)。該系統(tǒng)能準確無誤的測出溫度和距離障礙物的距離,并且可以自動避障,顯示溫度距離。具有方便,實用性價比高的特點,經(jīng)過在實踐中的應用,有一定的推廣價值。 關鍵字: 80C52單片機 溫度傳感器 超聲波測距模塊 智能小車系統(tǒng) 引言: 隨著電子技術的飛速發(fā)展,越來越多的單片機技術的廣泛使用已經(jīng)應用于人們的 社會生產(chǎn)實踐,人類的生活發(fā)生了根本性的改變。由于在現(xiàn)代生產(chǎn)實踐中,從事某些生產(chǎn)作業(yè)的人員會遇到各種各樣的問題以及一些安全隱患,基于此,本設計初步構想,希望通過設計該小車的設計,
2、以及通過其所實現(xiàn)的功能能夠在將來的生產(chǎn)實踐中得到有效合理的利用,從而滿足和實現(xiàn)社會的需求。 一、方案的選擇與器件的選用 本設計是基于STC89C52單片機進行的,多功能小車基于STC89C52并且通過利用超聲波測距模塊用來實現(xiàn)繞開障礙物和通過溫度傳感器模塊用以實現(xiàn)探測環(huán)境溫度的功能,同時以1602液晶顯示屏來達到探測距離和溫度的精確測量,并且在距離以及溫度在達到一定的范圍時,還能通過蜂鳴發(fā)生器和指示燈發(fā)出報警信號,提醒我們來避開一些危險,從而有效解決了人們生產(chǎn)實踐中所遇到的各種難題。譬如:在生產(chǎn)作業(yè)的工作中,通過距離的探測,能夠提醒相關工作人員躲避風險,通過溫度的測量,能夠提醒人們何時進行
3、相關操作等。 總而言之,該設計的廣泛使用能夠指導和解決人們的各種生產(chǎn)實踐所遇到的問題。 一、具體實現(xiàn)的的功能: 利用超聲波探測器來測量距離障礙物的距離,同時并將測得的具體數(shù)值在液晶顯示屏上精確的顯示出來,當距離小于10cm時,蜂鳴器會發(fā)聲,且會進行自動轉向已實現(xiàn)避障。 基于溫度傳感器用以測量周圍環(huán)境的溫度,同時并將測得的具體數(shù)值在液晶顯示屏上精確的顯示出來,當環(huán)境溫度高于25?C,LED燈會發(fā)光。 二、主要單元電路的設計 l 單片機主控制模塊的設計 STC89C52單片機為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3,每一條I/O線都能獨立地作輸出或輸入。
4、 單片機的最小系統(tǒng)如下圖所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調電容的一端,在片內它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調電容的另一端,在片內它是振蕩器倒相放大器的輸出。第9引腳為復位輸入端,接上電容,電阻夠上電復位電路,20引腳為接地端,40引腳為電源端。 l 應用電路模塊的設計。 1602顯示模塊的電路圖: 蜂鳴器模塊的電路圖: 溫度顯示器模塊的電路圖: l 應用程序的設計 接線:模塊TRIG接 P2.6 ECH0 接P2.7 [注:AT89x51使用12M或11.0592M晶振,實測使用
5、11.0592M]
=============================================================*/
#include
6、sbit P35=P3^5; sbit P34=P3^4; sbit P33=P3^3; sbit P27=P2^7; #define LCD_Data P0 /****************************************** 函數(shù)功能:測試LCD忙碌狀態(tài) 入口參數(shù): 出口參數(shù):result *******************************************/ bit LCD_Busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1;
7、 delay_ms(5); //此處延時特別重要 (必不可少) result = (bit)(LCD_Data & 0x80); delay_ms(5); LCD_EN = 0; return result; } /****************************************** 函數(shù)功能:寫指令數(shù)據(jù)到LCD子程序 入口參數(shù):要寫入的指令 出口參數(shù): *******************************************/ void LCD_Write_Command(unsigned char cmd) { whil
8、e(LCD_Busy()); //判斷LCD是否忙碌 LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; LCD_Data = cmd; delay_ms(5); LCD_EN = 0; } /****************************************** 函數(shù)功能:寫入顯示數(shù)據(jù)到LCD子程序 入口參數(shù):要寫入的數(shù)據(jù) 出口參數(shù): *******************************************/ void LCD_Write_Data(unsigned char dat) { w
9、hile(LCD_Busy()); //判斷LCD是否忙碌 LCD_RS = 1; LCD_RW = 0; LCD_EN = 1; LCD_Data = dat; delay_ms(5); LCD_EN = 0; } /****************************************** 函數(shù)功能:設定顯示位置子程序 入口參數(shù):pos 出口參數(shù): *******************************************/ void LCD_Position(unsigned char pos) { LCD_
10、Write_Command(pos|0x80); } /****************************************** 函數(shù)功能:LCD初始化子程序 入口參數(shù): 出口參數(shù): *******************************************/ void LCD_Init() { delay_ms(15); LCD_Write_Command(0x38); //顯示模式設置 delay_ms(5); LCD_Write_Command(0x38); //顯示模式設置 delay_ms(5);
11、 LCD_Write_Command(0x38); //顯示模式設置 delay_ms(5); LCD_Write_Command(0x0c); //顯示光標設置,開顯示 delay_ms(5); LCD_Write_Command(0x06); //顯示光標移動(右移) delay_ms(5); LCD_Write_Command(0x01); //清屏 delay_ms(5); } /****************************************** 函數(shù)功能:顯示自定義字符 入
12、口參數(shù):x坐標值,y坐標值,顯示的字符數(shù)據(jù) 出口參數(shù): *******************************************/ void LCD_Display_Bmp(unsigned char x,unsigned char y,unsigned char *mytab) { unsigned char i=0; LCD_Write_Command(0x40); //寫CGRAM for (i=0;i<8;i++) LCD_Write_Data(mytab[i]); if(y==0) LCD_Position(x)
13、; else LCD_Position(x+0x40);//設置顯示位置 LCD_Write_Data(0); } /******************************************* 函數(shù)功能:顯示字符串程序 備注1:0<=x<=15 備注2:0<=y<= 1 *******************************************/ void LCD_Display(unsigned char x,unsigned char y,unsigned char *words) { unsigned cha
14、r i=0; if(y==0)LCD_Position(x); //設置顯示位置 else LCD_Position(x+0x40); while(words[i] != \0) { LCD_Write_Data(words[i]); //顯示字符 i++; } } /******************************************* 函數(shù)功能:顯示一個ASCII碼程序 備注1:0<=x<=15 備注2:0<=y<= 1 ****************************************
15、***/ void LCD_Display_Char(unsigned char x,unsigned char y,unsigned char word) { unsigned char i=0; if(y==0)LCD_Position(x); //設置顯示位置 else LCD_Position(x+0x40); LCD_Write_Data(word); //顯示字符 } unsigned char ReadDataLCM(void); unsigned char ReadStatusLCM(void); unsigne
16、d char code mcustudio[] ={"jilin university"}; unsigned char code email[] = {"hhhhhhhh"}; unsigned char code Cls[] = {" "}; unsigned char code ASCII[15] = {0,1,2,3,4,5,6,7,8,9,.,-,M}; static unsigned char DisNum = 0; //顯示用指針 unsigned int time=0; un
17、signed long S=0; bit flag =0; unsigned char disbuff[4] ={ 0,0,0,0,}; void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; //算出來是CM if((S>=700)||flag==1) //超出測量范圍顯示“-” { flag=0; LCD_Display_Char(0, 1, ASCII[11]); LCD_Dis
18、play_Char(1, 1, ASCII[10]); //顯示點 LCD_Display_Char(2, 1, ASCII[11]); LCD_Display_Char(3, 1, ASCII[11]); LCD_Display_Char(4, 1, ASCII[12]); //顯示M } else { disbuff[0]=S%1000/100; disbuff[1]=S%1000%100/10; disbuff[2]=S%1000%10 %10; LCD_Display_Char(0, 1, ASCII[disbu
19、ff[0]]); LCD_Display_Char(1, 1, ASCII[10]); //顯示點 LCD_Display_Char(2, 1, ASCII[disbuff[1]]); LCD_Display_Char(3, 1, ASCII[disbuff[2]]); LCD_Display_Char(4, 1, ASCII[12]); //顯示M } } /********************************************************/ void zd0() interrupt 1 //T0中斷
20、用來計數(shù)器溢出,超過測距范圍 {TL0=0; TH0=0; flag=1; //中斷溢出標志 } /********************************************************/ void StartModule() //啟動模塊 { TX=1; //啟動一次模塊 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
21、 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } void main(void) {unsigned int j,k; LCD_Init(); // 初始化LCD
22、 LCD_Display(0,0,"51090210 Jlu"); LCD_Display_Char(15,1,0x43); //0x43對應ASCII碼為"C" LCD_Display_Bmp(14,1,tab); while(1){ TMOD=0x01; //設T0為方式1,GATE=1; TH0=0; TL0=0; ET0=1; //允許T0中斷 EA=1; //開啟總中斷 while(1) { StartModule(); whi
23、le(!RX); //當RX為零時等待 TR0=1; //開啟計數(shù) while(RX); //當RX為1計數(shù)并等待 TR0=0; //關閉計數(shù) Conut(); //計算 Read_Temperature(); j=temp_data[0]; k=temp_data[1]; k=k<<8; //開始計算實際溫度 j|=k; j*=0.625; LCD_Display_Char(10,1,j/100 + 0x30);//加上0x30轉換為ASCII碼 L
24、CD_Display_Char(11,1,j%100/10 + 0x30); LCD_Display(12,1,"."); LCD_Display_Char(13,1,j%10 + 0x30); if(j>250){deng=0;} else deng=1; if(S<10)feng=0; else feng=1; } } } // P27=1; // P33=0;P34=1; P35=0;P36=1;// while(1){ if(S<=10) {P33=1;P34=0;} else{P33=0;
25、P34=1;} } } 三、總結 我們制作這次設計一切都是從零開始,從最簡單的畫流程圖起步。在整個過程當中,遇到很多困難,由于時間緊迫,起步時間較晚,還有其他一些財力方面的原因,本來打算實現(xiàn)的煙霧探測和小車的尋跡等其他功能未能實現(xiàn),雖然有些遺憾,但是在整個設計過程中,我們充分發(fā)揮人的主觀能動性,學會了自主學習,學到了許多課本上學不到的知識。較好的完成了設計,初步達到了預期的目的,部分實現(xiàn)了最初的設想。我們由此得出:對電路的設計、布局要先有一個好的構思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時遇到了很多的問題,經(jīng)過靜下心來思考,和同學討論,理清了思路,反而得心應手。在此次設計中,知道了凡事要有一顆不畏困難、積極進取、勇于探索的精神,不要想著走捷徑,一步一腳印。同時也練就了我們的耐心、細心、恒心,無論如何,此次課程設計中學到了很多很多東西,這才是最重要的??傊舜坞娮釉O使我們的能力得到了全方位的提高,使得我的操作能力和專業(yè)技能都有了很大的提高,從而為將來的進一步學習和工作奠定了良好的基礎。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級數(shù)學下冊6整理和復習2圖形與幾何第7課時圖形的位置練習課件新人教版
- 2023年六年級數(shù)學下冊6整理和復習2圖形與幾何第1課時圖形的認識與測量1平面圖形的認識練習課件新人教版
- 2023年六年級數(shù)學下冊6整理和復習1數(shù)與代數(shù)第10課時比和比例2作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊4比例1比例的意義和基本性質第3課時解比例練習課件新人教版
- 2023年六年級數(shù)學下冊3圓柱與圓錐1圓柱第7課時圓柱的體積3作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊3圓柱與圓錐1圓柱第1節(jié)圓柱的認識作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊2百分數(shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊1負數(shù)第1課時負數(shù)的初步認識作業(yè)課件新人教版
- 2023年六年級數(shù)學上冊期末復習考前模擬期末模擬訓練二作業(yè)課件蘇教版
- 2023年六年級數(shù)學上冊期末豐收園作業(yè)課件蘇教版
- 2023年六年級數(shù)學上冊易錯清單十二課件新人教版
- 標準工時講義
- 2021年一年級語文上冊第六單元知識要點習題課件新人教版
- 2022春一年級語文下冊課文5識字測評習題課件新人教版
- 2023年六年級數(shù)學下冊6整理和復習4數(shù)學思考第1課時數(shù)學思考1練習課件新人教版