📄 7529_68bus.asm
字号:
;68/8080时序点阵式32级灰阶标准程序(ST7529)
;KMC240160-A-00-SPI BY BING
X EQU 32H
Y EQU 33H
Z EQU 34H
DATA1 EQU 35H
DATA2 EQU 36H
TIME0 EQU 37H
TIME1 EQU 38H
TEMP0 EQU 31H
TEMP1 EQU 30H
TEMP2 EQU 39H
CTRLWR1 EQU 2000H
CTRLRD1 EQU 2001H
DATAWR1 EQU 2002H
DATARD1 EQU 2003H
;CS BIT p2.2;P3.0
;RES BIT p2.1;P3.1
;ReD BIT p3.7;P3.2
;rw BIT p3.6;P3.3
;AO BIT p2.0;P3.4
ORG 0000H
LJMP BEGIN ;调用主程序
ORG 0013H
LJMP ZD1
ORG 0060H
NOP
BEGIN:
SETB EA
SETB EX1
CLR IT1
MOV SP,#60H
; CLR CS
NOP
REST: ;SETB RES
;LCALL DELAY1
;CLR RES
;LCALL DELAY1
;SETB RES
;LCALL DELAY1
;SETB RD
MOV A,#30H ;设置EXT=0
LCALL WRCTRL
INT: MOV A,#94H ;Sleep Out
LCALL WRCTRL
MOV A,#0D1H ;Internal OSC On
LCALL WRCTRL
MOV A,#20H ;Power control set
LCALL WRCTRL
MOV A,#08H ;打开倍压电路
LCALL WRDATA
LCALL DELAY1 ;倍压电路需要首先打开并延时1ms
MOV A,#20H ;Power control set
LCALL WRCTRL
MOV A,#0BH ;同时打开倍压电路VB,参考电压发生电路VR,偏压电路VF
LCALL WRDATA
MOV A,#81H ;开始设置电压微调
LCALL WRCTRL
MOV A,#1aH ;写入VPR[5:0]数值
LCALL WRDATA
MOV A,#04H ;写入VPR[8:6]数值(共有406级电压调节)
LCALL WRDATA
MOV A,#0CAH ;控制显示指令,在打开显示后不能变动
LCALL WRCTRL
MOV A,#00H ;时钟频率设为不分频(X1),可设为2分频(X/2)
LCALL WRDATA
MOV A,#27H ;Duty设为1/160
LCALL WRDATA
MOV A,#00H ;设置几行为一帧,使用默认值11
LCALL WRDATA
MOV A,#0A6H ;设置RAM中数据为正常显示
LCALL WRCTRL
MOV A,#0BBH ;控制COM反转指令
LCALL WRCTRL
MOV A,#01H ;设置COM扫描次序为0-79,159-80
LCALL WRDATA
MOV A,#0BCH ;控制DATA扫描次序指令
LCALL WRCTRL
MOV A,#00H ;设置DATA扫描次序为0-254
LCALL WRDATA
MOV A,#00H ;设置RGB的排列顺序
LCALL WRDATA
MOV A,#01H ;设置32级灰度2B3P模式
LCALL WRDATA
MOV A,#75H ;控制行地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始行为0
LCALL WRDATA
MOV A,#9FH ;设置终止行为159
LCALL WRDATA
MOV A,#15H ;控制列地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始列为0
LCALL WRDATA
MOV A,#4FH ;设置终止列为79
LCALL WRDATA
MOV A,#31H ;设置EXT=1
LCALL WRCTRL
MOV A,#32H ;控制附加电路设置的指令
LCALL WRCTRL
MOV A,#00H ;设置时钟频率为12.7KHz,即默认值
LCALL WRDATA
MOV A,#01H ;设置倍压电容的频率为6KHz,即默认值
LCALL WRDATA
MOV A,#02H ;设置Bias=1/12
LCALL WRDATA
MOV A,#34H ;关闭抖动电路
LCALL WRCTRL
MOV A,#30H ;设置EXT=0
LCALL WRCTRL
MOV A,#0AFH ;打开显示
LCALL WRCTRL
LCALL RDCTRL
MAIN: LCALL DISPLAY1 ;全显
;LCALL DELAY5S
LCALL DELAY1S
LCALL CLEAR
LCALL DISPLAY2 ;隔列
;LCALL DELAY5S
LCALL DELAY1S
LCALL CLEAR
LCALL DISPLAY3 ;三角形1
;LCALL DELAY5S
LCALL DELAY1S
LCALL CLEAR
LCALL DISPLAY4 ;福
; LCALL DELAY5S
LCALL DELAY1S
LCALL CLEAR
LCALL DISPLAY5 ;恋
;LCALL DELAY5S
LCALL DELAY1S
LCALL CLEAR
LCALL DISPLAY6 ;财
;LCALL DELAY5S
LCALL DELAY1S
LCALL CLEAR
LJMP BEGIN
DISPLAY1:MOV DATA1,#0FFH
MOV DATA2,#0FFH
LCALL WRITE
RET
DISPLAY2:MOV DATA1,#0F8H
MOV DATA2,#01FH
LCALL WRITEB
RET
DISPLAY3:LCALL WRITEE
RET
DISPLAY4:LCALL WRITEF
RET
DISPLAY5:LCALL WRITEG
RET
DISPLAY6:LCALL WRITEH
RET
RDCTRL:
PUSH DPH
PUSH DPL
MOV DPTR,#CTRLRD1;
NOP
MOVX A,@DPTR
NOP
POP DPL
POP DPH
RET
WRCTRL:
;68BUS模式
PUSH DPH
PUSH DPL
MOV DPTR,#CTRLWR1;
nop
nop
MOVX @DPTR,A
nop
NOP
POP DPL
POP DPH
RET
;**************************
;CLR AO;68模式
;CLR RW
; NOP
;NOP
; MOV P0,A
; SETB RED
; NOP
; NOP
; NOP
; NOP
; NOP
; NOP
; CLR RED
; NOP
; NOP
; RET
;**********************
;CLR AO ;80模式从这开始
;MOV P0,#00H ;将P0口清零
; NOP
; NOP
; MOV P0,A
;CLR RW
; NOP
; NOP
;; NOP
; NOP
; SETB RW
; NOP
; SETB AO
; RET
;***************************
WRDATA:
;68BUS模式
PUSH DPH
PUSH DPL
MOV DPTR,#DATAWR1;
nop
nop
MOVX @DPTR,A
NOP
NOP
POP DPL
POP DPH
RET
;**************
;68模式
;SETB AO
;NOP
;NOP
;;CLR RW
;NOP
;NOP
;NOP
;NOP
; NOP
;MOV P0,A
;SETB RED
;NOP
;NOP
; NOP
; NOP
; CLR RED
; NOP
;NOP
; NOP
;NOP
; RET
;********************
;SETB AO;80模式
; MOV P0,#00H
; NOP
; NOP
; MOV P0,A
; CLR RW
; NOP
; NOP
; NOP
; NOP
; NOP
; SETB RW
; NOP
; CLR AO
; RET
;*************************
WRITE: MOV A,#30H ;设置EXT=0
LCALL WRCTRL
MOV A,#15H ;控制列地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始列为0
LCALL WRDATA
MOV A,#4FH ;设置终止列为79
LCALL WRDATA
MOV A,#75H ;控制行地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始行为0
LCALL WRDATA
MOV A,#9FH ;设置终止行为159
LCALL WRDATA
MOV A,#5CH ;控制往显存写数据指令
LCALL WRCTRL
MOV X,#00H ;设置起始COM
WRITE1:
MOV Y,#80 ;SEG数除以3,共循环80次
WRITE2:MOV A,DATA1 ;第一次写数据
CPL A
LCALL WRDATA
MOV A,DATA2 ;第二次写数据
CPL A
LCALL WRDATA
DJNZ Y,WRITE2
INC X
MOV A,X
CJNE A,#160,WRITE1
RET
WRITEB: MOV A,#30H ;设置EXT=0
LCALL WRCTRL
MOV A,#15H ;控制列地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始列为0
LCALL WRDATA
MOV A,#4FH ;设置终止列为79
LCALL WRDATA
MOV A,#75H ;控制行地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始行为0
LCALL WRDATA
MOV A,#9FH ;设置终止行为159
LCALL WRDATA
MOV A,#5CH ;控制往显存写数据指令
LCALL WRCTRL
MOV X,#00H ;设置起始COM
WRITEB1:MOV Y,#40 ;SEG数除以3,共循环80次
WRITEB2:MOV A,#00H
MOV A,DATA1 ;第一次写数据
CPL A
LCALL WRDATA
MOV A,DATA2 ;第二次写数据
CPL A
LCALL WRDATA
MOV A,#007H ;第三次写数据
CPL A
LCALL WRDATA
MOV A,#0C0H ;第四次写数据
CPL A
LCALL WRDATA
DJNZ Y,WRITEB2
INC X
MOV A,X
CJNE A,#160,WRITEB1
RET
WRITEE: MOV A,#30H ;设置EXT=0
LCALL WRCTRL
MOV A,#15H ;控制列地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始列为0
LCALL WRDATA
MOV A,#4FH ;设置终止列为79
LCALL WRDATA
MOV A,#75H ;控制行地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始行为0
LCALL WRDATA
MOV A,#9FH ;设置终止行为159
LCALL WRDATA
MOV A,#5CH ;控制往显存写数据指令
LCALL WRCTRL
MOV X,#00H ;设置起始COM
WRITEE1:MOV Y,#20 ;SEG数除以3,共循环80次
WRITEE01:MOV DPTR,#TAB01
MOV Z,#04
LCALL WXDATA
DJNZ Y,WRITEE01
MOV Y,#20
WRITEE02:MOV DPTR,#TAB02
MOV Z,#04
LCALL WXDATA
DJNZ Y,WRITEE02
MOV Y,#20
WRITEE03:MOV DPTR,#TAB03
MOV Z,#04
LCALL WXDATA
DJNZ Y,WRITEE03
MOV Y,#20
WRITEE04:MOV DPTR,#TAB04
MOV Z,#04
LCALL WXDATA
DJNZ Y,WRITEE04
MOV Y,#20
WRITEE05:MOV DPTR,#TAB05
MOV Z,#04
LCALL WXDATA
DJNZ Y,WRITEE05
MOV Y,#20
WRITEE06:MOV DPTR,#TAB06
MOV Z,#04
LCALL WXDATA
DJNZ Y,WRITEE06
MOV Y,#20
WRITEE07:MOV DPTR,#TAB07
MOV Z,#04
LCALL WXDATA
DJNZ Y,WRITEE07
MOV Y,#20
WRITEE08:MOV DPTR,#TAB08
MOV Z,#04
LCALL WXDATA
DJNZ Y,WRITEE08
INC X
MOV A,X
CJNE A,#20,WRITEE1
RET
WRITEF: MOV A,#30H ;设置EXT=0
LCALL WRCTRL
MOV A,#15H ;控制列地址的指令
LCALL WRCTRL
MOV A,#00H ;设置起始列为0
LCALL WRDATA
MOV A,#4FH ;设置终止列为79
LCALL WRDATA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -