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

📄 qc0409b.asm

📁 多种液晶显示驱动程序。使用汇编语音编写。
💻 ASM
字号:

;    伪彩320*240 LCD控制板(QXVLCM1.1)演示例程
;    怎样用显示指令显示图形和中文的技巧

 CSEG   AT  0000H

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

AOO  EQU   P3.1     ;AO   高电平时写入的数据是地址,低电平时写入的数据是显示数据。       
E    EQU   P3.2     ;WR   当P1口的数据有效时,E产生一个下降沿,写一个数据完成。
RS   EQU   P3.0     ;
RW   EQU   P3.3      ;

WRDATA   EQU  28H        ;数据变量

MAIN:
  NOP
  NOP
  LCALL  CLREA            ;  调用清屏子程序,
  LCALL  DISCHIN          ;  调用中文显示
  NOP
  LCALL  DISLINE          ;  画直线
  LCALL  DISYY            ;  画圆
  LCALL  DISPLAY          ;  调用图库里的图片
  LCALL  DISLINE2         ;  画斜线
  NOP

  LCALL  DISFROM          ;  画多边形

STOP:
  NOP
  NOP
  LJMP  STOP

;***************************************
;写指令子程序
WRDAT:
  CLR   E
  SETB  E
  RET
;***********************************
;查忙子程序
REBUSY:
  CLR   RW
  CLR   AOO
  JNB   P1.7,REBUSY
  SETB  AOO
  SETB  RW
  RET
;****************************************
;清屏子程序   发送"03 01 0D"其中03是清屏代码,01是颜色,0D是结束码
CLREA:
  LCALL  REBUSY                 ;查忙
  CLR   RS                      ;RS=0  写指令数据开始, RS保持低电平到写完整条指令
  MOV   P1,#03H                 ;指令数据03送P1口,
  LCALL  WRDAT                  ;写指令
  MOV   P1,#01H                 ;指令数据01送P1口, 
  LCALL  WRDAT
  MOV   P1,#0DH
  LCALL  WRDAT
  SETB  RS
  RET
;*******************************************
;显示图库里的图片子程序   发送"02 47 10 60 00 0D"其中02是显示位图代码,47是颜色,10是X轴位置
; 60是Y轴位置,00是位图序号,0D是结束码
DISPLAY:
  LCALL  REBUSY                 ;查忙
  CLR    RS                      ;RS=0  写指令数据开始, RS保持低电平到写完整条指令
  MOV  P1,#02H
  LCALL  WRDAT
  MOV  P1,#47H
  LCALL  WRDAT
  MOV  P1,#10
  LCALL  WRDAT
  MOV  P1,#60
  LCALL  WRDAT
  MOV  P1,#00
  LCALL  WRDAT
  MOV  P1,#0DH
  LCALL  WRDAT
  NOP
  SETB  RS
  RET
;***************************************
;显示一个圆子程序
DISYY:
  LCALL  REBUSY
  CLR  RS
  NOP
  MOV  P1,#07H
  LCALL  WRDAT
  MOV  P1,#27H
  LCALL  WRDAT
  MOV  P1,#00
  LCALL  WRDAT
  MOV  P1,#20
  LCALL  WRDAT
  MOV  P1,#70
  LCALL  WRDAT
  MOV  P1,#15
  LCALL  WRDAT
  MOV  P1,#0DH
  LCALL  WRDAT
  SETB  RS
  RET
;****************************************************
;显示一条直线子程序
DISLINE:
  LCALL  REBUSY
  CLR  RS
  MOV  P1,#08H
  LCALL  WRDAT
  MOV  P1,#44H     
  LCALL  WRDAT
  MOV  P1,#00      
  LCALL  WRDAT
  MOV  P1,#00      
  LCALL  WRDAT
  MOV  P1,#25     
  LCALL  WRDAT
  MOV  P1,#01      
  LCALL  WRDAT 
  MOV  P1,#63     
  LCALL  WRDAT
  MOV  P1,#25      
  LCALL  WRDAT
  MOV  P1,#0D      
  LCALL  WRDAT
  SETB  RS
  RET
;*****************************************8
;显示一条直线子程序
DISLINE2:
  LCALL  REBUSY
  CLR  RS
  MOV  P1,#08H
  LCALL  WRDAT
  MOV  P1,#44H    
  LCALL  WRDAT
  MOV  P1,#0     
  LCALL  WRDAT
  MOV  P1,#0    
  LCALL  WRDAT
  MOV  P1,#15    
  LCALL  WRDAT
  MOV  P1,#00     
  LCALL  WRDAT 
  MOV  P1,#152   
  LCALL  WRDAT
  MOV  P1,#130      
  LCALL  WRDAT
  MOV  P1,#0D      
  LCALL  WRDAT
  SETB  RS
  RET

;***************************************************8
;显示字符子程序,
DISCHIN:
  LCALL   REBUSY            ; 查忙
  CLR  RS                   ;写指令开始
  MOV   P1,#01H
  LCALL  WRDAT              ;写显示字符代码
  MOV   P1,#07H
  LCALL  WRDAT              ;写颜色代码
  MOV   P1,#5               
  LCALL  WRDAT              ;写X轴代码
  MOV   P1,#0
  LCALL  WRDAT              ;写Y轴代码
  MOV  DPTR,#NMTAB          ;中文内码表的首地址
DISCHIN1:
  CLR   A
  MOVC  A,@A+DPTR          ;从中文内码表取内码
  MOV  R5,A
  MOV  P1,A
  LCALL  WRDAT             ;发送内码到控制板
  INC   DPTR
  CJNE  R5,#0DH,DISCHIN1   ;读取到0DH时,则判断是转行还是结束,
  CLR   A
  MOVC  A,@A+DPTR
  CJNE  A,#0AH,DISCHIN2    ;如0DH后跟着0AH则转行,否则结束
  LJMP  DISCHIN1
DISCHIN2:
  MOV  P1,#0
  LCALL  WRDAT
  SETB  RS
   RET
;***************************************************
;显示多边形子程序,画多边形是由画直线扩展所得,即画多条直线,
DISFROM:
  LCALL  REBUSY
  CLR  RS
  MOV  P1,#48H          ;代码08H或18H是画一条直线,28H是画二条直线,48H则是画四条中直线.........
  LCALL  WRDAT
  MOV  P1,#44H    
  LCALL  WRDAT

  MOV  P1,#0     
  LCALL  WRDAT
  MOV  P1,#50    
  LCALL  WRDAT
  MOV  P1,#210         ;第一条直线的起始坐标 
  LCALL  WRDAT

  MOV  P1,#00     
  LCALL  WRDAT 
  MOV  P1,#250   
  LCALL  WRDAT         ;第一条直线的终点坐标,也是第二条直线的起始坐标 
  MOV  P1,#210      
  LCALL  WRDAT

  MOV  P1,#00
  LCALL  WRDAT
  MOV  P1,#250
  LCALL  WRDAT
  MOV  P1,#230         ;第二条直线的终点坐标,也是第三条直线的起始坐标 
  LCALL  WRDAT

  MOV  P1,#00
  LCALL  WRDAT
  MOV  P1,#50
  LCALL  WRDAT
  MOV  P1,#230         ;第三条直线的终点坐标,也是第四条直线的起始坐标 
  LCALL  WRDAT
  
  MOV  P1,#00
  LCALL  WRDAT
  MOV  P1,#50
  LCALL  WRDAT
  MOV  P1,#210         ;第四条直线的终点坐标 
  LCALL  WRDAT

  MOV  P1,#0D      
  LCALL  WRDAT
  SETB  RS
  RET


NMTAB:
DB  0D2H,0BBH,0B8H,0F6H,0BCH,0F2H,0B5H,0A5H,0B5H,0C4H,0C0H
DB  0FDH,0B3H,0CCH,041H,042H,043H,044H,031H,032H,033H
DB  034H
DB  00DH,000H        ;00DH,00H是字符传送结束码

  END
 

⌨️ 快捷键说明

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