ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:106.94KB ,
资源ID:3718105      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3718105.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(verilog矩阵键盘要点.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

verilog矩阵键盘要点.docx

1、verilog矩阵键盘要点、矩阵键盘显示电路设计(显示键盘值的平方)矩阵键盘显示电路的设计一、 实验目的1、 了解普通4 X 4键盘扫描的原理。2、 进一步加深七段码管显示过程的理解。3、 了解对输入/输出端口的定义方法。二、 实验原理实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描;再就 是用软件实现键盘扫描。作为一个嵌入系统设计人员,总是会关心产品成 本。目前有很多芯片可以用来实现键盘扫描,但是键盘扫描的软件实现方 法有助于缩减一个系 统的重复开发成本,且只需要很少的 CPU开销。嵌 入式控制器的功能能强,可 能充分利用这一资源,这里就介绍一下软键盘 的实现方案。VCC图10-1 简

2、单键盘电路通常在一个键盘中使用了一个瞬时接触开关, 并且用如图10-1所示 的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器 的I/O 口的一个上拉电阻提供逻辑 1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑 0。可遗憾的是,开关并不完善,因为当它们被按 下或者被释放时,并不能够产生一个明确的 1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比 较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图10-2所示 的好几个脉冲。弹起的持续时间通常将维 持在5ms0ms之间。如果需要多 个键,则可以将每个开关连接到微处理器

3、上它 自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。1 | | o U o30ms图10-2按键抖动键盘上阵列这些开关最有效的方法(当需要5个以上的键时)就形成了一 个如图10-3所示的二维矩阵。当行和列的数目一样多时,也就是方型的矩 阵,将产生一个最优化的布列方式(I/O端被连接的时候),一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。矩阵所需的键的数目显然根据Bl盟B3图10-3矩阵键盘键盘扫描的实现过程如下:对于4X 4键盘,通常连接为4行、4列,因 此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过 程,我们的思想是,首先固定输出4行

4、为高电平,然后输出4列为低电平, 在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的 4行均为高电平,那么肯定没有按键按下,否则,如果读入的 4行有一位为低电平, 那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同 理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平, 再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键 按下。获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在 对每个按键进行匹配,找到键值后在7段码管显示。三、实验内容本实验要求完成的任务是通过编程实现对 4X4矩阵键盘按下键的键值的 读 取,并在数码管上完成一定功

5、能(如移动等)的显示。按键盘的定义,按 下“* ”键则在数码管是显示“ E”键值。按下“ #”键在数码管上显示“ F” 键值。其它的键则按键盘上的标识进行显示。在此实验中数码管与 FPGA的连接电路和管脚连接在以前的实验中都 做了详细说明,这里不在赘述。本实验箱上的 4X4矩阵键盘的电路原理如表10-1 4X4矩阵键与F PGA的管脚连接表信号名称对应FPGA管脚名说明KEY-COB8矩阵键盘的第 1列选择KEY-C1A9矩阵键盘的第 2列选择KEY-C2B9矩阵键盘的第 3列选择KEY-C3E5矩阵键盘的第 4列选择KEY-R0B6矩阵键盘的第1行选择KEY-R1A7矩阵键盘的第 2行选择K

6、EY-R2B7矩阵键盘的第 3行选择KEY-R3A8矩阵键盘的第 4行选择四、实验步骤1、 打开QUARTUSII软件,新建一个工程。2、 建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。3、 按照实验原理和自己的想法,在 VHDL编辑窗口编写VHDL程序, 用户可参照光盘中提供的示例程序。4、 编写完VHDL程序后,保存起来。方法同实验一o5、 对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。6编译仿真无误后,依照4X4矩阵键、数码管与FPGA的管脚连接表 (表或参照附录)进行管脚分配。表10-2是示例程序的管脚分配表。分配完 成后,再进行全编译一次,以使

7、管脚分配生效。表10-2 端口管脚分端口名使用模块信号对应FPGA管脚说明CLK数字信号源C13时钟为 1KHZKR04*4矩阵键盘 R0B6矩阵键盘行信号KR14*4矩阵键盘 R1A7KR24*4矩阵键盘 R2B7KR34*4矩阵键盘 R3A8KC04*4矩阵键盘 C0B8矩阵键盘列信号KC14*4矩阵键盘 C1A9配表KC24*4矩阵键盘C2B9矩阵键盘列信号KC34*4矩阵键盘C3E5A数码管模块 A段F13键值显示B数码管模块 B段F14C数码管模块C段F15D数码管模块 D段E15E数码管模块 E段F16F数码管模块 F段F17G数码管模块G段E18SA数码管模块 SEL0G18SB

8、数码管模块 SEL1G17SC数码管模块 SEL2G167、用下载电缆通过JTAG 口将对应的sof文件加载到FPGA中。观察实验 结果是否与自己的编程思想一致五、实验结果与现象以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号 源模块 的时钟选择为1KHz ,按动“模式”按键使单8字数码管显示“0”(参 考实验四),按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标 识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。 按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F” 键 值。/*工 程: 4x4 矩阵键盘日 期: 2011-08-3最后修

9、改:功 能:键盘说 明: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);reg 7:0dataout;reg 3:0col;reg 3:0key_board_val;*/*/分频部分开始/*/always (posedge clk_50M or negedge rst_n) if(!rst_n)cnt=0;elsecnt=cnt+1b1;wire

10、 key_clk=cnt19;/2A20/50M=21ms/*状态机部分 独热码编码*/*/reg 5:0current_state,next_state; / 现态和次态/*/复位/*/always (posedge key_clk or negedge rst_n) if(!rst_n)current_state=NO_KEY_PRESSED;elsecurrent_state=next_state;*/always * /(current_state) / 根据条件转移状态case (current_state)NO_KEY_PRESSED: / 没有键按下 if(row!=4hf) n

11、ext_state=SCAN_COL0;elsenext_state=NO_KEY_PRESSED;SCAN_COL0: / 扫描第 0 列 if(row!=4hf) next_state=KEY_PRESSED;elsenext_state=SCAN_COL1;SCAN_COL1: /扫描第 1 列if(row!=4hf) next_state=KEY_PRESSED;elsenext_state=SCAN_COL2;SCAN_COL2: /扫描第 2 列if(row!=4hf) next_state=KEY_PRESSED;elsenext_state=SCAN_COL3;SCAN_COL

12、3: /扫描第 3 列if(row!=4hf) next_state=KEY_PRESSED;elsenext_state=NO_KEY_PRESSED;KEY_PRESSED: /有按键按下if(row!=4hf) next_state=KEY_PRESSED;elsenext_state=NO_KEY_PRESSED;endcasereg key_pressed_flag; / 按键按下标志reg 3:0col_val; reg 3:0row_val;/列值/行值*/根据次态,给相应的寄存器赋值always (posedge key_clk or negedge rst_n)if(!rst

13、_n) / 复位begincol=4h0;key_pressed_flag=0;endelsecase (next_state)NO_KEY_PRESSED:begincol=4h0;endSCAN_COL0: col=4b1110;SCAN_COL1: col=4b1101;SCAN_COL2: col=4b1011;SCAN_COL3: col=4b0111;KEY_PRESSED: begin col_val=col; / 扫描第 0 列/ 扫描第 1 列/ 扫描第 2 列/扫描第 3 列/有按键按下锁存列值key_pressed_flag=0;row_val=row; / 锁存行值ke

14、y_pressed_flag=1;/ 置键盘按下标endendcase*/*/*always (posedge key_clk or negedge rst_n)if(!rst_n)key_board_val=4h0;elseif(key_pressed_flag)case(col_val,row_val)8b11101110 : key_board_val = 4h0;8b11101101 : key_board_val = 4h4;8b11101011 : key_board_val = 4h8;8b11100111 : key_board_val = 4hC;8b11011110 : k

15、ey_board_val = 4h1;8b11011101 : key_board_val = 4h5;8b11011011 : key_board_val = 4h9;8b11010111 : key_board_val = 4hD;8b10111110 : key_board_val = 4h2;8b10111101 : key_board_val = 4h6;8b10111011 : key_board_val = 4hA;8b10110111 : key_board_val = 4hE;8b01111110 : key_board_val = 4h3;8b01111101 : key_

16、board_val = 4h7;8b01111011 : key_board_val = 4hB;8b01110111 : key_board_val = 4hF;endcase*/*/always * /(key_board_val) begin case(key_board_val)4h0:dataout=8b11000000;/04h1:dataout=8b11111001;/14h2:dataout=8b10100100;/24h3:dataout=8b10110000;/34h4:dataout=8b10011001;/44h5:dataout=8b10010010;/54h6:dataout=8b10000010;/64h7:dataout=8b11111000;/74h8:dataout=8b10000000;/84h9:dataout=8b10010000;/94hAdataout=8b10001000;/a4hBdataout=8b10000011;/b4hCdataout=8b11000110;/c4hDdataout=8b10100001;/d4hEdataout=8b10000110;/e4hF:dataout=8b10001110;/fendcaseend*/ 键盘值转换为数码管显示结束*/endmodule

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1