版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、. . . . 基于超聲波的倒車?yán)走_(dá)系統(tǒng)電子0601靈光 電子0602建標(biāo),永根摘 要隨著科技的發(fā)展,人們生活水平的提高,城市發(fā)展建設(shè)加快,城市給交通系統(tǒng)也有較大發(fā)展,其狀況不斷改善。但是,由于多種原因合成時(shí)間住的許多不可預(yù)見(jiàn)因素,城市還是經(jīng)常出現(xiàn)大量的交通事故,特別是倒車時(shí),看不到后方而導(dǎo)致大量的交通事故。因此,設(shè)計(jì)出好的倒車?yán)走_(dá)系統(tǒng),對(duì)于減少城市的交通事故將有一個(gè)很好的控制作用。當(dāng)然這要求倒車?yán)走_(dá)系統(tǒng),具有精度高,抗干擾強(qiáng),價(jià)格應(yīng)該低,適宜推廣等特點(diǎn),這樣基于超聲波的測(cè)距系統(tǒng),完全可以勝任此任務(wù)。本設(shè)計(jì)采用以AT89C51單片機(jī)為核心的低成本、高精度、微型化數(shù)字顯示超聲波測(cè)距儀的硬件電路和
2、軟件設(shè)計(jì)方法。整個(gè)電路采用模塊化設(shè)計(jì),由主程序、發(fā)射子程序、接收子程序、顯示子程序等模塊組成。各探頭的信號(hào)經(jīng)單片機(jī)綜合分析處理,實(shí)現(xiàn)超聲波測(cè)距儀的各種功能。在此基礎(chǔ)上設(shè)計(jì)了系統(tǒng)的總體方案,最后通過(guò)硬件和軟件實(shí)現(xiàn)了各個(gè)功能模塊。該設(shè)計(jì)設(shè)抗干擾能力較好,實(shí)時(shí)性良好,誤差可以達(dá)到mm級(jí),可以有效地解決汽車倒車作用。本系統(tǒng)在倒車時(shí)不斷測(cè)量汽車尾部與其后面障礙物的距離,并隨時(shí)顯示其距離,并用語(yǔ)音與時(shí)提示。在不同的距離圍,不同的溫度下測(cè)出距離,發(fā)出報(bào)警信號(hào),以提高汽車倒車時(shí)的安全性的儀器。目錄第一章 緒論 31.1 課題背景,目的和意義31.2兩種常用的超聲波測(cè)距方案3第2章 超聲波測(cè)距系統(tǒng)設(shè)計(jì)32.1
3、超聲波測(cè)距的原理42.2超聲波測(cè)距系統(tǒng)電路的設(shè)計(jì)42.2.1 總體設(shè)計(jì)方案 42.2.2發(fā)射電路的設(shè)計(jì) 42.2.3接收電路的設(shè)計(jì) 42.2.4顯示模塊的設(shè)計(jì) 52.2.5 溫度補(bǔ)償模塊設(shè)計(jì)52.2.6 語(yǔ)音處理模塊5第三章 超聲波測(cè)距系統(tǒng)的軟件設(shè).53.1總體流程圖 .53.2 程序與分析 .6第四章 電路調(diào)試與誤差分析.74.1電路的調(diào)試 .74.2系統(tǒng)的誤差分析 .7第5章 功能擴(kuò)展7參考文獻(xiàn) .7附錄:8-22第1章 緒論1.1 課題背景,目的和意義 由于社會(huì)的進(jìn)步,經(jīng)濟(jì)的發(fā)展和生活水平的不斷提高,汽。車數(shù)量逐年增長(zhǎng),造成道路交通擁擠不堪,交通事故頻繁發(fā)生汽車倒車報(bào)警器:在倒車時(shí)不斷測(cè)
4、量汽車尾部與其后面障礙物的距離,并隨時(shí)顯示其距離,并用語(yǔ)音與時(shí)提示。在不同的距離圍,不同的溫度下測(cè)出距離,發(fā)出報(bào)警信號(hào),以提高汽車倒車時(shí)的安全性的儀器。2.2兩種常用的超聲波測(cè)距方案2.2.1基于CPLD的超聲波測(cè)距系統(tǒng) CPLD模塊主要由發(fā)射模塊,16位計(jì)時(shí)計(jì)數(shù)器模塊,接收模塊,順序執(zhí)行計(jì)數(shù)器模塊和六選一數(shù)據(jù)選擇器模塊五部分組成。其總體框圖如圖1所示。CPLD模塊主要完成超聲波的發(fā)射、接收和時(shí)間的測(cè)量。超聲波發(fā)射模塊啟動(dòng)40KHz的超聲波發(fā)射,當(dāng)發(fā)射脈沖串達(dá)到設(shè)定值后,關(guān)閉超聲波的發(fā)射,同時(shí)啟動(dòng)六路計(jì)時(shí)計(jì)數(shù)器模塊開(kāi)始計(jì)時(shí);信號(hào)經(jīng)過(guò)障礙物反射回來(lái),接收電路接收到回波后,將其進(jìn)行整形,作為接收模
5、塊的信號(hào),當(dāng)接收完回波脈沖信號(hào)后,接收模塊輸出端發(fā)出信號(hào),關(guān)閉計(jì)時(shí)計(jì)數(shù)器停止工作;當(dāng)所有的回波接收完畢后,順序執(zhí)行計(jì)數(shù)器輸出端發(fā)出信號(hào)啟動(dòng)單片機(jī)開(kāi)始接收數(shù)據(jù),通過(guò)順序執(zhí)行計(jì)數(shù)器的計(jì)數(shù)值、數(shù)據(jù)選擇器的選擇端與計(jì)時(shí)計(jì)數(shù)器的控制端分別讀取六路不同的計(jì)數(shù)值。所有的數(shù)據(jù)讀取完后,清除計(jì)時(shí)計(jì)數(shù)器的計(jì)數(shù)值,準(zhǔn)備下一次的循環(huán)計(jì)數(shù)。2.2.1基于單片機(jī)的超聲波測(cè)距系統(tǒng) 本警器由單片機(jī)來(lái)控制。整個(gè)控制系統(tǒng)由超聲波發(fā)射電路、超聲波接收電路、報(bào)警電路、復(fù)位電路、顯示電路組成。實(shí)行實(shí)時(shí)數(shù)字顯示測(cè)得的距離,在不同的距離圍發(fā)出不同的報(bào)警信號(hào),駕駛員可根據(jù)個(gè)人需要調(diào)整設(shè)置報(bào)警距離,以減少事故的發(fā)生。本作品將采用此種方法。第二
6、章 超聲波測(cè)距系統(tǒng)設(shè)計(jì) 2.1 超聲波測(cè)距的原理 超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)開(kāi)始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物就立即返回來(lái),超聲波接收器收到反射波就立即停止計(jì)時(shí)。超聲波在空氣中的傳播速度為c,根據(jù)計(jì)時(shí)器記錄的時(shí)間t,就可以計(jì)算出發(fā)射點(diǎn)距障礙物的距離(s),即:s=ct/2 。這就是所謂的時(shí)間差測(cè)距法。2.2超聲波測(cè)距系統(tǒng)電路的設(shè)計(jì) 2.2.1 總體設(shè)計(jì)方案 該設(shè)計(jì)總體基于51,包括發(fā)射模塊,接收模塊,顯示模塊,語(yǔ)音模塊,溫度補(bǔ)償模塊。由發(fā)射電路發(fā)射超聲波,51計(jì)數(shù)器從0開(kāi)始計(jì)時(shí),當(dāng)超聲波反射回來(lái),接收電路接收,51停止計(jì)時(shí),將所計(jì)得得數(shù)轉(zhuǎn)化成十進(jìn)制n,因?yàn)槭褂?/p>
7、的12MHz晶體作時(shí)鐘基準(zhǔn)的89C51單片機(jī)定時(shí)器能方便的計(jì)數(shù)到1s的精度,因此系統(tǒng)采用89C51定時(shí)器能保證時(shí)間誤差在1mm的測(cè)量圍。,則將n與1us相乘即可以得到時(shí)間,從而利用超聲波測(cè)距的原理就可以判斷距離以是否利用利用凌陽(yáng)61版的語(yǔ)音處理功能,進(jìn)行報(bào)警與播放當(dāng)前的距離,溫度和超聲波傳播速度。再者顯示器也將顯示距離,溫度,與超聲波傳播速度。2.2.2發(fā)射電路的設(shè)計(jì) 用單片機(jī)直接產(chǎn)生的40khz信號(hào)經(jīng)過(guò)74ls04放大后直接驅(qū)動(dòng)超聲波發(fā)射探頭。2.2.3接收電路的設(shè)計(jì) 將超聲波接收探頭接收的信號(hào)經(jīng)cx20106紅外線專用芯片處理接收,然后送給單片機(jī)。2.2.4顯示模塊的設(shè)計(jì) 使用1602液晶
8、屏,與單片機(jī)連接,將單片機(jī)的距離,溫度,超聲波數(shù)度(聲速)傳送給液晶屏顯示出來(lái)。2.2.5 溫度補(bǔ)償模塊設(shè)計(jì) 因?yàn)槁曀僭诓煌瑴囟认碌膫鞑ニ俣仁遣煌?,根?jù)補(bǔ)償公式C=C0+0.607×TC0為零度時(shí)的聲波速度332m/s;T為實(shí)際溫度()。采用18b20溫度傳感器測(cè)溫,根據(jù)測(cè)得的溫度,來(lái)確定具體的聲速。2.2.6 語(yǔ)音處理模塊 根據(jù)手中的現(xiàn)有的材料,利用凌陽(yáng)61版的語(yǔ)音處理功能,播放出:“倒車請(qǐng)注意”并通過(guò)51單片機(jī)和凌陽(yáng)的串口通訊,將51測(cè)得的距離,溫度,聲速數(shù)據(jù)傳給凌陽(yáng),然后通過(guò)凌陽(yáng)的語(yǔ)音處理將其播報(bào)出來(lái)。第三章 超聲波測(cè)距系統(tǒng)的軟件設(shè)計(jì) 3.1總體流程圖3.1.1凌陽(yáng)模塊流程圖
9、3.1.2 51單片機(jī)模塊3.2 程序與分析(見(jiàn)附錄)第4章 電路調(diào)試與誤差分析 5.1電路的調(diào)試(盲區(qū)問(wèn)題)由于超聲波發(fā)射探頭在發(fā)射超聲波時(shí),接受探頭也會(huì)接受到超聲波,所以在發(fā)射超聲波時(shí),必須先關(guān)外部中斷,延時(shí)一段時(shí)間,進(jìn)而消除回波干擾,所以在測(cè)量中會(huì)有盲區(qū)出現(xiàn),所以硬件調(diào)試中主要的就是調(diào)節(jié)延時(shí)時(shí)間,使盲區(qū)達(dá)到最小,進(jìn)而跳高測(cè)量的精度。通過(guò)硬件調(diào)試,來(lái)控制發(fā)射脈沖波的個(gè)數(shù)以與延時(shí)時(shí)間,并在實(shí)際測(cè)量中測(cè)出三種不同測(cè)距模式下的盲區(qū),分別約為5cm,20cm與45cm。、 5.2系統(tǒng)的誤差分析 28根據(jù)超聲波測(cè)距公式L=C×T,可知測(cè)距的誤差是由超聲波的傳播速度誤差和測(cè)量距離傳播的時(shí)間誤
10、差引起的。1.時(shí)間誤差當(dāng)要求測(cè)距誤差小于1mm時(shí),假設(shè)已知超聲波速度C=344m/s (20室溫),忽略聲速的傳播誤差。測(cè)距誤差st<(0.001/344) 0.000002907s 即2.907ms。在超聲波的傳播速度是準(zhǔn)確的前提下,測(cè)量距離的傳播時(shí)間差值精度只要在達(dá)到微秒級(jí),就能保證測(cè)距誤差小于1mm的誤差。使用的12MHz晶體作時(shí)鐘基準(zhǔn)的89C51單片機(jī)定時(shí)器能方便的計(jì)數(shù)到1s的精度,因此系統(tǒng)采用89C51定時(shí)器能保證時(shí)間誤差在1mm的測(cè)量圍。2.超聲波傳播速度誤差超聲波的傳播速度受空氣的密度所影響,空氣的密度越高則超聲波的傳播速度就越快.第5章 功能擴(kuò)展通過(guò)串口與PC機(jī)進(jìn)行通訊,
11、并利用所學(xué)知識(shí),用VB寫了了一個(gè)接受模塊,將51單片機(jī)中的數(shù)據(jù)經(jīng)串口傳到電腦上顯示。參考文獻(xiàn) 33單片機(jī)原理與控制技術(shù) 機(jī)械工業(yè)數(shù)字電子技術(shù)教程 清華大學(xué)模擬電子技術(shù)教程 清華大學(xué)胡萍.超聲波測(cè)距儀的研制.計(jì)算機(jī)與現(xiàn)代化時(shí)德剛,嘩.超聲波測(cè)距的研究.計(jì)算機(jī)測(cè)量與控制hi.baidu./mgjqr/blog/item/63c5bd1e5346c164f624e4b8.html 超聲波測(cè)距原理附錄:/主文件程序main/3.2.1超聲波測(cè)距#include<reg52.h>#include <stdio.h> #include"18B20.h" #inc
12、lude "intrins.h"#include"LCD1602.H"#include"Delay1.h"#define uchar unsigned char#define uint unsigned intuchar ucHigh_time,ucLow_time; /超聲波傳輸時(shí)間 uchar ucFlag; /中斷標(biāo)志位uchar frq;/音樂(lè)頻率節(jié)拍問(wèn)題float c; /不同溫度下的超聲波傳播速度/*針腳定義*/sbit Hz40k_out=P36; /40k信號(hào)輸出端sbit Mod_short=P14;sbit Mod
13、_long=P15;sbitMod_out = P17;/ 判斷數(shù)據(jù)是發(fā)給電腦機(jī)還是凌陽(yáng)版sbit Key_tran=P16; /發(fā)送數(shù)據(jù),開(kāi)始通訊/*/*函數(shù)聲明*/void Tmr0_int(void);void Int0_int(void);void Send_40khz_long(void) ; /發(fā)射超聲波void Send_40khz_medium(void) ;void Send_40khz_short(void) ;int Distance_count(); /距離轉(zhuǎn)換函數(shù)float Compensate_c(); /溫度補(bǔ)償函數(shù)void Display_dis(void);
14、/距離顯示函數(shù)void Display_tem(void); /溫度顯示函數(shù)void Display_c(void) ; /聲速顯示函數(shù)void delayms(unsigned char ms);void Tmr1_int(void);/*子程序 */ void Tmr0_int(void)TMOD|=0x01; /tmr0方式1,16位計(jì)數(shù)EA=0; /關(guān)總中斷ET0=0; /關(guān)T0中斷TR0=0; /停止計(jì)時(shí)器0TH0=0X00;TL0=0X00; /void Int0_int(void)IT0=0; /低電平沿觸發(fā)EA=0; /關(guān)總中斷EX0=0; /屏蔽中斷/void Ustart_
15、int(void)SCON |= 0x50; /串口方式1,允許接收TMOD |= 0x20; /定時(shí)器1定時(shí)方式2/TCON = 0x40; /設(shè)定時(shí)器1開(kāi)始計(jì)數(shù)TH1 = 0xF3;/12MHz 2400波特率TL1 = 0xF3; TR1 = 0; /關(guān)閉定時(shí)器 /void Ustart_send_lingyang(void) uchar send3; uint Voice_v; send0=Distance_count(); send1=Distance_count()>>8; TR1 = 1; /啟動(dòng)定時(shí)器 TI=0; SBUF=send1; /先發(fā)高位再發(fā)低位 whil
16、e(!TI); /等待發(fā)送完成 TI=0; while(!RI); /等待接收完成 RI=0; /delay_ms(200); SBUF=send0; while(!TI); TI=0; send0=Read_Temperature()/10;send1=(Read_Temperature()/10)>>8;/發(fā)送的為實(shí)際溫度的十倍37.2C則發(fā)送372while(!RI); /等待接收完成 RI=0; /delay_ms(200); SBUF=send1; while(!TI); TI=0; while(!RI); /等待接收完成 RI=0; /delay_ms(200); SB
17、UF=send0; while(!TI); TI=0;Voice_v=Compensate_c(); /將浮點(diǎn)型轉(zhuǎn)換為整型 send0=Voice_v; send1=Voice_v>>8; while(!RI); /等待接收完成 RI=0; /delay_ms(200); SBUF=send1; while(!TI); TI=0; while(!RI); /等待接收完成 RI=0; /delay_ms(200); SBUF=send0; while(!TI); TI=0; while(!RI); /等待接收完成 RI=0;TR1=0;/關(guān)閉定時(shí)器 /void Ustart_send
18、_pc(void) uchar send4; uint Voice_v; send0=Distance_count()/1000+0x30; send1=Distance_count()%1000/100+0x30; send2=Distance_count()%100/10+0x30; send3=Distance_count()%10+0x30; TR1 = 1; /啟動(dòng)定時(shí)器 TI=0; SBUF=send0; while(!TI); TI=0; SBUF=send1; while(!TI); TI=0; SBUF=send2; while(!TI); TI=0; SBUF=send3;
19、 while(!TI); TI=0; send0=(Read_Temperature()/10)/100+0x30; send1=(Read_Temperature()/10)%100/10+0x30;/發(fā)送的為實(shí)際溫度的十倍 37.2C則發(fā)送372 send2=(Read_Temperature()/10)%10+0x30; SBUF=send0; while(!TI); TI=0; SBUF=send1; while(!TI); TI=0; SBUF=send2; while(!TI); TI=0; Voice_v=Compensate_c(); /將浮點(diǎn)型轉(zhuǎn)換為整型 send0=Voic
20、e_v/100+0x30; send1=Voice_v%100/10+0x30; send2=Voice_v%10+0x30; SBUF=send0; while(!TI); TI=0; SBUF=send1; while(!TI); TI=0; SBUF=send2; while(!TI); TI=0; TR1=0;/關(guān)閉定時(shí)器 void Key_scan(void)Key_tran=1;/寫1準(zhǔn)備開(kāi)始讀 if(Key_tran=0) delay_ms(10);while(!Key_tran) ;/等待按鍵放開(kāi)if (Mod_out=1)Ustart_send_lingyang(); els
21、eUstart_send_pc(); /void Send_40khz_short(void)/從P1.0發(fā)出40KHz的脈沖 短波測(cè)量短距離uchar n,p;for(n=0;n<1;n+) /輸出1個(gè)脈沖Hz40k_out=1;for(p=0;p<3;p+);Hz40k_out=0;for(p=0;p<2;p+);Hz40k_out=0;/void Send_40khz_medium(void)/從P1.0發(fā)出40KHz的脈沖 中波 測(cè)量中距離uchar n,p;for(n=0;n<2;n+) /輸出2個(gè)脈沖Hz40k_out=1;for(p=0;p<3;p+
22、);Hz40k_out=0;for(p=0;p<2;p+);Hz40k_out=0;/void Send_40khz_long(void)/從P1.0發(fā)出40KHz的脈沖長(zhǎng)波測(cè)量長(zhǎng)距離uchar n,p;for(n=0;n<40;n+) /輸出40個(gè)脈沖Hz40k_out=1;for(p=0;p<3;p+);Hz40k_out=0;for(p=0;p<2;p+);Hz40k_out=0;/ float Compensate_c()/溫度補(bǔ)償公式 c= 331.45+0.607*Read_Temperature()/100; return c; /int Distance
23、_count()/距離計(jì)算函數(shù)float Temp;Temp=ucHigh_time*256+ucLow_time-96;/96為實(shí)際調(diào)試中距離的調(diào)整Temp=(Temp/1000)/2;Temp*=Compensate_c(); /毫米return Temp;/void Display_dis(void) /顯示距離 switch(ucFlag)case 1: LCD_gotoxy(0, 0); write_string_LCD1602("Distance:"); if( Distance_count()/1000>0)/判讀顯示位數(shù) write_number(Di
24、stance_count(),4);else if(Distance_count()/100>0)write_number(Distance_count(),3);else if(Distance_count()/10>0)write_number(Distance_count(),2); write_string_LCD1602(" ");else write_number(Distance_count(),1);write_string_LCD1602(" "); write_string_LCD1602("mm");
25、 break; case 2: LCD_gotoxy(0, 0); write_string_LCD1602("Distance:wrong ") ; break; default : LCD_gotoxy(0, 0); write_string_LCD1602("Begin ") ; break; /void Display_tem(void)/顯示溫度 LCD_gotoxy(1, 0); write_string_LCD1602("T:"); if (Read_Temperature()/100>=100)write_num
26、ber(Read_Temperature()/100,3);elsewrite_number(Read_Temperature()/100,2);write_string_LCD1602(".");write_number(Read_Temperature()%100/10,1);write_string_LCD1602("C"); /void Display_c(void) /顯示聲速LCD_gotoxy(1, 8);write_string_LCD1602("c:");write_number(Compensate_c(),3);
27、write_string_LCD1602("m/s"); /*中斷處理*/void INT0_Ultrasonic() interrupt 0 uchar ucTemp_time1,ucTemp_time2;ucFlag=1;/外部中斷標(biāo)志位TR0=0;/關(guān)定時(shí)器0ET0=0;/屏蔽定時(shí)器0中斷EX0=0;/關(guān)外部中斷ucTemp_time1=TL0;ucTemp_time2=TH0;if(ucTemp_time1!=0)&&(ucTemp_time2!=0)ucHigh_time=TH0;ucLow_time=TL0;/void over()interru
28、pt 1/T0溢出為無(wú)效測(cè)量FFF;ucFlag=2;/溢出標(biāo)志位 TR0=0;/關(guān)定時(shí)器0 ET0=0;/屏蔽定時(shí)器0中斷EX0=0;/屏蔽外部中斷/*主程序*/void main(void)Tmr0_int();Int0_int();Ustart_int(); /串口通訊初始化init_LCD1602() ;EA=1; /開(kāi)總中斷 while(1) PX0=1; /設(shè)置外部0中斷優(yōu)先級(jí)為最高TH0=0;TL0=0;/清定時(shí)0TR0=1;/開(kāi)定時(shí)0ET0=1;/開(kāi)啟定時(shí)器0中斷if(Mod_long=0)Send_40khz_long();/發(fā)射40khz脈沖 測(cè)量長(zhǎng)距離delay_ms(1
29、); /1msdelay_us(80); / 0.724ms 防回波干擾 總延時(shí)25*40/1000+1+0.724=2.724ms /盲區(qū):2.724*170=463mm if (Mod_long=1& Mod_short=1) Send_40khz_medium();/發(fā)射40khz脈沖 測(cè)量中距離delay_us(127);/ 防回波干擾 1.157ms延時(shí) /總延時(shí)1.157+0.05=1.207ms /盲區(qū):1.207*170=205.19mmif(Mod_short=0) Send_40khz_short();/發(fā)射40khz脈沖 測(cè)量短距離 EX0=1; /開(kāi)啟int0中
30、斷Display_dis( ); /距離顯示Display_tem(); /溫度顯示Display_c(); /聲速顯示/*Tmr1_int(); 音樂(lè)播放 delay_ms(200);delay_ms(200);/delay_ms(200);ET1=0; /關(guān)tmr1中斷 關(guān)閉音樂(lè),避免開(kāi)音樂(lè)是中斷太頻繁,引起測(cè)溫和測(cè)距離都不準(zhǔn)確 */ / delay_ms(200); delay_ms(200); Key_scan(); /掃描按鍵判斷是否要發(fā)送數(shù)據(jù)與凌陽(yáng)版通訊 (2)顯示模塊#ifndef _RZ_LCD1602_#define _RZ_LCD1602_#ifndef uchar#def
31、ine uchar unsigned char#endif#ifndef uint#define uint unsigned int#endifuchar code number10="0123456789"/用來(lái)顯示數(shù)據(jù)#define Port P2sbit RS_LCD1602=P11;sbit RW_LCD1602=P12;sbit EN_LCD1602=P13;void Delay_Ms_LCD1602(uint ms)/延時(shí)程序(以毫秒為單位)。uchar y,z;for(;ms>0;ms-)for(y=0;y<11;y+)for(z=0;z<2
32、5;z+);bit get_status_LCD1602() /讀狀態(tài)。 Port=0xff;EN_LCD1602=0;RS_LCD1602=0;RW_LCD1602=1;EN_LCD1602=1;return(bit)(Port&0x80);void write_command_LCD1602(uchar ) /寫命令。while(get_status_LCD1602();EN_LCD1602=0;RS_LCD1602=0;RW_LCD1602=0;Delay_Ms_LCD1602(5);Port=;EN_LCD1602=1;Delay_Ms_LCD1602(20);EN_LCD16
33、02=0;void set_cursor_LCD1602(uchar line,uchar add)/設(shè)置光標(biāo)的行(line),列(add)位置。write_command_LCD1602(0x80+line*0x40+add);void write_char_LCD1602(uchar indata) /寫數(shù)據(jù)。while(get_status_LCD1602();EN_LCD1602=0;RS_LCD1602=1;RW_LCD1602=0;Delay_Ms_LCD1602(5);P2=indata;EN_LCD1602=1;Delay_Ms_LCD1602(20);EN_LCD1602=0
34、;void Write_CGA_LCD1602(uchar *CGA_Data,uchar CGA_Index)/寫自定義字符uchar index;CGA_Index&=0x07;/最多8個(gè)字符。CGA_Index=CGA_Index<<3;/決定CGARAM相對(duì)地址。for(index=0;index<8;index+)/設(shè)置CGARAM地址。write_command_LCD1602(CGA_Index|index|0x40);/寫入字模數(shù)據(jù)。write_char_LCD1602(*CGA_Data);CGA_Data+;void write_char_add_
35、LCD1602(uchar indata,uchar line,uchar add)/在指定的行(line),列(add)位置寫入字符(indata)。set_cursor_LCD1602(line,add);write_char_LCD1602(indata);void write_string_LCD1602(uchar indata)/從當(dāng)位置開(kāi)始寫入指定長(zhǎng)度(lenght)的字符串(indata)。/一次最多寫入255個(gè)。uchar index=0;while(indataindex!=0&&index<255)/直到遇到字符串結(jié)束標(biāo)志。write_char_LC
36、D1602(indataindex);index+; void cursor_show_LCD1602() /打開(kāi)顯示屏并顯示閃爍的光標(biāo)。write_command_LCD1602(0x0f);void cursor_hide_LCD1602() /隱藏光標(biāo)write_command_LCD1602(0x0c);void clear_LCD1602() /清屏。while(get_status_LCD1602()&0x80);/等待空閑狀態(tài)。write_command_LCD1602(0x01);Delay_Ms_LCD1602(50);void init_LCD1602() /初始化
37、液晶write_command_LCD1602(0x38);/設(shè)置顯示模式。write_command_LCD1602(0x80);/光標(biāo)初始位置。write_command_LCD1602(0x0f);/打開(kāi)顯示屏并顯示閃爍的光標(biāo)。write_command_LCD1602(0x06);/輸入數(shù)據(jù)后光標(biāo)自動(dòng)向后移。cursor_hide_LCD1602();/隱藏光標(biāo)。*/void LCD_gotoxy(uchar x, uchar y) x &= 0x1; /限制x不能大于1,y不能大于15 y &= 0xF; if(!x)write_command_LCD1602(0x8
38、0|y); else write_command_LCD1602(0xC0|y);/*/void write_number(uint num,uchar n) uchar a; /個(gè)位 uchar b; /十位 uchar c; /百位 uchar d; /千位uchar e; /萬(wàn)位 switch(n) case 1:write_char_LCD1602(numbernum); break; case 2:b=num/10; a=num%10; write_char_LCD1602(numberb); write_char_LCD1602(numbera); break; case 3:c=
39、num/100; b=num%100/10; a=num%10; write_char_LCD1602(numberc); write_char_LCD1602(numberb); write_char_LCD1602(numbera); break; case 4:d=num/1000; c=num%1000/100; b=num%1000%100/10; a=num%10; write_char_LCD1602(numberd); write_char_LCD1602(numberc); write_char_LCD1602(numberb); write_char_LCD1602(num
40、bera);break; case 5:e=num/10000; d=num%10000/1000; c=num%1000/100;b=num%1000%100/10; a=num%10; write_char_LCD1602(numbere); write_char_LCD1602(numberd); write_char_LCD1602(numberc); write_char_LCD1602(numberb); write_char_LCD1602(numbera); break; #endif(3)溫度傳感器模塊/*函數(shù)功能:?jiǎn)我?8B20驅(qū)動(dòng) *環(huán)境:TA89S52 晶振:12M *
41、版本:V1.0 測(cè)試通過(guò)(負(fù)溫度未測(cè)試) *By Andy 2008-5-23 copyright: */#ifndef DS18B20_H#define DS18B20_H#include <string.h>#include <intrins.h>#include <math.h>typedef unsigned char byte;typedef unsigned int word;/*DS18B20溫度定義部分×*/sbit DQ=P10; /18B20 接口bit flag_minus=0;word temp_data3;/*函數(shù)列表*/
42、void adjust_res(char res); /res 分別等于 0x1f, 0x3f, 0x5f溫度讀數(shù)分辨率分別對(duì)應(yīng)byte ow_reset(void);byte read_byte(void);void write_byte(char val);word Read_Temperature(void);/*void DS18B20_delay(word useconds) for(;useconds>0;useconds-); /延時(shí)8×7byte ow_reset(void) /復(fù)位byte presence; DQ = 0; /拉低總線 DS18B20_delay(29); / 保持 480us 29 DQ = 1; / 釋放總線 DS18B20_delay(3); / 等待回復(fù) presence = DQ; / 讀取信號(hào) DS18B20_delay(25); / 等待結(jié)束信號(hào) return(presence); / 返回 0:正常 1:不存在 /*byt
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024個(gè)人珠寶買賣合同范本
- 2024年度版權(quán)質(zhì)押合同:含版權(quán)內(nèi)容、質(zhì)押價(jià)值、質(zhì)權(quán)實(shí)現(xiàn)
- 旅游推廣合作合同實(shí)例
- 攝影棚居間服務(wù)合同樣本
- 房屋銷售合同模板手冊(cè)
- 樂(lè)團(tuán)合作合同范本大全
- 電子郵件服務(wù)租用協(xié)議
- 2024家教公司與兼職教師合作合同范本
- 企業(yè)房屋租賃合同范本
- 2024保密合同樣書范文
- 期末測(cè)試卷(試題)-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 2024至2030年中國(guó)手機(jī)配件產(chǎn)業(yè)需求預(yù)測(cè)及發(fā)展趨勢(shì)前瞻報(bào)告
- 2024年小學(xué)閩教版全冊(cè)英語(yǔ)詞匯表
- 課題開(kāi)題匯報(bào)(省級(jí)課題)
- 清真食品安全管理制度
- 學(xué)校心理健康教育合作協(xié)議書
- 2024江蘇省沿海開(kāi)發(fā)集團(tuán)限公司招聘23人(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
- 2024年初級(jí)社會(huì)體育指導(dǎo)員(游泳)技能鑒定考試題庫(kù)(含答案)
- 湖北省危險(xiǎn)廢物監(jiān)管物聯(lián)網(wǎng)系統(tǒng)管理計(jì)劃填報(bào)說(shuō)明
- Unit6ADayintheLife教學(xué)設(shè)計(jì)2024-2025學(xué)年人教版(2024)英語(yǔ)七年級(jí)上冊(cè)
- 2024年個(gè)人勞務(wù)承包合同書
評(píng)論
0/150
提交評(píng)論