基于單片機(jī)C8051F020的液晶顯示的接口電路和程序?qū)崿F(xiàn)
在單片機(jī)系統(tǒng)設(shè)計(jì)中,LCM(液晶顯示模塊)人機(jī)交互界面的設(shè)計(jì)往往是很重要的一個環(huán)節(jié)。LCM可以用于智能儀器上的顯示設(shè)定參數(shù)、狀態(tài)提示符、檢測結(jié)果和待輸入?yún)?shù)等功能。本文結(jié)合電解質(zhì)分析儀的設(shè)計(jì)要求,采用液晶顯示模塊YXD—12864A2LCM,研究并實(shí)現(xiàn)了以單片機(jī)C8051F020為基礎(chǔ)的液晶顯示的接口電路和程序設(shè)計(jì),添加了按鍵系統(tǒng),從而達(dá)到方便用戶使用的目的。
1電解質(zhì)分析儀簡介
本系統(tǒng)所設(shè)計(jì)的電解質(zhì)分析儀(Electrolyte Analyzer)是一種具有高分辨率和高精度的儀器,可以與多種離子選擇電極配套使用,可用自動方法測定樣品中鉀、鈉、氯、鈣離子的濃度和pH值。其結(jié)構(gòu)方框圖如圖1所示。儀器采用單片機(jī)C8051F020為核心芯片進(jìn)行設(shè)計(jì),在測量室內(nèi)由化學(xué)傳感器采集電解質(zhì)的電位信號傳送給信號調(diào)理電路,經(jīng)過信號調(diào)節(jié)后送給主電路板進(jìn)行A/D轉(zhuǎn)換,然后輸出顯示到LCM上,LCM參數(shù)、測量結(jié)果的顯示等都可由鍵盤操作。與上位機(jī)的通信上,采用RS 232通信方式傳輸數(shù)據(jù)。本儀器的特點(diǎn)是可以單機(jī)使用、也可以與上位機(jī)連接使用,與上位機(jī)連接后通過界面操作可以幫助用戶完成病人信息的查詢、存儲、儀器工作情況的實(shí)時檢測等功能。
圖1電解質(zhì)分析儀結(jié)構(gòu)方框圖
系統(tǒng)顯示部分采用圖形液晶顯示模塊YXD-12864A2LCM,安裝在儀器的表面,用來顯示參數(shù)設(shè)置、測量結(jié)果、定標(biāo)、質(zhì)控等的情況。界面顯示與參數(shù)設(shè)定及翻頁等功能通過按鍵的控制來實(shí)現(xiàn)。
2 YXD-12864A2LCM
2.1模塊介紹
YXD-12864A2LCM是一種圖形點(diǎn)陣液晶顯示模塊,它主要由行驅(qū)動器、列驅(qū)動器及128x64全點(diǎn)陣液晶顯示器組成。可完成圖形顯示,也可以顯示4x8個(16&TImes;16點(diǎn)陣)漢字。YXD-12864A2模塊共有20個引腳。其中,第1腳VSS接系統(tǒng)地;第2腳VDD接電源電壓;第3腳V0接液晶顯示器驅(qū)動電源;第4腳D/I接數(shù)據(jù)指令選擇信號;第5腳R/W接讀寫選擇信號;第6腳接讀寫使能信號,E為高時,數(shù)據(jù)被讀出,而在E的下降沿到來時,數(shù)據(jù)被鎖存到DB0~DB7;第7~14腳接三態(tài)數(shù)據(jù)總線;第15、16腳接片選信號;第17腳接復(fù)位信號;第18腳Vout接內(nèi)部負(fù)壓發(fā)生器輸出電壓端;第19腳接LED背光電源正極;第20腳接LED背光電源負(fù)極。
2.2接口電路
接口電路圖和原理圖如圖2,圖3所示,C8051F020的P3口作為數(shù)據(jù)口與液晶模塊DB口相連;P2.0為復(fù)位引腳控制端;P2.1、P2.4、P2.5作為普通的I/O口使用,分別接液晶模塊的使能端E、寄存器選擇引腳D/I、讀寫引腳R/W;P2.2、P2.3分別接片選信號左或者右,對顯示進(jìn)行定位。
圖2 LCM接口電路圖
圖2的電路圖中,R28和R41為上拉電阻,因?yàn)樗總€端口是與單片機(jī)相連的,對于顯示器而言工作電壓是5 V,而C8051F020工作電壓是3.3 V,要使C8051F020輸出能更好地驅(qū)動5 V輸入的LCM,就要將每個端口通過一個上拉電阻接到5 V電源,這樣就可以保證C8051F020的邏輯“1”輸出能被提升到5 V.
圖3接口電路原理圖
2.3軟件設(shè)計(jì)
顯示字符:從屏幕指定的位置開始顯示指定的字符串。此LCM是128x64位的液晶顯示屏,每個字符所占用的點(diǎn)陣是8x8.顯示位置由兩個坐標(biāo)參數(shù)據(jù)決定,橫坐標(biāo)x表示“行”,取值范圍為0~7;第0行對應(yīng)屏幕最上邊的一行,第7行對應(yīng)最下面一行。縱坐標(biāo)y表示“列”,取值范圍為0~15,第0列對應(yīng)屏幕最左邊的一列,第15列對應(yīng)屏幕最右邊的一列。
假設(shè)要從第4行第8列的位置顯示字符“K”,則程序段如下:
;entrancd:C(left,right),R4(X),R5(Y),DPTR,R6(length)
data_to_lcd:
SETB CS1_LCD
CLR CS2_LCD
JNC data_to_lcd2
CLR CS1_LCD
SETB CS2_LCD
data_to_lcd2:
MOV A,R4
LCALL display_X_line
MOV A,R5
LCALL display_Y_line
MOV A,R6
MOV R7,A
LCALL write_LCD_bytes
MOV A,R4
INC A
LCALL display_X_line
MOV A,R5
LCALL display_Y_line
MOV A,R6
MOV R7,A
INC DPTR
LCALL write_LCD_bytes
CLR CS2_LCD
CLR CS1_LCD
RET
SETB C;片選的設(shè)定
MOV R4,#04H;位置行號
MOV R5,#08H;位置列號
MOV DPTR,#K;字符內(nèi)容
MOV R6,#08;定義字符的長度
LCALL data_to_lcd;調(diào)用輸出字符的子程序