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

📄 lm64c.asm

📁 多种液晶显示驱动程序。使用汇编语音编写。
💻 ASM
📖 第 1 页 / 共 4 页
字号:

;    伪彩320*240 LCD控制板(QX3224RGB1.1)  技巧演示例程
;    通过这个例程你可以知道怎样显示图形和中文的技巧
;    从上一个例程LF9111.ASM你可以看出,以三个字节(8个像素)为一个寻址单元时,编程更加方便。
;    通过调用下面的地址换算子程序和颜色设置子程序你可以像为单色LCD编程一样简单。

 CSEG   AT  0000H

;LCD控制板接口
;P1   为数据线

AOO  EQU   P3.0     ;AO   高电平时写入的数据是地址,低电平时写入的数据是显示数据。       
WRR  EQU   P3.2     ;WR   当P1口的数据有效时,WR产生一个下降沿,写一个数据完成。
D12  EQU   P3.1     ;D12  显示RAW分为二页,D12高电平时显示第一页,D12为低电平时显示第二页。
RDD  EQU   P3.3

WRDATA   EQU  28H        ;数据变量
ADDRL    EQU  30H        ;地址低位变量
ADDRM    EQU  31H        ;地址高位变量..................以一个字节为单元(8/3个像素)
ADDRH    EQU  32H
ADDBL    EQU  33H        ;地址低位   
ADDBH    EQU  34H        ;地址高位 .....................以三个字节为单元(8个像素)
TEMP1    EQU  3AH        ;
TEMP2    EQU  39H        ;通用变量
TEMP3    EQU  38H        ;
TEMP4    EQU  3BH        ;
TEMP5    EQU  3CH
TEMP6    EQU  3DH

CODEN    EQU  3EH       ;  中文字模位置代码
FCOLOR   EQU  40H        ;  前景颜色
BCOLOR   EQU  41H        ;  背景颜色

MAIN:
  NOP
  CLR  RDD
  CLR  D12
  NOP
  MOV  ADDRH,#0
  NOP
MAIN1:
  NOP
  LCALL  CLREA            ;  调用清屏子程序,
  NOP
  ;LCALL  TETT
  NOP
  LCALL  DISFORM          ;  在第一区显示表格
  NOP
  LCALL  CONT             ;  在第二区显示文字说明和彩条
  LCALL  DISCOM
  NOP
  MOV  FCOLOR,#0
  MOV  BCOLOR,#0FFH
PLAY:
  MOV  ADDBH,#057H
  MOV  ADDBL,#08EH
  MOV  CODEN,#0H
  LCALL  WRNN48
  LCALL  WRNN48
  LCALL  WRNN48
  LCALL  WRNN48
  MOV  CODEN,#5
  LCALL  WRNN48
  LCALL  WRNN48
  LCALL  WRNN48
  MOV  CODEN,#3
  LCALL  WRNN48
  MOV  CODEN,#1
  LCALL  WRNN48
  MOV  CODEN,#4
  LCALL  WRNN48
  MOV  CODEN,#2
  LCALL  WRNN48
  NOP
  INC  FCOLOR
  INC  BCOLOR
  INC  FCOLOR
  INC  FCOLOR
  NOP
  LCALL  DELAY
  LJMP  PLAY
  NOP
  NOP

DELAY:
  MOV  R5,#0
  MOV  R6,#0
  MOV  R7,#10
DEL:
  DJNZ  R5,DEL
  DJNZ  R6,DEL
  DJNZ  R7,DEL
  RET

DISCOM:
  MOV  ADDBL,#08
  MOV  ADDBH,#07DH
  MOV  BCOLOR,#0FFH
  MOV  FCOLOR,#00H
  MOV  CODEN,#7
  MOV  R1,#10
DISCOM1:
  LCALL  WRCHINA24
  DJNZ  R1,DISCOM1
  MOV  ADDBL,#028H
  MOV  ADDBH,#7DH
  MOV  CODEN,#16H
  LCALL  WRNUN
  DEC  CODEN
  LCALL  WRNUN
  DEC  CODEN
  LCALL  WRNUN
  MOV  R1,#10
DISCOM2:
  LCALL  WRNUN
  DJNZ  R1,DISCOM2
  RET
;;==================================================================
;  调用前先预置CODEN,ADDBH,ADDBL,FCOLOR,BCOLOR
WRCHINA:                         ;写一个16*16的中文到LCD子程序
  MOV   TEMP5,ADDBL
  MOV   TEMP6,ADDBH
  MOV   DPTR,#CHINTAB
  MOV   A,CODEN           ;
  MOV   B,#32             ;通过中文代码算出每个中文字模的首地址=CHINTAB+32*CODEN
  MUL   AB                ;因为一个16*16的中文占用32个字节
  ADD   A,DPL             ;
  MOV   DPL,A             ;
  MOV   A,B               ;
  ADDC  A,DPH             ;
  MOV   DPH,A             ;

  MOV   R5,#16
  LCALL  FORADDR         
  LCALL  SETADDR
WRCHIN1:
  CLR   A
  MOVC  A,@A+DPTR
  MOV  WRDATA,A
  LCALL  SETCOLOR              ;调用颜色设置子程序把8个像素写入LCD
  INC   DPTR
  CLR   A
  MOVC  A,@A+DPTR
  MOV  WRDATA,A
  LCALL  SETCOLOR              ;调用颜色设置子程序把8个像素写入LCD
  MOV  A,#80             ;
  ADD  A,ADDBL           ;
  MOV  ADDBL,A           ;
  CLR  A                 ;用ADDBH,ADDBL=ADDBH,ADDL+40实现换一行
  ADDC A,ADDBH           ;
  MOV  ADDBH,A           ;
  LCALL  FORADDR         ;
  LCALL  SETADDR         ;
  INC  DPTR
  DJNZ  R5,WRCHIN1              ;连续写16行
  INC   CODEN
  MOV  A,#2
  ADD  A,TEMP5
  MOV  ADDBL,A
  CLR   A
  ADDC  A,TEMP6
  MOV  ADDBH,A
  RET
;;==================================================================
;地址换算子程序
;         
FORADDR:                      ; ADDRH,ADDRM,ADDRL=ADDBH,ADDBL*3
  MOV   B,#3
  MOV   A,ADDBL
  MUL   AB
  MOV   ADDRL,A
  MOV   TEMP1,B

  MOV   B,#3
  MOV   A,ADDBH
  MUL   AB
  MOV   TEMP2,B
  ADD   A,TEMP1
  MOV   ADDRM,A
  CLR   A
  ADDC  A,TEMP2
  MOV   ADDRH,A
  RET
;;==============================================================================
;设置颜色子程序(同时把数据写入LCD)
;入口: 变量BCOLOR 是背景颜色,FCOLOR 是前景颜色,大小为00H~07H, 其中00H为黑色,FFH为白色,
;       04H为红色, 02H为绿色,01H为蓝色.........
;设置颜色,一个字节WRDATA(单色)扩展到三个字节TEMP3,TEMP2,TEMP1(RGB 8色)
;实现的原理是检查WEDATA的每一位,为0时用背景颜色填充,为1时用前景颜色填充。
    SETCOLOR:
  MOV  R6,#8
SETSRT:
  JB   WRDATA.0,SETC1
  MOV  A,BCOLOR
  LJMP  SETC2
SETC1:
  MOV  A,FCOLOR
SETC2:
  MOV  R7,#3
  LCALL  LOOP
  MOV  A,WRDATA
  RRC  A
  MOV  WRDATA,A
  DJNZ  R6,SETSRT
  MOV  P1,TEMP3
  CLR   WRR
  SETB  WRR
  MOV   P1,TEMP2
  CLR   WRR
  SETB  WRR
  MOV   P1,TEMP1
  CLR   WRR
  SETB  WRR
  RET
  
LOOP:
  RRC  A
  MOV  TEMP4,A
  MOV  A,TEMP3
  RRC  A
  MOV  TEMP3,A
  MOV  A,TEMP2
  RRC  A
  MOV  TEMP2,A
  MOV  A,TEMP1
  RRC  A
  MOV  TEMP1,A
  MOV  A,TEMP4
  DJNZ  R7,LOOP
  RET
;==========================================================
;显示文字说明和彩条子程序
CONT:
  MOV  ADDBL,#10H
  MOV  ADDBH,#02H
  MOV  FCOLOR,#1
  MOV  BCOLOR,#6
  MOV  CODEN,#0
  LCALL  WRCHINA24
  LCALL  WRCHINA24
  LCALL  WRCHINA24
  LCALL  WRCHINA24
  LCALL  WRCHINA24
  LCALL  WRCHINA24
  LCALL  WRCHINA24
  MOV  ADDBL,#0ABH
  MOV  ADDBH,#00CH
  MOV  FCOLOR,#0
  MOV  BCOLOR,#0FFH
  MOV  CODEN,#05
  MOV  R0,#13
CONT1:
  LCALL  WRCHINA
  DJNZ  R0,CONT1
  MOV  CODEN,#3
  LCALL  WRNUN
  MOV  CODEN,#2
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL  WRNUN
  MOV  CODEN,#13H
  LCALL  WRNUN
  LCALL  WRNUN
  LCALL  WRNUN
  MOV  CODEN,#0BH
  LCALL  WRNUN
  MOV  CODEN,#13H
  LCALL  WRNUN
  MOV  CODEN,#2
  LCALL  WRNUN
  MOV  CODEN,#4
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL  WRNUN
  MOV  ADDBL,#088H
  MOV  ADDBH,#013H
  MOV  CODEN,#18
  MOV  R0,#7
CONT2:
  LCALL  WRCHINA
  DJNZ  R0,CONT2
  DEC   ADDBL
  MOV  CODEN,#0CH
  LCALL  WRNUN
  LCALL  WRNUN
  MOV  CODEN,#25
  LCALL  WRCHINA
  LCALL  WRCHINA
  LCALL  WRCHINA
  LCALL  WRCHINA
  LCALL  DISCOLOR
  RET
;;==================================================================
WRNN48:                         ;写一个32*48的数字到LCD子程序
  MOV   DPTR,#CCTAB
  MOV   A,CODEN
  MOV   B,#192
  MUL   AB
  ADD   A,DPL
  MOV   DPL,A
  MOV   A,B
  ADDC  A,DPH
  MOV   DPH,A
  MOV   R5,#48
  LCALL  FORADDR
  LCALL  SETADDR
WRNN481:
  CLR   A
  MOVC  A,@A+DPTR
  MOV  WRDATA,A
  LCALL  SETCOLOR
  INC   DPTR
  CLR   A
  MOVC  A,@A+DPTR
  MOV  WRDATA,A
  LCALL  SETCOLOR
  INC  DPTR
  CLR  A
  MOVC  A,@A+DPTR
  MOV  WRDATA,A
  LCALL  SETCOLOR
  INC  DPTR
  CLR  A
  MOVC  A,@A+DPTR
  MOV  WRDATA,A
  LCALL  SETCOLOR
  MOV  A,#240               ;
  ADD  A,ADDRL              ;
  MOV  ADDRL,A           
  CLR  A                  
  ADDC A,ADDRM              ;
  MOV  ADDRM,A              ;
  CLR  A
  ADDC A,ADDRH
  MOV  ADDRH,A
  LCALL  SETADDR            
  INC  DPTR
  DJNZ  R5,WRNN481
  INC   CODEN
  MOV  A,#4
  ADD  A,ADDBL
  MOV  ADDBL,A
  CLR   A
  ADDC  A,ADDBH
  MOV  ADDBH,A
  RET

   
;;==================================================================
WRCHINA24:                         ;写一个24*20的中文到LCD子程序
  MOV   DPTR,#CHIN24TAB
  MOV   A,CODEN
  MOV   B,#60
  MUL   AB
  ADD   A,DPL
  MOV   DPL,A
  MOV   A,B
  ADDC  A,DPH
  MOV   DPH,A
  MOV   R5,#20
  LCALL  FORADDR
  LCALL  SETADDR
WRCHIN241:
  CLR   A

⌨️ 快捷键说明

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