📄 程序.txt
字号:
240128A(T6963C)的A51编程实例
说明:
1. 虚框内为外供负电压调节对比度方法,若模块内已内带负电压,VO及VOUT空接,复位使用模块内上电复位.若用LED背光,LED+接背光电源+5V(200mA).
2. 片选信号/CE接CPU的P2.7(A15),则当A15=0时模块选定.
3. 命令/数据选择C/D接CPU的P2.0(A8),则当A8=1时为命令,A8=0时为数据.
4. 由2,3得到LCD模块典型命令口地址为0100H,典型数据口地址为0000H.
使LCD显示一屏图形
1. 用户事先要做的是在WINDOWS的画笔中(点击左下角开始->程序->附件->画图,对LCD显示屏在电脑上进行预编辑,完成后取名DEMO.BMP并保存。
2. 图形制作方法:
a. 进入WINDOWS画笔,在"图象"->"属性"->"宽度=240,高度=128,象素,黑白"->"确定".
b. 利用画笔工具对屏幕先在电脑上编辑,完成后再"图象"->"翻转/旋转"->"垂直翻转"-> "确定".
c. "图象"->"反色",b,c是为了使BMP数据存放格式与LCD所需一致,减轻CPU处理时间.
d. 将所作背景取名为DEMO.BMP并保存.
3. CPU内部ROM空间安排,将以下源文件DEMO.ASM编译生成DEMO.HEX文件.在CPU烧录时先从ROM地址0调入DEMO.HEX(格式为十六进制HEX),再从ROM地址0800H处调入DEMO.BMP(格式为二进制BIN),将该合并成的文件烧录到AT89C55中即可上电运行。
4. 现让屏幕先显示DEMO.BMP,观察其效果。注意字体选择FS(PIN18)一定要接低,否则所显图形会错位。
5. 以下为用MCS-51汇语言编写的DEMO源程序,该程序中的子程经过调试可直接用。
;---------------------------------------------------------------
PORTD EQU 0000H ;模块数据口地址(A15=0.A8=0)
PORTC EQU 0100H ;模块命令口地址(A15=0.A8=1)
BMP_DEMO EQU 0800H ;定义位图存放首地址
;----------------------------------------------------------------
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H ;设堆栈
LCALL DEL_10MS ;模块上电复位
LCALL LCD_INT ;模块初始化
MOV DPTR,#BMP_DEMO
LCALL SCREEN ;显示一正屏位图
AJMP $ ;观察效果
;---------------------------------------------------------------
; 延时子程
;---------------------------------------------------------------
DEL_10MS:
MOV R6,#10
DL2:
MOV R7,#200
DL1:
NOP
NOP
NOP
DJNZ R7,DL1
DJNZ R6,DL2
RET
;--------------------------------------------------------------
; 写两个参数 (参数1在DPL中,参数2在DPH中)
;--------------------------------------------------------------
WD2:
PUSH DPL
PUSH DPH
PUSH ACC
MOV A,DPL
LCALL WD1
MOV A,DPH
LCALL WD1
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 写一个参数(参数在A中)
;-------------------------------------------------------------
WD1:
PUSH DPL
PUSH DPH
PUSH ACC
PUSH ACC
LCALL CH_STA1
POP ACC
MOV DPTR,#PORTD
MOVX @DPTR,A
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 自动方式下写一个显示数据(数据在A中)
;-------------------------------------------------------------
AWD:
PUSH DPL
PUSH DPH
PUSH ACC
PUSH ACC
LCALL CH_STA3
POP ACC
MOV DPTR,#PORTD
MOVX @DPTR,A
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 写一个命令 (命令字在A中)
;-------------------------------------------------------------
WC:
PUSH DPL
PUSH DPH
PUSH ACC
PUSH ACC
LCALL CH_STA1
POP ACC
MOV DPTR,#PORTC
MOVX @DPTR,A
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 判断状态0,1
;-------------------------------------------------------------
CH_STA1:
PUSH DPL
PUSH DPH
PUSH ACC
MOV DPTR,#PORTC
CH_1:
MOVX A,@DPTR
ANL A,#03H
CJNE A,#03H,CH_1
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; 判断状态3
;-------------------------------------------------------------
CH_STA3:
PUSH DPL
PUSH DPH
PUSH ACC
MOV DPTR,#PORTC
CH_3:
MOVX A,@DPTR
ANL A,#08H
CJNE A,#08H,CH_3
POP ACC
POP DPH
POP DPL
RET
;-------------------------------------------------------------
; LCD模块初始化
;-------------------------------------------------------------
LCD_INT:
MOV DPTR,#00H ;图形显示区首地址为 00H;
LCALL WD2 ;写入两个参数;
MOV A,#42H ;
LCALL WC ;写入设置图形显示区首地址命令42H;
MOV DPTR,#001EH ;图形显示区宽度为30=240/8;
LCALL WD2 ;写入两个参数;
MOV A,#43H ;
LCALL WC ;写入设置图形显示区宽度命令43H;
MOV A,#80h ;
LCALL WC ;写入设置文本与图形逻辑"或"合成显示;
MOV A,#98H ;
LCALL WC ;写入设置显示方式仅为图形显示;
RET
;-------------------------------------------------------------
; 显示一幅240X128的黑白位图,位图在ROM中存放首地址在DPTR中
;-------------------------------------------------------------
SCREEN:
PUSH DPL
PUSH DPH
MOV DPTR,#00H ;设置显缓写地址
LCALL WD2
MOV A,#24H
LCALL WC
MOV A,#0B0H ;设置进入显示数据自动写模式
LCALL WC
POP DPH
POP DPL
MOV R7,#128 ;共128行
GRAPH:
MOV R6,#30 ;每行30个字节
GRAPH1:
MOV A,#3EH ;ROM中显示数据存放地址偏移量
MOVC A,@A+DPTR ;从ROM中取显示数据
LCALL AWD ;自动写一个显示数据,显缓地址指针自动加一
INC DPTR ;调整ROM数据指针
DJNZ R6,GRAPH1 ;一行未写完继续写
INC DPTR ;调整ROM数据指针
INC DPTR
DJNZ R7,GRAPH ;128行未写完继续写
LCALL CH_STA3 ;检测状态3
MOV A,#0B2H ;
LCALL WC ;退出自动写模式
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -