?? d1621.inc
字號:
;HT1621 設定字(命令模式字的低8位數據)
BIAS EQU 52H ;1/3 偏壓4背極
RC256 EQU 30H ;系統時鐘選用片內RC振蕩器
SYSEN EQU 02H ;打開系統時鐘
LCDON EQU 06H ;打開偏壓發生器
SYSDIS EQU 00H ;關閉系統時鐘(以及偏壓發生器)
X32K EQU 28H ;系統時鐘選擇為片外晶振32.768K
TONEON EQU 12H ;打開音頻輸出
TONEOFF EQU 10H ;關閉音頻輸出
TONE4K EQU 80H ;音頻輸出頻率為4K
TONE2K EQU 0C0H ;音頻輸出頻率為2K
TIMEREN EQU 0CH ;時基輸出使能
TIMERDIS EQU 08H ;時基輸出禁能
CLRTIME EQU 18H ;清零進基發生器
WDTEN EQU 0EH ;使能WDT溢出標志輸出
WDTDIS EQU 0AH ;禁止WDT溢出標志輸出
CLRWDT EQU 1CH ;清零WDT
IRQEN EQU 10H ;使能IRQ輸出
IRQDIS EQU 00H ;禁止IRQ輸出
FR1 EQU 40H ;設置時基輸出1HZ,WDT溢出時間4S
;HT1621控制位(液晶模塊接口定義,用戶根據自已的需要更改)
CS BIT P0.6 ;HT1621片選
WRITE BIT P1.6 ;HT1621寫控制位
SDATA BIT P0.7 ;HT1621數據線
;顯示緩沖區(用戶根據自已的需要更改變量的存儲地址)
DISBUFFER EQU 34H ;顯示緩沖區地址34H--43H(16字節)
;臨時變量定義(不會破壞這些資源,只是臨時占用,用戶不要自行修改)
LCDBITCNT EQU 03H ;發送位計數器
LCDCOMMAND EQU 02H ;發送命令緩沖器
LCDADR EQU 01H ;LCD顯存指針
LCDBYTECNT EQU 04H ;發送字節數記數器
;===================================================================================
; 向HT1621發送命令和數據模塊
;軟件包面向用戶的界面程序:
; SEND1621COM 發送命令子程序,命令ID為100+0型式 + 命令字
; SEND1621COMB 發送命令子程序(B),命令ID為100+1型式 + 命令字
; HT1621DOWN 設置HT1621進行掉電工作方式
; INTI1621 初化HT1621,并打開LCD顯示,用戶可更改相應初化字,進行HT1621的不同設置。
; BRUSHLCD 刷新LCD顯示,即將顯示緩沖區的16字節數據發送到HT1621,從SEG0段開始。
; DISDPTR 將DPTR指向的程序存儲器的數據(連續16字節)發送到HT1621顯示。
;這此子程序都會自動保護所需的臨時單元,所以占用較多的堆棧,用戶要注意這一點。
;===================================================================================
;發送命令程序
;名稱: SEND1621COM
;描述: 向HT1621發送控制命令,命令內容在LCDCOMMAND中。
;所發的命令類型為ID=100+0+命令,占用堆棧。
SEND1621COM:
PUSH ACC
PUSH LCDBITCNT
ACALL INTI ;起動HT1621(即初化)
MOV LCDBITCNT,#04H
MOV A,#80H ;發送ID值100+0
ACALL SENDB0
MOV A,LCDCOMMAND ;取得命令字
ACALL SEND1621BYTE ;發送到HT1621
SETB WRITE
SETB CS
SETB SDATA
POP LCDBITCNT
POP ACC
RET
;發送命令程序(B)
;名稱: SEND1621COMB
;描述: 向HT1621發送控制命令,命令內容在LCDCOMMAND中。
;所發的命令類型為ID=100+1+命令,占用堆棧。
SEND1621COMB:
PUSH ACC
PUSH LCDBITCNT
ACALL INTI ;起動HT1621(即初化)
MOV LCDBITCNT,#04H
MOV A,#90H ;發送ID值100+0
ACALL SENDB0
MOV A,LCDCOMMAND
ACALL SEND1621BYTE
SETB WRITE ;將SPI接口均置為高電平
SETB CS
SETB SDATA
POP LCDBITCNT
POP ACC
RET
;HT1621掉電模式
;使HT1621進行掉電模式,以降低功耗
HT1621DOWN:
PUSH LCDCOMMAND
MOV LCDCOMMAND,#SYSDIS ;關閉系統振蕩器即進行掉電方式
ACALL SEND1621COM
POP LCDCOMMAND
RET
;HT1621設置
;描述:進行HT1621的基本設置,偏壓、背極、系統工作方式
;用戶添加初化內容或更改設置內容。
INTI1621:
PUSH LCDCOMMAND
MOV LCDCOMMAND,#BIAS
ACALL SEND1621COM ;工作于1/3偏壓,4背極
MOV LCDCOMMAND,#X32K
ACALL SEND1621COM ;系統時鐘選擇為外部時鐘
MOV LCDCOMMAND,#WDTDIS
ACALL SEND1621COM ;關閉看門狗
MOV LCDCOMMAND,#TIMERDIS
ACALL SEND1621COM
MOV LCDCOMMAND,#SYSEN ;啟動HT1621系統振蕩器
ACALL SEND1621COM
MOV LCDCOMMAND,#LCDON ;啟動HT1621顯示偏壓發生器,啟動顯示
ACALL SEND1621COM
POP LCDCOMMAND
RET
;刷新顯示子程序
;名稱:BRUSHLCD
;描述:把顯示緩沖區DISBUFFER共16個單元的內容送到HT1621中
BRUSHLCD:
PUSH LCDBYTECNT
PUSH LCDADR
MOV LCDBYTECNT,#16 ;發送16個數據
MOV LCDADR,#DISBUFFER ;指向顯示緩沖區
DISPLAY0:
LCALL SEND1621DATA ;調用發送數據子程序,從SEG0段開始
POP LCDADR
POP LCDBYTECNT
RET
;函數名:DISDPTR
;功能: 把DPTR指向的程序存貯器的16個字節內容直接送到HT1621的顯示緩沖區內
;參數: DPTR-緩沖區指針
;返回值:無
DISDPTR:
PUSH 07H
PUSH 00H
PUSH 06H
PUSH ACC
MOV R7,#10H ;設置各指針及變量初值
MOV R0,# DISBUFFER ;先把數據讀入顯示緩沖區
MOV R6,#00
ICERRORCON:
MOV A,R6
MOVC A,@A+DPTR ;讀取程序區的數據
MOV @R0,A ;放入顯示緩沖區
INC R0
INC R6
DJNZ R7,ICERRORCON
ACALL BRUSHLCD ;輸出顯示
POP ACC
POP 06H
POP 00H
POP 07H
RET
;*******************************************************************
; 子程序
;用戶盡量不要單獨的調用這此子程序
;***********************************************
;************************************************
;發送數據程序
;名稱: SEND1621DATA
;描述: 向HT1621發送BYTECNT個數據(從SEG0開始發送)
; 數據在發送緩沖區中,緩沖區指針LCDADR.
;-----------------------------------------------
SEND1621DATA:
PUSH ACC
PUSH LCDBITCNT
PUSH LCDBYTECNT
PUSH LCDADR
ACALL INTI
MOV LCDBITCNT,#01H ;發送寫HT1621 RAM命令
MOV A,#80H ;發送1位數據
ACALL SENDB0
MOV A,#40H ;HT1621 RAM地址設置為00H
ACALL SEND1621BYTE
MOV R1,LCDADR
SENDNEXT1:
MOV A,@R1 ;讀取數據
ACALL SEND1621BYTE ;發送數據
INC R1
DJNZ LCDBYTECNT,SENDNEXT1
SETB WRITE
SETB CS
SETB SDATA
POP LCDADR
POP LCDBYTECNT
POP LCDBITCNT
POP ACC
RET
;************************************************
;HT1621初始化子程序
;即起動HT1621
;-----------------------------------------------
INTI:
CLR CS
SETB WRITE
NOP
CLR WRITE
NOP
RET
;******************************************************************
;發送字節數據子程序
;名稱: SEND1621BYTE
;描述: 向HT1621發送一個字節數據,數據在A中
;-----------------------------------------------
SEND1621BYTE:
PUSH LCDBITCNT
MOV LCDBITCNT,#08H ;發送8位數據位
ACALL SENDB0 ;調用發送數據位子程序
POP LCDBITCNT
RET
;******************************************************************
;發送位數據子程序
;名稱: SENDB0
;描述: 向HT1621發送N位數據,數據在A中,N在LCDBITCNT中,從高位開始發送
;-----------------------------------------------
SENDB0:
PUSH ACC
PUSH PSW
PUSH LCDBITCNT
SENDB01:
RLC A
MOV SDATA,C ;先發送高位數據
SETB WRITE ;產生WR信號
NOP
NOP
CLR WRITE
NOP
NOP
DJNZ LCDBITCNT,SENDB01 ;未發送完,繼續
POP LCDBITCNT
POP PSW
POP ACC
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -