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