硬件漢字庫設(shè)計原理與應(yīng)用
四顯示原理與軟件編制
在第一節(jié)中我們已經(jīng)得出國字的區(qū)位碼為195AH 換算成十進制為2590 ,即國字的點陣位
于第25 區(qū)的第90 個字的位置,相當于在文件HZK16 中的位置為32 [(25-1) 94 (90-1)] 75040B 以后的32 個字節(jié)為國的顯示點陣。
在本系統(tǒng)中AT29C020 的A15 A17 分別連接到P1 口的P1.0 P1.1 和P1.2 作為頁選擇控制A0
A14 直接連接單片機的A0 A14 利用MOVX 指令連續(xù)取32 個字節(jié)送LCD 的相應(yīng)位置就能實現(xiàn)正確的漢字顯示。
由于240 128 點陣的LCD 顯示器每行只能顯示15 個漢字16 16 點陣漢字所以可以將需要顯示的語句按15 個漢字為1 行進行編寫標點符號要用全角不足15 個漢字的則補空格這就是下面軟件中的MENG.ASM 中的內(nèi)容
為方便讀者將已經(jīng)通過匯編的有關(guān)程序列出有關(guān)LCD 的具體使用方法請見文獻[2]
主程序
C_ADD EQU 8001H 液晶命令地址
D_ADD EQU 8000H 液晶數(shù)據(jù)地址
DAT1 EQU 30H
DAT2 EQU 31H
COM EQU 32H
CODE1 EQU 33H
COUNT EQU 34H
O_Y EQU 35H
O_X EQU 36H
COUNT_X EQU 37H
ORG 0000H
SJMP START
ORG 0030H
START: MOV SP, #60H
ORL AUXR, #02H EXTRAM 位1 訪問外部數(shù)據(jù)存儲器
ANL AUXR1, #0FH ENBOOT=0 訪問到FLASH
CLR P1.5 正顯
LCALL INT 初始化設(shè)置子程序
LCALL CLEAR 清屏
MOV DPTR, #TABLE 科幻小說的開頭
MOV O_Y, #00H
PUSH DPH
PUSH DPL
LOOP: POP DPL
POP DPH
MOV R0, #0E0H 字模數(shù)據(jù)暫存區(qū)
MOV R7, #30 每個漢字為2 字節(jié)每行15 個漢字需30 字節(jié)
PRHZ3: CLR A
MOVC A, @A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ R7, PRHZ3
PUSH DPH
PUSH DPL
MOV O_X, #00H
MOV R0, #0E0H
MOV COUNT_X, #15
LCD112: MOV 24H, @R0 24H 和25H 為暫存緩沖存內(nèi)碼
INC R0
MOV 25H, @R0
INC R0
MOV A, 24H
CLR C
SUBB A, #0A1H 轉(zhuǎn)換為區(qū)位碼
MOV 24H, A
MOV A, 25H
CLR C
SUBB A, #0A1H
MOV 25H, A
MOV A, R0
PUSH ACC
LCALL DPONHZ 取字模數(shù)據(jù)并存入0C0H 開始的寄存器
LCALL WRI_CC 送出顯示
POP ACC
MOV R0, A
INC O_X
INC O_X
DJNZ COUNT_X,LCD112 1 行漢字送完跳轉(zhuǎn)
MOV A, O_Y
ADD A, #10H
MOV O_Y, A
MOV A, O_Y
CJNE A, #80H,LOOP
MOV O_Y, #00H
LCALL DELAY 送完1 屏后延長時間以便于閱讀
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
POP DPL
POP DPH
PUSH DPH
PUSH DPL
MOV A, DPH
SUBB A, #0DFH 小說結(jié)尾地址如果是結(jié)尾則復(fù)位重新開始
JNC RST1
JMP LOOP
RST1: MOV A, DPL
SUBB A, #2AH
JNC RST
JMP LOOP
RST: JMP START
DPONHZ: MOV A, 24H 取字模數(shù)據(jù)至0C0H 開始的內(nèi)部存儲區(qū)
MOV B, #94
MUL AB
ADD A, 25H
MOV 25H, A
CLR A
ADDC A, B
MOV 24H, A
CLR C
RRC A
CLR C
RRC A
MOV P1, A
LCALL RL245
CLR 24H.7
MOV DPH, 24H
MOV DPL, 25H
MOV R2, #32
MOV R1, #0C0H
DPHZ2: MOVX A, @DPTR
INC DPTR
MOV @R1, A
INC R1
DJNZ R2, DPHZ2
RET
RL245: MOV R7, #05 24H25H 左移5 位
RLL1: CLR C
MOV A, 25H
RLC A
MOV 25H,A
MOV A, 24H
RLC A
MOV 24H, A
DJNZ R7, RLL1
RET
R_ST: MOV DPTR, #C_ADD 讀狀態(tài)
MOVX A, @DPTR
RET
ST01: LCALL R_ST 讀寫一數(shù)據(jù)前
JNB ACC.0, ST01
JNB ACC.1, ST01
RET
ST2: LCALL R_ST 連續(xù)讀前
JNB ACC.2, ST2
RET
ST3: LCALL R_ST 連續(xù)寫前
JNB ACC.3, ST3
RET
ST6: LCALL R_ST
JB ACC.6, ERR
RET
ERR: LJMP ST6
PR1: LCALL ST01
MOV A, DAT1
LCALL PR13
PR11: LCALL ST01
MOV A, DAT2
LCALL PR13
PR12: LCALL ST01
MOV A, COM
LJMP PR14
PR13: MOV DPTR, #D_ADD
PR14: MOVX @DPTR, A
RET
PR2: LCALL ST01
MOV DPTR, #D_ADD
MOVX A, @DPTR
MOV DAT2, A
RET
INT: MOV DAT1, #00H 初始化設(shè)置子程序
MOV DAT2, #00H
MOV COM, #40H
LCALL PR1
MOV DAT1, #20H
MOV DAT2, #00H
MOV COM, #41H
LCALL PR1
MOV DAT1, #00H
MOV DAT2, #08H
MOV COM, #42H
LCALL PR1
MOV DAT1, #20H
MOV DAT2, #00H
評論