📄 text1.asm
字号:
;IO口定义
_WR BIT P0.0
_RD BIT P0.1
CSL BIT P0.2
RS BIT P0.3
RST BIT P0.4
BUSY BIT P0.5
KEY BIT P3.2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DBUS EQU P1
REGNAME EQU 30H
REGDATA EQU 31H
REGDATA1 EQU 32H
LCM_X EQU 33H
LCM_Y EQU 34H
LCM_DATA1 EQU 35H
LCM_DATA2 EQU 36H
COUNT1 EQU 37H
COUNT2 EQU 38H
;#define PORTB P1
;sbit WRT =P0^0;//低电平有效//
;sbit RAD =P0^1;//低电平有效//
;sbit CS =P0^2;//低电平有效//
;sbit RS =P0^3;//1:数据寄存器 0:指令寄存器//
;sbit RESET=P0^4;//低电平有效//正常工作应为高电平//
;sbit BUSY =P0^5;//默认高电平为忙//
;sbit INT =P0^6;//默认高电平触发中断//
;====================================================================
;程序代码开始
ORG 0000H
AJMP MAIN
;==============================================================
ORG 0040H
MAIN:
LCALL DELAY2
MOV SP,#60H
CLR KEY ;如果执行此语句,将全速运行,否则要按一次按键才能显示下一个画面
CLR RST
LCALL DELAY2
LCALL DELAY2
SETB RST
;;;;;;;;;;;;;;;;;主程序部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TEST_PRO:LCALL LCM_INIT ;初始化
;---------------清除显示数据:文本和图形
LCALL CLR_P1
LCALL CLR_P2
;---------------全屏显示:横条
LCALL DELAY2
MOV LCM_DATA1,#0FFH
MOV LCM_DATA2,#00H
LCALL TEST_LCD;图形模式下测试LCD屏
LCALL DELAY1
LCALL DELAY2
LCALL DELAY2
JB KEY,$ ;按键,按一下换一个画面
MOV LCM_DATA1,#00H
MOV LCM_DATA2,#0FFH
LCALL TEST_LCD;图形模式下测试LCD屏
LCALL DELAY1
JB KEY,$ ;按键,按一下换一个画面
;---------------全屏显示:坚条
MOV LCM_DATA1,#0AAH
MOV LCM_DATA2,#0AAH
LCALL TEST_LCD;图形模式下测试LCD屏
LCALL DELAY1
JB KEY,$ ;按键,按一下换一个画面
MOV LCM_DATA1,#055H
MOV LCM_DATA2,#055H
LCALL TEST_LCD;图形模式下测试LCD屏
LCALL DELAY1
JB KEY,$ ;按键,按一下换一个画面
;---------------全屏显示:交叉点
MOV LCM_DATA1,#0AAH
MOV LCM_DATA2,#055H
LCALL TEST_LCD;图形模式下测试LCD屏
LCALL DELAY1
JB KEY,$ ;按键,按一下换一个画面
MOV LCM_DATA1,#055H
MOV LCM_DATA2,#0AAH
LCALL TEST_LCD;图形模式下测试LCD屏
LCALL DELAY1
JB KEY,$ ;按键,按一下换一个画面
;---------------全屏显示:黑点
MOV LCM_DATA1,#0FFH ;全显
MOV LCM_DATA2,#0FFH
LCALL TEST_LCD;图形模式下测试LCD屏
LCALL DELAY1
JB KEY,$ ;按键,按一下换一个画面
;---------------文本显示
LCALL CLR_P2 ;清屏图形区数据
MOV DPTR,#TABOFTEXT
LCALL HZ_DIS ;显示汉字表中的汉字
LCALL DELAY1
JB KEY,$ ;按键,按一下换一个画面
LCALL DELAY1
;---------------图片显示
LCALL CLR_P1 ;清除文本
MOV DPTR,#BMP000
LCALL BMP_DIS ;画 BMP 图
LCALL DELAY1
JB KEY,$ ;按键,按一下换一个画面
NOP
LCALL CLR_P2 ;清屏画 BMP 图
LJMP TEST_PRO
;;;;;;;;;;;;;;;;;;;;主程序部分结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;****************************************************
LCM_INIT:
LCALL DELAY2
; MOV REGNAME,#00H
; MOV REGDATA,#0F0H
; LCALL WRITE_COM ;软件复位
LCALL DELAY1
MOV DPTR,#INITTAB
IIINIT: CLR A
MOVC A,@A+DPTR
MOV REGNAME,A
CLR C
SUBB A,#0FFH
JZ OUTINT
CLR A
INC DPTR
MOVC A,@A+DPTR
MOV REGDATA,A
LCALL WRITE_COM
INC DPTR
AJMP IIINIT
OUTINT: RET
;==============================================
HZ_DIS:
MOV REGNAME,#00H
MOV REGDATA,#0CDH ;字符模式
LCALL WRITE_COM
MOV COUNT1,#8 ;字符表中共8行汉字
MOV LCM_X,#00H ;设显示行列地址
MOV LCM_Y,#00H ;
HZ_DP0: LCALL LOCAL_XY ;
HZ_DIS1:MOV COUNT2,#30 ;一行字节计数(含标点15个汉字,合计30个字节)
HZ_DIS11:CLR A
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
DJNZ COUNT2,HZ_DIS11
MOV A,LCM_Y
ADD A,#16 ;指向下一行地址
MOV LCM_Y,A
DJNZ COUNT1,HZ_DP0
RET
;=====================================================
BMP_DIS:
MOV REGNAME,#00H
MOV REGDATA,#0C5H ;图形模式
LCALL WRITE_COM
MOV COUNT1,#128 ;垂直 =128点
MOV LCM_X,#00H ;画 BMP 图
MOV LCM_Y,#00H
BMP_D1: LCALL LOCAL_XY ;设显示定行列地址
MOV COUNT2,#30 ;水平 30X8=240点
BMP_D2: CLR A
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
DJNZ COUNT2,BMP_D2
INC LCM_Y ;指向下一行地址
DJNZ COUNT1,BMP_D1
RET
;======================================================
CLR_P1: ;清除文本层显示数据
MOV REGNAME,#00H
MOV REGDATA,#0CDH ;文本模式
LCALL WRITE_COM
MOV LCM_X,#00H
MOV LCM_Y,#00H
LCALL LOCAL_XY ;设行列地址
MOV COUNT1,#128;垂直16行文本
CLR_P11:MOV COUNT2,#30 ;水平40个字节宽
CLR_P12:MOV A,#00H;MOV A,#020H
LCALL WRITE_DAT
DJNZ COUNT2,CLR_P12
DJNZ COUNT1,CLR_P11
RET
;======================================================
CLR_P2: ;清除图形层显示数据
MOV REGNAME,#00H
MOV REGDATA,#0C5H ;图形模式
LCALL WRITE_COM
MOV LCM_X,#00H
MOV LCM_Y,#00H
LCALL LOCAL_XY ;设行列地址
MOV COUNT1,#128 ;垂直 =240行
CLR_P21:MOV COUNT2,#30 ;水平40X8=320点
CLR_P22:CLR A
MOV A,#00H
LCALL WRITE_DAT
DJNZ COUNT2,CLR_P22
DJNZ COUNT1,CLR_P21
RET
;======================================================
TEST_LCD: ;图形模式下测试LCD屏
MOV REGNAME,#00H
MOV REGDATA,#0C5H ;图形模式
LCALL WRITE_COM
MOV COUNT1,#64;;;;;;;;;;;;;;;;;;;;
MOV LCM_Y,#00H;
TEST_1: MOV LCM_X,#00H
LCALL LOCAL_XY
MOV COUNT2,#30;;;;;;;;;;;;;;;;;;;
TEST_2: MOV A,LCM_DATA1
LCALL WRITE_DAT
DJNZ COUNT2,TEST_2
INC LCM_Y
LCALL LOCAL_XY
MOV COUNT2,#30
TEST_3: MOV A,LCM_DATA2
LCALL WRITE_DAT
DJNZ COUNT2,TEST_3
INC LCM_Y
DJNZ COUNT1,TEST_1
RET
;==============================================================
LOCAL_XY:
MOV REGNAME,#60H ;设定显示列地址
MOV REGDATA,LCM_X
LCALL WRITE_COM
MOV REGNAME,#70H ;设定显示行地址
MOV REGDATA,LCM_Y
LCALL WRITE_COM
RET
;==============================================================
WRITE_COM:
MOV A,REGNAME
LCALL WRITE_REG
MOV A,REGDATA
LCALL WRITE_REG
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE_REG:
MOV DBUS,A
CLR CSL
SETB _RD
CLR RS
CLR _WR
NOP
NOP
NOP
NOP
SETB _WR
SETB RS
SETB CSL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE_DAT:
MOV DBUS,A
CLR CSL
SETB _RD
SETB RS
CLR _WR
NOP
NOP
NOP
NOP
SETB _WR
SETB RS
SETB CSL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ_RS:
MOV A,REGNAME ;读缓存器
LCALL WRITE_REG
MOV DBUS,#0FFH
CLR CSL
SETB _WR
CLR RS
NOP
MOV A,DBUS
SETB RS
SETB CSL
MOV REGDATA1,A
RET
;==============================================================
DELAY1: MOV R5,#09H
DEL11: LCALL DELAY2
DJNZ R5,DEL11
RET
;==============================================================
DELAY2: MOV R6,#20H
DEL21: MOV R7,#20H
DEL22: DJNZ R7,DEL22
DJNZ R6,DEL21
RET
;===========================================
DELAY: MOV R5,#10
DJNZ R5,$
RET
;==============================================================
INITTAB: ;初始化参数表:前面的是寄存器地址,后面的是参数.最后以0FFH为标志做结束
DB 000H,0C9H ;LCD基本显示功能设定 图形模式
DB 001H,0F0H ;中断准位(高电平) / 设定系统频率8MHz
DB 002H,010H ;LCD内存读写速度与功能设定(读字形ROM)
DB 003H,080H ;LCD特殊显示功能
DB 010H,06BH ;LCD基本显示功能设定 2
DB 011H,000H ;光标高度和行距设定
DB 012H,091H ;显示层设定:高位8灰度,9水平单一层,A单二层,B同时一二层
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -