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

📄 lf9111t.asm

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

;    伪彩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为低电平时显示第二页。


WRDATA   EQU  28H        ;数据变量
ADDRL    EQU  30H        ;地址低位变量
ADDRH    EQU  31H        ;地址高位变量..................以一个字节为单元(8/3个像素)
ADDBL    EQU  32H        ;地址低位   
ADDBH    EQU  33H        ;地址高位 .....................以三个字节为单元(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
  NOP
MAIN1:
  NOP
  LCALL  CLREA            ;  调用清屏子程序,
  NOP
  SETB   D12
  LCALL  DISFORM          ;  在第一区显示表格
  CLR    D12
  LCALL  CONT             ;  在第二区显示文字说明和彩条
  NOP
  NOP
  NOP
;轮流显示第一区和第二区的内容
PLAY:
  LCALL  DELAY
  SETB   D12          ;D12=0  显示第一区
  LCALL  DELAY 
  CLR    D12          ;D12=1  显示第二区
  LJMP  PLAY

;=======================================================
;延时子程序
DELAY:
  MOV  R5,#0
  MOV  R6,#0
  MOV  R7,#150
DEL:
  DJNZ  R5,DEL
  DJNZ  R6,DEL
  DJNZ  R7,DEL
  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,#40             ;
  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:
  MOV  A,ADDBH
  JB   ACC.7,FORADDR1
FORADDR1:                       ;第一区的换算: ADDRH,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
  ADD   A,TEMP1
  MOV   ADDRH,A
  RET
FORADDR2:                    ;第二区的换算: 先ADDBH的最高位置0,然后是ADDRH,ADDRL=ADDBH,ADDBL*3        
  CLR  ACC.7                 ;最后再把ADDRH的最高位置1。
  MOV  ADDBH,A
  MOV   B,#3
  MOV   A,ADDBL
  MUL   AB
  MOV   ADDRL,A
  MOV   TEMP1,B
  MOV   B,#3
  MOV   A,ADDBH
  MUL   AB
  ADD   A,TEMP1
  SETB  ACC.7
  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,#248
  MOV  ADDBH,#080H
  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,#043H
  MOV  ADDBH,#086H
  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,#0B0H
  MOV  ADDBH,#089H
  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

   
;;==================================================================
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
  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,#120               ;
  ADD  A,ADDRL              ;
  MOV  ADDRL,A              ;也可以像16*16的中文子程序那样用ADDBH,ADDBL+40换行
  CLR  A                    ;这里用ADDRH,ADDRL+120换行,作用是一样的
  ADDC A,ADDRH              ;
  MOV  ADDRH,A              ;
  LCALL  SETADDR            ;
  INC  DPTR
  DJNZ  R5,WRCHIN241
  INC   CODEN
  MOV  A,#3
  ADD  A,ADDBL
  MOV  ADDBL,A
  CLR   A
  ADDC  A,ADDBH
  MOV  ADDBH,A
  RET

;;==========================================================================
WRNUN:                           ;写一个8*8的数字或字母到LCD子程序
  MOV   DPTR,#NUNTAB
  MOV   A,CODEN
  MOV   B,#16
  MUL   AB
  ADD   A,DPL
  MOV   DPL,A
  MOV   A,B
  ADDC  A,DPH
  MOV   DPH,A
  MOV   R5,#16
  LCALL  FORADDR
  LCALL  SETADDR

WRNUN1:
  CLR   A
  MOVC  A,@A+DPTR
  MOV  WRDATA,A
  LCALL  SETCOLOR
  MOV  A,#120
  ADD  A,ADDRL
  MOV  ADDRL,A
  CLR  A
  ADDC A,ADDRH
  MOV  ADDRH,A
  LCALL  SETADDR
  INC  DPTR
  DJNZ  R5,WRNUN1
  INC   CODEN
  MOV  A,#1
  ADD  A,ADDBL
  MOV  ADDBL,A
  CLR   A
  ADDC  A,ADDBH
  MOV  ADDBH,A
  RET

;;======================================================================================
DISFORM:                         ;显示演示表格子程序
  MOV  R5,#160
  MOV  ADDRL,#0D1H
  MOV  ADDRH,#12H
DISCUL1:
  LCALL  SETADDR
  MOV  P1,#01H
  CLR   WRR
  SETB  WRR
  MOV  A,#120
  ADD  A,ADDRL
  MOV  ADDRL,A
  CLR  A
  ADDC A,ADDRH
  MOV  ADDRH,A
  DJNZ  R5,DISCUL1

  MOV  R5,#95
  MOV  ADDRL,#0D1H
  MOV  ADDRH,#05DH
  LCALL  SETADDR

⌨️ 快捷键说明

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