导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→24064液晶显示(T6963芯片)

* 89450: 24064液晶显示(T6963芯片)

   sosemi 
sosemi发表的帖子 

 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
;---------------------------------------------------------------字码表

字符太长以下部分请访问:




发表时间:2006年2月27日13:15:50

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:供应光网络存储及SCSI产品深圳丰泽主营:Adaptec、IBM、HP、Qlogic、Emulex、
[下一篇帖子]:我也需要麻烦给我发一份了  ..本人非常感谢!!!