微机原理课程设计-电子钟标准版 第3页
cmp stop,0
jz exit
cmp hour,24
jl aa
mov hour,0
aa: cmp min,60
jl bb
mov min,0
bb:
inc count
;响铃时间为0.5秒
cmp count,20
jl exit
mov al,0ffh
mov dx,portb4
out dx,al
cmp count ,40
jl exit
mov count,0
inc sec
cmp min,59
jl skip
cmp sec,55
jl exit
mov al,00h
mov dx,portb4
out dx,al
skip: cmp sec,60
jl exit
mov sec,0
inc min
cmp min,60
jl exit
mov min,0
mov al,0ffh
mov dx,portb4
out dx,al
inc hour
cmp hour,24
jl exit
mov hour,0
exit:mov al,00100000b; 中断结束EOI
mov dx,3a0h
out dx,al
pop dx
pop cx
pop bx
pop ax
iret
interupt endp
DELY proc
PUSH CX
MOV CX,0ffffH
LOOP $
POP CX
REt
dely endp
;//////////////////////////////////////////////////////////////////////////键盘
input proc
push ax
push bx
push cx
push dx
wt1:
MOV AL,00H
MOV DX,PORT2
OUT DX,AL ;使数码管全灭的同时,列线输出0判断是否有键按下
MOV DX,PORT2
IN AL,DX ;是否有键按下
NOT AL
AND AL,0FH
JNZ lk11 ;有,转
JMP wt1 ;无键,继续查询等待
lk11:
CALL DELY
MOV AL,00H
MOV DX,PORT2
OUT DX,AL
;再次确认是否有键按下
MOV DX,PORT2
IN AL,DX
NOT AL
AND AL,0FH
JZ wt1
MOV CL,00H ;有键,识别按键,CL为列计数器
MOV BL,0feH ;第0列
lk44: MOV AL,BL
MOV DX,PORT2
OUT DX,AL
MOV DX,PORT2
IN AL,DX
NOT AL
AND AL,0FH ;结果为行值
JNZ KEYDOWN1 ;此列有键按下,计算键值
next1: INC CL ;扫描下一列
TEST BL,08H
JZ wt1
ROL BL,1
JMP lk44
KEYDOWN1:
MOV BX,0 ;BX为行计数器,判断哪一行有按键
CMPROW1:CMP AL,ROW[BX]
JZ KEY1
INC BX
JMP CMPROW1
KEY1: IMUL BX,3
mov ah,0
ADD CL,BL
mov al,cl
mov time,ax
pop dx
pop cx
pop bx
pop ax
ret
input endp
CODE ENDS
END beg