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

📄 hgo160160a.asm

📁 ST7529驱动160*160点阵32级灰度液晶屏
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;6800时序点阵式32级灰阶标准程序(ST7529)
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

         CS BIT P2.1
         RES BIT P2.2
         E  BIT P3.7
         RW BIT P3.6
         AO BIT P2.0


ORG 0000H
LJMP BEGIN       ;调用主程序
ORG 0060H
NOP

BEGIN: MOV SP,#60H
       CLR CS
       NOP

REST:  SETB RES
       LCALL DELAY1
       CLR RES
       LCALL DELAY1
       SETB RES
       LCALL DELAY1
       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,#10H       ;写入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,#01H       ;设置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,#00H       ;设置Bias=1/14
       LCALL WRDATA
       MOV A,#34H       ;关闭抖动电路
       LCALL WRCTRL
       MOV A,#30H       ;设置EXT=0
       LCALL WRCTRL
       MOV A,#0AFH      ;打开显示
       LCALL WRCTRL
MAIN:  LCALL CLEAR
       LCALL DISPLAY7
       LCALL DISPLAY5
       LCALL DELAY5S
       LCALL DELAY5S
       LCALL DELAY5S
       LCALL DELAY1S
       LCALL CLEAR

       MOV A,#30H       ;设置EXT=0
       LCALL WRCTRL
       MOV A,#81H       ;开始设置电压微调
       LCALL WRCTRL
       MOV A,#10H       ;写入VPR[5:0]数值
       LCALL WRDATA
       MOV A,#04H       ;写入VPR[8:6]数值(共有406级电压调节)
       LCALL WRDATA
       LCALL DISPLAY1   ;全显
       LCALL DELAY5S
       LCALL DELAY1S
       LCALL CLEAR
       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
       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
DISPLAY7:LCALL WRITEI
       RET
WRCTRL:CLR AO
       NOP
       MOV P0,A
       CLR RW
       NOP
       NOP
       NOP
       NOP
       NOP
       SETB E
       NOP
       CLR E
       SETB AO
       RET

WRDATA:SETB AO
      NOP
      MOV P0,A
      CLR RW
      NOP
      SETB E
      NOP
      CLR E
      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,#34H       ;设置终止列为79;53
       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
       MOV Y,#53       ;SEG数除以3,共循环80次
WRITEF1:MOV A,#0FFH
      CPL A
      LCALL WRDATA
      MOV A,#0FFH
      CPL A
      LCALL WRDATA
      DJNZ Y,WRITEF1
WRITEF3:MOV A,#0F8H
      CPL A
      LCALL WRDATA
      MOV A,#000H
      CPL A
      LCALL WRDATA
      MOV Y,#51
WRITEF2:MOV A,#000H
      CPL A
      LCALL WRDATA
      MOV A,#000H
      CPL A
      LCALL WRDATA
      DJNZ Y,WRITEF2
      MOV A,#000H
      CPL A
      LCALL WRDATA
      MOV A,#01FH
      CPL A
      LCALL WRDATA
      INC X
      MOV A,X
      CJNE A,#158,WRITEF3
      MOV Y,#53
WRITEF4:MOV A,#0FFH
      CPL A
      LCALL WRDATA
      MOV A,#0FFH
      CPL A
      LCALL WRDATA
      DJNZ Y,WRITEF4
      RET
WRITEG: MOV A,#30H       ;设置EXT=0
       LCALL WRCTRL
       MOV A,#15H       ;控制列地址的指令
       LCALL WRCTRL
       MOV A,#08H       ;设置起始列为8
       LCALL WRDATA
       MOV A,#2FH       ;设置终止列为47
       LCALL WRDATA
       MOV A,#75H       ;控制行地址的指令
       LCALL WRCTRL
       MOV A,#40H       ;设置起始行为64
       LCALL WRDATA
       MOV A,#9FH       ;设置终止行为159
       LCALL WRDATA
       MOV A,#5CH       ;控制往显存写数据指令
       LCALL WRCTRL
       MOV X,#00H      ;设置起始COM
;WRITEG1:MOV Y,#4       ;SEG数除以3,共循环80次
      LCALL ZIMOG
 ;     INC X
 ;     MOV A,X
 ;     CJNE A,#10,WRITEG1
      RET
ZIMOG: MOV A,#00H
WRITEG01:MOV DPTR,#TAB11
      MOV Z,#10
      LCALL WXDATA
      MOV DPTR,#TAB21
      MOV Z,#10
      LCALL WXDATA
      MOV DPTR,#TAB31
      MOV Z,#10
      LCALL WXDATA
      MOV DPTR,#TAB51
      MOV Z,#10
      LCALL WXDATA
WRITEG02:MOV DPTR,#TAB12
      MOV Z,#10
      LCALL WXDATA
      MOV DPTR,#TAB22
      MOV Z,#10
      LCALL WXDATA
      MOV DPTR,#TAB32
      MOV Z,#10
      LCALL WXDATA
      MOV DPTR,#TAB52
      MOV Z,#10
      LCALL WXDATA

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -