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

📄 lm7m.asm

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

;    伪彩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          ;  在第一区显示表格
  NOP
  LCALL  CONT             ;  在第二区显示文字说明和彩条
  NOP
  NOP
PLAY:
  NOP
  LJMP  PLAY
  
;;==================================================================
;  调用前先预置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:
  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,#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

   
;;==================================================================
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,#240               ;
  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,#240
  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,#093H
  MOV  ADDRH,#25H
DISCUL1:
  LCALL  SETADDR
  MOV  P1,#01H
  CLR   WRR
  SETB  WRR
  MOV  A,#240
  ADD  A,ADDRL
  MOV  ADDRL,A
  CLR  A
  ADDC A,ADDRH
  MOV  ADDRH,A
  DJNZ  R5,DISCUL1

  MOV  R5,#95
  MOV  ADDRL,#093H
  MOV  ADDRH,#0BBH
  LCALL  SETADDR
DISCUL2:
  MOV  P1,#0
  CLR   WRR
  SETB  WRR
  DJNZ  R5,DISCUL2
  MOV  ADDRL,#078H
  MOV  ADDRH,#09FH    
  MOV   R4,#30
  LCALL  DISRED             
  MOV  ADDRL,#0C7H
  MOV  ADDRH,#08CH        
  MOV   R4,#50
  LCALL  DISRED                    
  MOV  ADDRL,#0D6H
  MOV  ADDRH,#08CH           
  MOV  R4,#50
  LCALL  DISRED              
  MOV  ADDRL,#085H
  MOV  ADDRH,#083H
  MOV  R4,#60
  LCALL  DISRED          
  MOV  ADDRL,#044H
  MOV  ADDRH,#088H
  MOV  R4,#55
  LCALL  DISRED             
  MOV  ADDRL,#023H
  MOV  ADDRH,#08BH
  MOV  R4,#52
  LCALL  DISRED          
  MOV  ADDRL,#008H
  MOV  ADDRH,#088H        ;145
  MOV  R4,#25
  LCALL  DISCCO
  MOV  ADDRL,#057H
  MOV  ADDRH,#075H          ;125     
  MOV  R4,#25
  LCALL  DISCCO
  MOV   ADDRL,#016H
  MOV   ADDRH,#07AH        ;130
  MOV  R4,#25
  LCALL  DISCCO
  MOV   ADDRL,#0B5H         ;105
  MOV   ADDRH,#062H
  MOV   R4,#35
  LCALL  DISCCO
  MOV   ADDRL,#064H
  MOV   ADDRH,#059H         ;95
  MOV   R4,#50
  LCALL  DISCCO
  MOV   ADDRL,#0E3H
  MOV   ADDRH,#052H          ;88
  MOV   R4,#60
  LCALL  DISCCO
  MOV   ADDRL,#048H
  MOV   ADDRH,#075H
  MOV   R4,#20
  LCALL  DISBLU
  MOV   ADDRL,#097H
  MOV   ADDRH,#062H
  MOV   R4,#20
  LCALL  DISBLU
  MOV   ADDRL,#0F6H
  MOV   ADDRH,#05DH
  MOV   R4,#30
  LCALL  DISBLU
  MOV   ADDRL,#0E5H
  MOV   ADDRH,#041H
  MOV   R4,#35
  LCALL  DISBLU
  MOV   ADDRL,#0E4H
  MOV   ADDRH,#033H
  MOV   R4,#40
  LCALL  DISBLU
  MOV   ADDRL,#003H
  MOV   ADDRH,#024H
  MOV   R4,#50
  LCALL   DISBLU

  MOV  FCOLOR,#4
  MOV  ADDBL,#096H
  MOV  ADDBH,#01
  MOV  CODEN,#04
  LCALL  WRCHINA
  MOV  FCOLOR,#0
  MOV  BCOLOR,#3
  MOV  CODEN,#10H
  LCALL  WRNUN
  MOV  CODEN,#02
  LCALL  WRCHINA
  LCALL  WRCHINA
  MOV  A,#4
  ADD  A,ADDBL
  MOV  ADDBL,A
  MOV  FCOLOR,#6
  MOV  CODEN,#04
  LCALL  WRCHINA
  MOV  FCOLOR,#0
  MOV  CODEN,#11H
  LCALL  WRNUN
  MOV  CODEN,#02
  LCALL  WRCHINA
  LCALL  WRCHINA
  MOV  A,#4
  ADD  A,ADDBL
  MOV  ADDBL,A
  MOV  FCOLOR,#1
  MOV  CODEN,#04
  LCALL  WRCHINA
  MOV  FCOLOR,#0
  MOV  CODEN,#12H
  LCALL  WRNUN
  MOV  CODEN,#02
  LCALL  WRCHINA
  LCALL  WRCHINA
  
  MOV  CODEN,#0
  MOV  ADDBL,#027H
  MOV  ADDBH,#03FH
  LCALL  WRCHINA
  LCALL  WRCHINA
  MOV  CODEN,#0AH
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL  WRCHINA
  LCALL  WRCHINA
  MOV  CODEN,#0BH
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL  WRCHINA
  LCALL  WRCHINA
  MOV  CODEN,#0CH
  LCALL  WRNUN
  MOV   CODEN,#0
  LCALL  WRCHINA
  LCALL  WRCHINA
  MOV   CODEN,#0DH
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL  WRCHINA
  LCALL  WRCHINA
  MOV  CODEN,#0EH
  LCALL  WRNUN
  MOV   CODEN,#0
  LCALL  WRCHINA
  LCALL  WRCHINA
  MOV   CODEN,#0FH
  LCALL  WRNUN

  MOV  ADDBL,#082H
  MOV  ADDBH,#0CH
  MOV  CODEN,#7
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL  WRNUN
  MOV  CODEN,#6
  LCALL  DISPOP
  MOV  CODEN,#5
  LCALL  DISPOP
  MOV  CODEN,#4
  LCALL  DISPOP
  MOV  CODEN,#3
  LCALL  DISPOP
  MOV  CODEN,#2
  LCALL  DISPOP
  MOV  CODEN,#1
  LCALL  DISPOP
  MOV  CODEN,#0
  LCALL  DISPOP
 
  RET

DISPOP:
  MOV  A,#3DH
  ADD  A,ADDBL
  MOV  ADDBL,A
  MOV  A,#6
  ADDC A,ADDBH
  MOV  ADDBH,A
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL  WRNUN
  MOV  CODEN,#0
  LCALL   WRNUN
  RET
 
DISBLU:
  LCALL  SETADDR
  MOV  R5,#3
DISBLU1:
  MOV  P1,#024H
  CLR  WRR
  SETB WRR

⌨️ 快捷键说明

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