📄 qc0409b.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 + -