矩阵键盘相比独立键盘,其实就是起到节约IO口的作用,尤其在需要多个按键的时候。原理图(摘自其他地方):

比如0键,没按下时,ROW0因为上拉而为高电平。当0按下时,如果此时COL0为低电平,则ROW0为低电平。因此矩阵键盘就是要让几列(或行)轮流置零,并检测行(或列)的电平高低,从而确定某一按键是否按下。这就是扫描过程。

以下是VHDL代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity matrix is

port(clk: in std_logic;

row:  in std_logic_vector(3 downto 0);

col: out std_logic_vector(3 downto 0);

keyout: out std_logic_vector(3 downto 0);

flag: out std_logic);

end matrix;

architecture behave of matrix is

signal colreg: std_logic_vector(3 downto 0);

signal con: std_logic_vector(7 downto 0);

signal cnt: std_logic_vector(15 downto 0);

signal clkreg: std_logic;

begin

--分频,在1~10KHZ左右的时钟进行键盘扫描--

process(clk)

begin

if clk'event and clk = '1' then

if cnt = "1100001101001111" then

cnt<="0000000000000000";

clkreg<='0';

else if cnt = "0110000110100111" then

cnt<=cnt+"0000000000000001";

clkreg<='1';

else

cnt<=cnt+"0000000000000001";

end if;

end if;

end process;

--产生列扫描信号--

process(clkreg)

begin

if clkreg'event and clkreg = '1' then

case colreg is

when "1110" => colreg<="1101";

when "1101" => colreg<="1011";

when "1011" => colreg<="0111";

when "0111" => colreg<="1110";

when others => colreg<="1110";

end case;

end if;

end process;

--对行信号和列信号进行组合--

col<=colreg;

con<= colreg & row;

--对组合的扫描信号进行判断,并输出按键指示信号以及编码--

process(clkreg)

begin

if clkreg'event and clkreg = '1' then

case con is

when "11101110" => keyout<="0000";flag<='1';

when "11011110" => keyout<="0001";flag<='1';

when "10111110" => keyout<="0010";flag<='1';

when "01111110" => keyout<="0011";flag<='1';

when "11101101" => keyout<="0100";flag<='1';

when "11011101" => keyout<="0101";flag<='1';

when "10111101" => keyout<="0110";flag<='1';

when "01111101" => keyout<="0111";flag<='1';

when "11101011" => keyout<="1000";flag<='1';

when "11011011" => keyout<="1001";flag<='1';

when "10111011" => keyout<="1010";flag<='1';

when "01111011" => keyout<="1011";flag<='1';

when "11100111" => keyout<="1100";flag<='1';

when "11010111" => keyout<="1101";flag<='1';

when "10110111" => keyout<="1110";flag<='1';

when "01110111" => keyout<="1111";flag<='1';

when "11101111" => flag<='0';

when "11011111" => flag<='0';

when "10111111" => flag<='0';

when "01111111" => flag<='0';

end case;

end if;

end process;

end behave;

VHDL实现矩阵键盘检测相关推荐

  1. 51单片机(五)独立键盘检测与矩阵键盘检测

    独立键盘检测与矩阵键盘检测 一.独立键盘检测 1.工作原理 2.举例 2.1 位定义 2.2 数码管显示 3.3 按键 2.4 中断服务函数 2.5 完整程序 二.矩阵键盘检测 1.工作原理 2.程序 ...

  2. 80C51单片机:5.独立键盘、矩阵键盘检测

    80C51单片机系列 80C51单片机 点亮第一个发光二极管,及流水灯案例 数码管显示及封装与消隐 中断.定时器 独立键盘.矩阵键盘检测 文章目录 80C51单片机系列 前言 独立键盘 独立键盘封装 ...

  3. proteus矩阵按键计算机,矩阵键盘检测Proteus仿真电路图这里将16个按键按照4*4排列...

    该按钮可以说是51单片机项目开发的重要组成部分,是51单片机IO端口输入的重要方式.我们可以通过按下按钮来控制微控制器执行相应的程序,以获得所需的效果. 51单片机的键输入主要有两种.一种是独立密钥. ...

  4. 使用状态机进行矩阵键盘检测

    写在前面   这篇blog分享一下前段时间学到的用状态机完成矩阵键盘扫描的方法.是从别的前辈那里学来的方法,出处由于参考的帖子和网站太多,已经忘记是参照哪里的写出来的了,如有侵权,请直接留言给我. 用 ...

  5. vba循环通过键盘某个按键按下退出循环_51单片机按键检测--独立按键与矩阵键盘...

    按键可以说是51单片机项目开发的一个重要组件了,它是作为51单片机IO口输入的一种重要方式.我们可以通过按键控制单片机执行相应的程序,得到我们想要得效果.51单片机的按键输入主要有两种,一种是独立按键 ...

  6. 矩阵键盘 多键组合 c语言,矩阵键盘的检测和独立按键有很大的区别

    描述 先说矩阵键盘,因为我写的组合键代码是在矩阵键盘的基础上写的,当然在独立按键上写组合键更简单一些.所以当你矩阵键盘的组合键会写的时候,你在独立按键上的组合键也就会写了. 矩阵键盘的检测和独立按键有 ...

  7. 51单片机的键盘检测原理

    一.独立键盘检测 1.按键的检测原理 单片机的I/O口既可以作为输出也可以作为输入使用,检测按键时用的是输入功能.把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一个高电平, ...

  8. 单片机——C51实验含Proteus仿真(独立键盘,矩阵键盘)

    文章仅为本人学习记录,如有引用部分会另加说明引用出处 矩阵键盘检测原理:(独立键盘的原理在代码注释中很详细) 线反法的原理为:首先使P1口的高四位输出高电平,P1口低四位输出低电平,这时键盘的行线被拉 ...

  9. 嵌入式开发—矩阵键盘原理及程序设计

    文章目录 一.前言 1.矩阵键盘是什么 2.矩阵键盘的应用场景 3.矩阵键盘的替代品 3.矩阵键盘的优缺点 二.矩阵键盘按键检测原理 1.逐行逐列扫描法 2.反线法 三.矩阵键盘按键检测程序实现 一. ...

  10. STC51入门笔记(郭天祥C语言)---第四节:键盘检测原理及应用实现

    声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 键盘分为编码键盘和非编码键盘.键盘上闭合键的 ...

最新文章

  1. Logback也爆漏洞了,总结下最近log相关的几个漏洞
  2. 计算机导论中的名词解释,计算机导论期末考试试题及答案
  3. awk输出最后一列的命令
  4. leetcood学习笔记-58-最后一个单词的长度
  5. JavaScript+ Canvas开发趣味小游戏《贪吃蛇》
  6. 前端ajax数据提交到服务器_详解前端如何让服务器主动向浏览器推送数据
  7. readyboost提升明显吗_主动降噪影响音质吗?为什么降噪耳机打开降噪后音质会有明显提升...
  8. 版权所有LIKEWING_柳我借地存个图学习一下
  9. jdbcUrl is required with driverClassName错误解决
  10. Android + Appium 自动化测试完整的环境配置及代码详解
  11. 03.Java语言基础
  12. android自定义view案例,Android自定义View,你摸的透透的了?
  13. [Aria2][Linux]宝塔面板Aria2安装和配置教程
  14. 阿里P6级别Java程序员月薪多少?阿里认证员工给出答案
  15. 超美的天环星轨动态引导页html官网源码下载
  16. python鼠标绘图_python opencv入门 鼠标绘图(4)
  17. SpringBoot项目入门,前端thymeleaf,后端Java,数据库Jpa+MySQL
  18. SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.21 SpringBoot 整合 ActiveMQ
  19. NS2 教學手冊 ( NS2 Learning Guide)
  20. linux下软件安装方法

热门文章

  1. python 二进制的数为啥带0b?,怎样去掉0b?
  2. 三、pandas_datareader金融数据
  3. 在jsp页面上直接打开pdf文档
  4. android provision
  5. 方舟仙境服务器什么时候修复,方舟生存进化官服多久删一次服务器
  6. C语言 一步步教你做一个带有图形界面的冒险小游戏
  7. 15亿美元!软银联合GungHo收购手游巨头Supercell
  8. 机器人的弊议论文_机器人的利弊议论文
  9. 目标检测---IoU计算公式
  10. 2018走出架构误区