第一位一直显现0,第二位显现在0-9之间循环
;**************************************************
Counter EQU 59H ;计数器,显现程序经过它得知现正显现哪个数码管
FIRST EQU P2.7 ;第一位数码管的位操控
SECOND EQU P2.6 ;第二位数码管的位操控
DISPBUF EQU 5AH ;显现缓冲区为5AH和5BH
ORG 0000H
AJMP START
ORG 000BH ;守时器T0的进口
AJMP DISP ;显现程序
ORG 30H
START:
MOV SP,#5FH ;设置仓库
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所显现器,LED灭
MOV TMOD,#00000001B ;守时器T0作业于形式1(16位守时/计数形式)
MOV TH0,#HIGH(65536-2000)
MOV TL0,#LOW(65536-2000)
SETB TR0
SETB EA
SETB ET0
MOV Counter,#0 ;计数器初始化
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 ;在此中心能够按排恣意程序,这儿仅作演示。
;主程序到此结束
DISP: ;守时器T0的中止呼应程序
PUSH ACC;ACC入栈
PUSH PSW ;PSW入栈
MOV TH0,#HIGH(65536-2000);守时时刻为2000个周期,约2170微秒
MOV TL0,#LOW(65536-2000)
SETB FIRST
SETB SECOND ;关显现
MOV A,#DISPBUF ;显现缓冲区首地址
ADD A,Counter
MOV R0,A
MOV A,@R0 ;依据计数器的值取相应的显现缓冲区的值
MOV DPTR,#DISPTAB ;字形表首地址
MOVC A,@A+DPTR ;取字形码
MOV P0,A ;将字形码送P0位(段口)
MOV A,Counter ;取计数器的值
JZ DISPFIRST ;假如是0则显现第一位
CLR SECOND ;不然显现第二位
AJMP DISPNEXT
DISPFIRST:
CLR FIRST ;显现第一位
DISPNEXT:
INC Counter ;计数器加1
MOV A,Counter
DEC A ;假如计数器计到2,则让它回0
DEC A
JZ RSTCOUNT
AJMP DISPEXIT
RSTCOUNT:
MOV Counter,#0 ;计数器的值只能是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 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H
END