Counter EQU 59H ;計數(shù)器,顯示程序通過它得知現(xiàn)正顯示哪個數(shù)碼管
FIRST EQU P2.6 ;位數(shù)碼管的位控制
SECOND EQU P2.5 ;第二位數(shù)碼管的位控制
DISPBUF EQU 5AH ;顯示緩沖區(qū)為5AH和5BH
ORG 0000H
AJMP START
ORG 000BH ;定時器T0的入口
AJMP DISP ;顯示程序
ORG 30H
START:
MOV SP,#5FH ;設(shè)置堆棧
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所顯示器,LED滅
MOV TMOD,#00000001B ;定時器T0工作于模式1(16位定時/計數(shù)模式)
MOV TH0,#HIGH(65536-2000)
MOV TL0,#LOW(65536-2000)
SETB TR0
SETB EA
SETB ET0
MOV Counter,#0 ;計數(shù)器初始化
MOV DISPBUF,#0 ;位始終顯示0
MOV A,#0
LOOP:
MOV DISPBUF+1,A ;第二位輪流顯示0-9
INC A
LCALL DELAY
CJNE A,#10,LOOP
MOV A,#0
AJMP LOOP ;在此中間可以按排任意程序,這里僅作示范。
;主程序到此結(jié)束
DISP: ;定時器T0的中斷響應(yīng)程序
PUSH ACC ;ACC入棧
PUSH PSW ;PSW入棧
MOV TH0,#HIGH(65536-2000);定時時間為2000個周期,約2170微秒
MOV TL0,#LOW(65536-2000)
SETB FIRST
SETB SECOND ;關(guān)顯示
MOV A,#DISPBUF ;顯示緩沖區(qū)首地址
ADD A,Counter
MOV R0,A
MOV A,@R0 ;根據(jù)計數(shù)器的值取相應(yīng)的顯示緩沖區(qū)的值
MOV DPTR,#DISPTAB ;字形表首地址
MOVC A,@A+DPTR ;取字形碼
MOV P0,A ;將字形碼送P0位(段口)
MOV A,Counter ;取計數(shù)器的值
JZ DISPFIRST ;如果是0則顯示位
CLR SECOND ;否則顯示第二位
AJMP DISPNEXT
DISPFIRST:
CLR FIRST ;顯示位
DISPNEXT:
INC Counter ;計數(shù)器加1
MOV A,Counter
DEC A ;如果計數(shù)器計到2,則讓它回0
DEC A
JZ RSTCOUNT
AJMP DISPEXIT
RSTCOUNT:
MOV Counter,#0 ;計數(shù)器的值只能是0或1
DISPEXIT:
POP PSW
POP ACC
RETI
DELAY: ;延時130毫秒
PUSH PSW
SETB RS0
MOV R7,#255
D1: MOV R6,#255
D2: NOP
NOP
NOP
NOP
DJNZ R6,D2
DJNZ R7,D1
POP PSW
RET
DISPTAB:
db 21H,77H,0A2H,62H,74H,68H,28H, 73H,20H,60H
; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
單片機(jī)定時中斷實現(xiàn)顯示的程序
更新時間: 2008-08-04 10:00:22來源: 粵嵌教育瀏覽量:1356