ADRLED EQU 8700H ;LED工作地址
ORG 0000H
LJMP MAIN
ORG 1BH
JMP T1INT ;定時器1中斷入口地址
ORG 0100H
MAIN: MOV SP,#60H
MOV R0,#0AH ;R0為0.1秒的次數
ANL TMOD,#0FH ;定時器1置為方式1
ORL TMOD,#10H
MOV TL1,#0B0H ;置定時器1的中斷時間為0.1S
MOV TH1,#3CH
ORL IE,#88H ;允許定時器1中斷
MOV R2,#0 ;置R2初值,R2對應顯示字符的字形碼相對地址
MOV R5,#16 ;置顯示的字符數初值
SETB P3.4 ;使蜂鳴器的負端為高不鳴叫
CLR P3.5 ;使數碼管的共陰極為低電平
NEXT: MOV DPTR,#TAB ;置字形碼表首地址
MOV A,R2
MOVC A,@A+DPTR ;取出相應的字形碼
MOV DPTR,#ADRLED ;數碼管段碼地址
MOVX @DPTR,A ;送數碼管段碼(字形碼)
SETB TR1 ;啟動定時器1
LOOP: CJNE R0,#00H,LOOP ;不夠1秒,轉LOOP
INC R2
MOV R0,#0AH ;重置R0為10
DJNZ R5,NEXT ;16個字符沒有顯示1遍,轉NEXT顯示下一字符
CLR P3.4 ;使蜂鳴器的負端為低其鳴叫
MOV A,#0FFH ;報警之后數碼管顯示全亮
MOV DPTR,#ADRLED ;數碼管段碼地址
MOVX @DPTR,A ;送數碼管段碼(字形碼)
CLR TR1 ;定時器停止計數
SJMP $ ;死循環
T1INT: CLR TR1 ;定時器1中斷,首先停止計數
DEC R0 ;次數減1
MOV TL1,#0B0H ;重置定時器1時間常數
MOV TH1,#3CH
SETB TR1 ;恢復定時器1計數
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;字形碼表
DB 7FH,6FH,77H,7CH,58H,5EH,79H,71H
END
|