多功能避障探測小車_第1頁
多功能避障探測小車_第2頁
多功能避障探測小車_第3頁
多功能避障探測小車_第4頁
多功能避障探測小車_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

多功能避障探測小車摘要:隨著科學技術的不斷發(fā)展,自動化技術已經(jīng)開始在工業(yè)生產(chǎn)制造、現(xiàn)場救援、野外勘測以及人民生活當中開始廣泛應用。尤其對人們的生命安全構成威脅的場所不適合人們親自探測,這就需要自動裝置去完成這種危險性的工作。基于使用方便、便于攜帶為其本原則考慮,我們設計了能夠?qū)崿F(xiàn)數(shù)據(jù)采集、圖像發(fā)送接收以及自動避障避懸崖等多種功能的裝置來完成一些特殊場合下的特種作業(yè)。本設計可以使一些復雜問題簡單化,極具推廣價值!1系統(tǒng)設計方案本系統(tǒng)是以89S52CPU為微處理器芯片,能收集和處理小車由超聲波測距模塊、紅外蔽障模塊、顯示器傳送的信息,通過電機驅(qū)動芯片L298N驅(qū)動步進電機運轉(zhuǎn),運動狀態(tài)及距離前方障礙的距離通過5110液晶屏顯示,采用無線攝像頭,實現(xiàn)無線拍攝、時時顯示,將信號傳遞到無線接收器及采集卡。再將信號傳遞到計算機,顯示圖像。使小車具有自動避障功能、到危險場所進行信息拍攝、危險建筑工程測量以及到未知環(huán)境下進行測量等功能。2系統(tǒng)芯片簡介2.1系統(tǒng)核心芯片89S52AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K

的系統(tǒng)可編程Flash

存儲器。使用Atmel

公司高密度非易失性存儲器技術制造,與工業(yè)80C51

產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8

位CPU

和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下標準功能:

8k字節(jié)Flash,256字節(jié)RAM,32

位I/O

口線,看門狗定時器,2

個數(shù)據(jù)指針,三個16

位定時器/計數(shù)器,一個6向量2級中斷結(jié)構,全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52

可降至0Hz

靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。AT89S52圖2-1-1AT89S52封裝圖圖2-1-2AT89S52結(jié)構圖多功能I/O口AT89S52共有四個8位的并行I/O口:P0、P1、P2、P3端口,對應的引腳分別是P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7,共32根I/O線。每根線可以單獨用作輸入或輸出。①P0端口,該口是一個8位漏極開路的雙向I/O口。在作為輸出口時,每根引腳可以帶動8個TTL輸入負載。當把“1”寫入P0時,則它的引腳可用作高阻抗輸入。當對外部程序或數(shù)據(jù)存儲器進行存取時,P0可用作多路復用的低字節(jié)地址/數(shù)據(jù)總線,在該模式,P0口擁有內(nèi)部上拉電阻。在對Flash存儲器進行編程時,P0用于接收代碼字節(jié);在校驗時,則輸出代碼字節(jié);此時需要外加上拉電阻。②P1端口,該口是帶有內(nèi)部上拉電阻的8位雙向I/O端口,P1口的輸出緩沖器可驅(qū)動(吸收或輸出電流方式)4個TTL輸入。對端口寫“1”時,通過內(nèi)部的上拉電阻把端口拉到高電位,此時可用作輸入口。P1口作輸入口使用時,因為有內(nèi)部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流。在對Flash編程和程序校驗時,P1口接收低8位地址。另外,P1.0與P1.1可以配置成定時/計數(shù)器2的外部計數(shù)輸入端(P1.0/T2)與定時/計數(shù)器2的觸發(fā)輸入端(P1.0/T2EX),如表1-1所示。

表2-1-1

P1口管腳復用功能端口引腳復用功能P1.0T2(定時器/計算器2的外部輸入端)P1.1T2EX(定時器/計算器2的外部觸發(fā)端和雙向控制)P1.5MOSI(用于在線編程)P1.6MISO(用于在線編程)P1.7SCK(用于在線編程)

③P2端口,該口是帶有內(nèi)部上拉電阻的8位雙向I/O端口,P2口的輸出緩沖器可驅(qū)動(吸收或輸出電流方式)4個TTL輸入。對端口寫“1”時,通過內(nèi)部的上拉電阻把端口拉到高電位,此時可用作輸入口。P2口作輸入口使用時,因為有內(nèi)部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流。在訪問外部程序存儲器或16位的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX

@DPTR指令)時,P2口送出高8位地址,在訪問8位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX

@RI指令)時,P2口引腳上的內(nèi)容(就是專用寄存器(SFR)區(qū)中P2寄存器的內(nèi)容),在整個訪問期間不會改變。在對Flash編程和程序校驗期間,P2口也接收高位地址或一些控制信號。④P3端口,該口是帶有內(nèi)部上拉電阻的8位雙向I/O端口,P3口的輸出緩沖器可驅(qū)動(吸收或輸出電流方式)4個TTL輸入。對端口寫“1”時,通過內(nèi)部的上拉電阻把端口拉到高電位,此時可用作輸入口。P3口作輸入口使用時,因為有內(nèi)部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流。在AT89S52中,同樣P3口還用于一些復用功能,如表1-2所列。在對Flash編程和程序校驗期間,P3口還接收一些控制信號。

表2-1-2

P3端口引腳與復用功能表端口引腳復用功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2INT0(外部中斷0)P3.3INT1(外部中斷1)P3.4T0(定時器0的外部輸入)P3.5T1(定時器1的外部輸入)P3.6WR(外部數(shù)據(jù)存儲器寫選通)P3.7RD(外部數(shù)據(jù)存儲器讀選通)RST

復位輸入端。在振蕩器運行時,在此腳上出現(xiàn)兩個機器周期的高電平將使其單片機復位??撮T狗定時器(Watchdog)溢出后,該引腳會保持98個振蕩周期的高電平。在SFRAUXR(地址8EH)寄存器中的DISRTO位可以用于屏蔽這種功能。DISRTO位的默認狀態(tài),是復位高電平輸出功能使能。ALE/PROG

地址鎖存允許信號。在存取外部存儲器時,這個輸出信號用于鎖存低字節(jié)地址。在對Flash存儲器編程時,這條引腳用于輸入編程脈沖PROG。一般情況下,ALE是振蕩器頻率的6分頻信號,可用于外部定時或時鐘。但是,在對外部數(shù)據(jù)存儲器每次存取中,會跳過一個ALE脈沖。在需要時,可以把地址8EH中的SFR寄存器的0位置為“1”,從而屏蔽ALE的工作;而只有在MOVX或MOVC指令執(zhí)行時ALE才被激活。在單片機處于外部執(zhí)行方式時,對ALE屏蔽位置“1”并不起作用。PSEN

程序存儲器允許信號。它用于讀外部程序存儲器。當AT89S52在執(zhí)行來自外部存儲器的指令時,每一個機器周期PSEN被激活2次。在對外部數(shù)據(jù)存儲器的每次存取中,PSEN的2次激活會被跳過。EA/Vpp

外部存取允許信號。為了確保單片機從地址為0000H~FFFFH的外部程序存儲器中讀取代碼,故要把EA接到GND端,即地端。但是,如果鎖定位1被編程,則EA在復位時被鎖存。當執(zhí)行內(nèi)部程序時,EA應接到Vcc。在對Flash存儲器編程時,這條引腳接收12V編程電壓Vpp。XTAL1

振蕩器的反相放大器輸入,內(nèi)部時鐘工作電路的輸入。XTAL2

振蕩器的反相放大器輸出。2.2超聲波測距超聲波探頭又稱超聲波換能器,用來測量距離障礙物的距離,根據(jù)距離控制機器人的運動,來避開障礙物,實現(xiàn)自動蔽障。它是采用進口鍍膜晶片,適用于空氣介質(zhì)中測距、物位檢測的電聲轉(zhuǎn)換器件。超聲波測距就是利用超聲波來測量機器人距離障礙物的距離。超聲波發(fā)射頭發(fā)出超聲波,當發(fā)出的超聲波被前方的障礙物返射回來,返射回來的超聲波被接收探頭接收到。在發(fā)出超聲波的同時單片機開始計時,當超聲波信號返回時,計時停止;利用計時的時間和公式“測量距離=(時間*聲速(340M/S))/2”就可以知道機器人距離障礙物的距離了。單片機把測得的距離信息處理后實現(xiàn)對機器人控制的前進或停止,同時也傳遞給5110液晶顯示器顯示出來。表2-2-1測距引腳說明序號定義說明1保留保留2電源地GND3信號輸出OUT4信號輸入IN5電源VCC+5V

GND和VCC是電源供電引腳,模塊正5V供電;2、

IN腳是模塊的信號輸入腳,用戶從此腳輸入控制信號,驅(qū)動模塊工作,控制信號可以從單片機的IO口輸出方波信號;3、

OUT腳是模塊接收到超聲波后的返回信號輸出腳,此引腳步在模塊上電后輸出高電平,當用戶從輸入腳發(fā)出驅(qū)動信號后,如果模塊接收到返回超聲波,OUT引腳即被拉低,輸出低電平;4、

保留引腳用于功能擴展;功能實現(xiàn)原理:通過從IN腳輸入40KH的方波信號,即從單片機的IO口連續(xù)發(fā)出高低電平,產(chǎn)生方波,方波的個數(shù)一般為10個左右,發(fā)出后啟動定時器,開始計時,此時,超聲波發(fā)射頭開始發(fā)出超聲波,當發(fā)出的超聲波被前方的障礙物返射回來,返射回來的超聲波被接收探頭接收到,此時,模塊的OUT引腳會產(chǎn)生一個從高電平到低電平的跳變,此時,要停止計時,通過計時的時間,根據(jù)以下公式計算測量距離:2.3蔽障傳感器ST178H紅外光電傳感器是采用高發(fā)射功率紅外光電二極管和高靈敏度光電晶體管組成,輸出信號經(jīng)施密特電路整形,穩(wěn)定可靠。圖2-3-1紅外避障模塊電路原理功能實現(xiàn)原理:在小車的左、右、后三個方向用紅外線蔽障。傳感器的紅外發(fā)射二極管不斷發(fā)射紅外線,當發(fā)射出的紅外線沒有被反射回來或被反射回來但強度不夠大時,光敏三極管一直處于關斷狀態(tài),此時模塊的輸出端為低電平,指示二極管一直處于熄滅狀態(tài);被檢測物體出現(xiàn)在檢測范圍內(nèi)時,紅外線被反射回來且強度足夠大,光敏三極管飽和,此時模塊的輸出端為高電平,指示二極管被點亮。然后把信號傳遞給單片機(CPU),然后單片機控制電機,機器人自動避開障礙物。2.4無線攝像頭及液晶顯示器 功能實現(xiàn)原理:在本設計還采用無線攝像頭和液晶顯示器,實現(xiàn)無線拍攝、時時顯示,將信號傳遞到無線接收器及采集卡。再將信號傳遞到計算機,顯示圖像。同時將機器人的運動狀態(tài)及距離前方障礙的距離通過5110液晶屏顯示出來,能夠給遠程控制的操作員提供操作依據(jù)。2.5電機驅(qū)動電路本設計才步進電機帶動小車,步進電機區(qū)別于其他控制電機的最大特點是,它是通過輸入脈沖信號來進行控制的,即電機的總轉(zhuǎn)動角度由輸入脈沖數(shù)決定,而電機的轉(zhuǎn)速由脈沖信號頻率決定。步進電機的驅(qū)動電路根據(jù)控制信號工作,控制信號由單片機產(chǎn)生。其基本原理作用如下:(1)控制換相順序通電換相這一過程稱為脈沖分配。例如:三相步進電機的三拍工作方式,其各相通電順序為A-B-C-D,通電控制脈沖必須嚴格按照這一順序分別控制A,B,C,D相的通斷。(2)控制步進電機的轉(zhuǎn)向如果給定工作方式正序換相通電,步進電機正轉(zhuǎn),如果按反序通電換相,則電機就反轉(zhuǎn)??刂撇竭M電機的速度功能實現(xiàn)原理:如果給步進電機發(fā)一個控制脈沖,它就轉(zhuǎn)一步,再發(fā)一個脈沖,它會再轉(zhuǎn)一步。兩個脈沖的間隔越短,步進電機就轉(zhuǎn)得越快。調(diào)整單片機發(fā)出的脈沖頻率,就可以對步進電機進行調(diào)速。電機的驅(qū)動采用專用的電機驅(qū)動芯片L298N,一片L298N可驅(qū)動2個電動機,OUT1,OUT2和OUT3,OUT4之間可分別接電動機,5,7,10,12腳接輸入控制電平,控制電機的正反轉(zhuǎn)。EnA,EnB接控制使能端,控制電機的停轉(zhuǎn)。下圖是L298N功能邏輯圖及電路原理圖。表2-5-1圖2-5-1驅(qū)動電路原理圖3硬件設計方案本例的硬件電路設計主要是圍繞著超聲波測距傳感器、避障傳感器以及無線攝像頭技術的使用進行的。3.1結(jié)構框圖本例的硬件電路包括串行通信接口電路、單片機電路、超聲波測距電路、自動避障電路、無線攝像及液晶顯示輸出電路和電機驅(qū)動電路。其結(jié)構框圖如圖3-1圖3-1硬件總體設計圖4軟件設計軟件設計的重點在于單片機如何實現(xiàn)攝像頭的多方位攝像、自動避障、超聲波測距等功能。程序框圖如下:主程序開始主程序開始While(1)IO是高低電平?平口低高電平對IO進行時時掃面并將掃面結(jié)果傳給CPUCPU判斷信息種類從而讓相關的調(diào)用函數(shù)執(zhí)行命令通過While(1)函數(shù)從而判斷前后左右主程序繼續(xù)運行控制電機正反轉(zhuǎn)掃面繼續(xù)進行初始化主程序開始:#include<reg51.h>#define uchar unsigned char#define uint unsigned int//第一個步進電機控制ucharcodeF1_Rotation[]={0x01,0x02,0x04,0x08};//正轉(zhuǎn)表格ucharcodeB1_Rotation[]={0x08,0x04,0x02,0x01};//反轉(zhuǎn)表格//蔽障模塊sbitIR_obj_left=P1^6; //左邊障礙掃描sbitIR_obj_right=P1^7; //右邊障礙掃描sbitIR_obj_back=P3^1; //后邊障礙掃描//顯示器和測距sbitsce=P1^0;//片選sbitres=P1^1;//復位,0復位sbitdc=P1^2;//1寫數(shù)據(jù),0寫指令sbitsdin=P1^3;//數(shù)據(jù)sbitsclk=P1^4;//時鐘sbit BACK_LED=P1^5;//背光sbitTrig=P3^0;//產(chǎn)生脈沖引腳sbitEcho=P3^2;//回波引腳uintdistance[4],distance_data,a,b,k;//測距接收緩沖區(qū) ucharge,shi,bai,temp,flag,outcomeH,outcomeL,i,p,q;//自定義寄存器 bitsucceed_flag;//測量成功標志//6*16字符unsignedcharcodeshuzi[]={/*--文字:>--*//*--文字:0--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:1--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00,/*--文字:2--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00,/*--文字:3--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:4--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00,/*--文字:5--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:6--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:7--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,/*--文字:8--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:9--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00,/*--文字::--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,/*--文字:C--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:M--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=6x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=6x16--*/0xFC,0x3C,0xC0,0x3C,0xFC,0x00,0x03,0x00,0x03,0x00,0x03,0x00};unsignedcharcodehanzi[]={/*--文字:蔽--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0xF2,0x9A,0x52,0xFF,0x92,0xFA,0x22,0xFF,0x12,0xF2,0x12,0x00,0x07,0x00,0x00,0x07,0x04,0x07,0x04,0x02,0x01,0x02,0x04,0x00,/*--文字:障--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0xFF,0x81,0x9D,0xE3,0x0A,0xFA,0xAE,0xAB,0xAE,0xFA,0x0A,0x00,0x07,0x00,0x00,0x02,0x02,0x02,0x02,0x07,0x02,0x02,0x02,0x00,/*--文字:機--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x84,0x64,0xFF,0x24,0x44,0xFE,0x02,0x02,0xFF,0x02,0x00,0x00,0x01,0x00,0x07,0x04,0x02,0x01,0x00,0x00,0x07,0x04,0x07,0x00,/*--文字:器--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0xA0,0xAF,0xA9,0xE9,0xAF,0x30,0xAF,0xA9,0xF9,0xAF,0xA0,0x00,0x00,0x07,0x04,0x04,0x07,0x00,0x07,0x04,0x04,0x07,0x00,0x00,/*--文字:人--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x00,0x00,0x00,0x80,0x60,0x1F,0x60,0x80,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x00,/*--文字:調(diào)--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x10,0xF1,0x02,0x80,0xFF,0x11,0xD5,0x5F,0xD5,0x11,0xFF,0x00,0x00,0x03,0x01,0x04,0x03,0x00,0x01,0x01,0x05,0x04,0x07,0x00,/*--文字:試--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x11,0xF6,0x00,0x04,0x24,0xE4,0x24,0x24,0xFF,0x05,0x06,0x00,0x00,0x07,0x02,0x01,0x02,0x03,0x01,0x01,0x01,0x02,0x07,0x00,/*--文字:運--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x10,0xF1,0x02,0x08,0x89,0xC9,0xB9,0x89,0xC9,0x89,0x08,0x00,0x06,0x01,0x02,0x04,0x05,0x04,0x04,0x04,0x04,0x05,0x04,0x00,/*--文字:動--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x92,0x52,0x32,0x52,0x92,0x10,0x08,0xFF,0x08,0x08,0xF8,0x00,0x03,0x01,0x01,0x01,0x05,0x02,0x01,0x04,0x04,0x06,0x01,0x00,/*--文字:狀--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x84,0x48,0xFF,0x00,0x08,0x88,0x7F,0xC8,0x0A,0x0C,0x08,0x00,0x00,0x00,0x07,0x04,0x02,0x01,0x00,0x00,0x01,0x02,0x04,0x00,/*--文字:態(tài)--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x44,0x44,0x24,0x94,0xAC,0x27,0x4C,0x14,0xA4,0x46,0x44,0x00,0x04,0x03,0x00,0x07,0x04,0x05,0x04,0x04,0x06,0x01,0x02,0x00,/*--文字:距--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0xEF,0x09,0xF9,0x4F,0x40,0xFF,0x49,0x49,0x49,0x79,0x01,0x00,0x07,0x04,0x03,0x02,0x02,0x07,0x04,0x04,0x04,0x04,0x04,0x00,/*--文字:離--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x02,0x82,0xBE,0xA2,0xB6,0xEB,0xB6,0xA2,0xBE,0x82,0x02,0x00,0x00,0x07,0x00,0x02,0x03,0x02,0x02,0x03,0x04,0x07,0x00,0x00,/*--文字:前--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/ //130x04,0xF4,0x54,0x55,0xF6,0x04,0x06,0xF5,0x04,0xF6,0x04,0x00,0x00,0x07,0x01,0x05,0x07,0x00,0x00,0x05,0x04,0x07,0x00,0x00,/*--文字:進--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/ //140x10,0xF1,0x02,0x24,0x24,0xFF,0x24,0x24,0xFF,0x24,0x24,0x00,0x06,0x01,0x02,0x06,0x05,0x04,0x04,0x04,0x07,0x04,0x04,0x00,/*--文字:后--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x00,0x00,0xFE,0x0A,0xC9,0x49,0x49,0x49,0x49,0xC9,0x08,0x00,0x04,0x03,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x07,0x00,0x00,/*--文字:退--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x11,0xF6,0x00,0x00,0xFF,0x15,0x55,0x55,0x95,0x5F,0x00,0x00,0x06,0x01,0x02,0x02,0x05,0x05,0x05,0x04,0x04,0x05,0x04,0x00,/*--文字:左--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x04,0x04,0xC4,0x34,0x2F,0x24,0xE4,0x24,0x24,0x26,0x04,0x00,0x02,0x05,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x00,/*--文字:轉(zhuǎn)--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x32,0x2E,0xFB,0xA2,0xA2,0x14,0x74,0x5F,0x54,0xD4,0x14,0x00,0x01,0x01,0x07,0x00,0x00,0x00,0x02,0x02,0x05,0x00,0x00,0x00,/*--文字:右--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x04,0x84,0x44,0xF4,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x00,0x01,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x07,0x00,0x00,/*--文字:轉(zhuǎn)--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x32,0x2E,0xFB,0xA2,0xA2,0x14,0x74,0x5F,0x54,0xD4,0x14,0x00,0x01,0x01,0x07,0x00,0x00,0x00,0x02,0x02,0x05,0x00,0x00,0x00,/*--文字:停--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x10,0xFC,0x03,0x62,0xBA,0xAA,0xAB,0xAA,0xAA,0xBA,0x62,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,/*--文字:止--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x00,0x00,0xF8,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00,0x04,0x04,0x07,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x00,/*--文字:礙--*//*--TrebuchetMS9;此字體下對應的點陣為:寬x高=12x12--*//*--高度不是8的倍數(shù),現(xiàn)調(diào)整為:寬度x高度=12x16--*/0x21,0xF9,0x17,0xF1,0x00,0x5F,0x55,0x55,0x55,0xDF,0x40,0x00,0x00,0x03,0x01,0x03,0x00,0x01,0x03,0x05,0x05,0x07,0x01,0x00}; //延時函數(shù)//voiddelay_20us(){ucharbt;for(bt=0;bt<100;bt++);}voidDelay(unsignedinti)//延時{while(--i);}/*LCD_write_byte:使用SPI接口寫數(shù)據(jù)到LCD輸入?yún)?shù):dt:寫入的數(shù)據(jù);command:寫數(shù)據(jù)/命令選擇;編寫日期:20080918*/voidLCD_write_byte(unsignedchardt,unsignedcharcommand){ unsignedchari; sce=0; dc=command; for(i=0;i<8;i++) { if(dt&0x80) sdin=1; else sdin=0; dt=dt<<1; sclk=0; sclk=1; } dc=1; sce=1; sdin=1;}/*LCD_init:3310LCD初始化編寫日期:20080918*/voidLCD_init(void){ res=0; delay_20us(); res=1; LCD_write_byte(0x21,0);//初始化Lcd,功能設定使用擴充指令 LCD_write_byte(0xD0,0);//設定液晶偏置電壓 LCD_write_byte(0x20,0);//使用基本指令 LCD_write_byte(0x0C,0);//設定顯示模式,正常顯示}/*LCD_set_XY:設置LCD坐標函數(shù)輸入?yún)?shù):X:0-83Y:0-5編寫日期:20080918*/voidLCD_set_XY(unsignedcharX,unsignedcharY){ LCD_write_byte(0x40|Y,0);//column LCD_write_byte(0x80|X,0);//row}/*LCD_clear:LCD清屏函數(shù)編寫日期:20080918*/voidLCD_clear(void){ unsignedchart; unsignedchark; LCD_set_XY(0,0); for(t=0;t<6;t++) { for(k=0;k<84;k++) { LCD_write_byte(0x00,1); } }}/*LCD_write_shu:顯示6(寬)*16(高)點陣列數(shù)字字母符號等半角類輸入?yún)?shù):c:顯示的字符;編寫日期:20080918*/voidLCD_write_shu(unsignedcharrow,unsignedcharpage,unsignedcharc)//row:列page:頁dd:字符{ unsignedchari; LCD_set_XY(row*6,page);//列,頁 for(i=0;i<6;i++) { LCD_write_byte(shuzi[c*12+i],1); } LCD_set_XY(row*6,page+1);//列,頁 for(i=6;i<12;i++) { LCD_write_byte(shuzi[c*12+i],1); } }/*LCD_write_hanzi:顯示12(寬)*16(高)點陣列漢字等半角類輸入?yún)?shù):c:顯示的字符;編寫日期:20080918*/voidLCD_write_hanzi(unsignedcharrow,unsignedcharpage,unsignedcharc)//row:列page:頁dd:字符{ unsignedchari; LCD_set_XY(row*6,page);//列,頁 for(i=0;i<12;i++) { LCD_write_byte(hanzi[c*24+i],1); } LCD_set_XY(row*6,page+1);//列,頁 for(i=12;i<24;i++) { LCD_write_byte(hanzi[c*24+i],1); } }//顯示數(shù)據(jù)轉(zhuǎn)換程序voidconversion(uinttemp_data){ucharge_data,shi_data,bai_data;bai_data=temp_data/100;temp_data=temp_data%100;//取余運算shi_data=temp_data/10;temp_data=temp_data%10;//取余運算ge_data=temp_data;EA=0;bai=bai_data;shi=shi_data;ge=ge_data; EA=1;}//***************************************************************//外部中斷0,用做判斷回波電平INTO_()interrupt0//外部中斷是0號{outcomeH=TH1;//取出定時器的值outcomeL=TL1;//取出定時器的值succeed_flag=1;//至成功測量的標志EX0=0;//關閉外部中斷}//****************************************************************//定時器0中斷,用做顯示timer0()interrupt1//定時器0中斷是1號{ TH0=0x0D;//寫入定時器0初始值 TL0=0x77; switch(flag){ case0x00: LCD_write_shu(9,4,bai);flag++;break; case0x01:LCD_write_shu(10,4,shi);flag++;break; case0x02: LCD_write_shu(11,4,ge);flag=0;break;} LCD_write_hanzi(9,2,p);//運動 LCD_write_hanzi(11,2,q);//方向}void show(){ LCD_init();//初始化LCD模塊 LCD_clear();//清屏幕 LCD_write_hanzi(0,0,0);//蔽 LCD_write_hanzi(2,0,1);//障 LCD_write_hanzi(4,0,2);//機 LCD_write_hanzi(6,0,3);//器 LCD_write_hanzi(8,0,4);//人 LCD_write_hanzi(10,0,5);//調(diào) LCD_write_hanzi(12,0,6);//試 LCD_write_hanzi(0,2,7);// 運 LCD_write_hanzi(2,2,8);//動 LCD_write_hanzi(4,2,9);//狀 LCD_write_hanzi(6,2,10);//態(tài) LCD_write_shu(8,2,10);//: LCD_write_hanzi(9,2,13);//前 LCD_write_hanzi(11,2,14);//進 LCD_write_hanzi(0,4,1);//障 LCD_write_hanzi(2,4,21);//礙 LCD_write_hanzi(4,4,11);//距 LCD_write_hanzi(6,4,12);//離 LCD_write_shu(8,4,10);//: LCD_write_shu(12,4,11);//C LCD_write_shu(13,4,12);//M } void data_do(){ ucharCONT_1; EA=0; Trig=1; delay_20us(); Trig=0;//產(chǎn)生一個20us的脈沖,在Trig引腳 while(Echo==0);//等待Echo回波引腳變高電平 succeed_flag=0;//清測量成功標志 EX0=1;//打開外部中斷 TH1=0;//定時器1清零 TL1=0;//定時器1清零 TF1=0;// TR1=1;//啟動定時器1 EA=1; while(TH1<30);//等待測量的結(jié)果,周期65.535毫秒(可用中斷實現(xiàn)) TR1=0;//關閉定時器1 EX0=0; if(succeed_flag==1) { distance_data=outcomeH;//測量結(jié)果的高8位 distance_data<<=8;//放入16位的高8位 distance_data=distance_data|outcomeL;//與低8位合并成為16位結(jié)果數(shù)據(jù) distance_data*=12;//因為定時器默認為12分頻 distance_data/=588; k=distance_data;//微秒的單位除以58等于厘米 }//為什么除以58等于厘米,Y米=(X秒*344)/2 if(succeed_flag==0) { distance_data=0;//測試燈變化 } a=distance_data; if(b==a)CONT_1=0; if(b!=a)CONT_1++; if(CONT_1>=3) { CONT_1=0; b=a; conversion(b); }} //主函數(shù)//void main(){ uint m; uchar temp; i=0;flag=0; Trig=0;//首先拉低脈沖輸入引腳 TMOD=0x11;//定時器0,定時器1,16位工作方式 TR0=1; //啟動定時器0IT0=0;//由高電平變低電平,觸發(fā)外部中斷 ET0=1;//打開定時器0中斷 EX0=0;//關閉外部中斷

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論