;內(nèi)容:4位共陰數(shù)碼管顯示0000-9999顯示
;數(shù)碼管段碼接法A-PD0,B-PD1....G-PD6,H-PD7
;數(shù)碼管位碼接法OM0-PC0...COM4-PC3
;目的:
;1.查表
;2.間接尋址
;3.定時(shí)器的使用
;源程序下載地址:http://www.zg4o1577.cn/f/htsmg.rar
include HT66F50.inc
ORG 0000H
JMP A1
ORG 0014H ;多功能中斷入口地址
JMP ZD1
ORG 002DH
Q1:
DC 03FH ; 0
DC 006H ; 1
DC 05BH ; 2
DC 04FH ; 3
DC 066H ; 4
DC 06DH ; 5
DC 07DH ; 6
DC 007H ; 7
DC 07FH ; 8
DC 06FH ; 9
DC 077H ; A
DC 07CH ; B
DC 039H ; C
DC 05EH ; D
DC 079H ; E
DC 071H ; F
A1:
MOV A,0 ;顯示內(nèi)容
MOV [8AH],A ;第一位數(shù)碼管段碼顯示內(nèi)容寄存器
MOV A,0 ;顯示內(nèi)容
MOV [8BH],A ;第二位數(shù)碼管段碼顯示內(nèi)容寄存器
MOV A,0 ;顯示內(nèi)容
MOV [8CH],A ;第三位數(shù)碼管段碼顯示內(nèi)容寄存器
MOV A,0 ;顯示內(nèi)容
MOV [8DH],A ;第四位數(shù)碼管顯示內(nèi)容寄存器
MOV A,08H ;跟CP1C寄存器設(shè)置要求選擇數(shù)據(jù)
MOV CP1C,A ;設(shè)置PC口為I/0口而不是中斷口
CLR PCC ;設(shè)置pc 口為輸出口
CLR PDC ;設(shè)置PD 口為輸出口
MOV A,1 ;設(shè)置初始顯示位碼顯示第一位
MOV [80H],A ;位碼寄存器
MOV A,8AH ;設(shè)置對(duì)應(yīng)第一位段碼寄存器
MOV MP0,A ;間接寄存器指針
MOV A,00000000B ;設(shè)置TM2 計(jì)數(shù)時(shí)鐘位為fSYS/4
MOV TM2C0,A
MOV A,11000001B ;設(shè)置TM2中斷為定時(shí)/計(jì)數(shù)模式選擇比較器A匹配
MOV TM2C1,A
MOV A,LOW 5000 ;設(shè)置中斷時(shí)間為5000個(gè)時(shí)鐘周期
MOV TM2AL,A ;低8位
MOV A,HIGH 5000 ;設(shè)置中斷時(shí)間為5000個(gè)時(shí)鐘周期
MOV TM2AH,A ;高8位
CLR MF0F ;清多功能中斷0標(biāo)志
CLR T2AF ;清定時(shí)器2較器A中斷標(biāo)志
SET MF0E ;使能多功能0中斷
SET T2AE ;使能定時(shí)器2較器A中斷
SET EMI ;使能總中斷
SET T2ON ;開始計(jì)數(shù)
A2:
CALL M001 ;延時(shí)
INC [8DH] ;個(gè)位數(shù)碼管加1
MOV A,10 ;
SUB A,[8DH] ;用10減個(gè)位數(shù)碼管的數(shù)判斷是否相等
SNZ Z ;結(jié)果為0相等Z為1跳過一條指令否則z為1繼續(xù)執(zhí)行
JMP A2 ;Z=1結(jié)果不等返回繼續(xù)加1
MOV A,0 ;Z=0結(jié)果相等
MOV [8DH],A ;存0繼續(xù)顯示
INC [8CH] ;十位數(shù)碼管加1
MOV A,10 ;用10減十位數(shù)碼管的數(shù)判斷是否相等
SUB A,[8CH] ;
SNZ Z ;結(jié)果為0相等Z為1跳過一條指令否則z為1繼續(xù)執(zhí)行
JMP A2 ;Z=1結(jié)果不等返回繼續(xù)加1
MOV A,0 ;Z=0結(jié)果相等
MOV [8CH],A ;存0繼續(xù)顯示
INC [8BH] ;百位數(shù)碼管加1
MOV A,10 ;
SUB A,[8BH] ;用10減百位數(shù)碼管的數(shù)判斷是否相等
SNZ Z ;結(jié)果為0相等Z為1跳過一條指令否則z為1繼續(xù)執(zhí)行
JMP A2 ;Z=1結(jié)果不等返回繼續(xù)加1
MOV A,0 ;Z=0結(jié)果相等
MOV [8BH],A ;存0繼續(xù)顯示
INC [8AH] ;千位數(shù)碼管加1
MOV A,10 ;用10減千位數(shù)碼管的數(shù)判斷是否相等
SUB A,[8AH] ;
SNZ Z ;結(jié)果為0相等Z為1跳過一條指令否則z為1繼續(xù)執(zhí)行
JMP A2 ;Z=1結(jié)果不等返回繼續(xù)加1
MOV A,0 ;Z=0結(jié)果相等
MOV [8AH],A ;存0繼續(xù)顯示
JMP A2 ;已經(jīng)到9999清為0000返回反復(fù)執(zhí)行
;*******************************************************
; 中斷服務(wù)子程序
;*******************************************************
ZD1:
MOV [0F0H],A ;壓棧ACC到0F0H
MOV A,STATUS ;
MOV [0F1H],A ;壓棧status標(biāo)志寄存器到0F1H
CLR PC ;清PC(清屏幕)
MOV A,Q1 ;數(shù)據(jù)表地址
CLR TBHP ;清數(shù)據(jù)表地址高位否則出錯(cuò)
ADD A,IAR0 ;利用間接寄存器找到要顯示段碼所在數(shù)據(jù)表的地址
MOV TBLP,A ;表格指針寄存器TBLP
TABRD PD ;查表并將數(shù)據(jù)存到PD口寄存器
MOV A,[80H] ;位碼寄存器
MOV PC,A ;將位碼寄存器的數(shù)存到PC口寄存器
;段碼和位碼的數(shù)都有了所以數(shù)碼管被點(diǎn)亮
INC MP0 ;間接寄存器指針加1指向下一個(gè)段碼寄存器
RL [80H] ;左移位碼寄存器控制下一個(gè)數(shù)碼管
SNZ [80H].5 ;判斷是否控制完4個(gè)數(shù)碼管
JMP ZD2 ;退出中斷繼續(xù)
MOV A,1 ;是則從新初始化寄存器數(shù)據(jù)
MOV [80H],A ;
MOV A,8AH ;千位數(shù)碼管對(duì)應(yīng)寄存器
MOV MP0,A ;存到間接寄存器0
ZD2:
MOV A,[0F1H] ;彈棧后進(jìn)先出先進(jìn)后出
MOV STATUS,A ;彈棧0F1H的數(shù)到標(biāo)志寄存器
MOV A,[0F0H] ;彈棧0F0H的數(shù)到acc
CLR MF0F ;清多功能標(biāo)志
CLR T2AF ;清定時(shí)器2比較器A標(biāo)志
RETI ;中斷返回
;*******************************************************
; 延時(shí)子程序
;*******************************************************
M001:
MOV A,1
MOV [85H],A
M002:
MOV A,200
MOV [86H],A
M003:
MOV A,250
MOV [87H],A
M004:
SDZ [87H]
JMP M004
SDZ [86H]
JMP M003
SDZ [85H]
JMP M002
RET
END