摘 要:為了檢測(cè)現(xiàn)場(chǎng)溫度,并直觀反映其變化趨勢(shì),設(shè)計(jì)了基于STC89C52單片機(jī)的溫度檢測(cè)系統(tǒng)。利用數(shù)字溫度傳感器DS18B20采集溫度信號(hào),該信號(hào)送入STC89C52單片機(jī)處理,后由液晶顯示器LCD12864 (ST7920)顯示溫度值,并繪制出溫度變化曲線。實(shí)測(cè)結(jié)果表明,系統(tǒng)可靠性、測(cè)試精度及溫度趨勢(shì)曲線繪制達(dá)到設(shè)計(jì)要求。
關(guān)鍵詞:STC89C52單片機(jī); DS18B20; LCD12864(ST7920); 溫度檢測(cè)系統(tǒng)
中圖分類(lèi)號(hào):TN91934; TP368 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1004373X(2012)22001004
在某些檢測(cè)領(lǐng)域?qū)⒈粶y(cè)溫度數(shù)字化顯示還不足以完全反應(yīng)其變化過(guò)程和變化規(guī)律,而繪制出趨勢(shì)曲線是有效方法之一。其中一種解決方案是將單片機(jī)作為下位機(jī)采樣現(xiàn)場(chǎng)溫度,將其上傳給PC機(jī)繪制曲線。有鑒于點(diǎn)陣型圖形液晶顯示器成本逐年降低、顯示容量越來(lái)越大、工耗越來(lái)越小、而且可以方便地與單片機(jī)接口,本文設(shè)計(jì)了一種溫度檢測(cè)系統(tǒng)。利用DS18B20采集溫度,LCD12864(ST7920)液晶顯示器直接與STC89C52單片機(jī)接口,在LCD12864(ST7920)上顯示被測(cè)溫度和溫度曲線。
1 系統(tǒng)組成
系統(tǒng)主要由單片機(jī)STC89C52,溫度傳感器DS18B20,點(diǎn)陣型液晶顯示器LCD12864(ST7920),鍵盤(pán)電路和報(bào)警電路組成(如圖1所示)。
圖1 系統(tǒng)框圖STC89C52用于實(shí)現(xiàn)算法、是整個(gè)系統(tǒng)的主控核心;LCD12864用于顯示實(shí)測(cè)溫度、溫度曲線、時(shí)間和日期等參數(shù);DS18B20用于溫度采集;鍵盤(pán)電路用于設(shè)定相關(guān)參數(shù)(上下限溫度值、時(shí)間);報(bào)警電路用于溫度超限報(bào)警。
2 主要硬件設(shè)計(jì)
2.1 STC89C52單片機(jī)系統(tǒng)
STC89C52單片機(jī)系統(tǒng)由單片機(jī),時(shí)鐘電路,復(fù)位電路組成。單片機(jī)系統(tǒng)如圖2所示。
圖2 STC89C52單片機(jī)系統(tǒng)STC89C52單片機(jī)具有抗干擾性能強(qiáng)、速度快、功耗低和指令代碼完全兼容8051單片機(jī)等特點(diǎn)。其主要參數(shù)為[12]:時(shí)鐘頻率最高可達(dá)80 MHz;內(nèi)置8 KB的FLASH ROM,512 B的RAM和2 KB的E2PROM;3個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu)。
STC89C52的P0口作為普通I/O口使用,與12864液晶顯示器DB0~DB7數(shù)據(jù)口相連,根據(jù)P0口硬件特點(diǎn)在其外部必須接上上拉電阻。
時(shí)鐘電路采用內(nèi)部時(shí)鐘方式,為單片機(jī)系統(tǒng)提供時(shí)鐘信號(hào)。
復(fù)位電路采用上電自動(dòng)復(fù)位和按鍵復(fù)位的方式,只要保證加到RST引腳的高電平持續(xù)時(shí)間大于2個(gè)機(jī)器周期就能使單片機(jī)正常復(fù)位[3]。
2.2 DS18B20數(shù)字測(cè)溫電路
測(cè)溫電路的傳感器選用DS18B20數(shù)字式溫度傳感器,它具有特點(diǎn)[46]為:可通過(guò)編程的方式實(shí)現(xiàn)9~12位的數(shù)字溫度直讀;測(cè)溫范圍為-55~125 ℃,最高12位分辨率,精度可達(dá)±0.5 ℃;可設(shè)置超限溫度報(bào)警,并有搜索命令識(shí)別報(bào)警條件;單總線接口,僅需一條輸入輸出線(DQ)就能與單片機(jī)(P2.0)進(jìn)行通信。DS18B20數(shù)字測(cè)溫電路如圖3所示。
顯示電路是人機(jī)交互的核心,本系統(tǒng)需同時(shí)顯示實(shí)測(cè)溫度、上限溫度、溫度曲線,時(shí)間和日期,信息量大,故選擇點(diǎn)陣圖形液晶顯示器LCD12864(ST7920)。
LCD12864(ST7920)具有特性[79]為:4位/8位并行、2線或3線串行等多種接口方式;顯示分辨率為128×64, 內(nèi)置8 192個(gè)16×16點(diǎn)漢字,和128個(gè)16×8點(diǎn)ASCII字符集;接口方式靈活、簡(jiǎn)單,可方便的構(gòu)成中英文式人機(jī)交互圖形界面。LCD12864與單片機(jī)接口電路如圖4所示。
LCD12864(ST7920) 由DDRAM (顯示數(shù)據(jù)RAM),CGROM (字型產(chǎn)生ROM)和CGRAM (自定義字型產(chǎn)生RAM)和GDRAM(繪圖RAM)等組成,實(shí)現(xiàn)顯示字符和圖形的功能。
DDRAM模塊提供64×2個(gè)位元組的空間,最多可控制4行16字(64個(gè)字)的中文字型顯示,當(dāng)寫(xiě)入顯示數(shù)據(jù)RAM時(shí),可分別顯示CGROM與CGRAM的字型;此模塊可顯示HCGROM字型(半角)、CGRAM字型及CGROM的中文字型3種字型。液晶顯示器屏幕坐標(biāo)(AC地址)與DDRAM地址的對(duì)應(yīng)關(guān)系如表1所示。
CGRAM模塊提供4組16×16點(diǎn)的自定義圖像空間,可以將內(nèi)部字型沒(méi)有提供的圖像字型自行定義到CGRAM中,便可和CGROM中的定義一樣地通過(guò)DDRAM顯示在屏幕中。
圖4 LCD12864與單片機(jī)接口電路GDRAM提供64×32個(gè)字節(jié)的空間,實(shí)際可控制128×64點(diǎn)陣的二維繪圖緩沖空間。GDRAM的二維地址與液晶屏幕坐標(biāo)的對(duì)應(yīng)關(guān)系如圖5所示。
2.4.1 報(bào)警電路
報(bào)警電路由PNP三極管(9012),蜂鳴器及單片機(jī)的控制引腳(P21)組成。當(dāng)溫度超限, P21引腳輸出一定頻率的信號(hào),觸發(fā)蜂鳴器工作從而實(shí)現(xiàn)報(bào)警。報(bào)警電路如圖6所示。
鍵盤(pán)電路采用中斷和查詢相結(jié)合的方式設(shè)定溫度和調(diào)整時(shí)間。系統(tǒng)由4個(gè)按鍵組成,分別對(duì)應(yīng)溫度/時(shí)間設(shè)定的功能選擇,數(shù)字增加和減少的調(diào)節(jié)。當(dāng)有鍵按下時(shí),負(fù)跳變引起INT1中斷,再查詢具體按鍵,并執(zhí)行相應(yīng)功能。這種結(jié)構(gòu)既擴(kuò)充了外部中斷源,減少了CPU的工作負(fù)擔(dān),又能對(duì)按鍵進(jìn)行實(shí)時(shí)處理。鍵盤(pán)電路如圖7所示。
LM7805三端集成穩(wěn)壓器和濾波電容組成電源電路,為整個(gè)系統(tǒng)提供穩(wěn)定的工作電壓。電源電路如圖8所示。
主程序流程如圖9所示。
液晶顯示器的讀/寫(xiě)數(shù)據(jù)和數(shù)字/字符、溫度顯示、曲線繪制和時(shí)鐘顯示等功能由驅(qū)動(dòng)函數(shù)和界面顯示函數(shù)完成。
驅(qū)動(dòng)函數(shù)包括:
TestLcdIdle()
//忙檢測(cè)
WriteLcdCommand()
//寫(xiě)入命令
WriteLcdData()
//寫(xiě)入數(shù)據(jù)
ReadLcdData()
//讀出數(shù)據(jù)
界面顯示函數(shù)包括:
DisplayDdramChar()
//數(shù)字/字符顯示
DrawGdramSelfChar()
//自定義字符顯示
SetGdramDot()/DrawGdramLine()
//描點(diǎn)/畫(huà)線
3.2 溫度采集函數(shù)
啟動(dòng)DS18B20溫度轉(zhuǎn)換和數(shù)據(jù)傳輸必須嚴(yán)格按照其時(shí)序進(jìn)行,溫度采集函數(shù)包括:
InitDs18b20()//啟動(dòng)DS18B20
WriteDs18b20OneByte()
//寫(xiě)命令/數(shù)據(jù)(上下限溫度)
ReadDs18b20Data()
//讀出溫度值(實(shí)測(cè)溫度/上下限溫度)
Ds18b20DataToString()
//轉(zhuǎn)換為顯示字符
SetDs18b20AlarmTempe()
///設(shè)定上限溫度
DisplayDs18b20AlarmTempe()
///顯示上限溫度
DisplayDs18b20DigitalTempe()
//顯示實(shí)測(cè)溫度
Draw Ds18b20AlarmTempeLine()
//繪制上限溫度線
DrawDs18b20TempeLine()//繪制實(shí)測(cè)溫度線
3.3 主函數(shù)
主函數(shù)包括初始化液晶顯示器,定時(shí)/計(jì)數(shù)器等模塊,而后調(diào)用溫度采集,界面顯示等函數(shù)。
(1) 初始化
TimerInit()
//T0為定時(shí)器,工作方式1,定時(shí)每50 ms產(chǎn)生中斷
InitLcdBase()
//液晶顯示器初始化
ClearLcdGdram()
//清液晶顯示器的圖形RAM
(2) 時(shí)間/日期設(shè)定,日期和靜態(tài)指針時(shí)鐘顯示
SetClock()
//設(shè)定時(shí)間
SetDate()
//設(shè)定日期
RunDate()
//日期顯示
(3) 主循環(huán)
RunDigitalClock()
//動(dòng)態(tài)數(shù)字時(shí)鐘顯示
每50 ms采樣一次(即每50 ms調(diào)用上述溫度采集函數(shù)),共采樣6次,利用去極值平均值濾波法得到實(shí)測(cè)溫度(采樣的6個(gè)數(shù)據(jù)排序后去掉最大值和最小值再平均) [10],顯示實(shí)測(cè)溫度,繪制曲線,并判斷是否超限。
4 實(shí) 驗(yàn)
系統(tǒng)實(shí)際運(yùn)行結(jié)果如圖10~圖13所示。
圖10 系統(tǒng)實(shí)際運(yùn)行結(jié)果(一) 圖11 系統(tǒng)實(shí)際運(yùn)行結(jié)果(二)
左邊顯示包括:
(1) “12/06/21”為陽(yáng)歷日期,格式為年/月/日。
(2) “16:59:09”為數(shù)字時(shí)鐘,格式為小時(shí):分鐘:秒。
(3) “S:30 ℃”代表設(shè)定的上限溫度;“<”,“=”,“>”代表上限溫度與實(shí)測(cè)溫度的大小關(guān)系。
(4) “46.84 ℃”, “26.35 ℃”, “31.23 ℃”,
“40.99 ℃”等代表實(shí)測(cè)溫度。
圖中右邊為溫度曲線和上限溫度線。
時(shí)間和溫度上限值可通過(guò)程序或鍵盤(pán)設(shè)定。
實(shí)測(cè)溫度的誤差范圍(單位:℃)在(-0.5~0.5)/100內(nèi),繪制的溫度曲線能夠直觀地反映其變化情況。
圖12 系統(tǒng)實(shí)際運(yùn)行結(jié)果(三) 圖13 系統(tǒng)實(shí)際運(yùn)行結(jié)果(四)
5 結(jié) 論
利用點(diǎn)陣型液晶顯示器和單片機(jī)直接接口顯示被測(cè)溫度和繪制曲線,可以更直觀地反映其變化趨勢(shì),為后續(xù)研究其變化規(guī)律奠定基礎(chǔ)。實(shí)際運(yùn)行表明,系統(tǒng)測(cè)試精度、曲線繪制、超限報(bào)警等功能達(dá)到設(shè)計(jì)要求,整個(gè)電路簡(jiǎn)單實(shí)用,穩(wěn)定可靠。
參 考 文 獻(xiàn)
[1] 吳健,侯文,鄭賓.基于STC89C52單片機(jī)的溫度控制系統(tǒng)[J].電腦知識(shí)與技術(shù),2011(4):902903.
[2] 王節(jié)旺.一種基于STC89C52RC單片機(jī)的計(jì)時(shí)系統(tǒng)的設(shè)計(jì)方案[J].微型機(jī)與應(yīng)用,2011,30(6):2830.
[3] 張毅剛,彭喜元.單片機(jī)原理與應(yīng)用設(shè)計(jì)[M].北京:電子工業(yè)出版社,2010.
[4] 孫明利,鮑健,張爍.單總線技術(shù)及DS18B20的溫度測(cè)量實(shí)現(xiàn)[J].大氣與環(huán)境光學(xué)學(xué)報(bào),2010(4):322326.
[5] 陶潔,肖桂鳳,遲權(quán)德.基于AT89C52單片機(jī)的超聲波測(cè)距儀的設(shè)計(jì)[J].電子設(shè)計(jì)工程,2012,20(2):135140.
[6] 黃河.基于單總線的數(shù)字溫度計(jì)設(shè)計(jì)[J].湘潭師范學(xué)院學(xué)報(bào):自然科學(xué)學(xué)報(bào),2008,30(4):6063.
[7] 田開(kāi)坤.基于LCD12864顯示器的數(shù)字示波器設(shè)計(jì)[J].電子制作,2011(5):3037.
[8] 李金群.基于51單片機(jī)的12864液晶圖文顯示研究[J].機(jī)電信息,2010(36):139140.
[9] 彭真真.單片機(jī)驅(qū)動(dòng)LCD12864顯示的應(yīng)用