單片機(jī)課程設(shè)計(jì)之---溫度控制及報(bào)警系統(tǒng)的設(shè)計(jì)_第1頁(yè)
單片機(jī)課程設(shè)計(jì)之---溫度控制及報(bào)警系統(tǒng)的設(shè)計(jì)_第2頁(yè)
單片機(jī)課程設(shè)計(jì)之---溫度控制及報(bào)警系統(tǒng)的設(shè)計(jì)_第3頁(yè)
單片機(jī)課程設(shè)計(jì)之---溫度控制及報(bào)警系統(tǒng)的設(shè)計(jì)_第4頁(yè)
單片機(jī)課程設(shè)計(jì)之---溫度控制及報(bào)警系統(tǒng)的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上題 目單片機(jī)溫度控制及報(bào)警系統(tǒng)的設(shè)計(jì) 一、 設(shè)計(jì)目的學(xué)習(xí)溫度的顯示、控制及報(bào)警,實(shí)現(xiàn)了溫度的實(shí)時(shí)顯示及控制。溫度控制部分,提出了用DS18B20、89C52單片機(jī)及LED的硬件電路完成對(duì)溫度的實(shí)時(shí)檢測(cè)及顯示,利用DS18B20與單片機(jī)連接由軟件與硬件電路配合來(lái)實(shí)現(xiàn)實(shí)時(shí)控制及超出設(shè)定的上下限溫度的報(bào)警系統(tǒng)。課題設(shè)計(jì)的目的:1.掌握用51單片機(jī)控制LCD顯示字符的方法。 2.掌握用單片機(jī)進(jìn)行顯示系統(tǒng)開(kāi)發(fā)的方法。3.掌握單片機(jī)軟件、硬件調(diào)試技術(shù)。4.了解單線(xiàn)器件DS18B20的驅(qū)動(dòng)方法。 5.了解LCD顯示器的一般驅(qū)動(dòng)原理二、使用主要電子元件1單片機(jī)89C52 2. 溫度傳

2、感器DS18B203. 顯示器LCD16024. 排插5.發(fā)光二極管6.電容若干7.電阻若干8.按鈕開(kāi)關(guān)若干。9.導(dǎo)線(xiàn)若干10. 12MHZ晶振1個(gè)三系統(tǒng)設(shè)計(jì)思想及主要應(yīng)用器件3.1 系統(tǒng)設(shè)計(jì)的總體思想 根據(jù)單片機(jī)溫度控制要實(shí)現(xiàn)的功能,設(shè)計(jì)了基于A(yíng)TMEL公司的AT89C52芯片的溫度測(cè)量系統(tǒng)。這是一種低成本的利用單片機(jī)多余I/O口實(shí)現(xiàn)的溫度檢測(cè)電路。整個(gè)系統(tǒng)硬件部分包括溫度檢測(cè)系統(tǒng)、信號(hào)放大系統(tǒng)、A/D轉(zhuǎn)換、單片機(jī)、I/O設(shè)備、控制執(zhí)行系統(tǒng)等.。溫度控制部分用DS18B20、89C52單片機(jī)及LED的硬件電路完成對(duì)溫度的實(shí)時(shí)檢測(cè)及顯示。3.2 系統(tǒng)硬件簡(jiǎn)介硬件大致構(gòu)成:核心控制器件AT89C

3、52 ,溫度傳感器DS18B20,顯示器1602A 報(bào)警控制LED。3.2.1 硬件設(shè)計(jì)思想 本設(shè)計(jì)是以AT89C52為單片機(jī)作為控制核心,提出了一種基于DS18B20的單總線(xiàn)多點(diǎn)溫度測(cè)控系統(tǒng),多個(gè)溫度傳感節(jié)點(diǎn)通過(guò)單總線(xiàn)與單片機(jī)相聯(lián)形成分布式系統(tǒng)。單片機(jī)通過(guò)實(shí)時(shí)監(jiān)控溫度的變化,通過(guò)LCD1602字符型液晶顯示各節(jié)點(diǎn)溫度的數(shù)值,當(dāng)溫度值超出所設(shè)定的值時(shí),報(bào)警器開(kāi)始報(bào)警,從而遠(yuǎn)程實(shí)現(xiàn)對(duì)整個(gè)溫度系統(tǒng)的管理和控制。這種分布式溫度測(cè)量系統(tǒng)具有成本低廉、傳感精度高、系統(tǒng)穩(wěn)定、易于管理等優(yōu)點(diǎn)。3.3 系統(tǒng)主要器件3.3.1 核心控制器件AT89C52 AT89C52是一個(gè)低電壓,高性能CMOS 8位單片機(jī),

4、片內(nèi)含8k bytes的可反復(fù)擦寫(xiě)的Flash只讀程序存儲(chǔ)器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,功能強(qiáng)大的AT89C52單片機(jī)可為您提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場(chǎng)合。AT89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫(xiě)口線(xiàn),AT89C52可以按照常規(guī)方法進(jìn)行編程,也可以在線(xiàn)編程。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的Flash存儲(chǔ)

5、器可有效地降低開(kāi)發(fā)成本1。AT89C52有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。主要功能特性:· 兼容MCS51指令系統(tǒng) · 32個(gè)雙向I/O口 · 3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷 · 2個(gè)串行中斷 · 2個(gè)外部中斷源 · 2個(gè)讀寫(xiě)中斷口線(xiàn) · 低功耗空閑和掉電模式 AT89C52各引腳及管腳如圖3-1所示圖3-1 AT89C52各引腳概述:AT89C52為40 腳雙列直插封裝的8 位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會(huì)聚

6、調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負(fù)端。P0P3 為可編程通用I/O 腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0 端口(3239 腳)被定義為N1 功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13 腳定義為N1 功能控制端

7、口,分別與N1的相應(yīng)功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義為I2C總線(xiàn)控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12 腳、27 腳及28 腳定義為握手信號(hào)功能端口,連接主板CPU 的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。3.3.2 DS1820內(nèi)部結(jié)構(gòu)及工作原理DS18B20數(shù)字溫度傳感器是DALLAS公司生產(chǎn)的1Wire,即單總線(xiàn)器件,具有線(xiàn)路簡(jiǎn)單,體積小的特點(diǎn)。因此用它來(lái)組成一個(gè)測(cè)溫系統(tǒng),具有線(xiàn)路簡(jiǎn)單,在一根通信線(xiàn),可以?huà)旌芏噙@樣的數(shù)字溫度計(jì),十分方便。1.DS18B20產(chǎn)品的特點(diǎn):l 只要求一個(gè)端口即可實(shí)現(xiàn)通信。l

8、在DS18B20中的每個(gè)器件上都有獨(dú)一無(wú)二的序列號(hào)。l 實(shí)際應(yīng)用中不需要外部任何元器件即可實(shí)現(xiàn)測(cè)溫。l 測(cè)量溫度范圍在55.C到125.C之間。l 數(shù)字溫度計(jì)的分辨率用戶(hù)可以從9位到12位選擇。l 內(nèi)部有溫度上、下限告警設(shè)置。TO92封裝的DS18B20的引腳排列見(jiàn)圖3-3所示。 圖3-3 DS18B20的引腳排列DS18B20引腳功能描述見(jiàn)表3-4所示。表3-4 DS18B20引腳功能序號(hào)名稱(chēng)引腳功能描述1GND地信號(hào)2DQ數(shù)字輸入輸出引腳,開(kāi)漏單總線(xiàn)接口引腳,當(dāng)使用寄生電源時(shí),可向電源提供電源3VDD可選擇的VDD引腳,當(dāng)工作于寄生電源時(shí),該引腳必須接地2. DS18B20的內(nèi)部結(jié)構(gòu)DS1

9、8B20的內(nèi)部框圖下圖3-5所示。64位ROM存儲(chǔ)器件獨(dú)一無(wú)二的序列號(hào)。暫存器包含兩字節(jié)(0和1字節(jié))的溫度寄存器,用于存儲(chǔ)溫度傳感器的數(shù)字輸出。暫存器還提供一字節(jié)的上線(xiàn)警報(bào)觸發(fā)(TH)和下線(xiàn)警報(bào)觸發(fā)(TL)寄存器(2和3字節(jié)),和一字節(jié)的配置寄存器(4字節(jié)),使用者可以通過(guò)配置寄存器來(lái)設(shè)置溫度轉(zhuǎn)換的精度。暫存器的5、6和7字節(jié)器件內(nèi)部保留使用。第八字節(jié)含有循環(huán)冗余碼(CRC )。 圖3-5 DS18B20的內(nèi)部框圖3.3.3 LCD1602A內(nèi)部結(jié)構(gòu)及工作原理工作原理 LCD內(nèi)部結(jié)構(gòu):由CGRAM(自建字型產(chǎn)生器)、DDRAM(數(shù)據(jù)顯示存儲(chǔ)器)、CGROM(內(nèi)含字型產(chǎn)生器)、指令寄存器、數(shù)據(jù)

10、寄存器、地址計(jì)數(shù)器、指令譯碼器等組成 LCD顯示原理:利用旋光效應(yīng)對(duì)光進(jìn)行偏轉(zhuǎn),再利用偏振片濾去不需要透過(guò)光的相應(yīng)像素,從而實(shí)現(xiàn)圖像顯示。 LCD驅(qū)動(dòng)原理:分成兩大步,即寫(xiě)指令,寫(xiě)數(shù)據(jù),其中寫(xiě)數(shù)據(jù)之前要找到顯示的位置。本實(shí)驗(yàn)所采用的液晶型號(hào)為L(zhǎng)CD1602A 。它位數(shù)多,可顯示32位,32個(gè)數(shù)碼管體積相當(dāng)龐大了,顯示內(nèi)容豐富,可顯示所有數(shù)字和大、小寫(xiě)字母,程序簡(jiǎn)單,如果用數(shù)碼管動(dòng)態(tài)顯示,會(huì)占用很多時(shí)間來(lái)刷新顯示,而LCD1602A自動(dòng)完成此功能。1602A采用標(biāo)準(zhǔn)的16腳接口如圖3-12所示。圖3-12 1602A的接口圖第1腳:VSS為地電源第2腳:VDD接5V正電源第3腳:V0為液晶顯示器

11、對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度(建議接地,弄不好有的模塊會(huì)不顯示)第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:RW為讀寫(xiě)信號(hào)線(xiàn),高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線(xiàn)。第1516腳:空腳(有的用來(lái)接背光) 1602A液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了不同的點(diǎn)陣字符圖形,這些字符有,阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)、和日文假名等,

12、每一個(gè)字符都有一個(gè)固定的代碼,其中數(shù)字與字母同ASCII碼兼容。其內(nèi)部還有自定義字符(CGRAM),可用業(yè)存儲(chǔ)自已定義的字符。四系統(tǒng)軟件設(shè)計(jì)4.1 軟件設(shè)計(jì)總體思路及主程序流程圖本系統(tǒng)采用C語(yǔ)言編寫(xiě),主程序主要由四部分構(gòu)成,系統(tǒng)通電后首先初始化系統(tǒng),依次完成溫度采集、溫度處理、數(shù)據(jù)顯示、鍵盤(pán)處理等四項(xiàng)功能。溫度采集部分主要完成溫度測(cè)試點(diǎn)的溫度數(shù)據(jù)采集任務(wù);溫度處理部分主要是將采集到的溫度數(shù)據(jù)與用戶(hù)設(shè)定的各點(diǎn)上下限溫度值進(jìn)行比較處理,并判斷是否超出設(shè)定的上下限值,如果超出則led燈亮報(bào)警;數(shù)據(jù)顯示部分主要實(shí)現(xiàn)溫度數(shù)據(jù)的顯示,顯示方式根據(jù)設(shè)計(jì)要求支持溫度測(cè)試點(diǎn)的輪流循環(huán)顯示和固定顯示兩種方式;鍵盤(pán)

13、處理部分主要實(shí)現(xiàn)用戶(hù)對(duì)系統(tǒng)參數(shù)的設(shè)置,結(jié)合顯示部分,實(shí)現(xiàn)用戶(hù)與系統(tǒng)之間的人機(jī)接口。系統(tǒng)軟件主流程如圖4-1所示。 開(kāi)始系統(tǒng)初始化溫度采集溫度處理數(shù)據(jù)顯示鍵盤(pán)處理圖4-1 系統(tǒng)軟件總流程圖4.2 測(cè)溫模塊測(cè)溫流程圖4-2所示。讀溫度初始化溫度傳感器掃描鍵盤(pán)選定所需芯片選定所需芯片進(jìn)行溫度轉(zhuǎn)換讀取溫度調(diào)試顯示子程序子程序返回圖4-2 DSl8B20操作流程圖4.2.1 溫度的采集DSl8B20在其ROM中都存有其唯一的48位序列號(hào),在出廠(chǎng)前已寫(xiě)入片內(nèi)ROM中,主機(jī)在進(jìn)入操作程序前必須逐一接入DSl8B20,用讀ROM(33H)命令將該DSl8B20的序列號(hào)讀出并登錄。當(dāng)主機(jī)需要對(duì)眾多在線(xiàn)DSl8B

14、20的某一個(gè)進(jìn)行操作時(shí)首先要發(fā)出匹配ROM命令(55H),緊接著主機(jī)提供64位序列(包括該DSl8B20的48位序列號(hào))之后的操作就是針對(duì)該DSl8B20的,而所謂跳過(guò)ROM命令即為之后的操作,是對(duì)所有DSl8B20的框圖中先有跳過(guò)ROM即是啟動(dòng)所有DSl8B20進(jìn)行溫度變換之后通過(guò)匹配ROM再逐一地讀回每個(gè)DSl8B20的溫度數(shù)據(jù)在DSl8B20組成的測(cè)溫系統(tǒng)中主機(jī)在發(fā)出跳過(guò)ROM命令之后再發(fā)出統(tǒng)一的溫度轉(zhuǎn)換啟動(dòng)碼44H就可以實(shí)現(xiàn)所有DSl8B20的統(tǒng)一轉(zhuǎn)換再經(jīng)過(guò)1s后就可以用很少的時(shí)間去逐一讀取這種方式,使其T值往往小于傳統(tǒng)方式7。4.2.2 溫度的測(cè)量單總線(xiàn)已經(jīng)掛接了DS18B20。由于

15、已經(jīng)在上面獲取了DS18B20的ROM代碼并在A(yíng)T89C52單片機(jī)內(nèi)部的中建立了測(cè)量位置點(diǎn)和傳感器64位ROM代碼之間的關(guān)系表,因此對(duì)溫度的巡回測(cè)量的步驟如下:(1)發(fā)跳過(guò)ROM命令CCH。(2)發(fā)啟動(dòng)所有在線(xiàn)的DS18B20進(jìn)行溫度轉(zhuǎn)換命令44H。(3)延遲1s。(4)發(fā)匹配ROM命令55H。(5)按照AT89C51中建立的關(guān)系表的順序取出64位ROM代碼發(fā)送到單總線(xiàn)。(6)發(fā)讀溫度值命令BEH,讀取溫度值。(7)進(jìn)行CRC校驗(yàn)和數(shù)據(jù)處理后送LCD顯示器顯示。(8)重復(fù)第4步到第7步,直到所有的DS18B20測(cè)量處理完。(9)再重復(fù)第1步到第8步,進(jìn)行下一輪的巡回測(cè)量。溫度測(cè)量電路流程如圖4

16、-3所示。初始化跳過(guò)ROM等待1S初始化設(shè)置18B20符合ROM讀存儲(chǔ)器緩沖指針增一初始化B1=0?否 圖4-3 溫度測(cè)量電路流程4.3 顯示模塊流程圖4-4所示。 忙判斷P0.7=1?結(jié)束開(kāi)始液晶初始化送顯示地址寫(xiě)指令送顯示字符Y忙判斷P0.7=1?寫(xiě)數(shù)據(jù)YNN專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)圖4-4 LCD顯示流程圖 4.4 鍵盤(pán)掃描流程圖按鍵處理程序通過(guò)掃描按鍵情況,讀取鍵值。主要完成各點(diǎn)溫度傳感器上下限報(bào)警參數(shù)設(shè)置和顯示模式設(shè)置。(1)通過(guò)掃描鍵盤(pán)讀取鍵值,流程圖如圖4-5所示。YN鍵盤(pán)掃描有鍵閉合延時(shí)去鍵抖動(dòng)動(dòng)掃描鍵盤(pán)找到閉合鍵計(jì)算鍵值閉合鍵釋放建立有效標(biāo)志返回建立無(wú)效標(biāo)志NYNY圖4-5 鍵盤(pán)掃描

17、程序流程圖(2)設(shè)置報(bào)警上、下限值 DS18B20設(shè)有溫度上下限報(bào)警功能。DSl8B20的存儲(chǔ)器由兩部分組成:一個(gè)是9字節(jié)的靜態(tài)RAM,其中第0和第1字節(jié)用于存儲(chǔ)16位的溫度轉(zhuǎn)換值,第2(高溫限TH)和第3字節(jié)(低溫限TL)作為溫度報(bào)警限值或通用存儲(chǔ)器單元供用戶(hù)使用;另一個(gè)是非易失性的E²PROM。當(dāng)靜態(tài)RAM作為溫度報(bào)警限值使用時(shí),可以在系統(tǒng)安裝和工作前,用寫(xiě)RAM命令4EH將高溫限TH和低溫限TL寫(xiě)入第2和第3字節(jié)單元。由于靜態(tài)RAM掉電后信息即丟失,因此需要再通過(guò)拷貝RAM命令48H將第2和第3字節(jié)單元的溫度報(bào)警限值拷貝到E²PROM中。主程序只要在初始化部分使用重調(diào)

18、E²PROM命令B8H,就可以將E²PROM中的溫度報(bào)警限值重新拷貝到靜態(tài)RAM中。讀取DDRAM或CGRAM中的內(nèi)容。五電路圖和程序1.最終原理圖2實(shí)物圖正面圖背面圖六本設(shè)計(jì)總結(jié)1、通過(guò)本次實(shí)驗(yàn),我們學(xué)習(xí)了單片機(jī)和溫度傳感器的工作原理、放大器和數(shù)碼管的工作原理;學(xué)會(huì)了電路組合設(shè)計(jì)的方法,掌握了單片機(jī)的中斷系統(tǒng)與延時(shí)程序的編寫(xiě)方法及程序調(diào)試方法,仿真機(jī)的使用及在線(xiàn)調(diào)試的方法,硬件布線(xiàn)設(shè)計(jì)及焊接工藝等。2、這次實(shí)驗(yàn)的不足之處:由于本次設(shè)計(jì)任務(wù)準(zhǔn)備的時(shí)間不夠充分,造成準(zhǔn)備的很倉(cāng)促,出現(xiàn)了許多問(wèn)題;資料查找不完全,因?yàn)閱纹瑱C(jī)型號(hào)對(duì)不上沒(méi)燒進(jìn)單片機(jī),浪費(fèi)時(shí)間和精力。 附錄1 軟件程

19、序/調(diào)用頭文件和初始化模塊#include<reg51.h>#include<intrins.h>#include <DigThermo.h>sbit RS =P27;sbit RW =P26;sbit EN =P25;sbit DB0 =P00;sbit DB1 =P01;sbit DB2 =P02;sbit DB3 =P03;sbit DB4 =P04;sbit DB5 =P05;sbit DB6 =P06;sbit DB7 =P07;uchar alarm1 =0x28;uchar alarm2 =0x19;sbit LED1 =P10;sbit LE

20、D2 =P11;sbit MODE =P24;sbit UP =P23;sbit DOWN =P22;/LCD驅(qū)動(dòng)模塊void Delay100ms();void InitInterupt();void DelayL();void DelayS();void WriteCommand(unsigned char c);void WriteData(unsigned char c);void ShowChar(unsigned char pos,unsigned char c);void ShowString(unsigned char line,char *ptr);void InitLcd(

21、);void delay(unsigned int);void convert();void RdTemp();void check();static char line0=" 00:00 "static char line1=" . C "/* 延時(shí)t毫秒 */void delay(uint t)uint i;while(t-)/* 對(duì)于11.0592M時(shí)鐘,約延時(shí)1ms */for (i=0;i<125;i+) /* 產(chǎn)生復(fù)位脈沖初始化DS18B20 */*主程序,讀取的溫度值最終存放在tplsb和tpmsb變量中。 tplsb其中低4位為二進(jìn)

22、制的“小數(shù)”部分;tpmsb其中高 5位為符號(hào)位。真正通過(guò)數(shù)碼管輸出時(shí),需要進(jìn)行到十進(jìn) 制有符號(hào)實(shí)數(shù)(包括小數(shù)部分)的轉(zhuǎn)換。*/ void main(void)char code str1=" zhong guo ! "char code str2="2008-11-15 "unsigned char i; DelayL (); InitLcd (); DelayL (); ShowString (0,str1); ShowString (1,str2); for (i=0;i<15;i+) Delay100ms(); InitInterupt()

23、;do line10=0x20;delay(1);/ 延時(shí)1msconvert();/ 啟動(dòng)溫度轉(zhuǎn)換,需要750msdelay(1000);/ 延時(shí)1sRdTemp(); line10=0x20; i=tpmsb; if(i>99) line10=0x31; i-=100; line11=i/10+0x30; line12=i%10+0x30; line14=tplsb+0x30; line18=alarm1/10+0x30; line19=alarm1%10+0x30; line110='' line111='C' line112=alarm2/10+0

24、x30; line113=alarm2%10+0x30; line114='' line115='C' ShowString (0,line1);Delay100ms(); check();if(!MODE&&!UP&&DOWN) alarm1=alarm1-0x01; else if(!MODE&&UP&&!DOWN) alarm1=alarm1+0x01; else if(MODE&&!UP&&DOWN) alarm2=alarm2+0x01; else if(M

25、ODE&&UP&&!DOWN) alarm2=alarm2-0x01;elsealarm1=alarm1;alarm2=alarm2; / 讀取溫度while(1); void TxReset(void)uint i;DQ = 0;/* 拉低約900us */i = 100;while (i>0)i-;DQ = 1;/ 產(chǎn)生上升沿i = 4;while (i>0)i-;/* 等待應(yīng)答脈沖 */void RxWait(void)uint i;while(DQ);while(DQ);/ 檢測(cè)到應(yīng)答脈沖i = 4;while (i>0)i-;/* 讀

26、取數(shù)據(jù)的一位,滿(mǎn)足讀時(shí)隙要求 */bit RdBit(void)uint i;bit b;DQ = 0;i+;DQ = 1;i+;i+;/ 延時(shí)15us以上,讀時(shí)隙下降沿后15us,DS18B20輸出數(shù)據(jù)才有效b = DQ;i = 8;while(i>0) i-;return (b);/* 讀取數(shù)據(jù)的一個(gè)字節(jié) */uchar RdByte(void)uchar i,j,b;b = 0;for (i=1;i<=8;i+)j = RdBit();b = (j<<7)|(b>>1);return(b);/* 寫(xiě)數(shù)據(jù)的一個(gè)字節(jié),滿(mǎn)足寫(xiě)1和寫(xiě)0的時(shí)隙要求 */void

27、 WrByte(uchar b)uint i;uchar j;bit btmp;for(j=1;j<=8;j+)btmp = b&0x01;b = b>>1;/ 取下一位(由低位向高位)if (btmp)/* 寫(xiě)1 */DQ = 0;i+;i+;/ 延時(shí),使得15us以?xún)?nèi)拉高DQ = 1;i = 8;while(i>0) i-;/ 整個(gè)寫(xiě)1時(shí)隙不低于60uselse DQ = 0;i = 8;while(i>0) i-;/ 保持低在60us到120us之間DQ = 1;i+;i+;/溫度轉(zhuǎn)化模塊void convert(void)TxReset();/ 產(chǎn)

28、生復(fù)位脈沖,初始化DS18B20RxWait();/ 等待DS18B20給出應(yīng)答脈沖delay(1);/ 延時(shí)WrByte(0xcc);/ skip rom 命令WrByte(0x44);/ convert T 命令/讀取溫度值模塊void RdTemp(void)TxReset();/ 產(chǎn)生復(fù)位脈沖,初始化DS18B20RxWait();/ 等待DS18B20給出應(yīng)答脈沖delay(1);/ 延時(shí)WrByte(0xcc);/ skip rom 命令WrByte(0xbe);/ read scratchpad 命令tplsb = RdByte();/ 溫度值低位字節(jié)(其中低4位為二進(jìn)制的&qu

29、ot;小數(shù)"部分)tpmsb = RdByte();/ 高位值高位字節(jié)(其中高5位為符號(hào)位)tpmsb=tpmsb<<4; tpmsb+=(tplsb&0xF0)>>4;tplsb=(tplsb&0x08)?5:0;/LCD驅(qū)動(dòng)子程序模塊 void DelayL () unsigned char i,j; i=0xF0; j=0xFF; while (i-) while (j-); void DelayS () unsigned char i; i=0x1F; while (i-); void WriteCommand (unsigned char c) DelayS(); P0=c; EN=0; RS=0; RW=0;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論