差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 上一修订版 两侧同时换到之后的修订记录 | ||
矩阵键盘键入系统设计 [2018/10/22 11:18] anran [实验原理] |
矩阵键盘键入系统设计 [2020/01/18 21:54] gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | =====矩阵键盘键入系统设计===== | + | ### 矩阵键盘键入系统设计 |
- | ----- | + | |
- | ====实验任务==== | + | --- |
+ | #### 实验任务 | ||
* 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 设计矩阵键盘键入系统并观察调试结果 | * 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 设计矩阵键盘键入系统并观察调试结果 | ||
* 要求:按动矩阵键盘按键,通过核心板上的数码管显示按键的键值。 | * 要求:按动矩阵键盘按键,通过核心板上的数码管显示按键的键值。 | ||
行 7: | 行 8: | ||
- | ====实验目的==== | + | ####实验目的 |
+ | --- | ||
在基础数字电路实验部分我们已经掌握了FPGA驱动独立显示数码管的原理及方法,掌握了有限状态机的设计实现思想,本实验主要学习矩阵键盘的原理及驱动设计。 | 在基础数字电路实验部分我们已经掌握了FPGA驱动独立显示数码管的原理及方法,掌握了有限状态机的设计实现思想,本实验主要学习矩阵键盘的原理及驱动设计。 | ||
* 熟悉独立显示数码管驱动模块的应用 | * 熟悉独立显示数码管驱动模块的应用 | ||
行 15: | 行 17: | ||
- | ====设计框图==== | + | ####设计框图 |
+ | |||
+ | --- | ||
根据前面的实验解析我们可以得知,该设计可以拆分成三个功能模块实现, | 根据前面的实验解析我们可以得知,该设计可以拆分成三个功能模块实现, | ||
* Array_KeyBoard:通过驱动矩阵键盘工作获取键盘的操作信息数据。 | * Array_KeyBoard:通过驱动矩阵键盘工作获取键盘的操作信息数据。 | ||
行 25: | 行 29: | ||
{{:2-top-down层次设计.png?500|top-down层次设计}}{{:2-模块结构设计.png?500|模块结构设计}} | {{:2-top-down层次设计.png?500|top-down层次设计}}{{:2-模块结构设计.png?500|模块结构设计}} | ||
- | ====实验原理==== | + | ####实验原理 |
- | ===键盘类型=== | + | |
+ | --- | ||
+ | |||
+ | #####键盘类型 | ||
嵌入式设计中常见的键盘有两种类型,独立键盘与矩阵键盘, | 嵌入式设计中常见的键盘有两种类型,独立键盘与矩阵键盘, | ||
行 37: | 行 44: | ||
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,使用行线和列线分别连接到按键开关的两端,这样我们就可以通过4根行线和4根列线(共8个I/O口)连接16个按键,而且按键数量越多优势越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是更加合适的。 | 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,使用行线和列线分别连接到按键开关的两端,这样我们就可以通过4根行线和4根列线(共8个I/O口)连接16个按键,而且按键数量越多优势越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是更加合适的。 | ||
- | ===矩阵键盘连接=== | + | #####矩阵键盘连接 |
+ | |||
+ | --- | ||
这里我们以STEP BaseBoard V3.0底板上的4x4矩阵键盘为例,其电路图如下: | 这里我们以STEP BaseBoard V3.0底板上的4x4矩阵键盘为例,其电路图如下: | ||
行 51: | 行 60: | ||
按照扫描的方式,一共分为4个时刻,分别对应4根行线中的一根拉低,4个时刻依次循环,这样就完成了矩阵按键的全部扫描检测,我们在程序中以这4个时刻对应状态机的4个状态。 | 按照扫描的方式,一共分为4个时刻,分别对应4根行线中的一根拉低,4个时刻依次循环,这样就完成了矩阵按键的全部扫描检测,我们在程序中以这4个时刻对应状态机的4个状态。 | ||
- | ===矩阵键盘驱动设计=== | + | #####矩阵键盘驱动设计 |
+ | |||
+ | --- | ||
通过上节的描述,大家对于矩阵键盘工作的原理应该都没有问题了,那么我们怎么编程实现矩阵键盘驱动设计呢?我们将矩阵键盘的扫描周期分为4个时刻,对应4个状态,使得状态机在4个状态上循环跳转,最终通过扫描的方式获取矩阵键盘的操作状态。 | 通过上节的描述,大家对于矩阵键盘工作的原理应该都没有问题了,那么我们怎么编程实现矩阵键盘驱动设计呢?我们将矩阵键盘的扫描周期分为4个时刻,对应4个状态,使得状态机在4个状态上循环跳转,最终通过扫描的方式获取矩阵键盘的操作状态。 | ||
- | {{:矩阵按键扫描法原理.jpg?600|状态机各状态逻辑}} | + | {{:矩阵按键扫描法原理.jpg?800|状态机各状态逻辑}} |
状态机程序实现如下: | 状态机程序实现如下: | ||
行 80: | 行 91: | ||
至于状态机循环的周期,根据我们基础教程里可知,按键抖动的不稳定时间在10ms以内,所以对同一个按键采样的周期大于10ms,这里同样取20ms时间。20ms时间对应4个状态,每5分钟进行一次状态转换。所以我们在状态机之前先增加分频模块,得到200Hz的分频时钟,然后状态机按照200Hz分频时钟的节拍做状态跳转和键盘采样。 | 至于状态机循环的周期,根据我们基础教程里可知,按键抖动的不稳定时间在10ms以内,所以对同一个按键采样的周期大于10ms,这里同样取20ms时间。20ms时间对应4个状态,每5分钟进行一次状态转换。所以我们在状态机之前先增加分频模块,得到200Hz的分频时钟,然后状态机按照200Hz分频时钟的节拍做状态跳转和键盘采样。 | ||
- | {{:矩阵按键程序框图.jpg?500|状态转移图}} | + | {{:矩阵按键程序框图.jpg?600|状态转移图}} |
状态机程序实现如下: | 状态机程序实现如下: | ||
行 128: | 行 139: | ||
对于大多数需要循环扫描的硬件来说,程序写到这里应该就完成了,但是大家想想我们之前基础数字电路实验关于按键消抖部分的内容,因为我们是在对按键采样,按键是会抖动的,所以我们还要想办法对采集回来的数据做一些判定,怎么判定呢? 这就得回到矩阵键盘工作原理上来了。 | 对于大多数需要循环扫描的硬件来说,程序写到这里应该就完成了,但是大家想想我们之前基础数字电路实验关于按键消抖部分的内容,因为我们是在对按键采样,按键是会抖动的,所以我们还要想办法对采集回来的数据做一些判定,怎么判定呢? 这就得回到矩阵键盘工作原理上来了。 | ||
- | {{:抖动原理.png?500|按键抖动示意}} | + | {{:抖动原理.png?800|按键抖动示意}} |
上图是市面上常见按键抖动的模型,有三个参数,按下抖动10ms以内,松开抖动10ms以内,按键周期数百ms;前面说过键盘的采样周期为20ms,可以得到以下结论: | 上图是市面上常见按键抖动的模型,有三个参数,按下抖动10ms以内,松开抖动10ms以内,按键周期数百ms;前面说过键盘的采样周期为20ms,可以得到以下结论: | ||
行 164: | 行 175: | ||
{{:2-状态机状态转移图.png?800|状态机状态转移图}} | {{:2-状态机状态转移图.png?800|状态机状态转移图}} | ||
- | ===系统总体实现=== | + | ##### 系统总体实现 |
在基础数字电路实验部分我们已经掌握了FPGA驱动独立显示数码管的原理及方法, 模块通过一个4位的输入传递要显示的数值,通过9位的输出控制数码管显示该数值,这里我们不再重复。 | 在基础数字电路实验部分我们已经掌握了FPGA驱动独立显示数码管的原理及方法, 模块通过一个4位的输入传递要显示的数值,通过9位的输出控制数码管显示该数值,这里我们不再重复。 | ||
行 202: | 行 213: | ||
{{:2-rtl设计框图.png?800|rtl设计框图}} | {{:2-rtl设计框图.png?800|rtl设计框图}} | ||
- | ====实验步骤==== | + | |
+ | ####实验步骤 | ||
- 双击打开Quartus Prime工具软件; | - 双击打开Quartus Prime工具软件; | ||
- 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,EDA工具选择); | - 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,EDA工具选择); | ||
行 213: | 行 225: | ||
- | ====实验现象==== | + | #### 实验现象 |
+ | |||
+ | 按动矩阵键盘上的按键,核心板独立显示数码管会更新显示对应键值。例如上电默认显示00,按动K8按键,数码管显示08,再按动K16按键,数码管显示16。 |