⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7529_68bus.asm

📁 ST7529的汇编测试程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;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 + -