FSM方式扫描矩阵键盘--代码实现
-->> 矩阵键盘的实验可以说是普通的不能再普通了,相信大家无论是MCU还是FPGA都写过这个实验。
之前也写过matrix_keyscan,今天重新用FSM来实现,就算是巩固下以前的知识吧。
--->> 首先是我板子上的矩阵键盘部分原理图如下:
--- 根据上图,明确一点 有上拉电阻的行线应该作为输入回馈信号,无上拉电阻的列线信号作为输出扫描信号。
这样以来,一开始 列信号输出0000,平时状态输入行线信号由于上拉电阻保持高电平,一旦检测到行线不为1111,则说明有键
按下,此后,列信号再输出1110-->>1101-->>1011-->0111四组扫描信号。
--------------------------------------------------------------------------------------------------------------->>
流程图(来自亚锋前辈blog,这里表示感谢)
--------------------------------------------------------------------------->>
代码部分
------------->>>
内部信号声明
------->>
20ms延时计数用于消抖
------------->>
FSM采用one-hot编码。。关于状态机的笔记。。以后会重新整理更详细的,此处不多讲。
-------------->>
三段式FSM
第一段 时序逻辑 状态转移部分
第二段 组合逻辑 次态逻辑输出(部分代码)
第三段 时序逻辑 根据次态确定输出控制信号(部分代码)
----->>>>
键值译码部分(部分代码)
----------------------->>>>>
状态机图表