周鵬
(華僑大學(xué) 信息學(xué)院,福建 廈門 361021)
圖文菜單界面是一種操作簡(jiǎn)便、高效的交互形式,現(xiàn)已在各類嵌入式應(yīng)用系統(tǒng)中廣泛采用,如智能電子產(chǎn)品(智能測(cè)試儀、智能手機(jī)),它成為系統(tǒng)功能的”標(biāo)準(zhǔn)配置”。隨著單片機(jī)功能的提高和帶中文字庫的液晶顯示器成本降低,單片機(jī)系統(tǒng)上應(yīng)用圖文菜單已成為可能[1]。
本文設(shè)計(jì)了基于 STC12C5A60S2(簡(jiǎn)稱 STC12C)單片機(jī)的圖文菜單交互式系統(tǒng),系統(tǒng)以圖文菜單驅(qū)動(dòng)系統(tǒng)功能(時(shí)間顯示、溫度顯示和周期/頻率顯示),系統(tǒng)操作直觀、簡(jiǎn)便。
系統(tǒng)由內(nèi)置增強(qiáng)型8051的STC12C單片機(jī)、數(shù)字溫度傳感器DS18B20、時(shí)鐘芯片DS1302、液晶顯示器LCD12864(ST7920)和獨(dú)立鍵盤電路組成,如圖 1所示。STC12C單片機(jī)運(yùn)行交互式程序,是系統(tǒng)的核心;數(shù)字溫度傳感器測(cè)試溫度;時(shí)鐘芯片輸出時(shí)間;單片機(jī)內(nèi)置的可編程計(jì)數(shù)器陣列模塊(PCA)用于測(cè)周期/頻率;液晶顯示器顯示系統(tǒng)界面和被測(cè)參數(shù)。
圖1 系統(tǒng)硬件框圖
單片機(jī)系統(tǒng)由STC12C單片機(jī)、時(shí)鐘電路和復(fù)位電路組成,如圖2所示。STC12C單片機(jī)主要參數(shù)如下[2]:內(nèi)置60 KB的Flash程序存儲(chǔ)器;片內(nèi)集成1 280 B數(shù)據(jù)存儲(chǔ)器;2個(gè) 16 bit定時(shí)器/計(jì)數(shù)器,內(nèi)置兩路 PCA模塊,可用于外部脈沖的捕捉、軟件定時(shí)和高速輸出,即實(shí)現(xiàn)外部信號(hào)的周期/頻率測(cè)試。
測(cè)周期/頻率電路由STC12C單片機(jī)內(nèi)置兩路可編程計(jì)數(shù)器陣列(PCA)模塊構(gòu)成,PCA工作在捕捉模式時(shí)實(shí)現(xiàn),如圖3所示。
圖2 STC12C單片機(jī)系統(tǒng)結(jié)構(gòu)圖
PCA測(cè)周期/頻率的原理為[3]:將 CAPPn或 CAPNn(n=0,1)置 1,外部信號(hào)由 P1.3(n=0)或 P1.4(n=1)輸入,同時(shí)將 CCON中的 CCFn(n=0,1)和 CCAPMn中的ECCFn(n=0,1)置 1,當(dāng)電路采樣到外部信號(hào)的邊跳沿(上跳沿、下跳沿或上/下沿),則引起中斷。如設(shè)置為上跳沿中斷,當(dāng)信號(hào)的第1個(gè)上跳沿來到,引起中斷觸發(fā)定時(shí)器T1計(jì)數(shù);當(dāng)信號(hào)的第2個(gè)上跳沿來到,引起中斷觸發(fā)定時(shí)器T1停止計(jì)數(shù);讀取計(jì)數(shù)值,根據(jù)機(jī)器周期算出被測(cè)信號(hào)的周期和頻率。
圖3 PCA模塊結(jié)構(gòu)原理圖
數(shù)字測(cè)溫電路由數(shù)字溫度傳感器DS18B20組成,如圖4所示。它具有以下特點(diǎn)[4]:(1)測(cè)溫范圍為-55℃~+125℃,最高12位分辨率,精度可達(dá)±0.5℃;(2)可通過編程的方式實(shí)現(xiàn)9~12位的數(shù)字溫度直讀;(3)可設(shè)置超限溫度報(bào)警,并有搜索命令識(shí)別報(bào)警條件;(4)單總線接口,僅需一條輸入輸出線(DQ)就能與單片機(jī)(P1.0)進(jìn)行通信。
圖4 DS18B20數(shù)字測(cè)溫電路
時(shí)鐘電路由時(shí)鐘芯片DS1302組成,如圖5所示。它是一種高性能、低功耗、采用三線接口的實(shí)時(shí)時(shí)鐘電路,可對(duì)時(shí)間和日期進(jìn)行計(jì)時(shí)[5]。
圖5 DS1302時(shí)鐘電路
顯示器選用帶中文字庫、內(nèi)置ST7920控制芯片的液晶顯示器LCD12864,實(shí)現(xiàn)系統(tǒng)的圖文界面和運(yùn)行狀態(tài)顯示,是重要的硬件接口。LCD12864與單片機(jī)接口電路如圖6所示。
圖6 LCD12864與單片機(jī)接口電路
LCD12864由 DDRAM(顯示數(shù)據(jù) RAM)、CGROM(字型產(chǎn)生ROM)、CGRAM (自定義字型產(chǎn)生 RAM)和GDRAM(繪圖 RAM)等組成[6],DDRAM 和 GDRAM 是本系統(tǒng)圖文菜單顯示的主要模塊。
DDRAM提供64×2個(gè)位元組的空間,最多可控制4行16字(64個(gè)字)的中文字型顯示,當(dāng)寫入顯示數(shù)據(jù)RAM時(shí),可分別顯示CGROM與CGRAM的字型;此模塊可顯示HCGROM字型 (半角)、CGRAM字型及 CGROM的中文字型3種字型。液晶顯示器屏幕坐標(biāo)(AC地址)與DDRAM地址的對(duì)應(yīng)關(guān)系如表1所示。
表1 屏幕AC地址與DDRAM地址的對(duì)應(yīng)關(guān)系表
GDRAM提供64×32 B的空間,實(shí)際可控制 128×64點(diǎn)陣的二維繪圖緩沖空間。GDRAM的二維地址與液晶屏幕坐標(biāo)的對(duì)應(yīng)關(guān)系如圖7所示。
鍵盤電路由3個(gè)獨(dú)立按鍵組成,分別對(duì)應(yīng)菜單的圖標(biāo)上下移動(dòng)、確定和返回功能,如圖8所示。系統(tǒng)以巡回方式查詢是否有鍵按下并由軟件判定是何鍵按下,并執(zhí)行相應(yīng)的功能。
圖7 GDRAM二維地址與屏幕坐標(biāo)的對(duì)應(yīng)關(guān)系圖
報(bào)警電路(如圖 9所示)由 PNP三極管(9012)、蜂鳴器及單片機(jī)的控制引腳(P21)組成。當(dāng)溫度超限,P21引腳輸出一定頻率的信號(hào),觸發(fā)蜂鳴器工作從而實(shí)現(xiàn)報(bào)警。
圖8 獨(dú)立鍵盤電路
圖9 報(bào)警電路
程序采用模塊化設(shè)計(jì),流程框圖如圖10所示。
圖10 程序流程框圖
系統(tǒng)主要函數(shù)如下。
液晶顯示器函數(shù)包括液晶顯示器底層驅(qū)動(dòng)函數(shù)、中西文字符顯示函數(shù)和打點(diǎn)/繪線函數(shù)。
(1)驅(qū)動(dòng)函數(shù)
TestLcdIdle()、WriteLcdCommand()、WriteLcdData()和ReadLcdData()分別為液晶顯示器的忙檢測(cè)、寫入命令、寫入數(shù)據(jù)和讀出數(shù)據(jù)。
(2)中西文字符顯示函數(shù)
Set DdramDot、DisplayDdramChar()和 DrawGdramSelfChar()分別為設(shè)定顯示中文字符的坐標(biāo)起點(diǎn)、中西文字符顯示和自定義字符顯示。
(3)打點(diǎn)/繪線函數(shù)
SetGdramDot()、DrawGdramLine()和 DrawGdramCircle()分別為描點(diǎn)、畫線和畫圓。
DS18B20測(cè)溫函數(shù)包括啟動(dòng)溫度轉(zhuǎn)換函數(shù)、讀寫數(shù)據(jù)函數(shù)和字符轉(zhuǎn)換函數(shù)。
InitDs18b20()、WriteOneByte()、ReadData()、DataToString()和 DisplayTEMP()分別為啟動(dòng) DS18B20、寫命令/數(shù)據(jù)、讀出溫度(實(shí)測(cè)溫度/上下限溫度)、轉(zhuǎn)換為顯示字符以及顯示實(shí)測(cè)溫度/上限溫度。
菜單操作函數(shù)包括菜單/圖標(biāo)顯示函數(shù)、鍵值獲取函數(shù)以及相應(yīng)的跳轉(zhuǎn)函數(shù)。
InitMenu()、ShowMenu()、GetKeyValue()和 GetUserChoose()分別為初始化菜單(定義一個(gè)結(jié)構(gòu)體,內(nèi)含菜單項(xiàng)目數(shù),函數(shù)指針和父/子菜單指針)、菜單界面顯示、判定/獲取鍵值函數(shù)(狀態(tài)機(jī)方式實(shí)現(xiàn)[1],以提高系統(tǒng)運(yùn)行效率)以及調(diào)用與鍵值相關(guān)函數(shù)。
系統(tǒng)實(shí)際運(yùn)行結(jié)果如圖11所示。
圖11 系統(tǒng)實(shí)際運(yùn)行
(1)圖 11(a)中的圖標(biāo) 指向“時(shí) 間顯示”,按 下“確定”鍵(P23)后,即跳轉(zhuǎn)到時(shí)間顯示(圖 11(b))。 圖 11(b)中,陽歷日期的格式為年/月/日;數(shù)字時(shí)鐘的格式為小時(shí):分鐘:秒;指針時(shí)鐘的圓心以屏幕坐標(biāo)(0,0)為起點(diǎn),坐標(biāo)是(96,32),時(shí)鐘半徑為 31;秒/分/時(shí)針與實(shí)時(shí)數(shù)字時(shí)鐘對(duì)應(yīng);初始時(shí)間可通過程序設(shè)定;按 “返回”(P24)即可跳回菜單界面。
圖11(d)中,“29.07℃”代表實(shí)測(cè)溫度值;“S:25℃”代表設(shè)定的上限溫度值;溫度曲線中的實(shí)線為實(shí)測(cè)點(diǎn)繪制,虛線為上限溫度值,曲線直觀地反映了實(shí)時(shí)溫度變化情況。
圖11(f)中,被測(cè)信號(hào)為信號(hào)發(fā)生器輸出的方波,周期為 100 μs~1 000 μs, 幅值為+5 V;T 為周期,f為頻率;所繪方波為被測(cè)信號(hào)的示意波形,每刻度一個(gè)周期;所測(cè)周期誤差≤5 μs。
實(shí)驗(yàn)表明,基于STC12C單片機(jī)的圖文菜單系統(tǒng)采用模塊設(shè)計(jì),系統(tǒng)運(yùn)行穩(wěn)定可靠。系統(tǒng)操作直觀、簡(jiǎn)便,功能達(dá)到預(yù)期目標(biāo),為下一步開發(fā)多級(jí)菜單系統(tǒng)奠定了基礎(chǔ)。
[1]賈志成,程敏,宋濤,等.基于狀態(tài)機(jī)的 LCD多級(jí)菜單設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012(2):73-75.
[2]劉晉,王政林,薛凱方.基于STC12C5A60S2單片機(jī)的LED 顯示屏硬件設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2011,30(22):24-27.
[3]陳桂友.增強(qiáng)型 8051單片機(jī)實(shí)用開發(fā)技術(shù)[M].北京:北京航空航天大學(xué)出版社,2010.
[4]孫明利,鮑健,張爍.單總線技術(shù)及 DS18B20的溫度測(cè)量實(shí)現(xiàn)[J].大氣與環(huán)境光學(xué)學(xué)報(bào),2010,5(4):322-326.
[5]黃明強(qiáng).DS1302在單片機(jī)系統(tǒng)中的應(yīng)用[J].保定師范專科學(xué)校學(xué)報(bào),2004,17(2):30-33.
[6]田開坤.基于LCD12864顯示器的數(shù)字示波器設(shè)計(jì)[J].電子制作,2011(5):30-37.