基于51單片機倒車雷達系統(tǒng)方案_第1頁
基于51單片機倒車雷達系統(tǒng)方案_第2頁
基于51單片機倒車雷達系統(tǒng)方案_第3頁
基于51單片機倒車雷達系統(tǒng)方案_第4頁
基于51單片機倒車雷達系統(tǒng)方案_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、. . . . 基于超聲波的倒車雷達系統(tǒng)電子0601靈光 電子0602建標,永根摘 要隨著科技的發(fā)展,人們生活水平的提高,城市發(fā)展建設加快,城市給交通系統(tǒng)也有較大發(fā)展,其狀況不斷改善。但是,由于多種原因合成時間住的許多不可預見因素,城市還是經常出現(xiàn)大量的交通事故,特別是倒車時,看不到后方而導致大量的交通事故。因此,設計出好的倒車雷達系統(tǒng),對于減少城市的交通事故將有一個很好的控制作用。當然這要求倒車雷達系統(tǒng),具有精度高,抗干擾強,價格應該低,適宜推廣等特點,這樣基于超聲波的測距系統(tǒng),完全可以勝任此任務。本設計采用以AT89C51單片機為核心的低成本、高精度、微型化數(shù)字顯示超聲波測距儀的硬件電路和

2、軟件設計方法。整個電路采用模塊化設計,由主程序、發(fā)射子程序、接收子程序、顯示子程序等模塊組成。各探頭的信號經單片機綜合分析處理,實現(xiàn)超聲波測距儀的各種功能。在此基礎上設計了系統(tǒng)的總體方案,最后通過硬件和軟件實現(xiàn)了各個功能模塊。該設計設抗干擾能力較好,實時性良好,誤差可以達到mm級,可以有效地解決汽車倒車作用。本系統(tǒng)在倒車時不斷測量汽車尾部與其后面障礙物的距離,并隨時顯示其距離,并用語音與時提示。在不同的距離圍,不同的溫度下測出距離,發(fā)出報警信號,以提高汽車倒車時的安全性的儀器。目錄第一章 緒論 31.1 課題背景,目的和意義31.2兩種常用的超聲波測距方案3第2章 超聲波測距系統(tǒng)設計32.1

3、超聲波測距的原理42.2超聲波測距系統(tǒng)電路的設計42.2.1 總體設計方案 42.2.2發(fā)射電路的設計 42.2.3接收電路的設計 42.2.4顯示模塊的設計 52.2.5 溫度補償模塊設計52.2.6 語音處理模塊5第三章 超聲波測距系統(tǒng)的軟件設.53.1總體流程圖 .53.2 程序與分析 .6第四章 電路調試與誤差分析.74.1電路的調試 .74.2系統(tǒng)的誤差分析 .7第5章 功能擴展7參考文獻 .7附錄:8-22第1章 緒論1.1 課題背景,目的和意義 由于社會的進步,經濟的發(fā)展和生活水平的不斷提高,汽。車數(shù)量逐年增長,造成道路交通擁擠不堪,交通事故頻繁發(fā)生汽車倒車報警器:在倒車時不斷測

4、量汽車尾部與其后面障礙物的距離,并隨時顯示其距離,并用語音與時提示。在不同的距離圍,不同的溫度下測出距離,發(fā)出報警信號,以提高汽車倒車時的安全性的儀器。2.2兩種常用的超聲波測距方案2.2.1基于CPLD的超聲波測距系統(tǒng) CPLD模塊主要由發(fā)射模塊,16位計時計數(shù)器模塊,接收模塊,順序執(zhí)行計數(shù)器模塊和六選一數(shù)據(jù)選擇器模塊五部分組成。其總體框圖如圖1所示。CPLD模塊主要完成超聲波的發(fā)射、接收和時間的測量。超聲波發(fā)射模塊啟動40KHz的超聲波發(fā)射,當發(fā)射脈沖串達到設定值后,關閉超聲波的發(fā)射,同時啟動六路計時計數(shù)器模塊開始計時;信號經過障礙物反射回來,接收電路接收到回波后,將其進行整形,作為接收模

5、塊的信號,當接收完回波脈沖信號后,接收模塊輸出端發(fā)出信號,關閉計時計數(shù)器停止工作;當所有的回波接收完畢后,順序執(zhí)行計數(shù)器輸出端發(fā)出信號啟動單片機開始接收數(shù)據(jù),通過順序執(zhí)行計數(shù)器的計數(shù)值、數(shù)據(jù)選擇器的選擇端與計時計數(shù)器的控制端分別讀取六路不同的計數(shù)值。所有的數(shù)據(jù)讀取完后,清除計時計數(shù)器的計數(shù)值,準備下一次的循環(huán)計數(shù)。2.2.1基于單片機的超聲波測距系統(tǒng) 本警器由單片機來控制。整個控制系統(tǒng)由超聲波發(fā)射電路、超聲波接收電路、報警電路、復位電路、顯示電路組成。實行實時數(shù)字顯示測得的距離,在不同的距離圍發(fā)出不同的報警信號,駕駛員可根據(jù)個人需要調整設置報警距離,以減少事故的發(fā)生。本作品將采用此種方法。第二

6、章 超聲波測距系統(tǒng)設計 2.1 超聲波測距的原理 超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。超聲波在空氣中的傳播速度為c,根據(jù)計時器記錄的時間t,就可以計算出發(fā)射點距障礙物的距離(s),即:s=ct/2 。這就是所謂的時間差測距法。2.2超聲波測距系統(tǒng)電路的設計 2.2.1 總體設計方案 該設計總體基于51,包括發(fā)射模塊,接收模塊,顯示模塊,語音模塊,溫度補償模塊。由發(fā)射電路發(fā)射超聲波,51計數(shù)器從0開始計時,當超聲波反射回來,接收電路接收,51停止計時,將所計得得數(shù)轉化成十進制n,因為使用

7、的12MHz晶體作時鐘基準的89C51單片機定時器能方便的計數(shù)到1s的精度,因此系統(tǒng)采用89C51定時器能保證時間誤差在1mm的測量圍。,則將n與1us相乘即可以得到時間,從而利用超聲波測距的原理就可以判斷距離以是否利用利用凌陽61版的語音處理功能,進行報警與播放當前的距離,溫度和超聲波傳播速度。再者顯示器也將顯示距離,溫度,與超聲波傳播速度。2.2.2發(fā)射電路的設計 用單片機直接產生的40khz信號經過74ls04放大后直接驅動超聲波發(fā)射探頭。2.2.3接收電路的設計 將超聲波接收探頭接收的信號經cx20106紅外線專用芯片處理接收,然后送給單片機。2.2.4顯示模塊的設計 使用1602液晶

8、屏,與單片機連接,將單片機的距離,溫度,超聲波數(shù)度(聲速)傳送給液晶屏顯示出來。2.2.5 溫度補償模塊設計 因為聲速在不同溫度下的傳播速度是不同的,根據(jù)補償公式C=C0+0.607×TC0為零度時的聲波速度332m/s;T為實際溫度()。采用18b20溫度傳感器測溫,根據(jù)測得的溫度,來確定具體的聲速。2.2.6 語音處理模塊 根據(jù)手中的現(xiàn)有的材料,利用凌陽61版的語音處理功能,播放出:“倒車請注意”并通過51單片機和凌陽的串口通訊,將51測得的距離,溫度,聲速數(shù)據(jù)傳給凌陽,然后通過凌陽的語音處理將其播報出來。第三章 超聲波測距系統(tǒng)的軟件設計 3.1總體流程圖3.1.1凌陽模塊流程圖

9、3.1.2 51單片機模塊3.2 程序與分析(見附錄)第4章 電路調試與誤差分析 5.1電路的調試(盲區(qū)問題)由于超聲波發(fā)射探頭在發(fā)射超聲波時,接受探頭也會接受到超聲波,所以在發(fā)射超聲波時,必須先關外部中斷,延時一段時間,進而消除回波干擾,所以在測量中會有盲區(qū)出現(xiàn),所以硬件調試中主要的就是調節(jié)延時時間,使盲區(qū)達到最小,進而跳高測量的精度。通過硬件調試,來控制發(fā)射脈沖波的個數(shù)以與延時時間,并在實際測量中測出三種不同測距模式下的盲區(qū),分別約為5cm,20cm與45cm。、 5.2系統(tǒng)的誤差分析 28根據(jù)超聲波測距公式L=C×T,可知測距的誤差是由超聲波的傳播速度誤差和測量距離傳播的時間誤

10、差引起的。1.時間誤差當要求測距誤差小于1mm時,假設已知超聲波速度C=344m/s (20室溫),忽略聲速的傳播誤差。測距誤差st<(0.001/344) 0.000002907s 即2.907ms。在超聲波的傳播速度是準確的前提下,測量距離的傳播時間差值精度只要在達到微秒級,就能保證測距誤差小于1mm的誤差。使用的12MHz晶體作時鐘基準的89C51單片機定時器能方便的計數(shù)到1s的精度,因此系統(tǒng)采用89C51定時器能保證時間誤差在1mm的測量圍。2.超聲波傳播速度誤差超聲波的傳播速度受空氣的密度所影響,空氣的密度越高則超聲波的傳播速度就越快.第5章 功能擴展通過串口與PC機進行通訊,

11、并利用所學知識,用VB寫了了一個接受模塊,將51單片機中的數(shù)據(jù)經串口傳到電腦上顯示。參考文獻 33單片機原理與控制技術 機械工業(yè)數(shù)字電子技術教程 清華大學模擬電子技術教程 清華大學胡萍.超聲波測距儀的研制.計算機與現(xiàn)代化時德剛,嘩.超聲波測距的研究.計算機測量與控制hi.baidu./mgjqr/blog/item/63c5bd1e5346c164f624e4b8.html 超聲波測距原理附錄:/主文件程序main/3.2.1超聲波測距#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; /超聲波傳輸時間 uchar ucFlag; /中斷標志位uchar frq;/音樂頻率節(jié)拍問題float c; /不同溫度下的超聲波傳播速度/*針腳定義*/sbit Hz40k_out=P36; /40k信號輸出端sbit Mod_short=P14;sbit Mod

13、_long=P15;sbitMod_out = P17;/ 判斷數(shù)據(jù)是發(fā)給電腦機還是凌陽版sbit Key_tran=P16; /發(fā)送數(shù)據(jù),開始通訊/*/*函數(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(); /距離轉換函數(shù)float Compensate_c(); /溫度補償函數(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位計數(shù)EA=0; /關總中斷ET0=0; /關T0中斷TR0=0; /停止計時器0TH0=0X00;TL0=0X00; /void Int0_int(void)IT0=0; /低電平沿觸發(fā)EA=0; /關總中斷EX0=0; /屏蔽中斷/void Ustart_

15、int(void)SCON |= 0x50; /串口方式1,允許接收TMOD |= 0x20; /定時器1定時方式2/TCON = 0x40; /設定時器1開始計數(shù)TH1 = 0xF3;/12MHz 2400波特率TL1 = 0xF3; TR1 = 0; /關閉定時器 /void Ustart_send_lingyang(void) uchar send3; uint Voice_v; send0=Distance_count(); send1=Distance_count()>>8; TR1 = 1; /啟動定時器 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ā)送的為實際溫度的十倍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(); /將浮點型轉換為整型 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;/關閉定時器 /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; /啟動定時器 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ā)送的為實際溫度的十倍 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(); /將浮點型轉換為整型 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;/關閉定時器 void Key_scan(void)Key_tran=1;/寫1準備開始讀 if(Key_tran=0) delay_ms(10);while(!Key_tran) ;/等待按鍵放開if (Mod_out=1)Ustart_send_lingyang(); els

21、eUstart_send_pc(); /void Send_40khz_short(void)/從P1.0發(fā)出40KHz的脈沖 短波測量短距離uchar n,p;for(n=0;n<1;n+) /輸出1個脈沖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的脈沖 中波 測量中距離uchar n,p;for(n=0;n<2;n+) /輸出2個脈沖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的脈沖長波測量長距離uchar n,p;for(n=0;n<40;n+) /輸出40個脈沖Hz40k_out=1;for(p=0;p<3;p+);Hz40k_out=0;for(p=0;p<2;p+);Hz40k_out=0;/ float Compensate_c()/溫度補償公式 c= 331.45+0.607*Read_Temperature()/100; return c; /int Distance

23、_count()/距離計算函數(shù)float Temp;Temp=ucHigh_time*256+ucLow_time-96;/96為實際調試中距離的調整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;/外部中斷標志位TR0=0;/關定時器0ET0=0;/屏蔽定時器0中斷EX0=0;/關外部中斷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溢出為無效測量FFF;ucFlag=2;/溢出標志位 TR0=0;/關定時器0 ET0=0;/屏蔽定時器0中斷EX0=0;/屏蔽外部中斷/*主程序*/void main(void)Tmr0_int();Int0_int();Ustart_int(); /串口通訊初始化init_LCD1602() ;EA=1; /開總中斷 while(1) PX0=1; /設置外部0中斷優(yōu)先級為最高TH0=0;TL0=0;/清定時0TR0=1;/開定時0ET0=1;/開啟定時器0中斷if(Mod_long=0)Send_40khz_long();/發(fā)射40khz脈沖 測量長距離delay_ms(1

29、); /1msdelay_us(80); / 0.724ms 防回波干擾 總延時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脈沖 測量中距離delay_us(127);/ 防回波干擾 1.157ms延時 /總延時1.157+0.05=1.207ms /盲區(qū):1.207*170=205.19mmif(Mod_short=0) Send_40khz_short();/發(fā)射40khz脈沖 測量短距離 EX0=1; /開啟int0中

30、斷Display_dis( ); /距離顯示Display_tem(); /溫度顯示Display_c(); /聲速顯示/*Tmr1_int(); 音樂播放 delay_ms(200);delay_ms(200);/delay_ms(200);ET1=0; /關tmr1中斷 關閉音樂,避免開音樂是中斷太頻繁,引起測溫和測距離都不準確 */ / delay_ms(200); delay_ms(200); Key_scan(); /掃描按鍵判斷是否要發(fā)送數(shù)據(jù)與凌陽版通訊 (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"/用來顯示數(shù)據(jù)#define Port P2sbit RS_LCD1602=P11;sbit RW_LCD1602=P12;sbit EN_LCD1602=P13;void Delay_Ms_LCD1602(uint ms)/延時程序(以毫秒為單位)。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)/設置光標的行(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個字符。CGA_Index=CGA_Index<<3;/決定CGARAM相對地址。for(index=0;index<8;index+)/設置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)/從當位置開始寫入指定長度(lenght)的字符串(indata)。/一次最多寫入255個。uchar index=0;while(indataindex!=0&&index<255)/直到遇到字符串結束標志。write_char_LC

36、D1602(indataindex);index+; void cursor_show_LCD1602() /打開顯示屏并顯示閃爍的光標。write_command_LCD1602(0x0f);void cursor_hide_LCD1602() /隱藏光標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);/設置顯示模式。write_command_LCD1602(0x80);/光標初始位置。write_command_LCD1602(0x0f);/打開顯示屏并顯示閃爍的光標。write_command_LCD1602(0x06);/輸入數(shù)據(jù)后光標自動向后移。cursor_hide_LCD1602();/隱藏光標。*/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; /個位 uchar b; /十位 uchar c; /百位 uchar d; /千位uchar e; /萬位 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ù)功能:單一18B20驅動 *環(huán)境:TA89S52 晶振:12M *

41、版本:V1.0 測試通過(負溫度未測試) *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ù)分辨率分別對應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-); /延時8×7byte ow_reset(void) /復位byte presence; DQ = 0; /拉低總線 DS18B20_delay(29); / 保持 480us 29 DQ = 1; / 釋放總線 DS18B20_delay(3); / 等待回復 presence = DQ; / 讀取信號 DS18B20_delay(25); / 等待結束信號 return(presence); / 返回 0:正常 1:不存在 /*byt

溫馨提示

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

評論

0/150

提交評論