通过学过的知识编程,当按下S1~S16中的某个按键时,在数码管上显示键值 0~F,矩阵键盘编程,消抖动,数码管段码显示编程。要求画出流程图,数码管显示和消抖动部分采用子程序调用实现。8255地址范围:1054H~1057H A口设置成方式0输出 C口设置成方式0 PC7~PC4设定输出 PC3~PC0设定输入 生成对应的masm代码
时间: 2024-04-01 20:34:28 浏览: 97
以下是按键扫描、消抖、数码管显示的流程图和代码:
![流程图](https://i.imgur.com/CLTFQZT.png)
```assembly
.model small
.stack 100h
; 定义端口地址
portA equ 1054h
portB equ 1055h
portC equ 1056h
control equ 1057h
; 定义常量
delay equ 2000
; 定义变量
key db 0
; 定义子程序
debounce proc near
; 消抖动,采用简单的延时方式
mov cx, delay
delay_loop:
loop delay_loop
; 检测按键状态
in al, portC
and al, 0Fh
cmp al, key
je end_debounce
mov key, al
xor ah, ah
mov al, key
out portB, al
end_debounce:
ret
debounce endp
display proc near
; 将 key 转换为数码管段码
cmp key, 0Ah
jl display_0to9
sub key, 0Ah
add key, 0Ah
display_0to9:
mov ah, 0
mov al, key
add al, 30h
; 在数码管上显示
out portA, al
ret
display endp
main proc near
; 初始化 8255
mov al, 80h
out control, al
mov al, 0
out portA, al
out portB, al
out portC, al
mov al, 90h
out control, al
; 主循环
loop:
; 扫描按键
in al, portC
and al, 0Fh
cmp al, 0
je no_key_pressed
; 消抖动并显示数码管
mov key, al
call debounce
call display
no_key_pressed:
jmp loop
main endp
end main
```
阅读全文