本实验旨在通过实践探索键盘扫描原理及显示设计技术,结合硬件电路和软件编程实现数据输入输出功能,提升学生在电子工程领域的动手能力和创新思维。
实验系统中的键盘及数码管显示单元提供了4 行×4 列共16 个按键,以及6位7 段数码管也接成扫描电路方式。段位控制信号为A~Dp,各自独立的公共端X1~X6,其中X1~X4与键盘列扫描信号复用,行扫描信号由Y1~Y4提供。
### 综合实验:键盘扫描与显示设计
#### 实验背景
本实验旨在通过实践操作让参与者深入了解按键扫描的基本原理以及如何利用8255接口芯片完成按键的识别和数码管显示的功能。这对于理解人机交互界面的设计至关重要。
#### 实验目的
1. **学习按键扫描的原理及电路接法**:理解按键扫描的工作机制,包括如何识别单个按键的按下状态以及设计相应的硬件电路。
2. **掌握利用8255完成按键扫描及显示**:学会使用8255接口芯片实现对键盘输入处理和结果显示。
#### 实验内容
- 硬件连接:将8255接口芯片与键盘扫描单元进行物理连接,以便能够读取按键状态。
- 软件编程:编写程序完成按键扫描功能,并把读到的按键值依次显示在数码管上。
#### 实验说明及步骤
实验平台提供了一个4×4矩阵键盘(共16个按键)和6位7段数码管。数码管通过共用段位控制信号A~Dp控制,每只数码管拥有独立的公共端X1~X6。其中X1~X4与键盘列扫描信号复用,行扫描信号由Y1~Y4提供。
在软件层面需要注意按键抖动消除以及数码管显示刷新等关键环节。
#### 实验步骤详解
1. **确认连接**:确保PC机与实验平台之间的连接已经正确建立。
2. **资源查询**:运行Tdpit集成操作软件,检查端口资源分配情况,并记录所使用片选信号对应的IO端口始地址。
3. **程序编写**:根据查询到的地址参考提供的流程图编写程序并进行编译链接。
4. **硬件连接**:按照参考接线图连接实验线路。
5. **运行测试**:运行程序后尝试按下键盘矩阵上的各个按键,观察数码管显示是否准确反映了按键的状态。
#### 程序设计说明
实验中的程序设计主要分为以下几个部分:
- 初始化:设置8255的工作模式以适应键盘扫描的需求。
- 按键扫描:利用行扫描的方式寻找被按下的按键,并记录按键编号。
- 显示处理:将读取到的按键值通过数码管显示出来。
#### 关键代码分析
```assembly
; 初始化8255
MOVDX, PORTCN
MOVAL, 81H ; 设置工作模式
OUTDX, AL
; 按键扫描主循环
WAITK:
MOVDX, PORTC
MOVAL, 00001111B
OUTDX, AL ; 输出低电平至行线
INAL, DX
ANDAL, 0FH
CMPAL, 0FH
JZ WAITK ; 如果没有按键按下,则等待
; 延迟消除抖动
MOVCX, 0BFFFH
DELAY:
LOOPDELAY
; 确定按键的具体位置
MOVBH, 01111111B ; 行扫描码
MOVCX, 4 ; 扫描四行
FNDROW:
MOVAL, BH
OUTDX, AL ; 输出行扫描码
RORBH, 1 ; 更新行扫描码
INAL, DX
ANDAL, 0FH
CMPAL, 0FH
JNZ FNDCOL ; 如果检测到按键,则跳转
ADDBL, 4 ; 否则继续扫描下一行
LOOP FNDROW
JMP WAITK
; 确定按键所在的列
FNDCOL:
RORAL, 1
JNC LOOPDISP
INC BL
JMP FNDCOL
; 显示处理
LOOPDISP:
MOAL, BL
MOVBX, OFFSET SSEGCODE
XLAT ; 获取段选码
MOVDX, PORTA
OUTDX, AL
MOVAL, AH ; 送位选码
MOVDX, PORTB
OUTDX, AL
NOP
NOP
JMP WAITK
```
#### 思考题解析
1. **实验结果**:实验结果应该是在数码管上显示出按下按键的对应值或字符。如果希望显示其他结果,可以通过更改程序中的显示代码来实现。
2. **修改连线图**:通过调整实验参考连线图可以