您的当前位置:首页正文

24064液晶显示

2020-06-27 来源:客趣旅游网


24064液晶显示(T6963芯片)

;这是一款并口扩展内置T6963C控制器的LCD实用显示子程序

;本程序可直接嵌入内藏T6963C控制器的LCD模块应用系统软件使用

;------------------------------------------

ORG 0000H

LJMP RETUN

ORG 0050H

RETUN: ;ACALL DL10MS

ACALL DISP ;执行本子程序

AJMP $

;------------------------------------------

DISP:; LCALL CDSET ;LCD初始化

; MOV DPTR,#HZTAB ;取字码表

; LCALL HZXSR ;送显

MOV DPTR,#ASCTB ;取字码表

LCALL HZXSR ;送显

ACALL CDSET ;清屏

MOV DPTR,#DIANYA ;取字码表

LCALL HZXSR ;送显

MOV DPTR,#XIAXIAN ;取字码表

LCALL HZXSR ;送显

MOV DPTR,#DIANLIOUS

LCALL HZXSR

MOV DPTR,#DIANLIOUX

LCALL HZXSR

MOV DPTR,#BAOHU

LCALL HZXSR

MOV DPTR,#QIDONG

LCALL HZXSR

MOV DPTR,#ZHONGS

LCALL HZXSR

MOV DPTR,#ZHONGX

LCALL HZXSR

ACALL XSASC1

RET

;---------------------------------------------------------------------

;---------------------------------------------------------

XSASC1: MOV A,#10H ;ASC字符显示

;CLR C ;ASC字符显示

;SUBB A,#20H

; MOV B,#10H

MOV DPTR,#ASCDD

LCALL HADNX ;计算当前字码的字模表首址→DPTR

MOV A,#50H

PUSH ACC

MOV A,#30H

PUSH ACC

MOV R6,#10H

XSDLP1: LCALL XSDCN ;送出一个数据显示

MOV B,#1EH

LCALL HADRX ;计算显示坐标(R2,R3)

DJNZ R6,XSDLP1 ;发送完一组(16行*8列一个字符)

POP ACC

MOV R3,A

POP ACC

MOV R2,A

MOV B,#01H

LCALL HADRX ;计算显示首址坐标(R2,R3)

RET

;---------------------------------------------------------------------

DL1S: MOV R2,#10H

DL_1: LCALL DL10MS

DJNZ R2,DL_1

RET

DL10MS: MOV R0,#0FFH

ZJ: MOV R1,#0FFH

DJNZ R1,$

DJNZ R0,ZJ

RET

;------------------------------------------

CDSET: ACALL CDCLR ;清屏 // LCD初始化

MOV R2,#00H

MOV R3,#00H

MOV R4,#42H

ACALL CDCM1 ;图形区首址(0000H)

MOV R2,#30

MOV R3,#00H

MOV R4,#43H

ACALL CDCM1 ;图形区宽度(30字节/行)

MOV R2,#00H

MOV R3,#10H

MOV R4,#40H

ACALL CDCM1 ;文本区首址(1000H)

MOV R2,#1EH

MOV R3,#00H

MOV R4,#41H

ACALL CDCM1 ;文本区宽度(30字节/行)

MOV R4,#0A7H

ACALL CDCM3 ;光标形状(8列*7行)

MOV R2,#00H

MOV R3,#00H

MOV R4,#24H

ACALL CDCM1 ;置地址指针位置(显示缓冲区RAM 0000H)

MOV R4,#80H

ACALL CDCM3 ;字符发生器为CGRAM,显示方式为逻辑“或”

MOV R4,#9BH

ACALL CDCM3 ;启用图形显示,光标闪烁

MOV R2,#00H

MOV R3,#00H

MOV R4,#21H

ACALL CDCM1 ;光标指针(00,00)

RET

;---------------------------------------------------------

CDCLR: PUSH ACC ;清屏子程序

MOV R2,#00H

MOV R3,#00H

MOV R4,#24H

ACALL CDCM1 ;置地址指针位置(显示缓冲区RAM 0000H)

MOV R4,#0B0H

ACALL CDCM3 ;设置LCD为自动写入状态

MOV R2,#20H

CDCR1: MOV R3,#00H

CDCR2: ACALL LCDS3 ;连续写过程每次写都要确认STA3=1

CLR A

ACALL CDWDT ;将(A)写入LCD状态字=清屏

DJNZ R3,CDCR2

DJNZ R2,CDCR1

MOV R4,#0B2H

ACALL CDCM3 ;结束自动写状态

POP ACC

RET

;---------------------------------------------------------

CDCM1: MOV A,R2 ;将R2/R3/R4依此写入LCD状态字

ACALL CDWDT ;将(A)写入LCD状态字

MOV A,R3

ACALL CDWDT ;将(A)写入LCD状态字

ACALL CDCM3 ;将(R4)写入LCD状态字

RET

;---------------------------------------------------------

CDCM3: PUSH DPH ;将(R4)写入LCD状态字

PUSH DPL

ACALL CDTTS ;判STA0/STA1

MOV A,R4

MOV DPTR,#0100H

MOVX @DPTR,A

POP DPL

POP DPH

RET

;---------------------------------------------------------

CDWDT: PUSH DPH ;将(A)写入LCD状态字

PUSH DPL

PUSH ACC

ACALL CDTTS ;判STA0/STA1

MOV DPTR,#0000H

POP ACC

MOVX @DPTR,A

POP DPL

POP DPH

RET

;---------------------------------------------------------

CDTTS: MOV B,#40H ;判别STA0\\STA1状态位子程序

CDDEP: MOV DPTR,#0100H ;读标志字

MOVX A,@DPTR

JNB ACC.0,CDDDP ;判别STA0

JB ACC.1,WCDTU ;判别STA1

CDDDP: DJNZ B,CDDEP ;在写指令的读写数据前,这两个标志位必须同时为1

WCDTU: RET

;---------------------------------------------------------

LCDS3: PUSH DPH ;连续写过程每次写都要确认STA3=1

PUSH DPL

PUSH ACC

PUSH B

MOV B,#20H

CDFWP: MOV DPTR,#0100H

MOVX A,@DPTR ;读出状态字

JB ACC.3,LCDTT ;判断自动写标志位STA3

DJNZ B,CDFWP

LCDTT: POP B

POP ACC

POP DPL

POP DPH

RET

;---------------------------------------------------------

HZXSR: CLR A ;依此取字码输出LCD,0FFH结束

MOVC A,@A+DPTR

CPL A

JNZ HZXSG ;将有效字码送显

RET ;0FFH则结束

;---------------------------------------------------------

HZXSG: CPL A ;分析字码表取出的数据是命令/ASC/汉字?转相应处理

MOV R0,A

CLR C

SUBB A,#20H ;命令?字符?

JC DDCOM ;转命令码处理

MOV A,R0

CLR C

SUBB A,#80H ;ASC?汉字?

JNC HZDXS ;转汉字处理

MOV A,R0

PUSH DPH

PUSH DPL

LCALL XSASC ;转ASC处理

POP DPL

POP DPH

INC DPTR

AJMP HZXSR ;处理下一个字码显示

;---------------------------------------------------------

DDCOM: MOV A,R0 ;命令码分析&发送

XRL A,#0AH

JZ NXXSD ;0AH命令处理(无效)

MOV A,R0

XRL A,#0DH

JZ NXXSD ;0DH命令处理(无效)

MOV A,R0

XRL A,#1BH

JZ XSADD ;1BH命令处理

NXXSD: INC DPTR

AJMP HZXSR ;处理下一个字码显示

;---------------------------------------------------------

HZDXS: MOV A,R0 ;汉字码显示

PUSH DPH

PUSH DPL

LCALL XSHZF ;取相应字模送显

POP DPL

POP DPH

INC DPTR

AJMP HZXSR

;---------------------------------------------------------

XSASC: CLR C ;ASC字符显示

SUBB A,#20H

MOV B,#10H

MOV DPTR,#ASCDD

LCALL HADNX ;计算当前字码的字模表首址→DPTR

MOV A,R2

PUSH ACC

MOV A,R3

PUSH ACC

MOV R6,#10H

XSDLP: LCALL XSDCN ;送出一个数据显示

MOV B,#1EH

LCALL HADRX ;计算显示坐标(R2,R3)

DJNZ R6,XSDLP ;发送完一组(16行*8列一个字符)

POP ACC

MOV R3,A

POP ACC

MOV R2,A

MOV B,#01H

LCALL HADRX ;计算显示首址坐标(R2,R3)

RET

;--------------------------------------------------------

XSADD: INC DPTR ;1BH命令处理 //地址指针设置

CLR A

MOVC A,@A+DPTR

MOV B,#1EH

MUL AB

MOV R2,A

MOV R3,B

INC DPTR

CLR A

MOVC A,@A+DPTR

MOV B,#08H

DIV AB

MOV B,A

LCALL HADRX ;计算显示首址坐标(R2,R3)

MOV R4,#24H

LCALL CDCM1 ;将计算好的显示位置写LCD

INC DPTR

AJMP HZXSR ;下一数据处理

;---------------------------------------------------------

HADRX: MOV A,R2 ;计算显示首址坐标(R2列,R3行)

ADD A,B

MOV R2,A

MOV A,R3

ADDC A,#00H

MOV R3,A

RET

;---------------------------------------------------------

HADNX: PUSH ACC ;计算当前字码的字模表首址→DPTR

MUL AB

ADD A,DPL

MOV DPL,A

MOV A,B

ADDC A,DPH

MOV DPH,A

POP ACC

RET

;---------------------------------------------------------

XSDCN: MOV R4,#24H ;送出一个数据显示

LCALL CDCM1 ;设置当前送显地址

MOV A,R3

PUSH ACC

CLR A

MOVC A,@A+DPTR

MOV R3,A

MOV R4,#0C4H

LCALL CDCM2 ;将R3写LCD,地址不变

INC DPTR

POP ACC

MOV R3,A

RET

;---------------------------------------------------------

CDCM2: MOV A,R3 ;将(R3)写LCD,地址不变

ACALL CDWDT ;将(A)写入LCD状态字

ACALL CDCM3 ;将(R4)写入LCD状态字

RET

;---------------------------------------------------------

XSHZF: CLR C ;汉字送显示

SUBB A,#80H

MOV B,#32

MOV DPTR,#HZKDD

LCALL HADNX ;计算当前字码的字模表首址→DPTR

MOV A,R2

PUSH ACC

MOV A,R3

PUSH ACC

MOV R6,#10H

HZPXS: LCALL XSDCN ;送出一个数据显示

MOV B,#01H

LCALL HADRX ;计算显示首址坐标(R2,R3)

LCALL XSDCN ;送出一个数据显示

MOV B,#29

LCALL HADRX ;计算显示首址坐标(R2,R3)

DJNZ R6,HZPXS ;发完一组(一个汉字16*16)

POP ACC

MOV R3,A

POP ACC

MOV R2,A

MOV B,#02H

LCALL HADRX ;计算显示首址坐标(R2,R3)

RET

因篇幅问题不能全部显示,请点此查看更多更全内容