verilog hdl 矩阵键盘实验报告要点Word下载.docx
- 文档编号:16936285
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:9
- 大小:28.64KB
verilog hdl 矩阵键盘实验报告要点Word下载.docx
《verilog hdl 矩阵键盘实验报告要点Word下载.docx》由会员分享,可在线阅读,更多相关《verilog hdl 矩阵键盘实验报告要点Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
三.实验原理:
软键盘的工作方式:
通常在一个键盘中使用了一个瞬时接触开关,并且用如图所示的简单电路,微处理器可以容易地检测到闭合。
当开关打开时,通过处理器的I/O口的一个上拉电阻提供逻辑1;
当开关闭合时,处理器的/IO口的输入将被拉低得到逻辑0。
可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。
尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。
当触点闭合时,其弹起就像一个球。
弹起效果将产生如图10-2所示的好几个脉冲。
弹起的持续时间通常将维持在5ms∼30ms之间。
如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。
然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。
键盘上阵列这些开关最有效的方法(当需要5个以上的键时)就形成了一个如图10-3所示的二维矩阵。
当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O端被连接的时候)。
一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。
矩阵所需的键的数目显然根据应用程序而不同。
每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。
键盘扫描的实现过程如下:
对于4×
4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。
同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。
四.实验内容:
本实验要求完成的任务是通过编程实现对4X4矩阵键盘按下键的键值的读取,并在数码管上完成一定功能(如移动等)的显示。
按键盘的定义,按下“*”键则在数码管是显示“E”键值。
按下“#”键在数码管上显示“F”键值。
其它的键则按键盘上的标识进行显示。
在此实验中数码管与FPGA的连接电路和管脚连接在以前的实验中都做了详细说明,这里不在赘述。
本实验箱上的4X4矩阵键盘的电路原理如图所示
五.实验程序:
Modulekey(clk,reset,row,col,key_value);
inputclk,reset;
input[3:
0]row;
output[3:
0]col;
0]key_value;
reg[3:
reg[5:
0]count;
//delay_20ms
reg[2:
0]state;
//状态标志
regkey_flag;
//按键标志位
regclk_500khz;
//500KHZ时钟信号
0]col_reg;
//寄存扫描列值
0]row_reg;
//寄存扫描行值
always@(posedgeclkornegedgereset)
if(!
reset)beginclk_500khz<
=0;
count<
end
else
begin
if(count>
=50)beginclk_500khz<
=~clk_500khz;
count<
end
elsecount<
=count+1;
always@(posedgeclk_500khzornegedgereset)
reset)begincol<
=4'
b0000;
state<
else
begin
case(state)
0:
col[3:
0]<
key_flag<
=1'
b0;
if(row[3:
0]!
b1111)beginstate<
=1;
b1110;
end//有键按下,扫描第一行
elsestate<
end
1:
=5;
end//判断是否是第一行
elsebeginstate<
=2;
b1101;
end//扫描第二行
2:
end//判断是否是第二行
=3;
b1011;
end//扫描第三行
3:
end//判断是否是第三一行
=4;
b0111;
end//扫描第四行
4:
5:
b1111)
col_reg<
=col;
//保存扫描列值
row_reg<
=row;
//保存扫描行值
b1;
//有键按下
beginstate<
endcase
end
always@(clk_500khzorcol_regorrow_reg)
if(key_flag==1'
b1)
begin
case({col_reg,row_reg})
8'
b1110_1110:
key_value<
b1110_1101:
b1110_1011:
b1110_0111:
b1101_1110:
b1101_1101:
b1101_1011:
=6;
b1101_0111:
=7;
b1011_1110:
=8;
b1011_1101:
=9;
b1011_1011:
=10;
b1011_0111:
=11;
b0111_1110:
=12;
b0111_1101:
=13;
b0111_1011:
=14;
b0111_0111:
=15;
endcase
end
endmodule
六.实验步骤
1、打开QUARTUSII软件,新建一个工程。
2、建完工程之后,再新建一个VHDLFile,打开VHDL编辑器对话框。
3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中提供的示例程序。
4、编写完VHDL程序后,保存起来。
方法同实验一。
5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。
编译仿真无误后,依照4X4矩阵键、数码管与FPGA的管脚连接表或参照附录进行管脚分配。
管脚分配完成后,再进行全编译一次,以使管脚分配生效。
七.实验结果:
以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源模块的时钟选择为2048HZ,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值。
按下“*”键则在数码管是显示“E”键值。
八.实验体会:
刚刚开始接触这门课的时候,我们小组什么都不知道,只知道按照老师您打得程序来抄。
然后一步步按步骤做,经过一段时间的学习,学会了程序的运行和管脚的输入及在仪器上的运行,通过阅读简单的程序,来增加自己的知识,然后通过改写成程序来增加对程序的理解。
感觉这次能都把这串代码打出来还是很不容易的,不过大家都有收获就行。
九.附录:
相关管脚:
端口名
使用模块信号
对应FPGA管脚
说明
CLK
数字信号源
PIN_M1
时钟为2048HZ
KR0
4*4钜阵键盘R0
PIN_J19
钜阵键盘行信号
KR1
4*4钜阵键盘R1
PIN_P15
KR2
4*4钜阵键盘R2
PIN_J17
KR3
4*4钜阵键盘R3
PIN_H11
KC0
4*4钜阵键盘C0
PIN_R14
钜阵键盘列信号
KC1
4*4钜阵键盘C1
PIN_R16
KC2
4*4钜阵键盘C2
PIN_V19
KC3
4*4钜阵键盘C3
PIN_H15
A
数码管模块A段
PIN_H19
键值显示
B
数码管模块B段
PIN_J14
C
数码管模块C段
PIN_H18
D
数码管模块D段
PIN_H17
E
数码管模块E段
PIN_H14
F
数码管模块F段
PIN_G20
G
数码管模块G段
PIN_G18
SEL0
数码管模块SEL0
PIN_F20
SEL1
数码管模块SEL1
PIN_E20
SEL2
数码管模块SEL2
PIN_E19
SEL3
数码管模块SEL3
PIN_E18
SEL4
数码管模块SEL4
PIN_D20
SEL5
数码管模块SEL5
PIN_D19
SEL6
数码管模块SEL6
PIN_C18
SEL7
数码管模块SEL7
PIN_C17
表10-2端口管脚分配表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- verilog hdl 矩阵键盘实验报告要点 矩阵 键盘 实验 报告 要点