?? 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 + -