;腳功能定義
SMG_q EQU P1.0 ;定義數碼管陽級控制腳,千位
SMG_b EQU P1.1 ;定義數碼管陽級控制腳,百位
SMG_s EQU P1.2 ;定義數碼管陽級控制腳,十位
SMG_g EQU P1.3 ;定義數碼管陽級控制腳,個位
KEY1 EQU P3.7 ;定義按鍵1
KEY2 EQU P3.6 ;定義按鍵2
;定義數據RAM空間
LMS EQU 37H ;定義一個變量存放計數值毫秒
LMIAO EQU 38H ;定義一個變量存放計數值秒
;數據存放
ORG 0100
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H
;表:共陽數碼管 0-9
ORG 0000H
LJMP MAIN
ORG 000BH ;中斷入口
LJMP TIMER
ORG 0200H
MAIN: MOV TMOD,#01H ;設置定時器1為1模式,即16位計算模式
MOV TH0,#0D8H ;給計數寄存器賦值,10毫秒時間
MOV TL0,#0F0H
MOV IE,#82H ;開總中斷和T0中斷
CLR TR0 ;
CLR A
MOV LMS,A ;計數緩沖清0
MOV LMIAO,A
M01: JB KEY1,M02 ;按下1鍵啟動計數
CLR A
MOV LMS,A
MOV LMIAO,A ;
SETB TR0 ;
SJMP M1
M02: JB KEY2,M1 ;按下2鍵停止計數
CLR TR0 ;
M1: MOV A,LMS
CJNE A,#100,M2 ;以10毫秒計數,100次即為1秒
MOV LMS,#0
MOV A,LMIAO ;
INC A
MOV LMIAO,A ;
CJNE A,#100,M2 ;如果加到100秒,則清0
MOV LMIAO,#0
M2: LCALL DISPLAY ;顯示
LJMP M01
TIMER: INC LMS ;定時中斷產生,以10毫秒計數加1
MOV TH0,#0D8H ;重新裝入定時器值10毫秒
MOV TL0,#0F0H
RETI
DISPLAY:MOV DPTR,#TABLE ;數碼管顯示子程序
MOV A,LMIAO ;
MOV B,#10
DIV AB
CLR SMG_q ;千位數碼管
MOVC A,@A+DPTR ;
MOV P0,A
LCALL DELAY ;
MOV P0,#0FFH ;
SETB SMG_q ;
CLR SMG_b ;百位數碼管
MOV A,B ;
MOVC A,@A+DPTR ;
ANL A,#0X7F ;加入小數點
MOV P0,A
LCALL DELAY ;
MOV P0,#0FFH ;
SETB SMG_b ;
MOV A,LMS ;
MOV B,#10
DIV AB
CLR SMG_s ;十位數碼管
MOVC A,@A+DPTR ;
MOV P0,A
LCALL DELAY ;
MOV P0,#0FFH ;
SETB SMG_s ;
CLR SMG_g ;個位數碼管
MOV A,B ;
MOVC A,@A+DPTR ;
MOV P0,A
LCALL DELAY ;
MOV P0,#0FFH ;
SETB SMG_g ;
RET
DELAY: MOV R7,#10 ;延時子程序
DJNZ R7,$
RET
END
|