• 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 设计矩阵键盘键入系统并观察调试结果
  • 要求:按动矩阵键盘按键,通过核心板上的数码管显示按键的键值。
  • 解析:通过FPGA编程驱动矩阵键盘电路,获取矩阵键盘键入的信息,然后通过编码将键盘输出的信息译码成对应的键值信息,最后通过驱动核心板独立数码管,将键盘按键的键值显示在数码管上。

在基础数字电路实验部分我们已经掌握了FPGA驱动独立显示数码管的原理及方法,掌握了有限状态机的设计实现思想,本实验主要学习矩阵键盘的原理及驱动设计。

  • 熟悉独立显示数码管驱动模块的应用
  • 熟悉状态机FSM的编程方法
  • 掌握矩阵键盘的工作原理
  • 完成FPGA驱动矩阵键盘的设计实现

根据前面的实验解析我们可以得知,该设计可以拆分成三个功能模块实现,

  • ArrayKeyBoard:通过驱动矩阵键盘工作获取键盘的操作信息数据。 * Decoder:通过编码方式将键盘的操作信息译码成对应的键值信息。 * Segmentled:通过驱动核心板独立数码管将键盘按键的键值显示在数码管上。

顶层模块Type_system通过实例化三个子模块并将对应的信号连接,最终实现矩阵键盘键入系统的总体设计。
top-down层次设计模块结构设计

键盘类型

嵌入式设计中常见的键盘有两种类型,独立键盘与矩阵键盘,

独立键盘 矩阵键盘

  • 独立式按键:每个按键单独连接到一个I/O口上,通过判断按键端口的电位识别按键的操作,编程简单,需要更多I/O资源
  • 矩阵式按键:通过行列交叉编码连接,通过分时扫描的方法识别按键的操作,节约I/O资源,编程相对复杂 关于独立键盘的驱动设计,我们在基础数字电路实验部分已经系统学习过,这里主要介绍一下矩阵键盘的原理及驱动方法。 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,使用行线和列线分别连接到按键开关的两端,这样我们就可以通过4根行线和4根列线(共8个I/O口)连接16个按键,而且按键数量越多优势越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是更加合适的。

矩阵键盘连接

这里我们以STEP BaseBoard V3.0底板上的4×4矩阵键盘为例,其电路图如下:

上图为4×4矩阵按键的硬件电路图,可以看到4根行线(ROW1、ROW2、ROW3、ROW4)和4根列线(COL1、COL2、COL3、COL4),同时列线通过上拉电阻连接到VCC电压(3.3V),对于矩阵按键来讲:

  • 4根行线是输入的,是由FPGA控制拉高或拉低,
  • 4根列线数输出的,是由4根行线的输入及按键的状态决定,输出给FPGA

当某时刻,FPGA控制4根行线分别为ROW1=0、ROW2=1、ROW3=1、ROW4=1时,

  • 对于K1、K2、K3、K4按键:按下时对应4根列线输出COL1=0、COL2=0、COL3=0、COL4=0,不按时对应4根列线输出COL1=1、COL2=1、COL3=1、COL4=1,
  • 对于K5~~~K16之间的按键:无论按下与否,对应4根列线输出COL1=1、COL2=1、COL3=1、COL4=1,

通过上面的描述:在这一时刻只有K1、K2、K3、K4按键被按下,才会导致4根列线输出COL1=0、COL2=0、COL3=0、COL4=0,否则COL1=1、COL2=1、COL3=1、COL4=1,反之当FPGA检测到列线(COL1、COL2、COL3、COL4)中有低电平信号时,对应的K1、K2、K3、K4按键应该是被按下了。 按照扫描的方式,一共分为4个时刻,分别对应4根行线中的一根拉低,4个时刻依次循环,这样就完成了矩阵按键的全部扫描检测,我们在程序中以这4个时刻对应状态机的4个状态。

矩阵键盘驱动设计

系统总体实现

  1. 双击打开Quartus Prime工具软件;
  2. 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,EDA工具选择);
  3. 新建文件:File → New → Verilog HDL File,键入设计代码并保存;
  4. 设计综合:双击Tasks窗口页面下的Analysis & Synthesis对代码进行综合;
  5. 管脚约束:Assignments → Assignment Editor,根据项目需求分配管脚;
  6. 设计编译:双击Tasks窗口页面下的Compile Design对设计进行整体编译并生成配置文件;
  7. 程序烧录:点击Tools → Programmer打开配置工具,Program进行下载;
  8. 观察设计运行结果。