|
第一位始終顯示0,第二位顯示在0-9之間循環(huán)
;************************************************** Counter EQU 59H ;計(jì)數(shù)器,顯示程序通過它得知現(xiàn)正顯示哪個(gè)數(shù)碼管 FIRST EQU P2.7 ;第一位數(shù)碼管的位控制 SECOND EQU P2.6 ;第二位數(shù)碼管的位控制 DISPBUF EQU 5AH ;顯示緩沖區(qū)為5AH和5BH ORG 0000H AJMP START ORG 000BH ;定時(shí)器T0的入口 AJMP DISP ;顯示程序 ORG 30H START: MOV SP,#5FH ;設(shè)置堆棧 MOV P1,#0FFH MOV P0,#0FFH MOV P2,#0FFH ;初始化,所顯示器,LED滅 MOV TMOD,#00000001B ;定時(shí)器T0工作于模式1(16位定時(shí)/計(jì)數(shù)模式) MOV TH0,#HIGH(65536-2000) MOV TL0,#LOW(65536-2000) SETB TR0 SETB EA SETB ET0 MOV Counter,#0 ;計(jì)數(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: ;定時(shí)器T0的中斷響應(yīng)程序 PUSH ACC ;ACC入棧 PUSH PSW ;PSW入棧 MOV TH0,#HIGH(65536-2000);定時(shí)時(shí)間為2000個(gè)周期,約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ù)計(jì)數(shù)器的值取相應(yīng)的顯示緩沖區(qū)的值 MOV DPTR,#DISPTAB ;字形表首地址 MOVC A,@A+DPTR ;取字形碼 MOV P0,A ;將字形碼送P0位(段口) MOV A,Counter ;取計(jì)數(shù)器的值 JZ DISPFIRST ;如果是0則顯示第一位 CLR SECOND ;否則顯示第二位 AJMP DISPNEXT DISPFIRST: CLR FIRST ;顯示第一位 DISPNEXT: INC Counter ;計(jì)數(shù)器加1 MOV A,Counter DEC A ;如果計(jì)數(shù)器計(jì)到2,則讓它回0 DEC A JZ RSTCOUNT AJMP DISPEXIT RSTCOUNT: MOV Counter,#0 ;計(jì)數(shù)器的值只能是0或1 DISPEXIT: POP PSW POP ACC RETI DELAY: ;延時(shí)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 |