功能LCD显示实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;//******************************************************************
;文件名: LCD_S for MCU51 (LCD12864串行接口程序)
;功能: LCD显示实验
;接线: JT2B跳线器的两只短路帽置位上端。
; 对应连接液晶显示模块的RS、R/W、E、PSB、RST到CPU模块的P10~P14。
;//******************************************************************
;RS=CS=D/I
;R/W=STD=STD
;E=SCLK=SCLK
CS BIT P1.0 ;D/I
STD BIT P1.1 ;串行数据线 W/R
SCLK BIT P1.2 ;串行时钟线 E
PSB BIT P1.3 ;CS1
RES BIT P1.4 ;RES
START EQU 30H ;起始字节
COM EQU 31H ;命令/数据
HDATA EQU 32H ;命令/数据字节高位
LDATA EQU 33H ;命令/数据字节低位
ASC EQU 34H ;ASCII数据单元
XPOS EQU 35H
YPOS EQU 36H
ORG 0000H
MAIN:
MOV SP,#60H
CLR RES
SETB RES ; 可以直接接电源VDD
SETB CS ; 可以直接接电源VDD
CLR PSB ; 可以直接接地VSS
CALL LCDRESET ; 模块系统初始化
CALL HZKDIS ; 显示汉字子程序
MOV START,#0F8H ; 写入命令(11111000)
MOV COM,#80H ; 设定显示位置
CALL LCDWRITE
MOV START,#0FAH ;写数据 (11111010)
MOV COM,#10H ;显示字符
CALL LCDWRITE
MOV COM,#11H ;显示字符
CALL LCDWRITE
MOV COM,#1EH ;显示字符
CALL LCDWRITE
MOV COM,#1FH ;显示字符
CALL LCDWRITE
MOV START,#0F8H ; 写入命令(11111000)
MOV COM,#34H ;扩充功能设定
CALL LCDWRITE
MOV COM,#05H ;反白选择
CALL LCDWRITE
CALL DL40MS ;延时
CALL DL40MS
CALL DL40MS
MOV A,#055H ;绘图方式下写55数据
CALL LCDFILL
CALL CLEAR ;清屏
JMP MAIN
CLEAR: ;清屏子程序
MOV A,#00H
CALL LCDFILL
RET
LCDRESET:
LCALL DL1MS ;延时等待内部复位
MOV START,#0F8H ; 写入命令(11111000)
MOV COM,#30H ;使用基本指令集
LCALL LCDWRITE
MOV COM,#0CH
LCALL LCDWRITE ;整体显示ON
MOV COM,#01H ;清屏
LCALL LCDWRITE
LCALL DL1MS
MOV COM,#06H ;显示右移
LCALL LCDWRITE
LCALL DL1MS
RET
LCDWRITE: ;模块写入子程序
MOV A,COM ;送待发数据命令A
ANL A,#0F0H ;屏蔽低4位
MOV HDATA,A ;将高4位送HDATA单元
MOV A,COM ;取低4位
SWAP A ;高低4位互换
ANL A,#0F
0H
MOV LDATA,A ;将低4位送LDATA单元
MOV A,START ;取起始字节
LCALL SENDBIT ;发送
LCALL DL1MS ;延时1ms
MOV A,HDATA
LCALL SENDBIT
LCALL DL1MS
MOV A,LDATA
LCALL SENDBIT
LCALL DL1MS
RET
HZKDIS: ;显示汉字子程序
MOV R5,#2
MOV START,#0F8H ;写入命令(11111000)
MOV COM,#80H ;设定显示位置
LCALL LCDWRITE
MOV DPTR,#TAB ;指向文字型代码表
MOV A,#00H ;取汉字代码低位
DIS_1: MOV R6,#8 ;每行八个汉字
DIS_2: MOV START,#0FAH ;写数据 (11111010)
CLR A
MOVC A,@A+DPTR
MOV COM,A
CALL LCDWRITE ;写入显示模块
INC DPTR ;取汉字代码高位
CLR A
MOVC A,@A+DPTR
MOV COM,A
CALL LCDWRITE ;写入显示模块
INC DPTR
CALL DL40MS
DJNZ R6,DIS_2 ;未显示完则继续
MOV START,#0F8H ; 写入命令(11111000)
MOV COM,#90H ;第二行地址
CALL LCDWRITE
DJNZ R5,DIS_1
MOV R5,#2
MOV START,#0F8H ;写入命令(11111000)
MOV COM,#88H ;第三行地址
CALL LCDWRITE
DIS_4: MOV R6,#08H
DIS_3:
MOV START,#0FAH ;写数据 (11111010)
CLR A
MOVC A,@A+DPTR
MOV COM,A
CALL LCDWRITE ;写入显示模块
INC DPTR ;取汉字代码高位
CLR A
MOVC A,@A+DPTR
MOV COM,A
CALL LCDWRITE ;写入显示模块
INC DPTR
CALL DL40MS
DJNZ R6,DIS_3 ;未显示完则继续
MOV START,#0F8H ; 写入命令(11111000)
MOV COM,#98H ;第四行地址
CALL LCDWRITE
DJNZ R5,DIS_4 ;遇“0”结束显示
RET ;写完两行则结束
LCDFILL: ;绘图
MOV R4,A
MOV XPOS,#0
MOV YPOS,#0
MOV START,#0F8H
MOV COM,#30H ;重新选择基本指令?
CALL LCDWRITE
MOV COM,#01H ;清屏
CALL LCDWRITE
MOV COM,#36H ;扩充功能设定
CALL LCDWRITE
LCD_A1:
MOV YPOS,#0
LCD_A2:
MOV START,#0F8H
MOV A,XPOS ;设定绘图首地址
ADD A,#80H ; X坐标
MOV COM,A
CALL LCDWRITE
MOV A,YPOS ;Y坐标
ADD A,#80H
MOV B,A
MOV COM,A
CALL LCDWRITE
MOV START,#0FAH
MOV COM,R4
CALL LCDWRITE
CALL LCDWRITE
INC YPOS
MOV A,B
CJNE A,#87H,LCD_A2 ;最后一列地址为87H
INC X
POS
MOV A,XPOS
CJNE A,#20H,LCD_A1 ;最后行地址为80H+20H=0A0H
MOV XPOS,#0
LCD_A3:MOV YPOS,#0
LCD_A4:
MOV START,#0F8H
MOV A,XPOS ;设定绘图首地址
ADD A,#80H ; X坐标
MOV COM,A
CALL LCDWRITE
MOV A,YPOS ;Y坐标
ADD A,#80H
MOV B,A
MOV COM,A
CALL LCDWRITE
MOV START,#0FAH
MOV COM,R4
CALL LCDWRITE
CALL LCDWRITE
INC YPOS
MOV A,B
CJNE A,#8FH,LCD_A4 ;最后一列地址为8FH
INC XPOS
MOV A,XPOS
CJNE A,#20H,LCD_A3 ;最后行地址为80H+20H=0A0H
RET
SENDBIT: ;串行字节数据发送子程序
MOV R7,#08H ;发送8位
SEND_1:
RLC A
MOV STD,C ;数据送数据线
CLR SCLK ;产生同步时钟
SETB SCLK
DJNZ R7,SEND_1 ;未发送完8位继续
RET
DL1MS: ;延时子程序
PUSH 00H ;0.1MS
PUSH 01H
PUSH 02H
MOV R2,#01H
WA_PA: MOV R0,#0FH
WA_PB: MOV R1,#0FH
DJNZ R1,$
DJNZ R0,WA_PB
DJNZ R2,WA_PA
POP 02H
POP 01H
POP 00H
RET
NOP
RET
DL40MS: ;延时子程序40MS
SETB PSW.3
MOV R2,#03H
DL_PA: MOV R0,#0FFH
DL_PB: MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,DL_PB
DJNZ R2,DL_PA
CLR PSW.3
RET
TAB:
DB '----天煌教仪----'
DB '----中文图形----'
DB '--液晶显示模块--'
DB '电话571-85222070'
DB 00H
END