基于單片機(jī)的數(shù)字溫度控制系統(tǒng)設(shè)計(jì)_第1頁
基于單片機(jī)的數(shù)字溫度控制系統(tǒng)設(shè)計(jì)_第2頁
基于單片機(jī)的數(shù)字溫度控制系統(tǒng)設(shè)計(jì)_第3頁
基于單片機(jī)的數(shù)字溫度控制系統(tǒng)設(shè)計(jì)_第4頁
基于單片機(jī)的數(shù)字溫度控制系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、創(chuàng)新項(xiàng)目報(bào)告項(xiàng)目名稱: 基于單片機(jī)的數(shù)字溫度控制系統(tǒng)設(shè)計(jì) 專 業(yè): 電子信息工程技術(shù) 班 級(jí): 電信141 指導(dǎo) 老師: 喬志勇 姓 名: 盧德寅 地 點(diǎn): 教學(xué)樓 時(shí) 間: 2015年12月成績(jī)?cè)u(píng)定二一六 年 一 月 十 日摘 要隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活,工作,科研,各個(gè)領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù),單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,結(jié)合不同種類的傳感器,可實(shí)現(xiàn)諸如電壓、濕度、溫度、速度、硬度、壓力等的物理量的測(cè)量。本文將介紹一種基于單片機(jī)控制理論及其應(yīng)用系統(tǒng)設(shè)計(jì)的數(shù)字溫度計(jì)。本文主要介紹了一個(gè)基于AT

2、89C51單片機(jī)的測(cè)溫系統(tǒng),詳細(xì)描述了利用數(shù)字溫度傳感器DS18B20開發(fā)測(cè)溫系統(tǒng)的過程,重點(diǎn)對(duì)傳感器在單片機(jī)喜愛的硬件連接,軟件編程以及各模塊系統(tǒng)流程進(jìn)行了詳盡分析,對(duì)各部分的電路也進(jìn)行一一介紹,該系統(tǒng)可以方便的是實(shí)現(xiàn)溫度采集和顯示,并可以根據(jù)需要任意設(shè)定上下限報(bào)警溫度,它使用起來方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優(yōu)點(diǎn),適合我們?nèi)粘I詈凸まr(nóng)業(yè)生產(chǎn)中的溫度測(cè)量,也可以當(dāng)做溫度處理模塊嵌入其他系統(tǒng)中,作為其他主系統(tǒng)的輔助擴(kuò)展。DS18B20和AT89C51結(jié)合實(shí)現(xiàn)最簡(jiǎn)溫度檢測(cè)系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,抗干擾能力強(qiáng),適合與惡劣環(huán)境下進(jìn)行現(xiàn)場(chǎng)溫度測(cè)量,有廣泛的應(yīng)用前景。本設(shè)計(jì)首先是確

3、定目標(biāo),氣候是各個(gè)功能模塊的設(shè)計(jì),再在Proteus軟件上進(jìn)行仿真,修改,仿真。本溫度計(jì)屬于多功能溫度計(jì),可以設(shè)置上下報(bào)警溫度,當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以報(bào)警,同時(shí)根據(jù)設(shè)定的溫度范圍通過升降溫電路控制環(huán)境的溫度達(dá)到恒溫效果。 【關(guān)鍵詞】 單片機(jī),數(shù)字控制,溫度計(jì), DS18B20,STC89C52RC目錄第1章 緒 論11研究意義及背景12設(shè)計(jì)目的13主要工作1第2章 系統(tǒng)概述21系統(tǒng)方案22系統(tǒng)組成2第3章 系統(tǒng)硬件設(shè)計(jì)31 AT89S52單片機(jī)的介紹32顯示電路43 DS18B20介紹63.1溫度傳感器測(cè)溫原理74系統(tǒng)工作原理75系統(tǒng)整體電路8第4章 系統(tǒng)軟件設(shè)計(jì)91主程序設(shè)計(jì)92 DS

4、18B20初始化103 DS18B20溫度傳感器與單片機(jī)的接口電路124數(shù)碼管顯示與單片機(jī)對(duì)接145仿真結(jié)果166總程序19第五章 實(shí)物圖30總 結(jié)31第1章 緒 論1研究意義及背景隨著新技術(shù)的不斷開發(fā)與應(yīng)用,近年來單片機(jī)發(fā)展十分迅速,一個(gè)以微機(jī)應(yīng)用為主的新技術(shù)革命浪潮正在蓬勃興起,單片機(jī)的應(yīng)用已經(jīng)滲透到電力、冶金、化工、建材、機(jī)械、食品、石油等各個(gè)行業(yè)。傳統(tǒng)的溫度采集方法不僅費(fèi)時(shí)費(fèi)力,而且精度差,單片機(jī)的出現(xiàn)使得溫度的采集和數(shù)據(jù)處理問題能夠得到很好的解決。本設(shè)計(jì)使用單片機(jī)作為核心進(jìn)行控制。單片機(jī)具有集成度高,通用性好,功能強(qiáng),特別是體積小,重量輕,耗能低,可靠性高,抗干擾能力強(qiáng)和使用方便等獨(dú)

5、特優(yōu)點(diǎn),在數(shù)字化、智能化方面有廣泛的用途。2設(shè)計(jì)目的1. 溫度顯示基本范圍1030。2. 精度誤差小于0.01。3. 所測(cè)溫度值由LCD1602液晶顯示屏顯示。4. 可以設(shè)定溫度的上下限控制及報(bào)警功能。3主要工作本設(shè)計(jì)的研究重點(diǎn)是設(shè)計(jì)一種基于單片機(jī)的數(shù)字溫度計(jì)控制系統(tǒng)。設(shè)計(jì)采用數(shù)字溫度傳感器DS18B20,此傳感器讀取被測(cè)量溫度值,并進(jìn)行轉(zhuǎn)換。將轉(zhuǎn)換后的數(shù)據(jù)送到單片機(jī)處理,再通過LCD1602液晶顯示屏顯示出來。第2章 系統(tǒng)概述1系統(tǒng)方案數(shù)字溫度傳感器DS18B20輸出信號(hào)全數(shù)字化,便于單片機(jī)處理及控制,省去傳統(tǒng)測(cè)溫方法的很多外圍電路。且該芯片的物理性、化學(xué)性很穩(wěn)定,能用做工業(yè)測(cè)溫元件。采用5

6、1單片機(jī)控制,軟件編程的自由度大,可通過編程實(shí)現(xiàn)各種各樣的算術(shù)算法和邏輯控制,硬件實(shí)現(xiàn)簡(jiǎn)單,體積小,安裝方便。所以該系統(tǒng)利用AT89C51芯片控制溫度傳感器DS18B20進(jìn)行實(shí)時(shí)溫度檢測(cè)并顯示,能夠?qū)崿F(xiàn)快速測(cè)量環(huán)境溫度,并可根據(jù)需要設(shè)定上下限控制及報(bào)警溫度。2系統(tǒng)組成本設(shè)計(jì)是以AT89S52單片機(jī)為核心的一種數(shù)字溫度顯示控制系統(tǒng),系統(tǒng)整體硬件電路包括:采集模塊、顯示模塊、設(shè)置模塊和單片機(jī)最小系統(tǒng)模塊四大模塊組成。系統(tǒng)框圖如圖2-1所示。單片機(jī)最小系統(tǒng)顯示模塊設(shè)置模塊報(bào)警/控制模塊采集模塊 圖2-1 系統(tǒng)基本方框圖第3章 系統(tǒng)硬件設(shè)計(jì)1 AT89S52單片機(jī)的介紹AT89S52有40個(gè)引腳,4個(gè)

7、8位并行I/O口,1個(gè)全雙工異步串行口,同時(shí)內(nèi)含5個(gè)中斷源,2個(gè)優(yōu)先級(jí),2個(gè)16位定時(shí)/計(jì)數(shù)器。AT89S52的存儲(chǔ)器系統(tǒng)由4K的程序存儲(chǔ)器(掩膜ROM),和128B的數(shù)據(jù)存儲(chǔ)器(RAM)組成,具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì),使用系統(tǒng)可用USB供電。AT89S52單片機(jī)的基本組成框圖見圖3-1。圖3-1 AT89S52單片機(jī)結(jié)構(gòu)由圖3-1可見,AT89S52單片機(jī)主要由以下幾部分組成:1. CPU系統(tǒng)8位CPU,含布爾處理器;時(shí)鐘電路;總線控制邏輯。2. 存儲(chǔ)器系統(tǒng)4K字節(jié)的程序存儲(chǔ)器(ROM/EPROM/Flash,可

8、外擴(kuò)至64KB);128字節(jié)的數(shù)據(jù)存儲(chǔ)器(RAM,可再外擴(kuò)64KB);特殊功能寄存器SFR。3. I/O口和其他功能單元4個(gè)并行I/O口;2個(gè)16位定時(shí)計(jì)數(shù)器;1個(gè)全雙工異步串行口;中斷系統(tǒng)(5個(gè)中斷源,2個(gè)優(yōu)先級(jí))。2顯示電路1602液晶簡(jiǎn)介L(zhǎng)CD1602分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的 比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如圖3-2所示。圖3-2 LCD1602規(guī)格引腳功能LCD1602采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表3.1所示。表3.1 LCD1602引腳說明編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS

9、電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號(hào)14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極指令說明LCD1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表3.2所示。表3.2 LCD1602內(nèi)部控制器序號(hào)指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標(biāo)或字符移位000001S/CR/L*6置功能00001DLNF*7置字符發(fā)生存貯器

10、地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01BF計(jì)數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容3 DS18B20介紹DS18B20引腳如圖3-3所示。圖3-3 DS18B20引腳圖數(shù)字溫度傳感器DS18B20是一種新型的“一線器件”, 采用單總線的數(shù)據(jù)傳輸,其體積小,輸出信號(hào)全數(shù)字化,便于單片機(jī)處理及控制,在0100 攝氏度時(shí),其最大線形偏差小于1 攝氏度。工作電源既可以在遠(yuǎn)端引入,也可以采用寄生電源方式產(chǎn)生。多個(gè)DS18B20可以并聯(lián)到3 根或2 根線上,CPU只需一根端口線就能

11、與諸多DS18B20 通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。因此用它來組成一個(gè)測(cè)溫系統(tǒng),線路十分簡(jiǎn)單。3.1溫度傳感器測(cè)溫原理低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在55所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此

12、時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。其內(nèi)部結(jié)構(gòu)圖如圖3-4所示。圖3-4 DS18B20內(nèi)部結(jié)構(gòu)4系統(tǒng)工作原理溫度傳感器DS18B20將模擬溫度值經(jīng)過DS18B20處理后轉(zhuǎn)換為數(shù)字值,然后送到單片機(jī)中進(jìn)行數(shù)據(jù)處理,單片機(jī)將處理后的數(shù)據(jù)通過LCD1602顯示屏顯示出來,同時(shí)判斷測(cè)得的溫度和設(shè)置控制及報(bào)警的溫度限進(jìn)行比較,超過限度則通過蜂鳴器發(fā)出報(bào)警聲音。5系統(tǒng)整體電路圖3-5 系統(tǒng)電路第4章 系統(tǒng)軟件設(shè)計(jì)1主程序設(shè)計(jì)整個(gè)系統(tǒng)的功能是由硬件電路配合軟件來實(shí)現(xiàn)的,當(dāng)硬件基本定型后,軟件的功能也就基本定下來了。從軟件的功能不同可分為兩大類:一是監(jiān)控軟件(主程序),它是整個(gè)控制系統(tǒng)的核心,專門用來協(xié)調(diào)各執(zhí)

13、行模塊和操作者的關(guān)系。二是執(zhí)行軟件(子程序),它是用來完成各種實(shí)質(zhì)性的功能如測(cè)量、計(jì)算、顯示、通訊等。每一個(gè)執(zhí)行軟件也就是一個(gè)小的功能執(zhí)行模塊。這里將各執(zhí)行模塊一一列出,并為每一個(gè)執(zhí)行模塊進(jìn)行功能定義和接口定義。主程序流程見圖4-1。開始AT89S52初始化DS18B20初始化LCD1602初始化溫度是否到達(dá)設(shè)定限度Y啟動(dòng)控制以及報(bào)警N溫度在顯示范圍內(nèi)Y溫度顯示N結(jié)束圖 4-1 主程序流程圖主程序如下:void main(void)unsigned char i=0;P2=0xef;P1=0x00;BEEP=1;LCD_Initial(); /LCD 初始化Read_Temperature()

14、; /讀取溫度值writestring(1,0,"DS18B20 Alarmer"); /顯示"DS18B20 Alarmer"delayms(1000);/延時(shí)1Swritestring(0,0,"Current T= "); /顯示"Current T= "writestring(0,1," Low=10 Top=30 "); /顯示" Low=10 Top=30 "NG=0;while(1) Read_Temperature();/讀取溫度值Display_Temper

15、ature();/顯示溫度值SetFun();Alarm();2 DS18B20初始化DS18B20初始化流程圖見圖4-2。圖4-2 DS18B20初始化流程圖初始化子程序:void ds1820rst(void)/*ds1820復(fù)位*/ unsigned char x=0;DQ = 1; /DQ復(fù)位delay_18B20(4); /延時(shí)DQ = 0; /DQ拉低delay_18B20(100); /精確延時(shí)大于480usDQ = 1; /拉高delay_18B20(40); 3 DS18B20溫度傳感器與單片機(jī)的接口電路當(dāng)DS18B20處于寫存儲(chǔ)器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的

16、上拉,上拉開啟時(shí)間最大為10us。傳感器與單片機(jī)接口如圖4-3所示:圖4-3 DS18B20與單片機(jī)的接口電路uchar ds1820rd(void)/*讀數(shù)據(jù)*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /給脈沖信號(hào) dat>>=1;DQ = 1; /給脈沖信號(hào)if(DQ)dat|=0x80;delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*寫數(shù)據(jù)*/unsigned char i=0; for (i=8; i>0;

17、 i-) DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata>>=1; unsigned int Read_Temperature(void)/*讀取溫度值并轉(zhuǎn)換*/uchar a,b;ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號(hào)*/ds1820wr(0x44);/*啟動(dòng)溫度轉(zhuǎn)換*/ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號(hào)*/ ds1820wr(0xbe);/*讀取溫度*/ a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<

18、<=8;tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1;tvalue=tvalue*(0.625);/溫度值擴(kuò)大10倍,精確到1位小數(shù)CurrentT=tvalue;return(tvalue);4數(shù)碼管顯示與單片機(jī)對(duì)接如圖4-4所示。用AT89S5的P0口作為數(shù)據(jù)端口,P2.5-P2.7為液晶顯示使能控制端。P0口接上上拉電阻,拉高信號(hào)使液晶顯示。圖4-4 LCD1602顯示屏與AT89S52對(duì)接LCD1602顯示程序:void Display_Temperature()/顯示溫度u

19、char flagdat; disdata0=tvalue/1000+0x30;/百位數(shù) disdata1=tvalue%1000/100+0x30;/十位數(shù) disdata2=tvalue%100/10+0x30;/個(gè)位數(shù) disdata3=tvalue%10+0x30;/小數(shù)位 disdata4=tvalue%1+0x30; if(tflag=0) flagdat=0x20;/正溫度不顯示符號(hào) else flagdat=0x2d;/負(fù)溫度顯示負(fù)號(hào):-if(tflag=1)writeChar(10,0,flagdat);/wr_com(0x8a);wr_dat(flagdat);/顯示符號(hào)位

20、writeChar(11,0,disdata0);/wr_com(0x8b);wr_dat(disdata0);/顯示百位writeChar(12,0,disdata1);/wr_com(0x8c);wr_dat(disdata1);/顯示十位 writeChar(13,0,disdata2);/wr_com(0x8d);wr_dat(disdata2);/顯示個(gè)位 writeChar(14,0,0X2E);/wr_com(0x8e);wr_dat(0x2e);/顯示小數(shù)點(diǎn) writeChar(15,0,disdata3);/wr_com(0x8f);wr_dat(disdata3);/顯示小

21、數(shù)位writeChar(16,0,disdata4);elsewriteChar(10,0,disdata0);/wr_com(0x8a);wr_dat(disdata0);/顯示百位writeChar(11,0,disdata1);/wr_com(0x8b);wr_dat(disdata1);/顯示十位 writeChar(12,0,disdata2);/wr_com(0x8c);wr_dat(disdata2);/顯示個(gè)位 writeChar(13,0,0X2e);/wr_com(0x8d);wr_dat(0x2e);/顯示小數(shù)點(diǎn) writeChar(14,0,disdata3);/wr_

22、com(0x8e);wr_dat(disdata3);/顯示小數(shù)位writeChar(15,0,disdata4); 5仿真結(jié)果設(shè)置溫度上限為38度,溫度下限為8度。1.如圖4-5所示。此時(shí)溫度為6度,低于下限溫度,蜂鳴器實(shí)現(xiàn)報(bào)警,加溫器指示燈D3亮,表示加溫器工作。圖4-5 仿真圖12.如圖4-6所示。此時(shí)溫度為31度,超過上限溫度,蜂鳴器實(shí)現(xiàn)報(bào)警,降溫器指示燈D2亮,表示降溫器工作。圖4-6 仿真圖23.如圖4-7所示。此時(shí)溫度為26度,在所設(shè)范圍內(nèi),蜂鳴器沒有報(bào)警,說明溫度正常。圖4-7 仿真圖36總程序#include <reg52.h>#include <intri

23、ns.h>#define uint unsigned int#define uchar unsigned charsbit DQ=P23;/ds18b20與單片機(jī)連接口sbit RS=P25;sbit RW=P26;sbit EN=P27;sbit LED1=P36;sbit LED2=P37;uchar data disdata5;uint tvalue,CurrentT=0;/溫度值uchar tflag;/溫度正負(fù)標(biāo)志#define LCD_BUS P0sbit SetKey = P22;sbit UpKey = P21;sbit DnKey = P20;sbit BEEP = P

24、24;unsigned char AlarmTempLow=10,AlarmTempTop=30,Set=0,NG=0;void delayms(uint ms) /延時(shí)xx毫秒 uchar i;while(ms-) for(i=0;i<120;i+);void command(uint com) /LCD寫指令 RS=0; /RS為0 LCD_BUS=com; /裝載指令 delayms(5); /延時(shí)5ms EN=1; /LCD使能 delayms(5);/延時(shí)5ms EN=0;/LCD不使能void write_dat(uchar dat) /LCD寫數(shù)據(jù) RS=1;/RS為1 L

25、CD_BUS=dat;/裝載數(shù)據(jù) delayms(5); /延時(shí)5ms EN=1; /LCD使能 delayms(5); /延時(shí)5ms EN=0; /LCD不使能void writestring(uchar x,uchar y,uchar *s) /LCD 寫字符串 if (y = 0) command(0x80 + x); /表示第一行 else command(0xC0 + x); /表示第二行 while (*s) /判斷是否字符串的結(jié)尾 write_dat( *s); /顯示當(dāng)前字符 s +; /字符串地址加1 void writeChar(uchar x,uchar y,uchar

26、s) /LCD 寫字符串 if (y = 0) command(0x80 + x); /表示第一行 else command(0xC0 + x); /表示第二行 write_dat( s); /顯示當(dāng)前字符 void LCD_Initial()/LCD初始化 EN=0; /LCD不使能 RW=0; /RW為0 command(0x38);/發(fā)送初始化指令 command(0x0c);/發(fā)送初始化指令 command(0x06); /發(fā)送初始化指令 command(0x01); /發(fā)送初始化指令 command(0x80+0x02);/發(fā)送LCD初始位置/*DS1820程序*/void dela

27、y_18B20(unsigned int i)/延時(shí)1微秒 while(i-);void ds1820rst(void)/*ds1820復(fù)位*/ unsigned char x=0;DQ = 1; /DQ復(fù)位delay_18B20(4); /延時(shí)DQ = 0; /DQ拉低delay_18B20(100); /精確延時(shí)大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd(void)/*讀數(shù)據(jù)*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /給脈沖信號(hào)dat&

28、gt;>=1;DQ = 1; /給脈沖信號(hào)if(DQ)dat|=0x80;delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*寫數(shù)據(jù)*/unsigned char i=0; for (i=8; i>0; i-) DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata>>=1; unsigned int Read_Temperature(void)/*讀取溫度值并轉(zhuǎn)換*/uchar a,b;ds1820rst(); ds1820wr(0xcc);/*跳過讀

29、序列號(hào)*/ds1820wr(0x44);/*啟動(dòng)溫度轉(zhuǎn)換*/ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號(hào)*/ ds1820wr(0xbe);/*讀取溫度*/ a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else tvalue=tvalue+1;tflag=1;tvalue=tvalue*(0.625);/溫度值擴(kuò)大10倍,精確到1位小數(shù)CurrentT=tvalue;return(tvalue);void Disp

30、lay_Temperature()/顯示溫度uchar flagdat; disdata0=tvalue/1000+0x30;/百位數(shù) disdata1=tvalue%1000/100+0x30;/十位數(shù) disdata2=tvalue%100/10+0x30;/個(gè)位數(shù) disdata3=tvalue%10+0x30;/小數(shù)位 disdata4=tvalue%1+0x30; if(tflag=0) flagdat=0x20;/正溫度不顯示符號(hào) else flagdat=0x2d;/負(fù)溫度顯示負(fù)號(hào):-if(tflag=1)writeChar(10,0,flagdat);/wr_com(0x8a)

31、;wr_dat(flagdat);/顯示符號(hào)位writeChar(11,0,disdata0);/wr_com(0x8b);wr_dat(disdata0);/顯示百位writeChar(12,0,disdata1);/wr_com(0x8c);wr_dat(disdata1);/顯示十位 writeChar(13,0,disdata2);/wr_com(0x8d);wr_dat(disdata2);/顯示個(gè)位 writeChar(14,0,0X2E);/wr_com(0x8e);wr_dat(0x2e);/顯示小數(shù)點(diǎn) writeChar(15,0,disdata3);/wr_com(0x8f

32、);wr_dat(disdata3);/顯示小數(shù)位writeChar(16,0,disdata4);elsewriteChar(10,0,disdata0);/wr_com(0x8a);wr_dat(disdata0);/顯示百位writeChar(11,0,disdata1);/wr_com(0x8b);wr_dat(disdata1);/顯示十位 writeChar(12,0,disdata2);/wr_com(0x8c);wr_dat(disdata2);/顯示個(gè)位 writeChar(13,0,0X2e);/wr_com(0x8d);wr_dat(0x2e);/顯示小數(shù)點(diǎn) writeC

33、har(14,0,disdata3);/wr_com(0x8e);wr_dat(disdata3);/顯示小數(shù)位writeChar(15,0,disdata4); void SetFun(void)unsigned char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0;if(SetKey=0)delayms(20);if(SetKey=0)if(Set<2)Set+;else Set=0;switch(Set)case 0: writestring(0,1," ");writestring(8,1," ");break;case 1

34、:writestring(0,1,">");writestring(8,1," ");break;case 2:writestring(0,1," ");writestring(8,1,">");break;while(SetKey=0);if(UpKey=0)&&(Set!=0)delayms(20);if(UpKey=0)switch(Set)case 1:if(AlarmTempLow<99) AlarmTempLow+;else AlarmTempLow=99; break

35、;case 2:if(AlarmTempTop<99) AlarmTempTop+;else AlarmTempTop=99; break;i1 = AlarmTempLow/100; /獲得溫度值的百位 i2 = AlarmTempLow%100/10; /獲得溫度值的十位i3 = AlarmTempLow%10; /獲得溫度值的個(gè)位i4 = AlarmTempTop/100; /獲得溫度值的百位 i5 = AlarmTempTop%100/10; /獲得溫度值的十位i6 = AlarmTempTop%10; /獲得溫度值的個(gè)位writestring(5,1," "

36、);writestring(13,1," ");if(i1!=0)writeChar(5,1,i1+'0');if(i1=0)&&(i2!=0) writeChar(5,1,i2+'0');if(i1!=0) writeChar(6,1,i2+'0');if(i1=0)&&(i2=0)writeChar(5,1,i3+'0');else if(i1=0)&&(i2!=0)writeChar(6,1,i3+'0');if(i1!=0) writeCh

37、ar(7,1,i3+'0');if(i4!=0)writeChar(13,1,i4+'0');if(i4=0)&&(i5!=0) writeChar(13,1,i5+'0');if(i4!=0) writeChar(14,1,i5+'0');if(i4=0)&&(i5=0)writeChar(13,1,i6+'0');else if(i4=0)&&(i5!=0)writeChar(14,1,i6+'0');if(i4!=0) writeChar(15,

38、1,i6+'0');while(UpKey=0);if(DnKey=0)&&(Set!=0)delayms(20);if(DnKey=0)switch(Set)case 1:if(AlarmTempLow>0) AlarmTempLow-;else AlarmTempLow=0; break;case 2:if(AlarmTempTop>0) AlarmTempTop-;else AlarmTempTop=0; break;i1 = AlarmTempLow/100; /獲得溫度值的百位 i2 = AlarmTempLow%100/10; /獲得溫度

39、值的十位i3 = AlarmTempLow%10; /獲得溫度值的個(gè)位i4 = AlarmTempTop/100; /獲得溫度值的百位 i5 = AlarmTempTop%100/10; /獲得溫度值的十位i6 = AlarmTempTop%10; /獲得溫度值的個(gè)位writestring(5,1," ");writestring(13,1," ");if(i1!=0)writeChar(5,1,i1+'0');if(i1=0)&&(i2!=0) writeChar(5,1,i2+'0');if(i1!=0) writeChar(6,1,i2+'0');if(i1=0)&&(i2=0)writeChar(5,1,i3+'0');else if(i1=0)&&(i2!=0)writeChar(6,1,i3+'0');if(i1!=0) writeChar(7,1,i3+'0');if(i4!=0)writeCh

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論