哥們給個兩位顯示的給你瞧瞧吧!。
/*數(shù)碼管的顯示,動態(tài)顯示,數(shù)碼管顯示兩位精確秒計時,從這個例子可以學(xué)習(xí)定時器的使用,也可從這個例子擴(kuò)展一個時鐘程序*/ /*效果:精確的秒計時,數(shù)碼管顯示兩位計數(shù),可擴(kuò)展成時鐘*/
;----------------定義數(shù)據(jù)RAM空間-------------------------------
LDB EQU 36H ;定義一個變量存放顯示值
LCC EQU 37H ;定義一個變量存放計數(shù)值
;-----------數(shù)據(jù)存放----------------------
ORG 0100H
TABLE: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;表:共陽數(shù)碼管 0-9
ORG 0000H
LJMP MAIN
ORG 000BH ;定時器中斷入口
LJMP TIMER
ORG 0200H
MAIN: MOV TMOD,#01H ;設(shè)置定時器1為1模式,即16位計算模式
MOV TH0,#3CH ;給計數(shù)寄存器復(fù)值,50毫秒時間
MOV TL0,#0B0H
MOV IE,#82H ;開總中斷和T0中斷
SETB TR0 ;啟動定時器0
MOV LDB,#0 ;顯示緩沖清0
MOV LCC,#0 ;計數(shù)緩沖清0
M1: MOV A,LCC
CJNE A,#20,M2 ;計數(shù)20次50毫秒即為1秒
MOV LCC,#0
INC LDB ;顯示緩存加1
MOV A,LDB ;
CJNE A,#100,M2 ;如果加到100,則清0
MOV LDB,#0
M2: MOV A,LDB ;用A來傳遞數(shù)據(jù)顯示
LCALL DISPLAY
LJMP M1
TIMER: INC LCC ;定時中斷產(chǎn)生,計數(shù)加1
MOV TH0,#3CH ;重新裝入定時器值50毫秒
MOV TL0,#0B0H
RETI
DISPLAY:MOV DPTR,#TABLE ;數(shù)碼管顯示子程序
MOV B,#10
DIV AB
CLR P1.0 ;選擇十位數(shù)碼管,即第二位數(shù)碼管,當(dāng)然也可以選擇其它位
SETB P1.1
SETB P1.2
MOVC A,@A+DPTR ;查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
MOV P2,A
LCALL DELAY ;延時,停留一會,讓人眼感觸到它的亮度
MOV P2,#0 ;清除數(shù)碼管顯示
SETB P1.0 ;選擇個位數(shù)碼管,即第一位數(shù)碼管,當(dāng)然也可以選擇其它位
SETB P1.1
SETB P1.2
MOV A,B ;個位顯示
MOVC A,@A+DPTR ;查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
MOV P2,A
LCALL DELAY ;延時,停留一會,讓人眼感觸到它的亮度
MOV P2,#0 ;清除數(shù)碼管顯示
RET
DELAY: MOV R7,#10 ;延時子程序
DJNZ R7,$
RET
END
|