信息科學(xué)和微電子技術(shù)的飛速發(fā)展給控制領(lǐng)域帶來了巨大的飛躍,控制技術(shù)更加趨向自動(dòng)化和智能化,為無數(shù)的使用者帶來了方便。在控制領(lǐng)域里,溫度是一個(gè)常見的名詞,然而它所帶來的技術(shù)問題和所起的作用卻是非同一般的。在控制領(lǐng)域中,對溫度的控制有著舉足輕重的作用。例如陶瓷的燒烤,只有控制住溫度的適度,才能制作出一件完美的藝術(shù)品,否則只是一件廢品;還有如釀酒的過程,也需要對溫度進(jìn)行控制?梢姡谏畹脑S多方方面面都有著對溫度進(jìn)行感知和控制的需要。
溫度是一個(gè)十分重要的物理量,對它的測量與控制有十分重要的意義。隨著現(xiàn)代工農(nóng)業(yè)技術(shù)的發(fā)展及人們對生活環(huán)境要求的提高,人們也迫切需要檢測與控制溫度。在人類的生活環(huán)境中,溫度扮演著極其重要的角色。無論你生活在哪里,從事什么工作,無時(shí)無刻不在與溫度打著交道。在冶金、鋼鐵、石化、水泥、玻璃、醫(yī)藥等等行業(yè),可以說幾乎80%的工業(yè)部門都不得不考慮著溫度的因素。溫度對于工業(yè)如此重要,由此推進(jìn)了溫度傳感器的發(fā)展。
測量溫度的基本方法是使用溫度計(jì)直接讀取溫度。最常見到的測量溫度的工具是各種各樣的溫度計(jì),例如,水銀玻璃溫度計(jì),酒精溫度計(jì),熱電偶或熱電阻溫度計(jì)等。它們常常以刻度的形式表示溫度的高低,人們必須通過讀取刻度值的多少來測量溫度。而在傳統(tǒng)的模擬信號溫度測量系統(tǒng)中,測溫電路的電磁環(huán)境非常惡劣,各種干擾信號較強(qiáng),模擬溫度信號容易受到干擾而產(chǎn)生測量誤差,影響測量精度,不能滿足數(shù)字化時(shí)代的需求。利用單片機(jī)和溫度傳感器構(gòu)成的電子式智能溫度計(jì)精度高、抗干擾能力強(qiáng),可擴(kuò)展性強(qiáng)、集成方便得到了廣泛的應(yīng)用。而且可以直接測量溫度,得到溫度的數(shù)字值,既簡單方便,又直觀準(zhǔn)確,新型數(shù)字溫度傳感器是溫度計(jì)設(shè)計(jì)的最有效方案。
本課題就是一個(gè)對溫度進(jìn)行檢測,采集和顯示的溫度檢測系統(tǒng)。它以單片機(jī)(AT89S51)為主要控制器件,DS18B20為溫度傳感器,并通過LCD液晶1602直接顯示所測溫度的新型數(shù)字溫度計(jì)。由于本人所學(xué)知識有限,設(shè)計(jì)過程中難免會(huì)出現(xiàn)錯(cuò)誤,還請各位老師指正。
根據(jù)系統(tǒng)設(shè)計(jì)的功能,本時(shí)鐘溫度系統(tǒng)的設(shè)計(jì)必須采用單片機(jī)軟件系統(tǒng)實(shí)現(xiàn),用單片機(jī)的自動(dòng)控制能力來測量、顯示溫度數(shù)值。
初步確定設(shè)計(jì)系統(tǒng)由單片機(jī)主控模塊、測溫模塊、顯示模塊、報(bào)警模塊共4個(gè)模塊組成,電路系統(tǒng)框圖如圖1.1所示。
圖1.1 系統(tǒng)基本方框圖
對于單片機(jī)的選擇,如果用8051系列,由于它沒有內(nèi)部RAM,系統(tǒng)又需要一定的內(nèi)存存儲數(shù)據(jù)。AT89S51是一個(gè)低功耗、高性能CMOS 8位的單片機(jī),片內(nèi)含8k Bytes ISP的可反復(fù)擦寫1000次的Flash只讀程序存儲器,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),功能強(qiáng)大的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。而AT89S51與AT89C51相比,外型管腳完全相同,AT89C51的HEX程序無須任何轉(zhuǎn)換可直接在AT89S51運(yùn)行,且AT89S51比AT89C51新增了一些功能,相比較后,在本設(shè)計(jì)中選用AT89S51更能很好的實(shí)現(xiàn)溫度計(jì)控制功能。
測溫電路可以使用熱敏電阻之類的器件,利用其感溫效應(yīng),將被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)處理。但是這種感溫電路比較復(fù)雜,且采用熱敏電阻精度低,重復(fù)性、可靠性都比較差。
如果采用溫度傳感器DS18B20可以減少外部硬件電路,而且可以很容易直接讀取被測溫度值,進(jìn)而轉(zhuǎn)換,還可以在高溫報(bào)警,且成本低、易使用,可以很好的滿足設(shè)計(jì)要求。所以本文采用傳感器DS18B20代替?zhèn)鹘y(tǒng)的測溫電路。
溫度的顯示可以采用LED數(shù)碼管來顯示,LED亮度高、醒目,但是電路復(fù)雜,占用資
源多且信息量小。而采用液晶顯示器有明顯的優(yōu)點(diǎn):工作電流比LED小幾個(gè)數(shù)量級,功耗低;尺寸小,厚度約為LED的1/3;字跡清晰、美觀、使人舒服;壽命長,使用方便,可得性強(qiáng)。故本設(shè)計(jì)采用LCD來顯示溫度。
第二章 數(shù)字溫度計(jì)硬件電路的實(shí)現(xiàn)
根據(jù)方案的設(shè)計(jì),系統(tǒng)硬件電路主要由主控單片機(jī)AT80S51、溫度傳感器DS18B20、液晶顯示器1602等組成。
影響單片機(jī)系統(tǒng)運(yùn)行穩(wěn)定性的內(nèi)部因素包括復(fù)位電路和振蕩源的穩(wěn)定性,振蕩源的穩(wěn)定性主要由起振時(shí)間、頻率穩(wěn)定度和占空比穩(wěn)定度決定,起振時(shí)間可由電路參數(shù)整定,穩(wěn)定度受振蕩器類型、溫度和電壓等參數(shù)影響。
一、復(fù)位電路
復(fù)位電路的基本功能是:系統(tǒng)上電時(shí)提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。在本系統(tǒng)中,上電復(fù)位采用電平方式開關(guān)復(fù)位,具體電路如圖2.1所示。上電復(fù)位采用RC電路,其中電容為10F,電阻為10K
。
二、晶振電路
單片機(jī)系統(tǒng)里晶振的作用非常大,它結(jié)合單片機(jī)內(nèi)部的電路,產(chǎn)生單片機(jī)所必須的時(shí)鐘頻率,單片機(jī)的一切指令的執(zhí)行都是建立在這個(gè)基礎(chǔ)上的,晶振提供的十種頻率越高,單片機(jī)運(yùn)行的速度也就越快。單片機(jī)的晶振頻率應(yīng)低于40MHZ,本設(shè)計(jì)中采用的晶振頻率為12MHZ,具體電路如2.2所示,在晶振上并聯(lián)兩個(gè)30F電容。
第二節(jié) 溫度傳感器設(shè)計(jì)
一、概述
二、DS18B20的外形及內(nèi)部結(jié)構(gòu)
1、DS18B20引腳定義及電源工作方式
DS18B20的外形及引腳如圖2.3所示。
DS18B20引腳功能的詳細(xì)描述如表2.1所示。
DS18B20的電源供電方式有兩種,一種為寄生電源供電方
式,另一種為外部電源工作方式。其中,在寄生電源供電方式
下,DS18B20從單線信號線上汲取能量:在信號線DQ處于高電
平期間把能量儲存在內(nèi)部電容里,在信號線處于低電平期間消耗
電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。 圖2.3 DS18B20的引腳
其具體電路如圖2.4。
名稱 | 引腳功能描述 |
GND | 地信號 |
DQ | 數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用在寄生電源下,可以向器件提供電源。 |
VDD | 可選擇的VDD引腳。當(dāng)工作于寄生電源時(shí),此引腳必須接地。 |
圖2.4 寄生電源工作方式
DS18B20獨(dú)特的寄生電源方式有如下三個(gè)好處:
①進(jìn)行遠(yuǎn)距離測溫時(shí),無需本地電源;
②可在沒有常規(guī)電源的條件下讀取ROM;
③電路更簡潔,僅用一根I/O口實(shí)現(xiàn)測溫
要使DS18B20進(jìn)行精確的溫度轉(zhuǎn)換,I/O線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由于每個(gè)DS18B20在溫度轉(zhuǎn)換期間工作電流要達(dá)到1mA,當(dāng)幾個(gè)溫度傳感器掛在同一根I/O線上進(jìn)行多點(diǎn)測溫時(shí),只靠4.7K上拉電阻就無法提供足夠的能量,會(huì)造成無法轉(zhuǎn)換溫度或溫度誤差大。
因此,圖2.4的寄生電源電路只適應(yīng)于單一溫度傳感器測溫情況下使用,不適宜采用電池供電系統(tǒng)中。并且工作電源VCC必須保證在5V,當(dāng)電源電壓下降時(shí),寄生電源能夠汲取的能量也降低,會(huì)使溫度誤差變大。
DS18B20外部電源供電方式如圖2.5所示,其工作電源由VDD引腳接入,此時(shí)I/O線不需要強(qiáng)上拉,不存在電源電流不足的問題,可以保證轉(zhuǎn)換精度,同時(shí)在總線理論上可以掛接任意多個(gè)DS18B20傳感器,組成多點(diǎn)測溫系統(tǒng)。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空,否則不能轉(zhuǎn)換溫度,讀取的溫度總是85℃。
外部電源供電方式是DS18B20最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強(qiáng),而且電路也比較簡單,本設(shè)計(jì)中使用外部電源供電方式。在外接電源方式下,可以充分發(fā)揮DS18B20寬
電源電壓范圍的優(yōu)點(diǎn),即使電源電壓VCC降到3V時(shí),依然能夠保證溫度量精度。
圖2.5 外部電源工作方式
2、DS18B20內(nèi)部結(jié)構(gòu)
DS18B20內(nèi)部結(jié)構(gòu)如圖2.6,它主要由四部分組成:64位光刻ROM、溫度傳感器、存儲器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL。
圖2.6 DS18B20內(nèi)部結(jié)構(gòu)圖
光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。
(2)、溫度傳感器
DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號位,12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在DS18B20的兩個(gè)8比特的RAM中。DS18B20溫度值格式如二進(jìn)制表2.2所示,其中,前5位是符號位,如果測得的溫度大于0,這5位為0,只要將測得的數(shù)值乘以0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于 0.0625即可得到實(shí)際溫度。
例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。
表2.2 DS18B20溫度值格式表
LSB | ||||||||
MSB (unit=℃) LSB | ||||||||
S | S | S | S | S | MSB |
(3)、DS18B20的存儲器
DS18B20溫度傳感器的內(nèi)部存儲器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器的TH、TL。
①、配置寄存器
DS18B20配置寄存器各字節(jié)意義如表2.3下:
表2.3 DS18B20寄存器中各位內(nèi)容
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
TM | R1 | RO | 1 | 1 | 1 | 1 | 1 |
其中,低五位一直都是"1",TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。其中,R1和R0用來設(shè)置分辨率,具體設(shè)置如表2.4所示:(DS18B20出廠時(shí)被設(shè)置為12位)。
表2.4 溫度分辨率設(shè)置表
RR1 | RRO | 分辨率 | 溫度最大轉(zhuǎn)換時(shí)間 |
00 | 00 | 99位 | 93.75ms |
00 | 11 | 110位 | 187.5ms |
11 | 00 | 111位 | 375ms |
11 | 11 | 112位 | 750ms |
②、高速暫存存儲器
高速暫存存儲器由9個(gè)字節(jié)組成,其分配如表2.5所示。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二進(jìn)制補(bǔ)碼形式存放在高速暫存存儲器的第0和第1個(gè)字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后,數(shù)據(jù)格式如表2.2所示。對應(yīng)的溫度計(jì)算:當(dāng)符號位S=0時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。
表2.5 DS18B20暫存寄存器分布
寄存器內(nèi)容 | 字節(jié)地址 |
溫度值低位(LS Byte) | 0 |
溫度值高位(MS Byte) | 1 |
高溫限值(TH) | 2 |
低溫限值(TL) | 3 |
配置寄存器 | 4 |
保留 | 5 |
保留 | 6 |
保留 | 7 |
CRC校驗(yàn)值 | 8 |
圖2.7 DS18B20測溫原理
由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而對AT89S51單片機(jī)來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的方法來模擬單總線的協(xié)議時(shí)序來完成對DS18B20芯片的訪問。
由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)序要求。
DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號的
時(shí)序:初始化時(shí)序、讀時(shí)序、寫時(shí)序。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動(dòng)啟動(dòng)寫時(shí)序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動(dòng)讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。
DS18B20的復(fù)位時(shí)序如圖2.8所示:
圖2.8 DS18B20的復(fù)位時(shí)序
DS18B20的讀時(shí)序如圖2.9所示:
圖2.9 DS18B20的讀時(shí)序
對于DS18B20的讀時(shí)序分為讀0時(shí)序和讀1時(shí)序兩個(gè)過程。
對于DS18B20的讀時(shí)隙是從主機(jī)把單總線拉低之后,在15um之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩上。DS18B20在完成一個(gè)讀時(shí)序過程,至少需要60us才能完成。
DS18B20的寫時(shí)序如圖2.10所示:
圖2.10 DS18B20的寫時(shí)序
對于DS18B20的寫時(shí)序仍然分為寫0時(shí)序和寫1時(shí)序兩個(gè)過程。
對于DS18B20寫0和寫1時(shí)序的要求不同,當(dāng)要寫0時(shí)序時(shí),單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣I/O總線上的“0”電平,當(dāng)要寫1時(shí)序時(shí),單總線被拉低之后,在15us之內(nèi)就得釋放單總線。
系統(tǒng)對 DS18B20 的各種操作必須按協(xié)議進(jìn)行。根據(jù) DS18B20 的協(xié)議規(guī)定,微控制器控制 DS18B20 完成溫度的轉(zhuǎn)換必須經(jīng)過以下 4 個(gè)步驟 :
①每次讀寫前對 DS18B20 進(jìn)行復(fù)位初始化。復(fù)位要求主 CPU 將數(shù)據(jù)線下拉 500us ,然后釋放, DS18B20 收到信號后等待 16us~60ms 左右,然后發(fā)出60us~240us 的存在低脈沖,主 CPU 收到此信號后表示復(fù)位成功。
②發(fā)送一條 ROM 指令,具體ROM指令如表2.6所示:
表2.6 DS18B20的ROM指令集
指令名稱 | 指令代碼 | 指令功能 |
讀 ROM | 33H | 讀 DS18B20ROM 中的編碼(即讀 64 位地址) |
ROM 匹配(符合 ROM ) | 55H | 發(fā)出此命令之后,接著發(fā)出 64 位 ROM 編碼,訪問單總線上與編碼相對應(yīng) DS18B20 使之作出響應(yīng),為下一步對該 DS18B20 的讀寫作準(zhǔn)備 |
搜索 ROM | 0F0H | 用于確定掛接在同一總線上 DS18B20 的個(gè)數(shù)和識別 64 位 ROM 地址,為操作各器件作好準(zhǔn)備 |
跳過 ROM | 0CCH | 忽略 64 位 ROM 地址,直接向 DS18B20 發(fā)溫度變換命令,適用于單片機(jī)工作 |
警報(bào)搜索 | 0ECH | 該指令執(zhí)行后,只有溫度超過設(shè)定值上限或下限的片子才做出響應(yīng) |
③發(fā)送存儲器指令,具體存儲器指令如表2.7所示。
④進(jìn)行數(shù)據(jù)通信。
表2.7 DS18B20 的存儲器指令集
指令名稱 | 指令代碼 | 指令功能 |
溫度變換 | 44H | 啟動(dòng) DS18B20 進(jìn)行溫度轉(zhuǎn)換,轉(zhuǎn)換時(shí)間最長為 500us (典型為 200us ),結(jié)果存入內(nèi)部 9 字節(jié) RAM 中 |
讀暫存器 | 0BEH | 讀內(nèi)部 RAM 中 9 字節(jié)的內(nèi)容 |
寫暫存器 | 4EH | 發(fā)出向內(nèi)部 RAM 的第 3 、 4 字節(jié)寫上、下限溫度數(shù)據(jù)命令,緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù) |
復(fù)制暫存器 | 48H | 將 RAM 中第 3 、 4 字節(jié)的內(nèi)容復(fù)制到 EEPROM 中 |
重調(diào) EEPROM | 0B8H | EEPROM 中的內(nèi)容恢復(fù)到 RAM 中的第 3 、4 字節(jié) |
讀供電方式 | 0B4H | 讀 DS18B20 的供電模式,寄生供電時(shí) DS18B20 發(fā)送“ 0 ”,外接電源供電 DS18B20 發(fā)送“ 1 ” |
五、DS18B2的外部電路圖
根據(jù)設(shè)計(jì)要求,傳感器的硬件電路圖如圖2.11所示。
圖2.11 DS18B20外部電路圖
第三節(jié) 液晶顯示電路設(shè)計(jì)
液晶屏顯示模塊與數(shù)碼管相比,它顯得更為專業(yè)、漂亮。液晶顯示屏以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧、使用方便等諸多優(yōu)點(diǎn),在通訊、儀器儀表、電子設(shè)備、家用電器等低功耗應(yīng)用系統(tǒng)中得到越來越廣泛的應(yīng)用,使這些電子設(shè)備的人機(jī)界面變得越來越直觀形象,目前已廣泛應(yīng)用于電子表、計(jì)算器、IC卡電話機(jī)、液晶電視機(jī)、便攜式電腦、掌上型電子玩具、復(fù)
印機(jī)、傳真機(jī)等許多方面。1602字符型液晶模塊(帶背光),是目前工控系統(tǒng)中使用最為廣泛的液晶屏之一。
一、1602的引腳功能介紹
1602采用標(biāo)準(zhǔn)的16腳接口,其引腳功能如下:
第1腳:VSS為電源地,接GND。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高,對比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度。
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳:RW為讀寫信號線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和RW共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號,當(dāng)RS為高電平RW為低電平時(shí)可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15腳:BLA背光電源正極(+5V)輸入引腳。
第16腳:BLK背光源負(fù)極,接GND
二、1602的標(biāo)準(zhǔn)字庫
另外還有字符生成RAM(CGRAM)512字節(jié),供用戶自定義字符,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。
指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍;
指令5:光標(biāo)或顯示移位 S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo);
指令6:功能設(shè)置命令 DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線 N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示 F: 低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符;
指令7:字符發(fā)生器RAM地址設(shè)置;
指令8:DDRAM地址設(shè)置;
指令9:讀忙信號和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙;
指令10:寫數(shù)據(jù);
指令11:讀數(shù)據(jù);
液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。表3.3是1602的內(nèi)部顯示地址。
表3.3 1602的內(nèi)部顯示地址
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | 第一行 |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F | 第二行 |
比如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
四、1602的外部電路圖
根據(jù)設(shè)計(jì)要求,1602液晶顯示器的硬件電路圖如圖3.1所示。
圖3.1 LCD1602外部連接圖
第三章 數(shù)字溫度計(jì)軟件設(shè)計(jì)流程及程序
單片機(jī)應(yīng)用系統(tǒng)軟件可采用匯編語言和C語言進(jìn)行編寫,由于匯編語言的可讀性和可移植性都較差,采用匯編語言編寫的單片機(jī)應(yīng)用程序不但周期長,而且調(diào)試和排錯(cuò)也比較困難。為了提高編制單片機(jī)應(yīng)用程序的效率,改善程序的可讀性和可移植性,采用C語言無疑是一種最好的選擇。C語言具有一般高級語言的特點(diǎn),還能直接對計(jì)算機(jī)的硬件進(jìn)行操作,表達(dá)和運(yùn)算能力也較強(qiáng)。所以,本設(shè)計(jì)采用C語言編寫程序。
第一節(jié) 主程序設(shè)計(jì)
主程序的主要功能是負(fù)責(zé)讀出并處理DS18B20的測量的當(dāng)前溫度值、實(shí)時(shí)顯示溫度值。溫度測量每1s進(jìn)行一次,這樣可以在一秒之內(nèi)測量一次被測溫度。系統(tǒng)主程序首先對系統(tǒng)進(jìn)行初始化,然后顯示開機(jī)畫面。由于單片機(jī)沒有停止指令,所以可以設(shè)計(jì)系統(tǒng)程序不斷地循環(huán)執(zhí)行上述顯示結(jié)果。其程序流程如圖3.1所示。
第二節(jié) 溫度值讀取程序設(shè)計(jì)
讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖2.1。溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12位分辨率時(shí)轉(zhuǎn)換時(shí)間約為750毫秒,在本程序設(shè)計(jì)中采用1秒顯示程序延時(shí)法等待轉(zhuǎn)換的完成。
由于DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了三種時(shí)序:初始化時(shí)序、讀時(shí)序、寫時(shí)序。我們應(yīng)很好的理解和完成DS18B20各時(shí)序程序設(shè)計(jì)。
一、DS18B20的延時(shí)程序
首先,設(shè)置DS18B20的延時(shí)子程序,以利于各時(shí)序的精確延時(shí)等待,其具體程序如下。
void delay_18B20(unsigned int i)
{
while(i--);
}
該延時(shí)的指令條數(shù)為2×i+5,每一條指令的周期為2us。
二、DS18B20的初始化程序
由第二章對DS18B20的介紹可知,對DS18B20的初始化要求主 CPU 將數(shù)據(jù)線下拉 500us ,然后釋放,DS18B20 收到信號后等待16us~60us 左右,然后發(fā)出 60us~240us 的存在低脈沖,主 CPU 收到此信號后表示復(fù)位成功。根據(jù)初始化時(shí)序的要求編寫初始化子程序如下:
void Init_DS18B20(void)
{
DQ = 1; //復(fù)位 DS18B20通信端口
delay_18B20(8); //稍做延時(shí)
DQ = 0; //單片機(jī)將DQ拉低,準(zhǔn)備復(fù)位DS18B20
delay_18B20(125); //精確延時(shí)510us
delay_18B20(125);
DQ = 1; //拉高數(shù)據(jù)線
delay_18B20(4); //稍做延時(shí)后
while(DQ)
{
NOP() ; //等待DS18B20的ACK信號,如果DQ =0則初始化成功;DQ =1則初始化失敗
}
}
delay_18B20(60);
DQ=1; //拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸
}
三、DS18B20的讀時(shí)序程序
DS18B20的讀時(shí)序分為讀0時(shí)序和讀1時(shí)序兩個(gè)過程,對于DS18B20的讀時(shí)隙是從主機(jī)把單總線拉低之后,在15秒之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩上。DS18B20在完成一個(gè)讀時(shí)序過程,至少需要60us才能完成。由此,DS18B20的寫一個(gè)字節(jié)程序如下。
static void ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--) //每次讀取一位,8個(gè)字節(jié)需要讀取8次
{
dat>>=1; //低位先發(fā)
DQ = 0; // 高電平拉成低電平時(shí)讀周期開始
NOP();
DQ = 1; // 必須寫一,否則讀出的數(shù)據(jù)將是不預(yù)期的數(shù)據(jù)
delay_18B20(2);
if(DQ)
dat︱=0x80;
delay_18B20(30);
DQ=1;
NOP(); //恢復(fù)一線總線
}
return(dat);
}
四、DS18B20的寫時(shí)序程序
DS18B20的寫時(shí)序仍然分為寫0時(shí)序和寫1時(shí)序兩個(gè)過程。對于DS18B20寫0時(shí)序和寫1時(shí)序的要求不同,當(dāng)要寫0時(shí)序時(shí),單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣I/O總線上的“0”電平,當(dāng)要寫1時(shí)序時(shí),單總線被拉低之后,在15us之內(nèi)就得釋放單總線。由此,DS18B20的讀字一個(gè)節(jié)程序如下。
void WriteOneChar(uchar cmd)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
if(cmd&0x01) //地位在前
{DQ = 0; //從高電平拉至低電平時(shí),寫周期的開始
delay_18B20(20); //60us到120us延時(shí)
DQ = 1;} //發(fā)送數(shù)據(jù)
else
{ DQ = 0;
delay_18B20(20);
DQ = 0;}
delay_18B20(30); //等待DS18B20采樣
cmd>>=1; //從最低位到最高位傳入
}
}
第三節(jié) 計(jì)算溫度程序設(shè)計(jì)
計(jì)算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖3.3。
第四節(jié) 顯示數(shù)據(jù)及刷新程序設(shè)計(jì)
顯示數(shù)據(jù)刷新子程序主要時(shí)對顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為零時(shí)將符號顯示位移入下一位。程序流程圖如圖4.1。
結(jié) 論
溫度的檢測和控制是一個(gè)經(jīng)典的課題,生活中的各個(gè)領(lǐng)域里經(jīng)常需要檢測和控制某一特定環(huán)境的溫度,使之能夠穩(wěn)定在一定的溫度范圍之內(nèi)。這就要求系統(tǒng)對溫度的檢測具有足夠的精度和實(shí)時(shí)性,控制要有足夠的精度,并且盡可能具有較低的成本,這樣的產(chǎn)品才具有實(shí)用價(jià)值。DS18B20恰好具有這樣的優(yōu)勢,由于其可直接輸出數(shù)字量,不需要AD轉(zhuǎn)換,測溫范圍大,與單片機(jī)容易接口,成為原來廣為使用的熱電阻、熱電偶的理想替代品。因此本設(shè)計(jì)可以應(yīng)用于多種溫度控制場合。
本設(shè)計(jì)敘述了智能溫度計(jì)的設(shè)計(jì),包括硬件組成和軟件的設(shè)計(jì)。該系統(tǒng)在硬件設(shè)計(jì)上主要是通過其核心控制器件AT89S51將采集到的數(shù)字溫度電壓值經(jīng)單片機(jī)處理得到相應(yīng)的溫度值,送到LCD顯示器,以數(shù)字形式顯示測量的溫度。整個(gè)系統(tǒng)的軟件編程就是通過C語言對單片機(jī)AT89S51實(shí)現(xiàn)其控制功能,整個(gè)系統(tǒng)結(jié)構(gòu)緊湊,簡單可靠,操作靈活,功能強(qiáng)大,性能價(jià)格比高,較好的滿足了現(xiàn)代農(nóng)業(yè)生產(chǎn)和科研的需要。
通過仿真軟件Proteus仿真后,很好的實(shí)現(xiàn)了溫度值得顯示,滿足課程要求,具體的仿真圖如下:
畢業(yè)設(shè)計(jì)完成了,在這個(gè)過程中使我覺得不論從理論知識還是從實(shí)際設(shè)計(jì)中都學(xué)到了不少知識。首先我要感謝我的導(dǎo)師劉雙臨老師,他在我完成論文的過程中,給予了我很大的幫助。
在論文開始的初期,由于對于溫度計(jì)的認(rèn)識很少,我對于論文的結(jié)構(gòu)以及文獻(xiàn)選取等方面都有很多問題,通過對溫度計(jì)原理的認(rèn)識,并比較多種不同的設(shè)計(jì)方案,最后確定了設(shè)計(jì)溫度計(jì)的功能以及各類功能模塊的器件選擇。并在導(dǎo)師的幫助下,找到相應(yīng)的各類資料,并大致整理,粗略閱讀了一遍。認(rèn)識到很多知識以前都沒有接觸過,所以制定了一個(gè)大致的計(jì)劃,希望能夠很好的完成論文。
在接下來的畢業(yè)設(shè)計(jì)中,由于在公司實(shí)習(xí),相對在畢業(yè)設(shè)計(jì)的時(shí)間少了很多。主要是深入對前期溫度設(shè)計(jì)方案的認(rèn)識。在這期間,很多知識都是第一次接觸,通過查找了很多知識,認(rèn)真閱讀,有了一定的認(rèn)識。相對困難最大的還是硬件的設(shè)計(jì)和程序編寫方面。這些都需要很多的實(shí)際設(shè)計(jì)經(jīng)驗(yàn),第一次設(shè)計(jì)起來覺得相當(dāng)吃力,剛開始不知道從何下手。后來,通過老師的指導(dǎo),在實(shí)際的設(shè)計(jì)過程中,都有了很大進(jìn)步。
在畢業(yè)設(shè)計(jì)的過程中,還認(rèn)識到理論知識對實(shí)踐有很大的指導(dǎo)作用,只有在正確的理論指導(dǎo)下,才能設(shè)計(jì)出合乎實(shí)際需要的硬件電路。但同時(shí),實(shí)際的應(yīng)用中與理論又會(huì)有一定出入,所以要很好的掌握好理論與實(shí)際的矛盾。
這次畢業(yè)設(shè)計(jì)是對大學(xué)三年所學(xué)知識的一次實(shí)際應(yīng)用與檢閱,同時(shí)對自學(xué)能力提出了很高的要求,所以平時(shí)的學(xué)習(xí)離開思考,就是嚴(yán)重的錯(cuò)誤,不能只為了考試而學(xué)習(xí)。并且在學(xué)習(xí)的過程中更要廣闊的接觸各方面的知識,才能更好的為以后的工作打好基礎(chǔ)。
在我寫論文的過程中,劉雙臨老師給我提供了許多資料,并對實(shí)踐中出現(xiàn)的問題給予了耐心的解答,完稿之后在百忙中仔細(xì)閱讀,給出修改意見。在設(shè)計(jì)過程中,還有很多同學(xué)給予我各方面的支持,在此對他們都表示誠摯感謝!
基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)(終稿).doc
1.03 MB, 下載次數(shù): 125, 下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |