?? h24.asm
字號:
CWADD1 EQU 08000H ;寫指令代碼地址(E1)
DWADD1 EQU 08001H ;寫顯示數據地址(E1)
CRADD1 EQU 08002H ;讀狀態字地址(E1)
DRADD1 EQU 08003H ;讀顯示數據地址(E1)
CWADD2 EQU 08004H ;寫指令代碼地址(E2)
DWADD2 EQU 08005H ;寫顯示數進地址(E2)
CRADD2 EQU 08006H ;讀狀態字地址(E2)
DRADD2 EQU 08007H ;讀顯示數據地址(E2)
PD1 EQU 3DH ;122/2 分成左右兩半屏 122x32
COLUMN EQU 30H
PAGE_ EQU 31H ;頁地址寄存器 D1,DO:頁地址
CODE_ EQU 32H ;字符代碼寄存器
COUNT EQU 33H ;計數器
DIR equ 34h
dtp1 equ 35h
dtp2 equ 36h
dtp3 equ 37h
CTEMP EQU 38H
COM EQU 20H ;指令寄存器
DAT EQU 21H ;數據寄存器
ORG 0
jmp main
mov dptr, #0f002h
mov a,#56h
movx @dptr,a
mov a,#0
movx a,@dptr
JMP MAIN
;---------------------------------------
; 初始化程序
INIT: MOV COM, #0E2H ;復位
LCALL PRO
LCALL PR3
MOV COM, #0A4H ;關閉休閉狀態
LCALL PRO
LCALL PR3
MOV COM, #0A9H ;設置 1/32占空比
LCALL PRO
LCALL PR3
MOV COM, #0A0H ;正向排序設置
LCALL PRO
LCALL PR3
MOV COM, #0C0H ;設置顯示起始行為第一行
LCALL PRO
LCALL PR3
MOV COM, #0AFH ;開顯示設置
LCALL PRO
LCALL PR3
RET
;------------------------------------------------
; 清屏
CLEAR: MOV R4,#00H ;頁面地址暫存器設置
CLEAR1: MOV A,R4 ;取頁地址值
ORL A,#0B8H ;"或"頁面地址設置代碼
MOV COM,A ;頁面地址設置
LCALL PRO
LCALL PR3
MOV COM,#00H ;列地址設置為"0"
LCALL PRO
LCALL PR3
MOV R3,#50H ;一頁清 80個字節
CLEAR2: MOV DAT,#00H ;顯示數據為"0"
LCALL PR1
LCALL PR4
DJNZ R3,CLEAR2 ;頁內字節清零循環
INC R4 ;頁地址暫存器加一
CJNE R4,#04H,CLEAR1;RAM區清零循環
RET
;-----------------------------------
;1.寫指令代碼子程序(E1)
PRO: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD1 ;設置讀狀態字地址
PR01: MOVX A,@DPTR ;讀狀態字
JB ACC.7,PR01 ;判"忙"標志為句"0",否再讀
MOV DPTR,#CWADD1 ;設置寫指令代碼地址
MOV A,COM ;取指令代碼
MOVX @DPTR,A ;寫指令代碼
POP DPH
POP DPL
RET
;------------------------------------
;2.寫顯示數據子程序(E1)
PR1: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD1 ;設置讀狀態字地址
PR11: MOVX A,@DPTR ;讀狀態宇
JB ACC.7,PR11 ;判"忙"標志為"0",否再讀
MOV DPTR,#DWADD1 ;設置寫顯示數據地址
MOV A,DAT ;取數據
MOVX @DPTR,A ;寫數據
POP DPH
POP DPL
RET
;-------------------------------------
;3.讀顯示數據子程序(E1)
PR2: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD1 ;設置讀狀態字地址
PR21: MOVX A,@DPTR ;讀狀態字
JB ACC.7,PR21 ;判"忙"標志為"0"否,否再讀
MOV DPTR,#DRADD1 ;設置讀顯示數據地址
MOVX A,@DPTR ;讀數據
MOV DAT,A ;存數據
POP DPH
POP DPL
RET
;-------------------------------------
;4.寫指令代碼子程序(E2)
PR3: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD2 ;設置讀狀態字地址
PR31: MOVX A,@DPTR ;讀狀態字
JB ACC.7,PR31 ;判"忙"陳志為"0"否,否再讀
MOV DPTR,#CWADD2 ;設置寫指令代碼地址
MOV A,COM ;取指令代碼
MOVX @DPTR,A ;寫指令代碼
POP DPH
POP DPL
RET
;-------------------------------------
; 5.寫顯示數據子程序(E2)
PR4: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD2 ;設置讀狀態字地址
PR41: MOVX A,@DPTR ;讀狀態字
JB ACC.7,PR41 ;判"忙"標志為"0"否,否再讀
MOV DPTR, #DWADD2 ;設置寫顯示數據地址
MOV A,DAT ;取數據
MOVX @DPTR,A ;寫數據
POP DPH
POP DPL
RET
;---------------------------------------
; 6.讀顯示數據子程序(E2)
PR5: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD2 ;設置讀狀態字地址
PR51: MOVX A,@DPTR ;讀狀態字
JB ACC.7,PR51 ;判"忙"標志為"0",否再讀
MOV DPTR,#DRADD2 ;設置寫顯示數據地址
MOVX A,@DPTR ;讀數據
MOV DAT,A ;存數據
POP DPH
POP DPL
RET
; 中文顯示子程序
CCW_PR: MOV DPTR,#CCTAB ;確定字符字模塊首地址
MOV A,CODE_ ;取代碼
MOV B,#20H ;字模塊寬度為 32個字節
MUL AB ;代碼×32
ADD A,DPL ;字符字模塊首地址
MOV DPL,A ;字模庫首地址+代碼×32
MOV A,B
ADDC A,DPH
MOV DPH,A
PUSH COLUMN ;列地址入棧
PUSH COLUMN ;列地址入棧
MOV CODE_,#00H ;代碼寄存器借用為間址寄存器
CCW_1: MOV COUNT,#10H ;計數器設置為 16
MOV A,PAGE_ ;讀頁地址寄存器
ANL A,#03H ;取頁地址有效值
ORL A,#0B8H ;"或"頁地址設置代碼
MOV COM,A ;設置頁地址
LCALL PRo
LCALL PR3
POP COLUMN ;取列地址值
MOV A,COLUMN ;讀列地址寄存器
CLR C
SUBB A,#PD1 ;列地址-模塊參數
JC CCW_2 ;<0為左半屏顯示區域(E1)
MOV COLUMN,A ;≥0為右半屏顯示區域(E2)
MOV A,PAGE_
SETB ACC.3 ;設置區域標志位。
MOV PAGE_,A ;"0"為E1,"1"為E2
CCW_2: MOV COM,COLUMN ;設置列地址值
MOV A,PAGE_ ;判區域標志以確定設置哪個控制器
JNB ACC.3,CCW_3
LCALL PR3 ;區域E2
LJMP CCW_4
CCW_3: LCALL PRO ;區域E1
CCW_4: MOV A,CODE_ ;取間址寄存器值
MOVC A,@A+DPTR ;取漢字字模數據
MOV DAT,A ;寫數據
MOV A,PAGE_
JNB ACC.3,CCW_5
LCALL PR4 ;區域E2
LJMP CCW_6
CCW_5: LCALL PR1 ;區域E1
CCW_6: INC CODE_ ;間址寄存器加一
INC COLUMN ;列地址寄存器加一
MOV A,COLUMN ;判列地址是否超出區域范圍、
CJNE A,#PD1,CCW_7
CCW_7: JC CCW_8 ;未超出則繼續
MOV A,PAGE_ ;超出則判是否在區域E2
JB ACC.3,CCW_8 ;在區域E2則退出
SETB ACC.3 ;在區域E1則修改成區域E2
MOV PAGE_,A
MOV COM,#00H ;設置區域E2列地址為"0"
LCALL PR3
CCW_8: DJNZ COUNT,CCW_4 ;當頁循環
MOV A,PAGE_ ;讀頁地址寄存器
JB ACC.7,CCW_9 ;判完成標志D7位,"1"則完成退出
INC A ;否則頁地址加一
SETB ACC.7 ;置完成位為"1"
CLR ACC.3
MOV PAGE_,A
MOV CODE_,#10H ;間址寄存器設置為 16
LJMP CCW_1 ;大循環
CCW_9: RET
;--------------------------------------
;中文字符庫
CCTAB:
small0:
;db 38h,44h,44h,44h,44h,44h,38h,00h ;0
small1:
;db 10h,30h,50h,10h,10h,10h,7ch,00h ;1
small2:
;db 38h,44h,04h,08h,10h,20h,7ch,00h ;2
small3:
;db 78h,84h,04h,38h,04h,84h,78h,00h ;3
DB 000H,004H,0e4H,024H,024H,064H,0b4H,02fH ; 南
DB 024H,0a4H,064H,024H,024H,0e6H,004H,000H
DB 000H,000H,07fH,004H,005H,005H,005H,07fH
DB 005H,005H,005H,025H,044H,03fH,000H,000H
DB 000H,004H,004H,0e4H,024H,024H,025H,026H ; 京
DB 024H,024H,024H,0e4H,006H,004H,000H,000H
DB 000H,020H,010H,019H,00DH,041H,081H,07fH
DB 001H,001H,005H,00dH,038H,010H,000H,000H
DB 000H,080H,060H,0f8H,007H,00aH,028H,028H ; 偉
DB 028H,0ffH,028H,028H,028H,028H,000H,000H
DB 001H,000H,000H,0fFH,000H,001H,001H,001H
DB 001H,0ffH,001H,021H,041H,03fH,000H,000H
DB 008H,008H,089H,0ceH,028H,018H,002H,07aH ; 福
DB 04aH,04aH,04aH,04aH,04aH,07aH,002H,000H
DB 002H,001H,000H,0ffH,001H,002H,0ffH,049H
DB 049H,049H,07fH,049H,049H,049H,0ffH,000H
;------------------------------------.
; 中文演示顯示程序段
MAIN:
LCALL INIT
LCALL CLEAR
MOV CTEMP,#0
MOV DIR,#0
AAA:
MOV PAGE_,#02H
MOV COLUMN,CTEMP
MOV CODE_,#00H
LCALL CCW_PR
MOV PAGE_,#02H
MOV A,CTEMP
ADD A,#10H
MOV COLUMN,A
MOV CODE_,#01H
LCALL CCW_PR
MOV PAGE_,#02H
MOV A,CTEMP
ADD A,#20H
MOV COLUMN,A
MOV CODE_,#02H
LCALL CCW_PR
MOV PAGE_,#02H
MOV A,CTEMP
ADD A,#30H
MOV COLUMN,A
MOV CODE_,#03H
LCALL CCW_PR
LJMP $
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV A, DIR
CJNE A,#0, LEFT
INC CTEMP
MOV A,CTEMP
CJNE A,#58, AAA
MOV DIR,#1
LJMP AAA
LEFT:
DEC CTEMP
MOV A,CTEMP
CJNE A,#0, AAA
MOV DIR,#0
LJMP AAA
;LCALL S_LEFT
;LCALL S_UP
SJMP $
; 示例五 滾動演示程序段
; 定時間隔地有規律地修改顯示起始行地址,將產生顯示畫面平滑向上或向下滾動的效
; 果。示例程序如下:
S_UP: MOV R7,#00H ;向上改動程序
S_UPI: MOV A,#0C0H ;顯示起始行設置代碼
ORL A,R7
MOV COM,A
LCALL PRO
LCALL PR3
LCALL DELAY ;調延時子程序
INC R7
CJNE R7,#20H,S_UPI
LJMP S_UP
;-------------------------------------
S_DOWN: MOV R7,#1FH ;向下滾動程序
MOV COM,#0C0H ;顯示起始行設置代碼
LCALL PRo
LCALL PR3
LCALL DELAY ;調延時子程序
S_DOWN1: MOV A,#0C0H ;顯示起始行設置代碼
ORL A,R7
MOV COM,A
LCALL PRO
LCALL PR3
LCALL DELAY
DJNZ R7,S_DOWN1
LJMP S_DOWN
;----------------------------------
DELAY: MOV R6,#060H ;延時子程序
MOV R5,#00H
DELAY1: NOP
DJNZ R5,DELAY1
DJNZ R6,DELAY1
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -