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