|
來(lái)源:HT 作者: ;LCD 設(shè)定(命令模式字的低8位數(shù)據(jù)) BIAS EQU 52H ;1/3 偏壓4背極 RC256 EQU 30H ;系統(tǒng)時(shí)鐘選用片 內(nèi)RC振蕩器 SYSEN EQU 02H ;打開(kāi)系統(tǒng)時(shí)鐘 LCDON EQU 06H ;打開(kāi)偏壓發(fā)生器 SYSDIS EQU 00H ;關(guān)閉系統(tǒng)時(shí)鐘和 偏壓發(fā)生器 X32K EQU 28H ;系統(tǒng)時(shí)鐘選擇為 片外晶振 ToneOn EQU 12H ;打開(kāi)音頻輸出 ToneOff EQU 10H ;關(guān)閉音頻輸出 Tone4k EQU 80H ;音頻輸出頻率為 4K Tone2k EQU 0C0H ;音頻輸出頻率為2K TIMEREN EQU 0CH ;時(shí)基輸出使能 TIMERDIS EQU 08H ;時(shí)基輸出禁能 CLRtime EQU 18H ;清零進(jìn)基發(fā)生器 WDTEN EQU 0EH ;使能WDT溢出標(biāo)志 輸出 WDTDIS EQU 0AH ;禁止WDT溢出標(biāo)志 輸出 CLRWDT EQU 1CH ;清零WDT IRQEN EQU 10H ;使能IRQ輸出 IRQDIS EQU 00H ;禁止IRQ輸出 FR1 EQU 40H ;設(shè)置時(shí)基輸出 1HZ,WDT溢出時(shí)間4s
;HT1621B控制位(液晶模塊接口定義,用戶根據(jù)自已的需要更改) CS BIT P0.1 ;HT1621B片選 WRITE BIT P0.3 ;HT1621B寫(xiě)控制位 SDATA BIT P0.5 ;HT1621B數(shù)據(jù)線
;顯示緩沖區(qū)(用戶根據(jù)自已的需要更改變量的存儲(chǔ)地址) DISBUFFER EQU 34H ;顯示緩沖區(qū)地址34H--43H(16 字節(jié))
;臨時(shí)變量定義(不會(huì)破壞這些資源,只是臨時(shí)占用,用戶不要自行修改) lcdbitcnt EQU 03H ;發(fā)送位計(jì)數(shù)器 lcdcommand EQU 02H ;發(fā)送命令緩沖器 lcdadr EQU 01H ;lcd顯存指針 LCDBYTECNT EQU 04H ;發(fā)送字節(jié)數(shù)記數(shù)器
;=============================================================================== ==== ; 向HT1621B發(fā)送命令和數(shù)據(jù)模塊 ;軟件包面向用戶的界面程序: ; Send1621Com 發(fā)送命令子程序,命令I(lǐng)D為100+0型式 + 命令字 ; Send1621ComB 發(fā)送命令子程序(B),命令I(lǐng)D為100+1型式 + 命令字 ; HT1621DOWN 設(shè)置1621進(jìn)行掉電工作方式 ; INTI1621 初化1621,并打開(kāi)LCD顯示,用戶可更改相應(yīng)初化字,進(jìn)行1621的不同設(shè) 置。 ; BrushLcd 刷新LCD顯示,即將顯示緩沖區(qū)的16字節(jié)數(shù)據(jù)發(fā)送到1621,從SEG0 段開(kāi)始。 ; DISDPTR 將DPTR指向的程序存儲(chǔ)器的數(shù)據(jù)(連續(xù)16字節(jié))發(fā)送到1621顯示。 ;這此子程序都會(huì)自動(dòng)保護(hù)所需的臨時(shí)單元,所以占用較多的堆棧,用戶要注意這一點(diǎn)。 ;=============================================================================== ====
;發(fā)送命令程序 ;名稱: Send1621Com ;描述: 向HT1621B發(fā)送控制命令,命令內(nèi)容在LCDCOMMAND中。 ;所發(fā)的命令類(lèi)型為ID=100+0+命令,占用堆棧。 Send1621Com: PUSH ACC PUSH LCDBITCNT ACALL INTI ;起動(dòng)1621(即初 化) MOV LCDBITCNT,#04h MOV A,#80h ;發(fā)送ID值100+0 ACALL sendb0 MOV A,LCDCOMMAND ;取得命令字 ACALL send1621byte ;發(fā)送到1621 SETB write SETB cs SETB sdata POP LCDBITCNT POP ACC RET
;發(fā)送命令程序(B) ;名稱: Send1621ComB ;描述: 向HT1621B發(fā)送控制命令,命令內(nèi)容在LCDCOMMAND中。 ;所發(fā)的命令類(lèi)型為ID=100+1+命令,占用堆棧。 Send1621ComB: PUSH ACC PUSH LCDBITCNT ACALL INTI ;起動(dòng)1621(即初 化) MOV LCDBITCNT,#04h MOV A,#90h ;發(fā)送ID值100+1 ACALL sendb0 MOV A,LCDCOMMAND ACALL send1621byte SETB write ;將SPI接口均置為 高電平 SETB cs SETB sdata POP LCDBITCNT POP ACC RET
;HT1621B掉電模式 ;使1621進(jìn)行掉電模式,以降低功耗 HT1621DOWN: PUSH LCDCOMMAND MOV LCDCOMMAND,#SYSDIS ;關(guān)閉系統(tǒng)振蕩器即進(jìn)行掉電 方式 ACALL Send1621Com POP LCDCOMMAND RET
;1621設(shè)置 ;描述:進(jìn)行1621的基本設(shè)置,偏壓、背極、系統(tǒng)工作方式 ;用戶添加初化內(nèi)容或更改設(shè)置內(nèi)容。 INTI1621: PUSH LCDCOMMAND MOV LCDCommand,#bias ACALL Send1621Com ;工作于1/3偏壓, 4背極 MOV LCDCommand,#X32K ACALL Send1621Com ;系統(tǒng)時(shí)鐘選擇為 外部時(shí)鐘 MOV LCDCommand,#wdtdis ACALL Send1621Com ;關(guān)閉看門(mén)狗 MOV LCDCommand,#timerdis ACALL Send1621Com MOV LCDCommand,#sysen ;啟動(dòng)1621系統(tǒng)振蕩器 ACALL Send1621Com MOV LCDCommand,#LCDON ;啟動(dòng)1621顯示偏壓發(fā)生器,啟 動(dòng)顯示 ACALL Send1621Com POP LCDCOMMAND RET
;刷新顯示子程序 ;名稱:BrushLcd ;描述:把顯示緩沖區(qū)DISBUFFER共16個(gè)單元的內(nèi)容送到1621中 BrushLcd: PUSH LCDBYTECNT PUSH LCDADR MOV LCDBYTECNT,#16 ;發(fā)送16個(gè)數(shù)據(jù) MOV LCDADR,#DISBUFFER ;指向顯示緩沖區(qū) DISPLAY0: LCALL SEND1621DATA ;調(diào)用發(fā)送數(shù)據(jù)子 程序,從SEG0段開(kāi)始 POP LCDADR POP LCDBYTECNT RET
;函數(shù)名:DISDPTR ;功能: 把DPTR指向的程序存貯器的16個(gè)字節(jié)內(nèi)容直接送到1621的顯示緩沖區(qū)內(nèi) ;參數(shù): DPTR-緩沖區(qū)指針 ;返回值:無(wú) DISDPTR: PUSH 07H PUSH 00H PUSH 06H PUSH ACC MOV R7,#10H ;設(shè)置各指針及變 量初值 MOV R0,# DISBUFFER ;先把數(shù)據(jù)讀入顯 示緩沖區(qū) MOV R6,#00 ICERRORCON: MOV A,R6 MOVC A,@A+DPTR ;讀取程序區(qū)的數(shù)據(jù) MOV @R0,A ;放入顯示緩沖區(qū) INC R0 INC R6 DJNZ R7,ICERRORCON ACALL BrushLcd ;輸出顯示 POP ACC POP 06H POP 00H POP 07H RET
;******************************************************************* ; 子程序 ;用啟盡量不要單獨(dú)的調(diào)用這此子程序 ;***********************************************
;************************************************ ;發(fā)送數(shù)據(jù)程序 ;名稱: Send1621Data ;描述: 向HT1621B發(fā)送BYTECNT個(gè)數(shù)據(jù)(從SEG0開(kāi)始發(fā)送) ; 數(shù)據(jù)在發(fā)送緩沖區(qū)中,緩沖區(qū)指針lcdadr. ;----------------------------------------------- Send1621Data: PUSH ACC PUSH LCDBITCNT PUSH LCDBYTECNT PUSH LCDADR ACALL INTI MOV LCDBITCNT,#01H ;發(fā)送寫(xiě)1621RAM命 令 MOV A,#80H ;發(fā)送1位數(shù)據(jù) ACALL SENDB0 MOV A,#40H ;1621RAM地址設(shè)置 為00H ACALL SEND1621BYTE MOV R1,LCDADR SENDNEXT1: MOV A,@R1 ;讀取數(shù)據(jù) ACALL SEND1621BYTE ;發(fā)送數(shù)據(jù) INC R1 DJNZ LCDBYTECNT,SENDNEXT1 SETB WRITE SETB CS SETB SDATA POP LCDADR POP LCDBYTECNT POP LCDBITCNT POP ACC RET
;************************************************ ;1621初始化子程序 ;即起動(dòng)1621 ;----------------------------------------------- INTI: CLR CS SETB WRITE NOP CLR WRITE NOP RET
;****************************************************************** ;發(fā)送字節(jié)數(shù)據(jù)子程序 ;名稱: Send1621Byte ;描述: 向HT1621B發(fā)送一個(gè)字節(jié)數(shù)據(jù),數(shù)據(jù)在A中 ;----------------------------------------------- Send1621Byte: PUSH LCDBITCNT MOV lcdbitcnt,#08h ;發(fā)送8位數(shù)據(jù)位 ACALL SENDB0 ;調(diào)用發(fā)送數(shù)據(jù)位 子程序 POP LCDBITCNT RET
;****************************************************************** ;發(fā)送位數(shù)據(jù)子程序 ;名稱: sendb0 ;描述: 向HT1621B發(fā)送N位數(shù)據(jù),數(shù)據(jù)在A中,N在LCDBITCNT中,從高位開(kāi)始發(fā)送 ;----------------------------------------------- SENDB0: PUSH ACC PUSH PSW PUSH LCDBITCNT SENDB01: RLC A MOV SDATA,C ;先發(fā)送高位數(shù)據(jù) SETB WRITE ;產(chǎn)生WR信號(hào) NOP NOP CLR WRITE NOP NOP DJNZ LCDBITCNT,SENDB01 ;未發(fā)送完,繼續(xù) POP LCDBITCNT POP PSW POP ACC RET
;======================================================== ;表格區(qū) ;ZY886A型LCD數(shù)字顯示表(0-F),供用戶轉(zhuǎn)換使用。(以上程序不用此表) LCDData: DB 0EBH,60H,0C7H,0E5H,6CH,0ADH,0AFH,0E0H,0EFH,0EDH,0EEH,2FH,07H,67H,8FH,8EH ;=============================================================== ; ;以上程序是HT1621的通用程序,對(duì)不同的LCD只是其字模不一樣而以。 |