OpenEdv-开源电子网

标题: 【小梅哥FPGA进阶教程】第一章 FPGA矩阵键盘驱动设计与验证 [打印本页]

作者: 芯航线跑堂    时间: 2017-1-7 21:12
标题: 【小梅哥FPGA进阶教程】第一章 FPGA矩阵键盘驱动设计与验证
本帖最后由 芯航线跑堂 于 2017-1-7 23:34 编辑

FPGA矩阵键盘驱动设计与验证


本文由西安网友张昭贡献,特此感谢
课程简介
本章我们主要是来实现用verilog语言实现矩阵键盘的驱动。提到矩阵键盘,许多读者应该不会陌生,因为学过单片机、ARM的人都应该知道并用C语言做过矩阵键盘的驱动。本章作者将用verilog语言来写一个矩阵键盘(4*4)的驱动,并用LED灯的状态指示按键的状态。课后会留有和本章内容有关的作业,希望所有读者能独立完成作业。接下来就让我们一块走进今天的学习内容“矩阵键盘学习之旅”。
矩阵键盘诞生的背景
相信许多人经常用到矩阵键盘但是却不知道“它”的由来。由于最早的MCU(即单片机)其IO口相对较少,而且用到按键过多的话,就会占用过多的IO。人们为了解决这个问题就引入了“矩阵键盘”。在矩阵键盘中,每条行线和列线在交叉处都不是直接连同,而是通过一个按键直接相连,这样以来一个4*4的矩阵键盘只需要8根控制线就可以完成16个按键的控制。下面就是常见的两类4*4矩阵键盘:

(, 下载次数: 3)
  图1.芯航线矩阵键盘
(, 下载次数: 3)
     图2.淘宝
         
   注意:我们的键盘是有上拉电阻的,而淘宝上的这款没有上拉所以不能直接用的。
矩阵键盘工作原理
要说起矩阵键盘是如何工作的?就得从它的硬件原理图来理解它工作机理。啥话不说,直接上图有图有真相。
(, 下载次数: 4)
   通常我们检测矩阵键盘中某一按键是否被按下,常用的方法是行扫描法。图中一共有8条控制线,4条行控制线(ROW),4条列控制线(COL),而且可以看到8条控制线的初始状态都位高电平。那我们如何去检测某一个按键被按下,并且还能找到其具体的位置?假如我们让COL0=0,然后去逐行的进行扫描每一行,如果ROW0=0出现低电平通过20ms的延迟再次判断该行是否仍然为零,如果仍然为零,那么说明按键0被按下。其它按键的检测类似这种方法。例如:
       如果COL=4’b0100时,当检测到ROW=4’b1011,则说明“A”被按下;可能这块有些读者会说为啥不是“5”被按下?如果有读者提出这个疑惑的话,那就很有必要跟着作者学完这节课,再仔细思考思考。



总体框架图
(, 下载次数: 4)
端口列表如下:
(, 下载次数: 4)