VHDL实现矩阵键盘检测
矩阵键盘相比独立键盘,其实就是起到节约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实现矩阵键盘检测相关推荐
- 51单片机(五)独立键盘检测与矩阵键盘检测
独立键盘检测与矩阵键盘检测 一.独立键盘检测 1.工作原理 2.举例 2.1 位定义 2.2 数码管显示 3.3 按键 2.4 中断服务函数 2.5 完整程序 二.矩阵键盘检测 1.工作原理 2.程序 ...
- 80C51单片机:5.独立键盘、矩阵键盘检测
80C51单片机系列 80C51单片机 点亮第一个发光二极管,及流水灯案例 数码管显示及封装与消隐 中断.定时器 独立键盘.矩阵键盘检测 文章目录 80C51单片机系列 前言 独立键盘 独立键盘封装 ...
- proteus矩阵按键计算机,矩阵键盘检测Proteus仿真电路图这里将16个按键按照4*4排列...
该按钮可以说是51单片机项目开发的重要组成部分,是51单片机IO端口输入的重要方式.我们可以通过按下按钮来控制微控制器执行相应的程序,以获得所需的效果. 51单片机的键输入主要有两种.一种是独立密钥. ...
- 使用状态机进行矩阵键盘检测
写在前面 这篇blog分享一下前段时间学到的用状态机完成矩阵键盘扫描的方法.是从别的前辈那里学来的方法,出处由于参考的帖子和网站太多,已经忘记是参照哪里的写出来的了,如有侵权,请直接留言给我. 用 ...
- vba循环通过键盘某个按键按下退出循环_51单片机按键检测--独立按键与矩阵键盘...
按键可以说是51单片机项目开发的一个重要组件了,它是作为51单片机IO口输入的一种重要方式.我们可以通过按键控制单片机执行相应的程序,得到我们想要得效果.51单片机的按键输入主要有两种,一种是独立按键 ...
- 矩阵键盘 多键组合 c语言,矩阵键盘的检测和独立按键有很大的区别
描述 先说矩阵键盘,因为我写的组合键代码是在矩阵键盘的基础上写的,当然在独立按键上写组合键更简单一些.所以当你矩阵键盘的组合键会写的时候,你在独立按键上的组合键也就会写了. 矩阵键盘的检测和独立按键有 ...
- 51单片机的键盘检测原理
一.独立键盘检测 1.按键的检测原理 单片机的I/O口既可以作为输出也可以作为输入使用,检测按键时用的是输入功能.把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该I/O口赋一个高电平, ...
- 单片机——C51实验含Proteus仿真(独立键盘,矩阵键盘)
文章仅为本人学习记录,如有引用部分会另加说明引用出处 矩阵键盘检测原理:(独立键盘的原理在代码注释中很详细) 线反法的原理为:首先使P1口的高四位输出高电平,P1口低四位输出低电平,这时键盘的行线被拉 ...
- 嵌入式开发—矩阵键盘原理及程序设计
文章目录 一.前言 1.矩阵键盘是什么 2.矩阵键盘的应用场景 3.矩阵键盘的替代品 3.矩阵键盘的优缺点 二.矩阵键盘按键检测原理 1.逐行逐列扫描法 2.反线法 三.矩阵键盘按键检测程序实现 一. ...
- STC51入门笔记(郭天祥C语言)---第四节:键盘检测原理及应用实现
声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 键盘分为编码键盘和非编码键盘.键盘上闭合键的 ...
最新文章
- Logback也爆漏洞了,总结下最近log相关的几个漏洞
- 计算机导论中的名词解释,计算机导论期末考试试题及答案
- awk输出最后一列的命令
- leetcood学习笔记-58-最后一个单词的长度
- JavaScript+ Canvas开发趣味小游戏《贪吃蛇》
- 前端ajax数据提交到服务器_详解前端如何让服务器主动向浏览器推送数据
- readyboost提升明显吗_主动降噪影响音质吗?为什么降噪耳机打开降噪后音质会有明显提升...
- 版权所有LIKEWING_柳我借地存个图学习一下
- jdbcUrl is required with driverClassName错误解决
- Android + Appium 自动化测试完整的环境配置及代码详解
- 03.Java语言基础
- android自定义view案例,Android自定义View,你摸的透透的了?
- [Aria2][Linux]宝塔面板Aria2安装和配置教程
- 阿里P6级别Java程序员月薪多少?阿里认证员工给出答案
- 超美的天环星轨动态引导页html官网源码下载
- python鼠标绘图_python opencv入门 鼠标绘图(4)
- SpringBoot项目入门,前端thymeleaf,后端Java,数据库Jpa+MySQL
- SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.21 SpringBoot 整合 ActiveMQ
- NS2 教學手冊 ( NS2 Learning Guide)
- linux下软件安装方法