马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
汇编程序的源代码:
r0用作扫描键盘 ,r1送按键返回值, r2开关允许,r3,r4,计数,r5,r6(保存倒计时数据),(r7=0、1、2 分别是倒计时、抢答、调整时间)
sig bit 40h
org 0000h
jmp start
org 0003h ;中断0 调整计时的
ljmp TT0
org 000bh ;定时0 用于倒计时
ljmp TT1
org 0013h ;中断1 开关允许
ljmp TT2
org 001bh ;定时1 铃声
org 0030h
start:mov time,#90
mov r7,#2
mov r6,#0
setb px1
clr p3.7
clr sig
mov sp,#50h
mov dptr,#tab
mov ie,#8fh ;前四个中断全开
mov TMOD,#11h
mov th0,#3ch
mov tl0,#0b0h
display:cjne r7,#2,display2 ;调时显示
jnb sig,next1
lcall skey1
next1:mov a,time
mov b,#10
div ab
movc a,@a+dptr
mov p0,a
mov p2,#82h
lcall dely
mov a,b
movc a,@a+dptr
mov p0,a
mov p2,#83h
lcall dely
mov p0,#0
mov p2,#82h
lmov p2,#83h
lcall dely
sjmp display
display2:cjne r7,#1,display3 ;抢答显示
lcall scanfu4
mov a,r1
mov b,#10
div ab
movc a,@a+dptr
mov p0,a
mov p2,#82h
lcall dely
mov a,b
movc a,@a+dptr
mov p0,a
mov p2,#83h
lcall dely
sjmp display2
display3:jb sig2,display2 ;倒时显示
sjmp display3
skey1:MOV A,#0FH ;按键扫描
MOV P1,A
MOV A,P1
CJNE A,#0FH,key1
ret
key1:LCALL dela
mov p1,#0Fh
MOV A,P1
CJNE A,#0FH,X1
ret
X1:CJNE a,#0EH, Y2
MOV P1,#0F0H
MOV r0,P1
Y0:CJNE r0,#0E0H,Y1 ;0
lcall dela
mov a,time
cjne a,#90,aa1
mov time,#0
ret
aa1:add a,#5
mov time,a
ret
Y1:CJNE r0,#0D0H,Y2 ;1
lcall dela
mov a,time
cjne a,#0,aa
mov time,#90
ret
aa:subb a,#5
mov time,a
Y2: ret
scanfu4:MOV A,#0FH ;按键扫描(抢答时按键)
MOV P1,A
MOV A,P1
CJNE A,#0FH,KEYCA
ret
KEYCA: LCALL DEL
mov p1,#0Fh
MOV A,P1
CJNE A,#0FH,X1CA
ret
X1CA: CJNE a,#0EH,X2CA
MOV P1,#0F0H
MOV r0,P1
Y0CA: CJNE r0,#0E0H,Y1CA ;0
mov r1,#1
jmp X4CA
Y1CA: CJNE r0,#0D0H,Y2CA ;1
mov r1,#2
jmp X4CA
Y2CA: CJNE r0,#0B0H,Y3CA ;2
mov r1,#3
jmp X4CA
Y3CA: CJNE r0,#70H,X2CA ;3
mov r1,#4
jmp X4CA
X2CA: CJNE a,#0DH,X3CA
MOV P1,#0F0H
MOV r0,P1
Y4CA: CJNE r0,#0E0H,Y5CA ;4
mov r1,#5
jmp X4CA
Y5CA: CJNE r0,#0D0H,Y6CA ;5
mov r1,#6
jmp X4CA
Y6CA: CJNE r0,#0B0H,Y7CA ;6
mov r1,#7
jmp X4CA
Y7CA: CJNE r0,#70H,X3CA ;7
mov r1,#8
jmp X4CA
X3CA: CJNE a,#0BH,X4CA
MOV P1,#0F0H
MOV r0,P1
Y8CA: CJNE r0,#0E0H,Y5CA ;8
mov r1,#9
jmp X4CA
Y9CA: CJNE r0,#0D0H,X4CA1 ;9(从0开始)
mov r1,#10
X4CA: setb p3.7
lcall dely
X4CA1: ret
dely:mov 20h,#50
djnz 20h,$
ret
del:mov 20h,#40
del1:mov 21h,#0
del2:djnz 21h,del2
djnz 20h,del1
ret
dela:mov 20h,#150
delb:mov 21h,#0
delc:djnz 21,delc
djnz 20h,delb
ret
TT0: ;调用延时
;mov r4,r6
;mov r1,#0
clr p3.7
clr sig
dec r7
jb cy,TT0_a
reti
TT0_a: mov r7,#2
reti
TT1:mov th0,#3ch
mov tl0,#0b0h
inc r3
cjne r3,#20,RETT ;有没有50MS
mov r3,#0
cjne r4,#0,RETT1
reti
RETT1:dec r4
RETT:reti
TT2: ;调用延时
mov r4,r6
mov r1,#0
cpl sig
clr p3.7
reti
tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;;;;0到9字型码表为数码管
End
|