verilog_矩阵键盘

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、矩阵键盘显示电路设计(显示键盘值的平方)

矩阵键盘显示电路的设计

一、实验目的

1、了解普通4×4 键盘扫描的原理。

2、进一步加深七段码管显示过程的理解。

3、了解对输入/输出端口的定义方法。

二、实验原理

实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描;再就是用软件实现键盘扫描。作为一个嵌入系统设计人员,总是会关心产品成本。目前有很多芯片可以用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减一个系统的重复开发成本,且只需要很少的CPU 开销。嵌入式控制器的功能能强,可能充分利用这一资源,这里就介绍一下软键盘的实现方案。

图10-1 简单键盘电路

通常在一个键盘中使用了一个瞬时接触开关,并且用如图10-1 所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的 I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的/IO口的

输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的 1或者 0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图10-2所示的好几个脉冲。弹起的持续时间通常将维持在 5ms∼30ms 之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。

图10-2 按键抖动

键盘上阵列这些开关最有效的方法(当需要5个以上的键时)就形成了一个如图10-3 所示的二维矩阵。当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O 端被连接的时候),一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。矩阵所需的键的数目显然根据应用程序而不同。每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。

图10-3 矩阵键盘

键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的 4 行均为高电平,那么肯定没有按键按下,否则,如果读入的4 行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4 列为高电平,然后在输出4 行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。

获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。

三、实验内容

本实验要求完成的任务是通过编程实现对4X4矩阵键盘按下键的键值的读取,并在数码管上完成一定功能(如移动等)的显示。按键盘的定义,按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F”键值。其它的键则按键盘上的标识进行显示。

在此实验中数码管与FPGA的连接电路和管脚连接在以前的实验中都做了详细说明,这里不在赘述。本实验箱上的 4X4 矩阵键盘的电路原理如图 10-4 所示。与F PGA 的管脚连接如表10-1 所示。

图10-4 4X4 矩阵键盘电路原理图

表10-1 4X4 矩阵键与F PGA 的管脚连接表

四、实验步骤

1、打开Q UARTUSII 软件,新建一个工程。

2、建完工程之后,再新建一个V HDL File,打开V HDL编辑器对话框。

3、按照实验原理和自己的想法,在 VHDL 编辑窗口编写 VHDL 程序,用户可参照光盘中提供的示例程序。

4、编写完V HDL 程序后,保存起来。方法同实验一。

5、对自己编写的V HDL 程序进行编译并仿真,对程序的错误进行修改。

6、编译仿真无误后,依照 4X4 矩阵键、数码管与 FPGA 的管脚连接表(表或参照附录)进行管脚分配。表10-2 是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。

表 10-2 端口管脚分

配表

7、用下载电缆通过JTAG 口将对应的sof 文件加载到FPGA 中。观察实验结果是否与自己的编程思想一致。

五、实验结果与现象

以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1KHz,按动“模式”按键使单8字数码管显示“0”(参考实验四),按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。

按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F”

键值。

/************************************************

工程:4x4矩阵键盘

日期:2011-08-3

最后修改:

功能:键盘

说明:ROW【3:0】设为输入,COL【3:0】设为输出。

如果没有按键按下,则ROW【3:0】一直被上

拉为高电平,且COL【3:0】有低电平输出,

ROW【3:0】中才有可能低电平输入。

*************************************************/

module keys(clk_50M,rst_n,row,col,dataout,smg_wei);

/*************************************************/

output [3:0]col; //矩阵键盘列

input rst_n; //复位键

input clk_50M; //系统时钟

input [3:0]row; //矩阵键盘行

output [7:0]dataout; //键盘值数码管显示数据

output [7:0]smg_wei; //数码管显示使能

reg [7:0]dataout;

reg [3:0]col;

reg [3:0]key_board_val;

/*************************************************/

assign smg_wei=0; //八个数码管显示

相关文档
最新文档