📄 main.asm
字号:
;************************************************************************
;文件说明
;创 建 人:杨宏伟
;修 改 人:杨宏伟
;创建日期:2004-08-08
;最后更新:2004-10-10
;描 述:FOR 128DI0,EM65565A,8位并行,模拟8080时序
;************************************************************************
;接口定义
;************************************************************************
CS1 BIT P3.5 ;片选控制端定义(低电平有效)
RES BIT P3.4 ;复位控制端定义(低电平有效)
RS BIT P3.3 ;指令、数据选择控制端定义
WR1 BIT P3.1 ;写信号控制端定义
RD1 BIT P3.0 ;读信号控制端定义
MI BIT P3.7 ;8080或6800选择
;************************************************************************
ORG 0000H
LJMP start ;程序跳转,转到标号为start
ORG 0003H
LJMP EXINT0
ORG 0100h
start:NOP
SETB EX0 ;开外部中断0
SETB PX0
CLR IT0
SETB EA ;允许所有中断有效
CLR CS1 ;片选有效(置低)
CLR MI ;选择8080时序
CLR RES ;复位LCD,RES置低
LCALL DELAY
LCALL DELAY
SETB RES ;复位LCD完成
LCALL DELAY
;设置(置高)数据表头标志位(在位寻址区)
;****************************************************
SETB 20h ;全显
SETB 21h ;隔行
SETB 22h ;清屏
SETB 23h ;显示图片
LJMP MAIN
;LCD模块初始化(开始)
;****************************************************
ORG 0200H
main: NOP
MOV A,#0a0h ;ADC select
LCALL SENT_COM
MOV A,#0a6h ;Sets the LCD display normal/reverse
LCALL SENT_COM
MOV A,#0a2H ;Sets the LCD drive voltage bias ratio 1/9
LCALL SENT_COM
LCALL DELAY
MOV A,#2fh ;Power control set
LCALL SENT_COM
MOV A,#24H ;V0 Voltage Regulator Internal Resistor Ratio Set
LCALL SENT_COM
MOV A,#81H ;Electronic volume mode set
LCALL SENT_COM
MOV A,#29h
LCALL SENT_COM
MOV A,#0AFH ;Display ON
LCALL SENT_COM
;******************************LCD初始化完成
;设置起始行,设置起始列和页地址
;******************************************************
again: mov r4,#0b0h ;设页地址寄存器为R4,起始页地址B0H,第一页
mov r5,#09H ;#09h;页数寄存器为R5,9页
mov r6,#40h ;行地址寄存器为R6,起始行地址40H,第一行
set_page_col:
mov r3,#80h ;设置列数寄存器为R3,列数为128
MOV A,r4 ;送页地址
LCALL SENT_COM
MOV A,#10H ;送列地址,双字节指令
LCALL SENT_COM
MOV A,#00H;
LCALL SENT_COM
;判断表头标志,决定程序跳转方向
;*****************************************************
JB 20h,tab0 ;全显
JB 21h,tab1 ;隔行
JB 22h,tab2 ;清屏
JB 23h,tab3 ;显示图片
LCALL ldelay
AJMP start ;返回,重复
;*****************************************************
tab0: AJMP table0
tab1: AJMP table1
tab2: AJMP table2
tab3: AJMP table3
;*****************************************************
table0: mov dptr,#tab0_data ;取表头地址
dis0:CLR A
movc a,@a+dptr
LCALL SENT_DAT
inc dptr
DJNZ R3,DIS0 ;列数减一,共128列
inc r4 ;页地址加1,下一页
djnz r5,set_page_col ;共显示9页
clr 20h ;清除表标志
lcall ldelay
ajmp again
;*****************************第一屏显示完成,全显
table1: mov dptr,#tab1_data ;取表头地址
dis1:CLR A
movc a,@a+dptr
LCALL SENT_DAT
inc dptr
DJNZ R3,DIS1 ;列数减一,共128列
inc r4 ;页地址加1,下一页
djnz r5,set_page_col ;共显示9页
clr 21h ;清除表标志
lcall ldelay
ajmp again
;****************************第二屏显示完成,隔行显示
table2: mov dptr,#tab2_data ;取表头地址
dis2:CLR A
movc a,@a+dptr
LCALL SENT_DAT
inc dptr
DJNZ R3,DIS2 ;列数减一,共128列
inc r4 ;页地址加1,下一页
djnz r5,set_page_col ;共显示9页
clr 22h ;清除表标志
lcall ldelay
ajmp again
;*****************************第三屏显示完成,清屏
table3: mov dptr,#tab3_data ;取表头地址
mov r5,#08H ;设置页地址,共8页
dis3:MOV A,r4 ;送页地址
LCALL SENT_COM
MOV A,#10H ;送列地址,双字节指令
LCALL SENT_COM
MOV A,#00H;
LCALL SENT_COM
mov r3,#80h ;设置列数寄存器为R3,列数为128
dis31:CLR A
movc a,@a+dptr
LCALL SENT_DAT
inc dptr
DJNZ R3,dis31 ;列数减一,共128列
inc r4 ;页地址加1,下一页
djnz r5,dis3 ;共显示8页
clr 23h ;清除表标志
lcall ldelay
ajmp again
;*****************************第四屏显示完成,显示一幅图片
;子程序:
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DELAY:NOP ;延时
MOV R1,#0FFH
DL1:MOV R2,#06FH
DL2:DJNZ R2,DL2
DJNZ R1,DL1
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ldelay: ;长延时
mov 30h,#010h
dela40:lcall delay
djnz 30h,dela40
ret
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SENT_COM:NOP ;写命令
CLR RS
CLR WR1
clr CS1
setb RD1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -