




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
10一、總體方案的設(shè)計與選擇數(shù)字溫度計的設(shè)計標(biāo)準(zhǔn)與要求1、設(shè)計溫度測量電路;2、測量范圍為-40℃~60℃;30.01℃4、制作并調(diào)試所設(shè)計電路;5、把握數(shù)字電路的設(shè)計及調(diào)試方法;系統(tǒng)根本方案DS18B20為傳感器的溫度檢測模AT89S51溫度采集信號轉(zhuǎn)換模塊液晶顯示模塊溫度采集信號轉(zhuǎn)換模塊液晶顯示模塊方案的爭論與選擇方案一:承受二極管做溫度傳感器PNPN在溫度每上升1℃時,下降-2mV,利用這種特性,一般可以直接承受二極管〔如玻璃封裝1N4148〕或承受硅三極管〔可將集電極和基極短接〕接成二極管來做PN0.2—2測溫范圍為-50—+150℃。典型的溫度曲線如圖1所示。同型號的二極管或三極管特性不完全一樣,因此它們的互換性較差。LM35做溫度傳感器LM35是一種得到廣泛使用的溫度傳感器。芯片從電源吸取的電流幾乎是不變的〔約50μ適合,比方在電池供電的場合中,輸出可以由第三個引腳取出,根本無需校準(zhǔn)。在使用單一電源時,LM35的一個缺點是無法指示低至零度的溫度。據(jù)稱利用LM35可測出20mV的電壓,這一值相當(dāng)于℃〔一些狀況下甚至可測出0~2mV示零度或更低的溫度時,還需一個負(fù)電源和一只下拉電阻。而且精度不夠。DS18B20DS18B20數(shù)字溫度計是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡潔,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡潔,在一根通信線,可以掛很多這樣的數(shù)字溫度計,格外便利。DS18B20產(chǎn)品的特點:、只要求一個端口即可實現(xiàn)通信。、在DS18B20中的每個器件上都有獨一無二的序列號。、實際應(yīng)用中不需要外部任何元器件即可實現(xiàn)測溫。、測量溫度范圍在-55。C125。C、數(shù)字溫度計的區(qū)分率用戶可以從9位到12位選擇。、內(nèi)部有溫度上、下限告警設(shè)置。通過比較和對本次設(shè)計要求的的考慮,打算承受方案三用可編程器件DS18B20做溫度傳感器。二、DS18B20該產(chǎn)品承受美國DALLAS公司生產(chǎn)的DS18B20可組網(wǎng)數(shù)字溫度傳感器芯片封裝而成,具有耐磨耐碰,體積小,使用便利,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫順控制領(lǐng)域。DS16241、無需外圍元件即可測量溫度2、測量范圍為-55℃~+125℃,0.03125℃3、測量結(jié)果以9~1243~5V/DCDS18B20引腳定義:DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端〔在寄生電源接線方式時接地〕。2.3.DS18B20內(nèi)部構(gòu)造圖2.4DS18B20的讀寫時序和測溫原理與DS1820一樣只是得到的溫度值的位數(shù)因區(qū)分率不同而不同,且溫度轉(zhuǎn)換時的延時時間由 2s減為750ms。DS18B20測溫原理如圖3所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯轉(zhuǎn)變,所產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。計數(shù)器1和溫度存放器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)展減法計數(shù),當(dāng)計數(shù)器1的預(yù)置值減到0時,溫度存放器的值將加1,計數(shù)器1的預(yù)置將重被裝入,計數(shù)器1重開頭對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)展計數(shù),如此循環(huán)直到計數(shù)器2計數(shù)到0時,停頓溫度存放器值的累加,此時溫度存放器中的數(shù)值即為所測溫度。圖3中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預(yù)置值。DS18B20溫度值格式表這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,假設(shè)測得的溫度大于 0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;假設(shè)溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H-25.0625℃的數(shù)字輸出為FE6FH-55℃的數(shù)字輸FC90H。DS18B20三、LCD1602LCD1602是字符型LCD通常有1416條引腳線的LCD2條線VCC(15腳)GND(16腳)14腳的LCD完全一樣,定義如下表所示:LCD的引腳定:四、電路原理圖五、設(shè)計體會對于單片機(jī)的程序編寫用了很長的時間,查找了很多資料,特別是關(guān)于DS18B20的有關(guān)資料以及液晶顯示的資料等各種材料。我畫出了初步的原理圖,但是覺得不夠抱負(fù),太麻煩,所以又查詢了相關(guān)的資料,最終間,自己設(shè)計并制作的歡快,獲益匪淺!六、程序#include<reg52.h>#include<intrins.h>unsignedcharcodedigit[11]={“0123456789-“};unsignedcharcodeStr[]={“081802Yong“};unsignedcharcodeError[]={“DS18B20ERROR“};unsignedcharcodeError1[]={“PLEASE CHECK“};unsignedcharcodeTemp[]={“wendu:“};unsignedcharcodeCent[]={“C“}; //溫度單位unsignedcharflag,tltemp; //負(fù)溫度標(biāo)志和臨時暫存變量sbitRS=P2^0; //存放器選擇位,將RS位定義為P2.0引腳sbitRW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳sbitE=P2^2; //使能信號位,將E位定義為P2.2引腳sbitBF=P0^7; //勞碌標(biāo)志位,將BF位定義為P0.7引腳voiddelay1ms{unsignedchari,j;for(i=0;i<4;i++)for(j=0;j<33;j++);}voiddelaynms(unsignedcharn){unsignedchari;for(i=0;i<n;i++)delay1ms;}bitBusyTest(void){bitresult;RS=0; //依據(jù)規(guī)定,RS為低電平,RW為高電尋常,可以讀狀態(tài)RW=1;E=1; //E=1,才允許讀寫_nop_; //空操作_nop_;_nop_;_nop_; //空操作四個機(jī)器周期,給硬件反響時間result=BF; //將勞碌標(biāo)志電平賦給resultE=0; //E恢復(fù)低電平returnresult;}voidWriteInstruction(unsignedchardictate){while(BusyTest==1); //假設(shè)忙就等待RS=0; //依據(jù)規(guī)定,RSR/W同時為低電尋常,可以寫入指令RW=0;E=0; //E置低電平(8-6,寫指令時,E為高脈沖,//就是讓E01發(fā)生正跳變,所以應(yīng)先置“0“_nop_;_nop_; //空操作兩個機(jī)器周期,給硬件反響時間P0=dictate; //將數(shù)據(jù)送入P0口,即寫入指令或地址_nop_;_nop_;_nop_;_nop_; //空操作四個機(jī)器周期,給硬件反響時間E=1; //E置高電平_nop_;_nop_;_nop_;_nop_; //空操作四個機(jī)器周期,給硬件反響時間E=0; //E由高電平跳變成低電尋常,液晶模塊開頭執(zhí)行命令}voidWriteAddress(unsignedcharx){WriteInstruction(x|0x80);//顯示位置確實定方法規(guī)定為“80H+x“}voidWriteData(unsignedchary){while(BusyTest==1);RS=1; //RS為高電平,RW為低電尋常,可以寫入數(shù)據(jù)RW=0;E=0; //E置低電平(8-6,寫指令時,E為高脈沖,//就是讓E01發(fā)生正跳變,所以應(yīng)先置“0“P0=y; //P0口,馬上數(shù)據(jù)寫入液晶模塊_nop_;_nop_;_nop_;_nop_; //空操作四個機(jī)器周期,給硬件反響時間E=1; //E置高電平_nop_;_nop_;_nop_;_nop_; //空操作四個機(jī)器周期,給硬件反響時間E=0; //E由高電平跳變成低電尋常,液晶模塊開頭執(zhí)行命令}voidLcdInitiate(void){delaynms(15); //15msLCD一段較長的反響時間WriteInstruction(0x38); //顯示模式設(shè)置:16×2顯示,5×7點陣,8位數(shù)據(jù)接口delaynms(5); //延時5ms ,給硬件一點反響時間WriteInstruction(0x38);delaynms(5); //延時5ms ,給硬件一點反響時間WriteInstruction(0x38); //連續(xù)三次,確保初始化成功delaynms(5); //延時5ms ,給硬件一點反響時間WriteInstruction(0x0c); //顯示模式設(shè)置:顯示開,無光標(biāo),光標(biāo)不閃耀delaynms(5); //延時5ms ,給硬件一點反響時間WriteInstruction(0x06); //顯示模式設(shè)置:光標(biāo)右移,字符不移delaynms(5); //延時5ms ,給硬件一點反響時間WriteInstruction(0x01); //清屏幕指令,將以前的顯示內(nèi)容去除delaynms(5); //延時5ms ,給硬件一點反響時間}sbitDQ=P3^3;unsignedchartime; //設(shè)置全局變量,特地用于嚴(yán)格延時bitInit_DS18B20(void){bitflag; //儲存DS18B20是否存在的標(biāo)志,flag=0,表示存在;flag=1,表示不存在DQ=1; //先將數(shù)據(jù)線拉高for(time=0;time<2;time++)//6微秒;DQ=0; //再將數(shù)據(jù)線從高拉低,要求保持480~960usfor(time=0;time<200;time++) //略微延時約600微秒; //以向DS18B20發(fā)出一持續(xù)480~960us的低電平復(fù)位脈沖DQ=1; //釋放數(shù)據(jù)線〔將數(shù)據(jù)線拉高〕for(time=0;time<10;time++); //延時約30us〔釋放總線后需等待15~60us讓DS18B20輸出存在脈沖〕flag=DQ; //讓單片機(jī)檢測是否輸出了存在脈沖〔DQ=0表示存在〕for(time=0;time<200;time++) //延時足夠長時間,等待存在脈沖輸出完畢;return(flag); //返回檢測成功標(biāo)志}unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat; //儲存讀出的一個字節(jié)數(shù)據(jù)for(i=0;i<8;i++){DQ=1;//先將數(shù)據(jù)線拉高_(dá)nop_;DQ=0;//等待一個機(jī)器周期//單片機(jī)從DS18B20讀書據(jù)時,將數(shù)據(jù)線從高拉低即啟動讀時序_nop_;//等待一個機(jī)器周期DQ=1;//將數(shù)據(jù)線“人為“拉高,DS18B20的輸出電平作預(yù)備for(time=0;time<2;time++); //6us15us內(nèi)采樣dat>>=1;if(DQ==1)dat|=0x80; //11datelsedat|=0x00;//00dat//將單片機(jī)檢測到的電平信號DQ存入r[i]for(time=0;time<8;time++); //3us,1us的恢復(fù)期}return(dat); //返回讀出的十六進(jìn)制數(shù)據(jù)}WriteOneChar(unsignedchardat){unsignedchari=0;for(i=0;i<8;i++){DQ=1; //先將數(shù)據(jù)線拉高_(dá)nop_; //等待一個機(jī)器周期DQ=0; //將數(shù)據(jù)線從高拉低時即啟動寫時序DQ=dat&0x01; //利用與運算取出要寫的某位二進(jìn)制數(shù)據(jù),//并將其送到數(shù)據(jù)線上等待DS18B20采樣for(time=0;time<10;time++);//30us,DS18B2015~60us期間從數(shù)據(jù)線上采樣DQ=1; //釋放數(shù)據(jù)線for(time=0;time<1;time++);//3us,1us的恢復(fù)期dat>>=1; //dat1位}for(time=0;time<4;time++);//稍作延時,給硬件一點反響時間}voidReadyReadTemp(void){Init_DS18B20; //DS18B20初始化WriteOneChar(0xCC);//跳過讀序號列號的操作WriteOneChar(0x44);//啟動溫度轉(zhuǎn)換delaynms(200);//轉(zhuǎn)換一次需要延時一段時間Init_DS18B20; //DS18B20初始化WriteOneChar(0xCC);//跳過讀序號列號的操作WriteOneChar(0xBE);//讀取溫度存放器,前兩個分別是溫度的低位和高位}voiddisplay_error(void){unsignedchari;WriteAddress(0x00); //11列開頭顯示i=0; //從第一個字符開頭顯示while(Error[i]!=”\0”) //只要沒有寫到完畢標(biāo)志,就連續(xù)寫{的說明
WriteData(Error[i]); //將字符常量寫入LCDi++; //指向下一個字符delaynms(100); //100ms}WriteAddress(0x40); //11列開頭顯示i=0; //從第一個字符開頭顯示while(Error1[i]!=”\0”) //只要沒有寫到完畢標(biāo)志,就連續(xù)寫{的說明
WriteData(Error1[i]); //將字符常量寫入LCDi++; //指向下一個字符delaynms(100); //100ms}while(1) //進(jìn)入死循環(huán),等待查明緣由;}voiddisplay_explain(void){unsignedchari;WriteAddress(0x00); //11列開頭顯示i=0; //從第一個字符開頭顯示while(Str[i]!=”\0”) //只要沒有寫到完畢標(biāo)志,就連續(xù)寫{的說明}
WriteData(Str[i]); //將字符常量寫入LCDi++; //指向下一個字符delaynms(100); //100ms}voiddisplay_symbol(void){unsignedchari;WriteAddress(0x40); //21列開頭顯示i=0; //從第一個字符開頭顯示while(Temp[i]!=”\0”) //只要沒有寫到完畢標(biāo)志,就連續(xù)寫{WriteData(Temp[i]); //將字符常量寫入LCDi++; //指向下一個字符delaynms(50); //1ms給硬件一點反響時間}}void display_dot(void){WriteAddress(0x49); //210列開頭顯示W(wǎng)riteData(”.”); //將小數(shù)點的字符常量寫入LCDdelaynms(50); //延時1ms給硬件一點反響時間}void display_cent(void){unsignedchari;WriteAddress(0x4c); //213列開頭顯示i=0; //從第一個字符開頭顯示while(Cent[i]!=”\0”) //只要沒有寫到完畢標(biāo)志,就連續(xù)寫{WriteData(Cent[i]); //將字符常量寫入LCDi++; //指向下一個字符delaynms(50); //1ms給硬件一點反響時間}}voiddisplay_temp1(unsignedcharx){unsignedcharj,k,l; //j,k,l分別儲存溫度的百位、十位和個位j=x/100; //取百位k=(x%100)/10; //取十位l=x%10; //取個位WriteAddress(0x46); //寫顯示地址,27列開頭顯示if(flag==1) //負(fù)溫度時顯示“—”{WriteData(digit[10]); //將百位數(shù)字的字符常量寫入LCD}else{WriteData(digit[j]); //將十位數(shù)字的字符常量寫入LCD}WriteData(digit[k]);//將十位數(shù)字的字符常量寫入LCDWriteData(digit[l]);//將個位數(shù)字的字符常量寫入LCDdelaynms(50); //延時1ms給硬件一點反響時間}voiddisplay_temp2(unsignedcharx){unsignedchara,b,c;a=x;b=x*100%10;WriteAddress(0x4a); //寫顯示地址,211列開頭顯示W(wǎng)riteData(digit[a]);WriteData(digit[b]); //將小數(shù)局部的第一位數(shù)字字符常量寫入LCDdelaynms(50); //延時1ms給硬件一點反響時間}voidmain(void){unsignedcharTL; //儲存暫存器的溫度低位unsignedcharTH; //儲存暫存器的溫度高位unsignedch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分享成功人士的工作習(xí)慣計劃
- 《貴州圖南礦業(yè)(集團(tuán))有限公司興仁市下山鎮(zhèn)四海煤礦(變更)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評審意見
- 《福泉市鵬盛礦業(yè)有限責(zé)任公司貴州省福泉市陸坪鎮(zhèn)大沙壩鋁土礦(變更)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》專家組評審意見
- 人教版初中七年級下冊歷史與社會 5.1.1遼闊的疆域 教學(xué)設(shè)計
- 財政與金融基礎(chǔ)知識課件
- 第二十五教時小結(jié)本單元內(nèi)容-俗稱“加法定理”教學(xué)實錄
- 2025年沈陽道路貨運駕駛員從業(yè)資格證考試題庫
- 2025年長治a2貨運從業(yè)資格證考試
- 2025年淮南從業(yè)資格證應(yīng)用能力考些啥
- 2025年常德貨運從業(yè)資格證考試模擬考試
- XX省血液調(diào)配管理辦法
- 科創(chuàng)板問題測試題庫300題試題及答案
- 微信開放平臺網(wǎng)站信息登記表
- 商業(yè)銀行員工輕微違規(guī)行為積分管理辦法
- JJG 700 -2016氣相色譜儀檢定規(guī)程-(高清現(xiàn)行)
- 壓力容器安全檢查表
- 供應(yīng)商反向評估表
- 曲線帶式輸送機(jī)的設(shè)計
- 《國際關(guān)系學(xué)入門》課件第三章 國際關(guān)系理論
- 五金公司績效考核(共22頁)
- 體育課(軍體拳)教案(共43頁)
評論
0/150
提交評論