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