欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

这里第一部分的主要目标是设计一个键盘扫描程序,并读取4*4键盘上的键盘,并以0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F在7段数码管上显示出来。这里我们将用到开发板的键盘和数码管。本模块分为键盘扫描数码管显示两个部分。这两个部分非常的简单,这里我们合在一起设计。键盘扫描的其基本原理如下所示:

通过不断的扫描来完成键盘值的确认。注意这里四行和四列的交界初就是您实际中的16个按键,当您按下其中某个按键的时候,列信号y1,y2,y3,y4就会在对应的位置显示出来,比如你按下了第一列第二个按钮,那么就会在第二列的位置产生一个信号,又由于行信号x是一直在快速的扫描的,如果当第二行正好扫描过的时候,同时检测到列信号,这说明这个按钮按下了。这就是键盘扫描的基本原理。

数码管,这里,是7段数码管,其基本结构如下所示:

其一共有7个LED来表示一个数码管。

二、核心程序

/* 1. Wait buttons and identify key position: according to certain frequency with low level circulation scan lines Y3, Y0 - Monitor the status, once listed line judge a listed as low means have key is pressed, Stop scans and maintain the current state of lines, then read column line condition to get the current buttons are key code. 2. Wait buttons pop-up: detection to each column line all become the top flat after restarting the scanning process, waiting for the next buttons � */ module key_scanner(clk,rst,row,column,scan_key); input clk;
input rst;
input [3:0] column;//Column line
output[3:0] row;//lines
output[3:0] scan_key; reg[3:0]  row;
reg[3:0]  scan_key; // scan code registers
reg[31:0] cnt_scan;// scan frequency counter reg      sign;     //sign=1:stop scanning //                sign=0:restart scanning*/
reg      restart;  //               always@(posedge clk or negedge rst)
begin if(!rst) begin row<=4'b1110; cnt_scan<=0;  end
else begin if(sign==1'b0) begin restart<=0; cnt_scan<=cnt_scan+1; //if(cnt_scan==32'h0000ffff) // begin           row[3:1]<=row[2:0]; row[0]<=row[3];  //4 root lines circulation send out low level // cnt_scan<=0; //end end else if(sign==1'b1) begin row<=row; if(column==4'b1111) restart<=1;//Detect each column is high level end end
end always@(posedge clk or negedge rst)
begin if(!rst) begin scan_key<=0;    end
else begin if(restart) begin sign<=0; scan_key<=0; end else begin case(row)  //This case results testing where key press 4'b1110: case(column) 4'b1110: begin sign<=1; scan_key<=0; end 4'b1101: begin sign<=1; scan_key<=1; end 4'b1011: begin sign<=1; scan_key<=2; end 4'b0111: begin sign<=1; scan_key<=3; end endcase 4'b1101: case(column) 4'b1110: begin sign<=1; scan_key<=4; end 4'b1101: begin scan_key<=5; sign<=1; end 4'b1011: begin scan_key<=6; sign<=1; end 4'b0111: begin scan_key<=7; sign<=1; end endcase 4'b1011: case(column) 4'b1110: begin scan_key<=8; sign<=1; end 4'b1101: begin scan_key<=9; sign<=1; end 4'b1011: begin scan_key<=10; sign<=1; end 4'b0111: begin scan_key<=11; sign<=1; end endcase 4'b0111: case(column) 4'b1110: begin scan_key<=12; sign<=1; end 4'b1101: begin scan_key<=13; sign<=1; end 4'b1011: begin scan_key<=14; sign<=1; end 4'b0111: begin scan_key<=15; sign<=1; end endcase default: scan_key<=15; endcase end end
end endmodule

三、测试结果

其仿真结果如下所示:

注意col进行扫描的时候,data分别输出0,1,2,3等键盘值。

Clk

系统时钟

Rst

系统复位

Col

由键盘输入产生的列扫描信号

Data

键盘值

LED_display

7LED数值显示

Rows

行扫描信号

LED_select

数码管的选择

A02-37

基于FPGA的4x4矩阵键盘控制器verilog开发实现相关推荐

  1. 【FPGA,MPPT】基于FPGA的MPPT最大功率跟踪系统verilog开发

    1.软件版本 MATLAB2019a,ISE14.7 2.本算法理论知识 MPPT,我们采用的是 FPGA的设计结构如下: 这里, 第一,使用MATLAB模拟出光伏设备PV输出的电流和电压数据,尽量贴 ...

  2. m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序

    目录 1.算法描述 2.仿真效果预览 3.Verilog核心程序 4.完整FPGA 1.算法描述 整个模型的基本框图为 软件无线电是现代通信技术的重要研究领域和发展方向,目前发展迅速.快速发展的软件无 ...

  3. 【无线图传】基于FPGA的简易无线图像传输系统verilog开发,matlab辅助验证

    1.软件版本 MATLAB2015b 2.算法概述 整个系统的方案如下: 第一,使用matlab将图片信息,或者视频帧信息转换为串行电平信号

  4. proteus矩阵按键计算机,基于proteus的51单片机仿真实例八十二、4X4矩阵键盘应用实例...

    1.矩阵键盘的工作原理: 1)接口电路:在单片机系统中,当按键数量较多时,为了减少IO口的使用,通常将按键排列成矩阵型式,例如本例中的16个按键,被排列成了如下图所示的4X4矩阵方式.即由4根行线和4 ...

  5. Arduino与Proteus仿真实例-4x4矩阵键盘驱动仿真

    4x4矩阵键盘驱动仿真 键盘是广泛用于各种电子和嵌入式项目的输入设备. 它们用于以数字和字母的形式获取输入,并将其输入系统以进行进一步处理. 矩阵键盘由一组相互连接的按钮组成. 在本次实例中使用 4X ...

  6. 【STM32扫描4x4矩阵键盘模块】 4x4 matrix keypad interface

    [STM32扫描4x4矩阵键盘模块] 4x4 matrix keypad interface 4x4矩阵键盘模块 矩阵键盘是将多个按键排布成类似矩阵形式的键盘组.为了减少IO资源的占用,将键盘组的每一 ...

  7. 基于 FPGA 的以太网回环测试verilog实现UDP协议

    基于 FPGA 的以太网回环测试verilog实现UDP协议 verilog实现UDP协议: 该 设计使用 UDP 协议,首先通过串口助手接收 PC 发送的 UDP 数据包,然后提取其中的数据部分并使 ...

  8. 「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  9. 基于FPGA实现uart串口模块(Verilog)--------发送模块及整合

    基于FPGA实现uart串口模块(Verilog)--------发送模块及整合 当接收模块接收到数据后,需要重新发送形成回环验证模块正确性.思路和结束模块有一点点的小差异.接收模块最终输出的是一个并 ...

最新文章

  1. strace命令学习
  2. python读取图片属性_[Python图像处理]三.获取图像属性及通道处理
  3. converter 无法查询活动linux源计算机,【VMware】Converter迁移linux系统虚拟机
  4. 测试技巧–不编写测试
  5. 让 C#智能注释时允许换行
  6. DOS命令 format
  7. snmp,mrtg安装和配置(2) mrtg安装
  8. ubuntu16.04安装teamviewer12
  9. vue父组件变量传递子组件_Vue2.x中的父组件数据传递至子组件
  10. 软件是怎么控制硬件的?
  11. 深挖那些隐藏在Linux中的炫酷主题
  12. android常用地图坐标转换
  13. gpio_desc()的分析
  14. 金蝶显示服务器许可,金蝶K3服务器分配许可数已经全部使用,无法建立新的连接怎么办...
  15. php立方体相册源码,纯CSS实现3D的代码(正方体、动态立体图片册、平面的星空)...
  16. 深度学习应用在图像分割上的网络模型概述
  17. “转行做程序员”很难?这里有4个建议
  18. 魔方二代 php代码还原
  19. 3dsMax2022插件开发环境的搭建
  20. c语言电子秤原理,电子秤设计电路图汇总(六款模拟电路设计原理图详解)

热门文章

  1. 网上推广平台如何打造商家品牌形象?
  2. Oracle常用函数汇总记录
  3. ArcGIS之“检查几何”的内涵
  4. dataframe将某列的空值填充为12
  5. qchart 图表_实战PyQt5: 158-QChart图表之线条缩放显示
  6. Excel - 学习 - 笔记6: Excel 函数 - filter 函数
  7. Excel PowerQuery系列文章之API 数据获取-自定义函数使用
  8. no `server' JVM at `C:\Program Files\Java\jre6\bin\server\jvm.dll'解决方法
  9. 小米手机浏览器的input、textarea底被遮挡
  10. Golang梦网云短信对接