五、51单片机控制矩阵按键

这篇具有很好参考价值的文章主要介绍了五、51单片机控制矩阵按键。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、矩阵按键

1.1、矩阵按键原理分析

这里矩阵按键为4*4的矩阵按键。

(1)矩阵按键横向和纵向分割。

(2)按键两端分别接不同的IO引脚。

(3)按键物理作用不变:按下按键两端接通,弹起按键两端断开。

1.2、矩阵按键的工作过程

JP4接P3端口,JP4_8接P3^7...JP4_1接P3^0。

(1)IO端口(P3)先输出0x0f,按键列的一端为高电平,行的一端为低电平。

(2)读取P3端口引脚,若读到值不是0x0f,则说明有按键按下,判断是哪一列。

(3)P3端口再输出0xf0,按键行一端为高电平,列一端为低电平。

(4)读取P3端口引脚,若读到值不是0xf0,则说明有按键按下,判断是哪一行。

(5)结合两次行和列的位置,计算判断是哪个按键按下。

2、原理图

一般情况下JP4端口的1234或5678需要接一个电阻,不然两个IO口导通会导致短路,电流过大,这里不接是因为单片机IO口接了上拉电阻。

五、51单片机控制矩阵按键

五、51单片机控制矩阵按键

矩阵键盘特点:

优点:矩阵键盘省IO口。

缺点:(1)不能同时按下多个按键,例如同时按下两个按键(不再同一行,不在同一列),会检测到两个行,两个列,对应四个按键,而无法判断是其中的哪两个。(2)不能采用中断检测按键。

3、示例程序

上图中的S1~S16按键,对应1~16的数值。通过8颗LED灯,LED1~LED8表示8位二进制数,亮为1,灭为0,通过LED灯亮灭显示显示按下按键的数值。LDE1为低位,LED8为高位。文章来源地址https://www.toymoban.com/news/detail-419012.html

#include <reg52.h>


/*实现功能
 *S1~S16按键,对应1~16的数值。
 *LED1~LED8表示8位二进制数,亮为1,灭为0。
 *通过LED灯亮灭显示显示按下按键的数值。
 *LDE1为低位,LED8为高位。
 */

/*硬件连接
 *LED接P0端口,LED1接P0^0、LED2接P0^1...LED8接P0^7。
 *矩阵按键接P3端口,JP4_8接P3^7...JP4_1接P3^0。
 *LED灯为共阴极,高电平点亮。
 */
#define LED P0
#define KEY P3


/*函数声明*/
unsigned char GetKeyValue();   /*获取键值*/ 
void Delay15ms();


void main(void)
{
	unsigned char KeyValue = 0;
	LED = 0x00; 			/*默认所有LED灯熄灭*/
	
	while(1)
	{
		KeyValue = GetKeyValue();
		if(KeyValue != 0)
            LED = KeyValue;
	}
}


unsigned char GetKeyValue()
{
	unsigned char hang = 0;
	unsigned char lie = 0;
	unsigned char KeyValue = 0;
	
	/*检测列*/
	KEY = 0x0f;  
	if(KEY != 0x0f)      /*说明有按键按下*/
	{
		Delay15ms();     /*消抖,等待电平稳定*/							
		switch(KEY)
		{
			case 0x0e: lie = 4; break;    /*第4列有按键按下*/	
			case 0x0d: lie = 3; break;    /*第3列有按键按下*/
			case 0x0b: lie = 2; break;    /*第2列有按键按下*/	
			case 0x07: lie = 1; break;    /*第1列有按键按下*/	
			default:   lie = 0; break;
		}
	}
		
	/*检测行*/
	KEY = 0xf0;          /*从IO口输出*/
	if(KEY != 0xf0)      /*读IO口,说明有按键按下*/
	{
		switch(KEY)
		{
			case 0x70: hang = 1; break;    /*第1行有按键按下*/
			case 0xb0: hang = 2; break;    /*第2列有按键按下*/
			case 0xd0: hang = 3; break;    /*第3列有按键按下*/
			case 0xe0: hang = 4; break;    /*第4列有按键按下*/	
			default:   hang = 0; break;		
		}
	}
		
	if(hang !=0 && lie !=0)
	{
		KeyValue = (hang-1)*4 +lie;
		return KeyValue;
	}
	
	return 0;     /*表示没有程序按下或有多个按键同时按下*/
}


void Delay15ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 30;
	j = 43;
	do
	{
		while (--j);
	} while (--i);
}









到了这里,关于五、51单片机控制矩阵按键的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 51单片机:数码管和矩阵按键

    目录 一:动态数码管模块 1:介绍  2:共阴极和共阳极 A:共阴极 B:共阳极 C:转化表  3:74HC138译码器 4:74HC138译码器控制动态数码管(位选) 5:数码管显示完整代码 6:74HC573锁存器 A:基本点 B:原理图介绍 c:74HC573控制数码管代码 二:矩阵按键模块 1:介绍 2:原理图  3:矩阵按键代码       

    2024年02月15日
    浏览(46)
  • 51单片机-按键控制led灯

    1.开发环境介绍 使用C语言,环境为keil Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用. 什么是单片机 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具

    2024年02月09日
    浏览(45)
  • 51单片机按键控制LED亮灭

    通过单片机按键控制LED亮灭与传统电路的物理逻辑不同,在物理逻辑中开关控制电路的通断来控制LED的亮灭,而通过单片机完成该项目至于要不断地读取按键所连接IO口的电平来判断对LED连接的IO口输出的电平即可。 原理图如下:  根据原理图,我们可以发现按键按下时P2.1口

    2023年04月18日
    浏览(49)
  • 51单片机按键控制流水灯

    1独立按键的原理图 按键所对应的引脚为P3的0、1、2、3引脚口,并且这里总共有四个独立按键,它们公共的一段都接到了 GND 电源的负极。这样我们就知道按键上电的默认电平为高电平。所以我们只需要控制按键按下时给一个低电平0,不按下时默认高电平1就行。  2按键控制

    2024年02月11日
    浏览(52)
  • 嵌入式51单片机04-矩阵按键系列

    一、矩阵按键基础知识 矩阵按键工作原理 : 逐行扫描 :通过高四位轮流输出低电平来对矩阵键盘进行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过判断低四位数据中哪一位为零来判断哪一个按键被按下。 逐列扫描 :通过低四位轮流输出低电平来

    2024年02月07日
    浏览(60)
  • 51单片机——矩阵按键实验,小白讲解,相互学习

    矩阵按键介绍:         独立按键与单片机连接时,每一个按键都需要单片机的一个I/O 口,若某单片机系统需较多按键,如果用独立按键便会占用过多的I/O 口资源.单片机系统中I/O 口资源往往比较宝贵,当用到多个按键时为了减少I/O 口引脚,引入了矩阵按键。       

    2024年02月12日
    浏览(44)
  • 【51单片机】矩阵按键实现数码管显示

    闲的没事看一看玩一玩········· 矩阵按键 数码管是一种导体发光器件,其基本单元是发光二极管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管 共阴极数码管是指将所有发光二极管的阴极接到一起形成共阴极的数码管,共阴极的数码管在应用时将公共

    2024年02月02日
    浏览(57)
  • 51单片机设计16个按键的矩阵键盘

    首先如图所示导入各个元器件,并连线。 因为P3口连接着矩阵键盘,所以上来要先付个初值,从高位到低位H0,H1,H2,H3,L0,L1,L2,L3的值是11110000,高位全是1,低位全是0,十六进制就是0xF0,也就是P3=0xF0。如果有按键按下了,肯定就不是这个值了。 比如说: 第一行789+中的任何一个按

    2024年02月05日
    浏览(42)
  • 51单片机(三)独立按键控制LED

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月08日
    浏览(38)
  • 51单片机:独立按键控制LED灯

    1. 独立按键控制LED灯状态          亮灭实验完成后,就可以控制LED状态,首先我们知道由于机械结构的弹性作用,按键开关在闭合时不会一瞬间稳定的接通,在断开时,也不会一下子断开。所以就得需要程序消抖,也就是适当延时,程序如下 #include\\\"reg52.h\\\" //定义LED灯 sbit

    2023年04月09日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包