org 0000h;开始
jmp start;跳到主程序
org 0030h
start: mov 30h,#0ffh   ;30h送ff即-1
main:  INC 30H
mov a,30h
setb p3.5        ;把键盘口送高电平
mm:    jnb p3.5,tt      ;如果脉冲源按下则执行tt
ljmp mm        ;如果没有按下则反复监测键盘
tt:    MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P3.4        ;开数码管
MOV P1,A       ;送显示
lcall delay       ;延时一段时间
cjne a,#67h,main   ;如果是最后一个数据重新开始
cjne a,#20h,BB    ;如果是数字9到小喇叭响的程序
ljmp start         ; 否则30H 清除
ret
TAB:   DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H
        ;数据表，0--9（如果反向排列则为倒计数）
BB:    mov r1,#255     ;小喇叭响的次数
ppp:   cpl p3.3        ; 小喇叭响
call deL        ;小喇叭响的速率
djnz r1,ppp     ;小喇叭响255次。
jmp start
delay: mov r5,#20    ;延时子程序1闪烁灯调用
d1:    mov r6,#20
d2:    mov r7,#255
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
del:               ;延时子程序2小喇叭调用
mov r4,#255
djnz r4,$
ret
end
