⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t6963c控制器的lcd实用显示子程序.asm

📁 T6963C控制器的LCD实用显示子程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;这是一款并口扩展内置T6963C控制器的LCD实用显示子程序
;本程序可直接嵌入内藏T6963C控制器的LCD模块应用系统软件使用
;字的点阵数据可以由单片机常用开发小工具--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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -