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

下載本文檔

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

文檔簡(jiǎn)介

1、創(chuàng)新工程報(bào)告工程名稱:基于單片機(jī)的數(shù)字溫度控制系統(tǒng)設(shè)計(jì)專 業(yè):電子信息工程技術(shù) 班 級(jí):電信 141指導(dǎo)老師:?jiǎn)讨居滦?名:盧德寅地點(diǎn):教學(xué)樓 時(shí)間:2021年12月成績(jī)?cè)u(píng)定二一六年一月十日摘要隨著時(shí)代的進(jìn)步和開展,單片機(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è)基于 AT89C51單片機(jī)的

2、測(cè)溫系統(tǒng),詳細(xì)描述了利用數(shù)字溫度傳感器 DS18B20開發(fā)測(cè)溫系統(tǒng)的過(guò)程,重點(diǎn)對(duì)傳感器在單片機(jī)喜愛的硬件連接,軟件編程以及各模 塊系統(tǒng)流程進(jìn)行了詳盡分析, 對(duì)各局部的電路也進(jìn)行一一介紹, 該系統(tǒng)可以方便的是實(shí)現(xiàn)溫 度采集和顯示,并可以根據(jù)需要任意設(shè)定上下限報(bào)警溫度,它使用起來(lái)方便,具有精度高、 量程寬、靈敏度高、 體積小、功耗低等優(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è)

3、計(jì)首先是確定目標(biāo),氣候是各個(gè)功能模塊的設(shè)計(jì),再在Proteus 軟件上進(jìn)行仿真,修改,仿真。本溫度計(jì)屬于多功能溫度計(jì), 可以設(shè)置上下報(bào)警溫度, 當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí), 可以 報(bào)警,同時(shí)根據(jù)設(shè)定的溫度范圍通過(guò)升降溫電路控制環(huán)境的溫度到達(dá)恒溫效果?!娟P(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è)溫原理 64 系統(tǒng)工作

4、原理 75 系統(tǒng)整體電路 7第 4 章系統(tǒng)軟件設(shè)計(jì) 81 主程序設(shè)計(jì) 82 DS18B20 初始化 93 DS18B20 溫度傳感器與單片機(jī)的接口電路 114 數(shù)碼管顯示與單片機(jī)對(duì)接 135 仿真結(jié)果 156 總程序 18第五章實(shí)物圖 29總結(jié) 30第 1章 緒 論1 研究意義及背景隨著新技術(shù)的不斷開發(fā)與應(yīng)用, 近年來(lái)單片機(jī)開展十分迅速, 一個(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ù)處理問(wèn)題能夠得到很好的解決。本設(shè)計(jì)使用單片機(jī)作為核心進(jìn)

5、行控制。單片機(jī)具有集成度高, 通用性好,功能強(qiáng), 特別 是體積小,重量輕,耗能低,可靠性高,抗干擾能力強(qiáng)和使用方便等獨(dú)特優(yōu)點(diǎn),在數(shù)字化、 智能化方面有廣泛的用途。2設(shè)計(jì)目的1. 溫度顯示根本范圍 10C 30 Co2. 精度誤差小于0.0 1 Co3. 所測(cè)溫度值由LCD1602液晶顯示屏顯示。4. 可以設(shè)定溫度的上下限控制及報(bào)警功能。3 主要工作本設(shè)計(jì)的研究重點(diǎn)是設(shè)計(jì)一種基于單片機(jī)的數(shù)字溫度計(jì)控制系統(tǒng)。設(shè)計(jì)采用數(shù)字溫度傳感器DS18B2Q此傳感器讀取被測(cè)量溫度值,并進(jìn)行轉(zhuǎn)換。將轉(zhuǎn)換后的數(shù)據(jù)送到單片機(jī)處理, 再通過(guò)LCD1602液晶顯示屏顯示出來(lái)。第2章系統(tǒng)概述1系統(tǒng)方案數(shù)字溫度傳感器DS18

6、B20俞出信號(hào)全數(shù)字化,便于單片機(jī)處理及控制,省去傳統(tǒng)測(cè)溫方法的很多外圍電路。且該芯片的物理性、化學(xué)性很穩(wěn)定,能用做工業(yè)測(cè)溫元件。采用 51單片 機(jī)控制,軟件編程的自由度大, 可通過(guò)編程實(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所示。第3章系統(tǒng)硬件

7、設(shè)計(jì)1 AT89S52單片機(jī)的介紹AT89S52有40個(gè)引腳,4個(gè)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。XTAL2f1XTAL1時(shí)鐘電路ROM/EPROM/Flash 4KBRAM128BSFR 21 個(gè)定時(shí)個(gè)/計(jì)數(shù)器2CPUVcc總線控制RST EAALE審 PSEN

8、中斷系統(tǒng)5個(gè)中斷源2個(gè)優(yōu)先級(jí)串行口全雙工i個(gè)4個(gè)并行口VssP0 P1 P2 P3圖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可外擴(kuò)至64KB;128字節(jié)的數(shù)據(jù)存儲(chǔ)器RAM可再外擴(kuò)64KB ;特殊功能存放器SFR3. 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分為帶背光和不帶背光兩種,基控制器大局部為

9、HD4478Q帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無(wú)差異,兩者尺寸差異如圖3-2所示。75 073 1$4 5圖 3-2 LCD1602 規(guī)格引腳功能LCD1602采用標(biāo)準(zhǔn)的14腳無(wú)背光或16腳帶背光接口,各引腳接口說(shuō)明如表 3.1所示。表3.1 LCD1602引腳說(shuō)明編號(hào)符號(hào)引腳說(shuō)明編號(hào)符號(hào)引腳說(shuō)明1VSS電源地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背光源正極81 D1數(shù)據(jù)16BLK背光源負(fù)極指令說(shuō)明LCD1602液晶模塊內(nèi)部的控制器共有11條控制指

10、令,如表 3.2所示。表3.2 LCD1602內(nèi)部控制器序號(hào)指令RSF/W76154321)D01清顯示00000) () 0012光標(biāo)返回0C000) () 01*3置輸入模式0C000) () 1I/DS4顯示開/關(guān)控制00000:B5光標(biāo)或字符移位0000<*/C5F/L*6置功能00001LN7F二 *7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01EF計(jì)數(shù)器地址10寫數(shù)至U CGRAM或DDRAM10要寫的數(shù)據(jù)內(nèi)容11從 CGRAM DDRA礁數(shù)11讀出的數(shù)據(jù)內(nèi)容3 DS18B20 介紹DS18B20引腳如圖3-3所

11、示。圖3-3 DS18B20引腳圖數(shù)字溫度傳感器 DS18B20是 一種新型的“一線器件,采用單總線的數(shù)據(jù)傳輸,其體積小,輸出信號(hào)全數(shù)字化,便于單片機(jī)處理及控制,在0 100攝氏度時(shí),其最大線形偏差小于1攝氏度。工作電源既可以在遠(yuǎn)端引入,也可以采用寄生電源方式產(chǎn)生。多個(gè) DS18B20可以并聯(lián)到3根或2根線上,CPU只需一根端口線就能與諸多DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。因此用它來(lái)組成一個(gè)測(cè)溫系統(tǒng), 線路十分簡(jiǎn)單。3.1溫度傳感器測(cè)溫原理低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改

12、變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度存放器被預(yù)置在-55C所對(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í),停止溫度存放器值的累加,此時(shí)溫度存放器中的數(shù) 值即為所測(cè)溫度。其內(nèi)部結(jié)構(gòu)圖如圖3-4所示。M66位RO和單線接口存儲(chǔ)器與控制邏輯溫度傳感器高溫觸發(fā)器TH低溫觸發(fā)器TL配置存放器8位CR發(fā)生器圖3-4DS18B20內(nèi)部結(jié)構(gòu)4系統(tǒng)工作原理溫度傳感器DS18B20將模擬溫度值經(jīng)過(guò) DS1

13、8B20處理后轉(zhuǎn)換為數(shù)字值,然后送到單片機(jī) 中進(jìn)行數(shù)據(jù)處理,單片機(jī)將處理后的數(shù)據(jù)通過(guò) LCD1602顯示屏顯示出來(lái),同時(shí)判斷測(cè)得的溫 度和設(shè)置控制及報(bào)警的溫度限進(jìn)行比擬,超過(guò)限度那么通過(guò)蜂鳴器發(fā)出報(bào)警聲音。5系統(tǒng)整體電路"IATXI-FT>T*L1乜giPihFriD"rikT24 檢1樹時(shí) 11MF陽(yáng)皿1?PTF沁|Ji詢血zFJjSOmifrJ.nPOf'jjfinEP J力上P扔1P1XPJJMTTrvN.W!A:£suIKidiaU改TQI HUK-TE::T-_LODICM6IA圖3-5系統(tǒng)電路第4章系統(tǒng)軟件設(shè)計(jì)1主程序設(shè)計(jì)整個(gè)系統(tǒng)的功能是

14、由硬件電路配合軟件來(lái)實(shí)現(xiàn)的,當(dāng)硬件根本定型后,軟件的功能也就根本定下來(lái)了。從軟件的功能不同可分為兩大類:一是監(jiān)控軟件主程序,它是整個(gè)控制系統(tǒng)的核心,專門用來(lái)協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系。二是執(zhí)行軟件子程序,它是用來(lái)完成各種實(shí)質(zhì)性的功能如測(cè)量、計(jì)算、顯示、通訊等。每一個(gè)執(zhí)行軟件也就是一個(gè)小的功能執(zhí)行模塊。這里將各執(zhí)行模塊一一列出,并為每一個(gè)執(zhí)行模塊進(jìn)行功能定義和接口定義。主程序流程見圖4-1。開始AT89S52初始化DS18B2C初始化LCD1602初始化啟動(dòng)控制以及報(bào)警溫度顯示結(jié)束圖4-1主程序流程圖主程序如下: void main(void)unsigned char i=0;P2=0xef

15、;P1=0x00;BEEP=1;LCD_Initial(); /LCD 初始化顯示"DS18B20 Alarmer"/ 顯 示 "Current/ 顯示 " Low=10 Top=30 "T= "Read_Temperature(); / 讀取溫度值 writestring(1,0,"DS18B20 Alarmer"); / delayms(1000); / 延時(shí) 1S writestring(0,0,"Current T= ");writestring(0,1," Low=10 To

16、p=30 ");NG=0;while(1)Read_Temperature(); / 讀取溫度值Display_Temperature();/ 顯示溫度值SetFun();Alarm();2 DS18B20 初始化DS18B2初始化流程圖見圖4-2 。開始圖4-2 DS18B20初始化流程圖初始化子程序:void ds1820rst(void)/*ds1820 復(fù)位 */ un sig ned char x=0;DQ = 1; /DQ delay_18B20 (4); /DQ = 0;/DQdelay_18B20(100); /DQ = 1;/delay_18B20(40);復(fù)位延時(shí)

17、拉低精確延時(shí)大于480us拉高3 DS18B20溫度傳感器與單片機(jī)的接口電路當(dāng)DS18B20處于寫存儲(chǔ)器操作和溫度 A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的上拉, 上拉開啟時(shí)間最大為10us。傳感器與單片機(jī)接口如圖4-3所示:uchar ds1820rd(void)/* 讀數(shù)據(jù) */un sig ned char i=0;un sig ned 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);寫數(shù)據(jù)*/void ds

18、1820wr(ucharwdata)/*un sig ned char i=0;for (i=8; i>0; i-)DQ = 0;DQ = wdata&0x01; delay_18B20(10);DQ = 1;wdata>>=1;unsigned intRead_Temperature(void)/* 讀取溫度值并轉(zhuǎn)換 */uchara,b;ds1820rst();ds1820wr(0xcc);/* 跳過(guò)讀序列號(hào) */ds1820wr(0x44);/* 啟動(dòng)溫度轉(zhuǎn)換 */ds1820rst();ds1820wr(0xcc);/* 跳過(guò)讀序列號(hào) */ds1820wr(0

19、xbe);/* 讀取溫度 */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);4數(shù)碼管顯示與單片機(jī)對(duì)接如圖4-4所示。用AT89S5的P0 口作為數(shù)據(jù)端口,為液晶顯示使能控制端。P0 口接上上拉電阻,拉高信號(hào)使液晶顯示。LCD4LIO5LXT/M

20、-2RSTFESPACkR2J/A6P2仏9P2.2tAfOP'O.OAK PC1 閥M PO2AD2 PO3AD3 PC牡収 PO.5AE-5 PQ.&gDG PO7WD7圖4-4LCD1602顯示屏與 AT89S52對(duì)接LCD1602顯示程序:void Display_Temperature()/顯示溫度ucharflagdat;disdata0=tvalue/1000+0x30;百位數(shù)disdata1=tvalue%1000/100+0x30; 十位數(shù) disdata2=tvalue%100/10+0x30;個(gè)位數(shù)disdata3=tvalue%10+0x30;小數(shù)位di

21、sdata4=tvalue%1+0x30;if(tflag=0) flagdat=0x20;/正溫度不顯示符號(hào)else flagdat=0x2d;/負(fù)溫度顯示負(fù)號(hào):-if(tflag=1)顯示符號(hào)位顯示百位writeChar(10,0,flagdat);/wr_com(0x8a);wr_dat(flagdat); writeChar(11,0,disdata0);/wr_com(0x8b);wr_dat(disdata0);顯示十位writeChar(12,0,disdata1);/wr_com(0x8c);wr_dat(disdata1);/writeChar(13,0,disdata2);

22、/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);/顯示小數(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

23、);/顯示十位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_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亮,表示加溫器工作。2.如圖4-6所示。此時(shí)溫

24、度為31度,超過(guò)上限溫度,蜂鳴器實(shí)現(xiàn)報(bào)警,降溫器 指示燈D2亮,表示降溫器工作。圖4-6仿真圖23.如圖4-7所示。此時(shí)溫度為26度,在所設(shè)范圍內(nèi),蜂鳴器沒有報(bào)警,說(shuō)明溫度正常圖4-7仿真圖36 總程序#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit DQ=P2A3;/ds18b20與單片機(jī)連接口sbit RS=P2A5;sbit RW=P2A6;sbit EN=P2A7;sbit LED1=P3A6;sbit LED2=P3A7;

25、uchar data disdata5;uinttvalue,CurrentT=0;/ 溫度值uchartflag;/ 溫度正負(fù)標(biāo)志#define LCD_BUS P0sbitSetKey = P2A2;sbitUpKey = P2A1;sbitDnKey = P2A0;sbit BEEP = P2A4;unsigned char AlarmTempLow=10,AlarmTempTop=30,Set=0,NG=0;void delayms(uintms)/ 延時(shí) xx 毫秒uchari;while(ms-)for(i=0;i<120;i+);void command(uint com)

26、 /LCD 寫指令RS=0;/RS 為 0LCD_BUS=com; / 裝載指令delayms(5); / 延時(shí) 5msEN=1;/LCD 使能delayms(5); / 延時(shí) 5msEN=0;/LCD 不使能RS=1;LCD_BUS=dat;delayms(5);EN=1;delayms(5);EN=0;void write_dat(uchardat) /LCD 寫數(shù)據(jù)/RS 為 1/ 裝載數(shù)據(jù)/ 延時(shí) 5ms/LCD 使能/ 延時(shí) 5ms寫字符串表示第一行/LCD 不使能void writestring(ucharx,uchary,uchar *s) /LCDif (y = 0) comm

27、and(0x80 + x); /else command(0xC0 + x); / 表示第二行while (*s)write_dat( *s); / s +;/ 判斷是否字符串的結(jié)尾顯示當(dāng)前字符/ 字符串地址加 1void writeChar(ucharx,uchary,uchar s) /LCD寫字符串表示第一行elsecommand(0xC0 + x);/表示第二行write_dat( s); /顯示當(dāng)前字符void LCD_Initial()/LCD 初始化if (y = 0) command(0x80 + x); /EN=0;RW=0;/LCD 不使能/RW 為 0command(0x

28、38);/ 發(fā)送初始化指令command(0x0c);/ 發(fā)送初始化指令command(0x06);/發(fā)送初始化指令command(0x01);/發(fā)送初始化指令command(0x80+0x02);/發(fā)送LCD初始位置/*DS1820 程序 */void delay_18B20(unsigned inti)/延時(shí) 1 微秒while(i-);void ds1820rst(void)/*ds1820復(fù)位 */unsigned char x=0; DQ = 1; /DQ delay_18B20(4); / DQ = 0;/DQdelay_18B20(100); / DQ = 1;/復(fù)位延時(shí)拉低精確

29、延時(shí)大于 480us拉高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>>=1;DQ = 1; / 給脈沖信號(hào) if(DQ) dat|=0x80;delay_18B20(10);return(dat);void ds1820wr(ucharwdata)/* 寫數(shù)據(jù) */unsigned char i=0;for (i=8; i>0; i-)DQ = 0;DQ = wdata&am

30、p;0x01; delay_18B20(10);DQ = 1;wdata>>=1;讀取溫度值并轉(zhuǎn)換 */unsigned intRead_Temperature(void)/*uchara,b;ds1820rst();ds1820wr(0xcc);/*跳過(guò)讀序列號(hào)*/ds1820wr(0x44);/*啟動(dòng)溫度轉(zhuǎn)換*/ds1820rst();ds1820wr(0xcc);/*跳過(guò)讀序列號(hào)*/ds1820wr(0xbe);/*讀取溫度 */a=ds1820rd();b=ds1820rd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tva

31、lue<0x0fff) tflag=0;else tvalue=tvalue+1;tflag=1;tvalue=tvalue*(0.625);/溫度值擴(kuò)大 10 倍,精確到 1 位小數(shù)CurrentT=tvalue;return(tvalue);void Display_Temperature()/ 顯示溫度ucharflagdat;disdata0=tvalue/1000+0x30;/百位數(shù)disdata1=tvalue%1000/100+0x30;/十位數(shù)disdata2=tvalue%100/10+0x30;/個(gè)位數(shù)disdata3=tvalue%10+0x30;/小數(shù)位disda

32、ta4=tvalue%1+0x30;if(tflag=0) flagdat=0x20;/正溫度不顯示符號(hào)else flagdat=0x2d;/負(fù)溫度顯示負(fù)號(hào) :-if(tflag=1)顯示符號(hào)位writeChar(10,0,flagdat);/wr_com(0x8a);wr_dat(flagdat);/ writeChar(11,0,disdata0);/wr_com(0x8b);wr_dat(disdata0);/ 顯示百位writeChar(12,0,disdata1);/wr_com(0x8c);wr_dat(disdata1);/顯示十位writeChar(13,0,disdata2)

33、;/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);/ 顯示小數(shù)位writeChar(16,0,disdata4);elsewriteChar(10,0,disdata0);/wr_com(0x8a);wr_dat(disdata0);/ 顯示百位writeChar(11,0,disdata1);/wr_com(0x8b);wr_dat(disdata

34、1);/顯示十位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_com(0x8e);wr_dat(disdata3);/ 顯示小數(shù)位writeChar(15,0,disdata4);voidSetFun(void)unsigned char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0;if(SetKey=0)delayms(20);if(S

35、etKey=0)if(Set<2) Set+;else Set=0;switch(Set)case 0: writestring(0,1," ");writestring(8,1," ");break;case 1: writestring(0,1,">");writestring(8,1," ");break;case 2: writestring(0,1," ");writestring(8,1,">");break;while(SetKey=0);if

36、(UpKey=0)&&(Set!=0)delayms(20);if(UpKey=0)switch(Set)AlarmTempLow+;elseAlarmTempTop+;elsecase 1: if(AlarmTempLow<99)AlarmTempLow=99; break;case 2: if(AlarmTempTop<99)AlarmTempTop=99; break;i1 = AlarmTempLow/100;/ 獲得溫度值的百位/ 獲得溫度值的十位i2= AlarmTempLow%100/10;i3 = AlarmTempLow%10;/ 獲得溫度值的個(gè)位

37、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

38、=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) 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)&a

39、mp;&(i5=0) writeChar(13,1,i6+'0');else if(i4=0)&&(i5!=0) writeChar(14,1,i6+'0');if(i4!=0) writeChar(15,1,i6+'0');while(UpKey=0);if(DnKey=0)&&(Set!=0)delayms(20);if(DnKey=0)switch(Set)case 1: if(AlarmTempLow>0)AlarmTempLow=0; break;case 2: if(AlarmTempTo

40、p>0) AlarmTempTop=0; break;i1 = AlarmTempLow/100; /i2 = AlarmTempLow%100/10;AlarmTempLow-;elseAlarmTempTop-;else獲得溫度值的百位/ 獲得溫度值的十位/ 獲得溫度值的個(gè)位i3= AlarmTempLow%10;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)

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論