六、矩阵键盘的扫描原理与基本应用

这篇具有很好参考价值的文章主要介绍了六、矩阵键盘的扫描原理与基本应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、矩阵键盘的基本操作

矩阵键盘扫描思想:

代码:


矩阵键盘:J5跳线帽接1、2引脚

1、矩阵键盘的基本操作

S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中,发现有按键触发信号后(不做去抖动),待按键松开后,在数码管的第一位显示相应数字:从左至右,从上到下,依次显示0~F

六、矩阵键盘的扫描原理与基本应用

矩阵键盘扫描思想:

六、矩阵键盘的扫描原理与基本应用

 文章来源地址https://www.toymoban.com/news/detail-463884.html

与独立按键不同的是,按键的两个引脚都分别连接的单片机的I/O端口,一个作为行信号,另外一个作为列信号

六、矩阵键盘的扫描原理与基本应用

  在上面的矩阵键盘中,要识别出黄色按键的按下状态,应该怎么做呢?

 对与矩阵键盘,我们只能逐行扫描,然后读取列的状态信号。如果R3行输出低电平,那么黄色按键如果有按下动作的话,那读取C2列信号也应该为低电平,而该行上其他没有按下动作的按键的列信号则为高电平。因此,我们可以得到矩阵键盘的基本扫描步骤:
    <1> R1输出电平,R2、R3、R4输出电平,逐个读取C1、C2、C3、C4判断列信号,如果             都为高电平则R1行上没有按键按下。
    <2> R2输出电平,R1、R3、R4输出电平,逐个读取C1、C2、C3、C4判断列信号。
    <3> R3输出电平,R1、R2、R4输出电平,发现C2列信号为低电平,那么可以判断得R3行             的C2列的按键有按下动作。
    <4> R4输出电平,R1、R3、R4输出电平,逐个读取C1、C2、C3、C4判断列信号。


    如此循环往复,扫描的按键的我们知道有按键按下动作,那么又怎么知道是哪一个按键按下呢?这时,我们最好定义一个键值全局变量,给矩阵行列上的每一个的按键编一个唯一的号码。当扫描的某一行某一列的按键动作后,把对应的编号复制给键值变量,这样我们判断这个键值,就知道是哪个按键有触发动作了。

代码:

#include "reg52.h"

sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;

sbit R1 = P3^0;
sbit R2 = P3^1;
sbit R3 = P3^2;
sbit R4 = P3^3;//行

sfr P4 = 0xc0;//头文件中无P4,定义内存地址

sbit C1 = P4^4;
sbit C2 = P4^2;
sbit C3 = P3^5;
sbit C4 = P3^4;//列

unsigned char key_num;
unsigned char code SMG_duanma[18] = {
	//  0   1    2    3    4    5    6    7
		0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
	//  8   9    A    B    C    D    E    F
		0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
	//  -   .
		0xbf,0x7f};  //共阳数码管

void InitHC138(unsigned char n)//选Y
{
	switch (n)
	{
		case 4://LED
			HC138_C = 1;
			HC138_B = 0;
			HC138_A = 0;
		break;
		case 5://蜂鸣器与继电器
			HC138_C = 1;
			HC138_B = 0;
			HC138_A = 1;
		break;
		case 6://数码管位置
			HC138_C = 1;
			HC138_B = 1;
			HC138_A = 0;
		break;
		case 7://数码管段码
			HC138_C = 1;
			HC138_B = 1;
			HC138_A = 1;
		break;
	}
}

void SMG_Bit(unsigned char dat)//数码管位置(只在第一位)、数据
{
	InitHC138(6);
	P0 = 0x01;
	InitHC138(7);
	P0 = dat;
}

void ScanKeys()
{
//扫描第一行	
	R1 = 0; R2 = R3 = R4 = 1;
	C1 = C2 = C3 = C4 = 1;
	if (C1 == 0)
	{
		while(!C1);//松开后
		key_num = 0;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C2 == 0)
	{
		while(!C2);
		key_num = 1;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C3 == 0)
	{
		while(!C3);
		key_num = 2;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C4 == 0)
	{
		while(!C4);
		key_num = 3;
		SMG_Bit(SMG_duanma[key_num]);
	}
	
//扫描第二行
	R2 = 0; R1 = R3 = R4 = 1;
	C1 = C2 = C3 = C4 = 1;
	if (C1 == 0)
	{
		while (!C1);
		key_num = 4;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C2 == 0)
	{
		while(!C2);
		key_num = 5;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C3 == 0)
	{
		while(!C3);
		key_num = 6;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C4 == 0)
	{
		while(!C4);
		key_num = 7;
		SMG_Bit(SMG_duanma[key_num]);
	}
	
//扫描第三行
	R3 = 0; R1 = R2 = R4 = 1;
	C1 = C2 = C3 = C4 = 1;
	if (C1 == 0)
	{
		while(!C1);
		key_num = 8;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C2 == 0)
	{
		while(!C2);
		key_num = 9;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C3 == 0)
	{
		while(!C3);
		key_num = 10;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C4 == 0)
	{
		while(!C4);
		key_num = 11;
		SMG_Bit(SMG_duanma[key_num]);
	}
	
//扫描第四行
	R4 = 0; R1 = R2 = R3 = 1;
	C1 = C2 = C3 = C4 = 1;
	if (C1 == 0)
	{
		while(!C1);
		key_num = 12;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C2 == 0)
	{
		while(!C2);
		key_num = 13;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C3 == 0)
	{
		while(!C3);
		key_num = 14;
		SMG_Bit(SMG_duanma[key_num]);
	}
	else if (C4 == 0)
	{
		while(!C4);
		key_num = 15;
		SMG_Bit(SMG_duanma[key_num]);
	}
}

void main()
{
	while(1)
	{
		ScanKeys();
	}
}

 

 

到了这里,关于六、矩阵键盘的扫描原理与基本应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VHDL矩阵键盘扫描数码管显示

    1.打开Quarteus,直接点击New Project izard. 2.选择存放路径和工程名后一直Next,直到出现芯片选择页面(这里需要特别注意,这个软件不支持中文,所以工程存放路径一定不能含有中文,否则会报错) 3.选择对应的芯片,我这里选择EP4CE40F23C8,然后Next,最后Finish 4.完成工程的创建

    2023年04月24日
    浏览(64)
  • 汇编语言:矩阵式键盘扫描实验

    利用4x4矩阵键盘和一个LED数码管构成简单的输入显示系统,实现对键盘的扫描和LED数码管的显示键盘按下键的键号。共有4x4个按键和一个数码管,16个按键的键号分别对应十六进制数字:0~F。单机相应按键,数码管就会显示相应的数字。 数码管:这里采用共阳极数码管 CA为共

    2024年02月11日
    浏览(85)
  • C51使用中断来扫描矩阵键盘

    目录 一、矩阵键盘是什么? 二、使用步骤 1.Porteus仿真图 2.中断扫描代码 总结 矩阵键盘由行线与列线组成,常用于按键较多的场景,比较节省IO口. 仿真图如下:   仿真实验中使用了AT89C51芯片,共阳极数码管,74LS21等元件。数码管负责显示按键值,在中断查询中将行线P1.0

    2024年02月03日
    浏览(58)
  • stm32 4*4矩阵键盘 中断扫描

    找了很多4*4矩阵键盘的资料和代码,很多都用的是扫描的方式,还有一些看不太明白。我理想中的方式是中断,所以自己写了一个。 这是某宝上的实物和电路图  用的GPIO口是B0、1、3、4、5、6、7、8  B0、1、3、4上拉输入,B5、6、7、8推挽输出 从右到左为第1234列,从上到下为

    2024年02月06日
    浏览(34)
  • 51单片机矩阵键盘扫描及使用方法

             矩阵键盘 ,也称矩阵按键,是为了节约单片机IO口占用所引入的一种外设。 (图片截取至普中A2开发板原理图) (图片截取至普中A2开发板实物图)         我们知道,一个独立按键需要1个IO口。但是如果我们需要大量的按键,则需要大量的IO口,但是单片机

    2024年02月02日
    浏览(38)
  • 【STM32扫描4x4矩阵键盘模块】 4x4 matrix keypad interface

    矩阵键盘是将多个按键排布成类似矩阵形式的键盘组。为了减少IO资源的占用,将键盘组的每一行和每一列接入到GPIO。如下图的薄膜型键盘模块,第一个键盘组是3行x4列,所以共使用了3+4=7个GPIO口,即用7个GPIO表现了12个按键的状态;第二个键盘组是4行x4列,共使用了4+4=8个

    2024年01月18日
    浏览(53)
  • 矩阵键盘原理

    端口PC分配给矩阵键盘,行线连接PC4至PC7,列线连接PC0至PC3。 还有一些 节省GPIO的方法,比如采用“并入串出”类芯片进行电路调整,把键盘行列情况变成串行数字脉冲信号,再由GPI0取回串行数据经过移位后得到并行数据,或者采用专用的键盘扩展芯片扩 展按键资源. 1.配置

    2024年02月13日
    浏览(33)
  • 强大的JTAG边界扫描(1):基本原理介绍

    我是怎么了解到边界扫描的呢? 这就要从我淘到一块FPGA板卡的事情说起了。 前段时间我在某二手平台上淘了一块FPGA板子,它长这样: 板子的整体尺寸很小巧,和手掌差不多大,外设也很简单: 12v供电,带一个散热器 FPGA芯片是Xilinx XC7K325T,FFG676封装,芯片等级2I,生产日期

    2024年02月09日
    浏览(42)
  • 基于FPGA的 矩阵键盘按键识别 【原理+源码】

    目录 引言 原理阐述 实现方法 源码分享 板级调试演示 最近了解了矩阵键盘扫描的原理,动手实现了一下,在这里做一个简单的总结。 矩阵键盘典型电路: FPGA的应用电路: 其中,行信号为FPGA输入信号,列信号为FPGA输出信号。  原理解释:  起始状态,FPGA的列信号输出 全

    2024年01月22日
    浏览(38)
  • 嵌入式开发—矩阵键盘原理及程序设计

    矩阵键盘很好理解,就是排布类似矩阵的按键,大家可以想一下点阵的外形。大概长下面这个样子 矩阵键盘一般应用在需要用到大量按键的场景,主要是为了节省按键使用的IO资源。比如一个项目需要用到16个按键,如果使用普通的独立按键,每一个按键都需要一个IO,16个按

    2024年02月05日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包