(2)左半屏写数据子程序
WR_DATA1:MOV DPTR,#CRADR1 ;/*读状态字口地址*/
WAIT11: MOVX A,@DPTR ;/* 读状态字 */
JB ACC.7,WAIT11 ;/*判忙标志BF,如BF=1忙,等待*/
MOV DPTR,#DWADR1 ;/*写数据字口地址*/
MOV A,DATA ;/*取数据/
MOVX @DPTR,A ;/*写数据*/
RET
(3)右半屏写指令子程序WR_CMD2和右半屏写数据子程序WR_DATA2的编制同左半屏子程序相同,只是对应口地址不同。
8X16字符显示子程序:MGLS12864液晶显示屏由二片HD61202控制,LCD显示中应尽量避免一个字符一半在左半屏显示,另一半在右半屏显示的情况。设列地址寄存器为COLUMN,页地址寄存器为PAGE,要显示的字符代码寄存器为ASCIICODE,W78E58内RAM28H-RAM37H共16个字节存放8×16的点阵数据,生成的8×16点阵库文件存放在单片机W78E58存储器中的首地址定义为ASCII_DOT816。
DISP_ASCII816: MOV DPTR,#ASCII_DOT816 ;8×16点阵库首地址
MOV A,ASCIICODE ;显示字符代码ASCIICODE
MOV B,#16 ;每个字符点阵占16个字节
MUL AB ;计算显示字符在字库的首地址
ADD A,DPL
MOV DPL,A
MOV A,DPH
ADDC A,B
MOV DPH,A
;
MOV R0,#28H ;将点阵数据放到RAM28H-RAM37H
MOV R2,#00H
LP_MOVDOT16: MOV A,R2
MOVC A,@A+DPTR
MOV @R0,A ;如要将字符反显(黑底白字),则读出点
INC R0 ;阵数据后求反放入单片机的RAM中
INC R2
CJNE R2,#16,LP_MOVDOT16
;
PUSH COLUMN
MOV A,COLUMN ;显示列数COLUMN是否在右半屏
CJNE A,#64,ASCII_IF64
ASCII_IF64: JNC ASCII_YGE64
MOV DPTR,#CWADR1 ;在左半屏时,选择左半屏写指令代码地址
CLR FIRST0_SECOND1_BIT ;左半屏列数标志BIT=0
SJMP ALL_COLUMN
ASCII_YGE64: CLR C
SUBB A,#64
MOV COLUMN,A
MOV DPTR,#CWADR2 ;在右半屏时,选择右半屏写指令代码地址
SETB FIRST0_SECOND1_BIT ;右半屏列数标志BIT=1
ALL_COLUMN: MOV A,PAGE
ADD A,#10111000B ;设置页地址命令
MOVX @DPTR,A
MOV A,COLUMN ;设置列地址命令
ADD A,#01000000B
MOVX @DPTR,A
MOV DPTR,DWADR1 ;根据左右半屏列数标志,选择写显示数据地址
JNB FIRST0_SECOND1_BIT,ALLMOV1
MOV DPTR,DWADR2
ALLMOV1: MOV R0,#28H
MOV_8BYTE1: MOV A,@R0
MOVX @DPTR,A ;写显示数据
NOP
INC R0
CJNE R0,#30H,MOV_8BYTE1
;
MOV DPTR,#CWADR1
JNB FIRST0_SECOND_BIT,ALLMOV2
MOV DPTR,#CWADR2
ALLMOV2: MOV A,PAGE
INC A ;页地址加1
ADD A,#10111000B
MOVX @DPTR,A ;设置页地址命令
MOV A,COLUMN ;设置列地址命令
ADD A,#01000000B
MOVX @DPTR,A
MOV DPTR,DWADR1;根据左右半屏列数标志,选择写显示数据地址
JNB FIRST0_SECOND1_BIT,ALLMOV3
MOV DPTR,DWADR2
ALLMOV3: MOV R0,#30H
MOV_8BYTE2: MOV A,@R0
MOVX @DPTR,A ;写显示数据
INC R0
CJNE R0,#38H,MOV_8BYTE2
;
POP COLUMN
RET
16×16汉字显示子程序:16×16汉字显示子程序与8X16字符显示子程序基本相同。不同在于每次写32字节显示数据,可定义W78E58内RAM28H-RAM47H共32个字节存放16×16的点阵数据,生成的16×16点阵库文件存放在单片机W78E58存储器中的首地址定义为HZK_DOT16X16。具体程序略,读者如需要可来函索取。
结语
本文在介绍液晶显示模块与单片机接口的同时,采用了新颖的改造方案以解决应用中的问题。由于节省了单片机口线,使系统资源得到了充分利用。可显示汉字、字符和图形,使人机界面更为美观、易读。其它如8×8西文点阵字库及图形的建立和显示可参照上面介绍的方法来编写程序。由于各种液晶显示模块的接口基本相同,因此本文所讨论的内容也适用于其它型号的液晶显示模块。液晶显示较其它显示终端有许多优点:功耗低且字型美观、可用集成电池供电,便于携带等。相信它将得到越来越广泛的使用。
参考文献:
[1] 李维计是,郭强. 液晶显示应用技术 北京:电子工业出版社,2000.
[2] 陈粤初,窦振中 单片机应用系统设计与实践 北京:北京航空航天大学出版社,1991.
[3] 王士元 C高级实用程序设计 北京:清华大学出版社,1998.
[4] 潘建华,卫跃文 C语言实用软件界面技术 西安电子科技大学出版社, 1996.
【作者简介】
陆爱明,男,1965年12月出生,1986年7月毕业于华中理工大学计算机系,1989年6月硕士研究生毕业于浙江大学信电系。现在浙江省钱江家用电器厂技术科工作。长期从事计算机通信、单片机(微控制器)硬件和软件方面的研究开发工作。