📄 lcdtest-st.dt
字号:
;/**************************************************************
;/ To define general registers
;/**************************************************************
R0 == 0X00 ;INDIRECT ADDRESSING REGISTER
TCC == 0X01 ;TIMER/COUNTER
STATE == 0X03 ;STATUS REGISTER
C == 0 ;CARRY BIT
Z == 2 ;ZERO FLAG
IOCPAGE == 5 ;CHANGE IOC0~IOCE TO ANOTHER PAGE
RPAGE0 == 6 ;CHANGE R0~RE TO ANOTHER PAGE
RPAGE1 == 7 ;CHANGE R0~RE TO ANOTHER PAGE
R4 == 0X04 ;RAM SELECTION
BIT6 == 6
BIT7 == 7
R5 == 0X05 ;PROGRAM PAGE SELECTION
R6 == 0X06
R7 == 0X07
ADDATAH == 0X07 ;THE CONTENTS ARE THE RUSULTS OF ADC
R8 == 0X08
R9 == 0X09
XRESET == 0;
SCL == 1;
SDA == 2;
LED == 3;
RA == 0X0A ;WDTC CONTROL
RB == 0X0B
ADDATA == 0X0B ;THE CONTENTS ARE THE RUSULTS OF ADC
RC == 0X0C
RD == 0X0D
RE == 0X0E
RF == 0X0F ;INTERRUPT STATUS REGISTER
;/**************************************************************
;/ To define special registers
;/**************************************************************
IOC5 == 0X05 ;CONTROL REGISTER OF PORT6
IOC6 == 0X06 ;CONTROL REGISTER OF PORT6
IOC7 == 0X07 ;CONTROL REGISTER OF PORT7
IOC8 == 0X08 ;CONTROL REGISTER OF PORT7
IOC9 == 0X09 ;CONTROL REGISTER OF PORT9
IOCA == 0X0A ;ADC .7.8 PIN CONTROL
IOCB == 0X0B ;IOCB ON PAGE0
IOCB1 == 0X0B ;ADC CONTROL ON PAGE1
IOCC == 0X0C ;PORTC CONTROL ON PAGE0
IOCC1 == 0X0C ;PORT SWITCH ON PAGE1
IOCD == 0X0D ;CLOCK SOURCE/PRESCALER FOR TIMER
IOCE == 0X0E ;INTERRUPT MASK
IOCF == 0X0F ;INTERRUPT MASK
;/**************************************************************
;/ To define common registers
;/**************************************************************
IIC == 0X10
IIC_TEMP == 0X11
IIC_STA == 0X12
ERR == 0
ERRTIMES == 0X13
DELAY == 0X14
R4_BUF == 0X15 ;R4 INTERRUPT BUFFFER
TEMP == 0X16
LEVEL == 0X17
LCDTEST == 0X18
;/**************************************************************
;/ Program start
;/**************************************************************
ORG 0000H
JMP RESET
;/**************************************************************
;/ 中断程序
;/**************************************************************
ORG 0008H
DISI
WDTC
SWAPA R4
MOV R4_BUF,A
PAGE 0
BC STATE,RPAGE0
BC STATE,RPAGE1
BC R4,BIT6
BC R4,BIT7
MOV A,@0X00
MOV RF,A
EXIT_INT:
SWAPA R4_BUF
MOV R4,A
WDTC
RETI
;/**************************************************************
;/ 初始化
;/**************************************************************
RESET:
NOP
NOP
NOP
NOP
NOP
NOP
WDTC
DISI
BC STATE,RPAGE0
BC STATE,RPAGE1
BC STATE,IOCPAGE
MOV A,@0X79
MOV RA,A
MOV A,@0X00
MOV R5,A
MOV R6,A
MOV R7,A
MOV A,@0X06
MOV R9,A
MOV A,@0X00
MOV RC,A
MOV RD,A
MOV RE,A
MOV RF,A
MOV A,@0X33
CONTW
BS STATE,RPAGE0
MOV A,@0X04
MOV R7,A
MOV A,@0X00
MOV RC,A
BS STATE,RPAGE1
MOV A,@0X00
MOV R5,A
MOV R6,A
MOV R7,A
MOV R8,A
MOV A,@06H
MOV R9,A
MOV A,@00H
MOV RA,A
MOV RB,A
BC STATE,RPAGE0
BC STATE,RPAGE1
MOV A,@00H
IOW IOC5
IOW IOC6
IOW IOC7
IOW IOC9
IOW IOCB
IOW IOCC
IOW IOCE
IOW IOCF
BS STATE,IOCPAGE
MOV A,@00H
IOW IOC6
IOW IOC7
IOW IOC9
IOW IOCA
IOW IOCB
MOV A,@01H
IOW IOCC
MOV A,@0X0D
IOW IOCD
BC STATE,IOCPAGE
;/***************************************************************
;/ 初始化BANK0到BANK3通用寄存器区
;/***************************************************************
BC R4,BIT6
BC R4,BIT7
MOV A,@1FH
MOV TEMP,A
INIT_RAM_LOOP:
WDTC
INC TEMP
MOV A,R4
AND A,@0XC0
MOV R4,A
MOV A,TEMP
ADD R4,A
MOV A,@00H
MOV R0,A
NOP
MOV A,@3FH
SUB A,TEMP
JBS STATE,Z
JMP INIT_RAM_LOOP
MOV A,@0XFF
SUB A,R4
JBC STATE,Z
JMP INIT_GEN_RAM_END
MOV A,@0X40
ADD R4,A
MOV A,@1FH
MOV TEMP,A
JMP INIT_RAM_LOOP
INIT_GEN_RAM_END:
;/**************************************************************
;/ 初始化10到1F通用寄存器区
;***************************************************************
MOV A,@00H
MOV 10H,A
MOV 11H,A
MOV 12H,A
MOV 13H,A
MOV 14H,A
MOV 15H,A
MOV 16H,A
MOV 17H,A
MOV 18H,A
MOV 19H,A
MOV 1AH,A
MOV 1BH,A
MOV 1CH,A
MOV 1DH,A
MOV 1EH,A
MOV 1FH,A
MOV A,@0X08
MOV LEVEL,A
CALL DELAY1 ;LCD芯片复位
BS R9,XRESET
LCD_INIT: ;lcd初始化,此处没有试是否每个控制指令前都需要控制码
CALL IIC_START
CALL DELAY1
MOV A,@0X78 ;lcd地址
CALL INIT_IIC
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X39 ;function set
CALL INIT_IIC
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X15 ;bias set
CALL INIT_IIC
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X78 ;contrast set
CALL INIT_IIC
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X5E ;power/icon/contrast set
CALL INIT_IIC
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X6A ;follower control
CALL INIT_IIC
CALL DELAY1
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X0C ;display on
CALL INIT_IIC
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X01 ;clear display
CALL INIT_IIC
CALL DELAY1
CALL DELAY1
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X06 ;entry mode set
CALL INIT_IIC
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X38 ;function set
CALL INIT_IIC
MOV A,@0X80 ;开始造向上的第一种箭头加横线,控制码
CALL INIT_IIC
MOV A,@0X40 ;CGRAM起始地址,相对于DDRAM的00H
CALL INIT_IIC
MOV A,@0X40 ;控制码,开始写入数据
CALL INIT_IIC
MOV A,@0X02
CALL INIT_IIC
MOV A,@0X07
CALL INIT_IIC
MOV A,@0X07
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X1F
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
CALL IIC_STOP
CALL IIC_START ;开始造上横线
CALL DELAY1
MOV A,@0X78 ;lcd地址
CALL INIT_IIC
MOV A,@0X80 ;控制码
CALL INIT_IIC
MOV A,@0X48 ;CGRAM起始地址,相对于DDRAM的01H
CALL INIT_IIC
MOV A,@0X40 ;开始写入数据
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X1F
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
CALL IIC_STOP
CALL IIC_START ;第一种向下箭头
CALL DELAY1
MOV A,@0X78
CALL INIT_IIC
MOV A,@0X80
CALL INIT_IIC
MOV A,@0X50 ;CGRAM起始地址,相对于DDRAM的02H
CALL INIT_IIC
MOV A,@0X40
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X1F
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X07
CALL INIT_IIC
MOV A,@0X07
CALL INIT_IIC
MOV A,@0X02
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
CALL IIC_STOP
CALL IIC_START ;下横线
CALL DELAY1
MOV A,@0X78
CALL INIT_IIC
MOV A,@0X80
CALL INIT_IIC
MOV A,@0X58 ;CGRAM起始地址,相对于DDRAM的03H
CALL INIT_IIC
MOV A,@0X40
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X1F
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
CALL IIC_STOP
CALL IIC_START ;第二种向上箭头
CALL DELAY1
MOV A,@0X78
CALL INIT_IIC
MOV A,@0X80
CALL INIT_IIC
MOV A,@0X60 ;CGRAM起始地址,相对于DDRAM的04H
CALL INIT_IIC
MOV A,@0X40
CALL INIT_IIC
MOV A,@0X08
CALL INIT_IIC
MOV A,@0X1C
CALL INIT_IIC
MOV A,@0X1C
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X1F
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
CALL IIC_STOP
CALL IIC_START ;第二种向下箭头
CALL DELAY1
MOV A,@0X78
CALL INIT_IIC
MOV A,@0X80 ;;CGRAM起始地址,相对于DDRAM的05H
CALL INIT_IIC
MOV A,@0X68
CALL INIT_IIC
MOV A,@0X40
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X1F
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
MOV A,@0X1C
CALL INIT_IIC
MOV A,@0X1C
CALL INIT_IIC
MOV A,@0X08
CALL INIT_IIC
MOV A,@0X00
CALL INIT_IIC
CALL IIC_STOP
JMP MAIN
INIT_IIC:
WDTC
CALL IIC_MAIN ;初始化IIC写入程序,判断是否正常相应
JBC IIC_STA,ERR
JMP INIT_ERR_END
RET
INIT_ERR_END:
CALL IIC_ERR_END ;错误后的操作
JMP LCD_INIT
MAIN:
PAGE 1
CALL DISPLAY ;不同的level显示不同内容
PAGE 0
INC LCDTEST ;用于循环测试显示是否正确
MOV A,LCDTEST
SUB A,@0X60
JBS STATE,Z
JMP MAIN
MOV A,@0X00
MOV LCDTEST,A
INC LEVEL
MOV A,LEVEL
SUB A,@0X09
JBS STATE,Z
JMP MAIN
MOV A,@0X01
MOV LEVEL,A
JMP MAIN
;/**************************************************************
;/ IIC PROGRAM
;***************************************************************
IIC_MAIN:
MOV IIC_TEMP,A ;数据写入,产生IIC信号,完成后等待
CALL IIC_WRITE
CALL DELAY_10US
CALL DELAY_10US
CALL DELAY_10US
RET
IIC_START: ;IIC开始信号
BC R9,SDA
CALL DELAY1
BC R9,SCL
RET
IIC_STOP: ;IIC结束信号
BC R9,SDA
CALL DELAY1
BS R9,SCL
CALL DELAY1
BS R9,SDA
RET
IIC_ERR_END: ;多次写入错误后LED闪烁提示
CALL IIC_STOP
INC ERRTIMES
MOV A,ERRTIMES
SUB A,@0X0A
JBC STATE,Z
JMP ERR_FLASH
RET
ERR_FLASH:
BS R9,LED
CALL DELAY500
BC R9,LED
CALL DELAY500
JMP ERR_FLASH
IIC_WRITE: ;IIC产生程序
MOV A,@0X08
MOV IIC,A
BC STATE,C
IIC_WRITE_1:
CALL DELAY_10US ;SDA数据左移
RLC IIC_TEMP
JBC STATE,C
JMP SDA_SET
BC R9,SDA
IIC_WRITE_2:
CALL DELAY_10US ;产生SCL信号
BS R9,SCL
CALL DELAY_10US
BC R9,SCL
DJZ IIC
JMP IIC_WRITE_1
MOV A,@0X04 ;判断lcd驱动芯片是否正确响应
IOW IOC9
CALL DELAY_10US
BS R9,SCL
CALL DELAY1
JBC R9,SDA
JMP IIC_ERR
BC R9,SCL
BC IIC_STA,ERR
MOV A,@0X00
IOW IOC9
RET
IIC_ERR:
BC R9,SCL ;lcd驱动芯片不正确响应写错误标志
BS IIC_STA,ERR
MOV A,@0X00
IOW IOC9
RET
SDA_SET:
BS R9,SDA
JMP IIC_WRITE_2
;/**************************************************************
;/ DELAY PROGRAM
;***************************************************************
DELAY_10US:
MOV A,@0X06
MOV TEMP,A
DELAY_10US1:
WDTC
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJZ TEMP
JMP DELAY_10US1
RET
DELAY500:
MOV A,@0XFA
MOV DELAY,A
DELAY500_1:
CALL DELAY1
DJZ DELAY
JMP DELAY500_1
RET
DELAY1:
MOV A,@0X0F
MOV TEMP,A
DELAY11:
WDTC
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJZ TEMP
JMP DELAY11
RET
;/**************************************************************
;/ DISPLAY PROGRAM
;***************************************************************
ORG 0400H
DISPLAY:
MOV A,LEVEL ;判断level的值,确定写入内容
SUB A,@0X01
JBC STATE,Z
JMP LEVEL1
MOV A,LEVEL
SUB A,@0X02
JBC STATE,Z
JMP LEVEL2
MOV A,LEVEL
SUB A,@0X03
JBC STATE,Z
JMP LEVEL3
MOV A,LEVEL
SUB A,@0X04
JBC STATE,Z
JMP LEVEL4
MOV A,LEVEL
SUB A,@0X05
JBC STATE,Z
JMP LEVEL5
MOV A,LEVEL
SUB A,@0X06
JBC STATE,Z
JMP LEVEL6
MOV A,LEVEL
SUB A,@0X07
JBC STATE,Z
JMP LEVEL7
MOV A,LEVEL
SUB A,@0X08
JBC STATE,Z
JMP LEVEL8
MOV A,@0X08
MOV LEVEL,A
RET
LEVEL1:
PAGE 0
CALL IIC_START
CALL DELAY1
PAGE 1
MOV A,@0X78 ;第一行内容,lcd芯片地址
CALL LINE_IIC
MOV A,@0X80 ;控制码
CALL LINE_IIC
MOV A,@0X80 ;第一行DDRAM起始地址
CALL LINE_IIC
MOV A,@0X40 ;数据写入控制码,开始写入数据
CALL LINE_IIC
MOV A,@0X04
CALL LINE_IIC
MOV A,@0X01
CALL LINE_IIC
MOV A,@0X01
CALL LINE_IIC
MOV A,@0X01
CALL LINE_IIC
MOV A,@0X01
CALL LINE_IIC
MOV A,@0X01
CALL LINE_IIC
MOV A,@0X01
CALL LINE_IIC
MOV A,@0X01
CALL LINE_IIC
PAGE 0
CALL IIC_STOP
PAGE 1
WDTC
PAGE 0
CALL IIC_START ;第二行内容
CALL DELAY1
PAGE 1
MOV A,@0X78
CALL LINE_IIC
MOV A,@0X80
CALL LINE_IIC
MOV A,@0X90
CALL LINE_IIC
MOV A,@0X40
CALL LINE_IIC
MOV A,@0XA0
CALL LINE_IIC
MOV A,@0XA0
CALL LINE_IIC
MOV A,@0X53
CALL LINE_IIC
MOV A,@0X59
CALL LINE_IIC
MOV A,@0X4E
CALL LINE_IIC
MOV A,@0XA0
CALL LINE_IIC
MOV A,@0XA0
CALL LINE_IIC
MOV A,@0XA0
CALL LINE_IIC
PAGE 0
CALL IIC_STOP
PAGE 1
WDTC
PAGE 0
CALL IIC_START ;第三行内容
CALL DELAY1
PAGE 1
MOV A,@0X78
CALL LINE_IIC
MOV A,@0X80
CALL LINE_IIC
MOV A,@0XA0
CALL LINE_IIC
MOV A,@0X40
CALL LINE_IIC
MOV A,@0X03
CALL LINE_IIC
MOV A,@0X03
CALL LINE_IIC
MOV A,@0X03
CALL LINE_IIC
MOV A,@0X03
CALL LINE_IIC
MOV A,@0X03
CALL LINE_IIC
MOV A,@0X03
CALL LINE_IIC
MOV A,@0X03
CALL LINE_IIC
MOV A,@0X03
CALL LINE_IIC
PAGE 0
CALL IIC_STOP
PAGE 1
WDTC
RET
LEVEL2:
PAGE 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -