蓝桥杯单片机(三)矩阵按键

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

上章说了独立按键
蓝桥杯单片机(二)独立按键
这章说一下矩阵按键
蓝桥杯单片机矩阵键盘,蓝桥杯单片机,单片机,蓝桥杯,矩阵
所谓矩阵按键,就是每一个按键的两端都同时由单片机的IO口进行控制,如原理图所示,上图要想使用矩阵按键,就需要使用跳线帽将排针2引脚和1引脚连接在一起。
连接好了以后,这四排四列就可以看成四列独立按键,也可以看成四排独立按键,假设现在把它当成四列独立按键,使用时只需要依次每一列进行独立按键检测就行了,首先将P37,P36,P35,P34也就是P3高四位选择一位置0,比如检测S4,S5,S6,S7这一列时,只需要

P3 &=0X7F;

蓝桥杯单片机矩阵键盘,蓝桥杯单片机,单片机,蓝桥杯,矩阵

这样就相当于将S4-S7一端接地,另外一端接单片机IO口了
但是,如上图,由于在蓝桥杯单片机这款开发板上P37,P36是接到了单片机的P42和P44,所以要使用

P3 &=0X7F;P42=1;P44=0;

接下来就是矩阵按键的代码:

void Jkey_scan(void)
{
	unsigned char i,key;
	for(i=0x80;i>8;i >>=1)
	{
	//每次循环选中一列按键
		if(i==0x80){P44=0;P42=1;P3=~i;}
		else if(i==0x40){P44=1;P42=0;P3=~i;}
		else {P44=1;P42=1;P3=~i;}
	//使用key保存P3口的状态	
		if(i==0x80){key=P3;key&=0x7f;}
		else if(i==0x40){key=P3;key&=0xbf;}
		else {key=P3;}
	//被按下就在case语句中选中任务	
		if((key&0x0f)!=0x0f)
		{
			delay5ms();
			if((key&0x0f)!=0x0f)
			{
				switch(key)
				{
					case 0x7e:break;
					case 0x7d:break;
					case 0x7b:break;
					case 0x77:break;
				
					case 0xbe:break;
					case 0xbd:break;
					case 0xbb:break;
					case 0xb7:break;	

					case 0xde:break;
					case 0xdd:break;
					case 0xdb:break;
					case 0xd7:break;

					case 0xee:break;
					case 0xed:break;
					case 0xeb:break;
					case 0xe7:break;						
				}
			}
			//松手检测,没松手就一直单片机循环
			while((key&0x0f)!=0x0f)
			{
				key=P3;
			}
		}
	}
}

首先定义一个for循环,i每次取值为0X80,0X40,0X20,0X10,0X08就大于8了就退出循环了,首先当i=0X80时,先使用if语句选中对应第一列按键,也就是P44=0;P42=1;P3=~i;,假设现在第一列第一个按键被按下,P3=0X77,然后将P3的值给key,key&0X7F=0X77,这样按键状态就由key保存了,然后判断key&0X0F是否等于0X0F判断由按键是否被按下,被按下先用5ms延时消抖,然后再判断使用switch进行任务选择。最后while循环进行松手检测,不松手就不会进行下一次按键扫描。
然后我这里也给出一个矩阵按键控制LED的实例:

#include <stc15f2k60s2.h>

void Jkey_scan(void);
void delay5ms(void);

void main(void)
{
	P2=0XA0;P0=0X00;P2=0X80;P0&=0XFF;
	while(1)
	{
		Jkey_scan();
	}
}

void Jkey_scan(void)
{
	unsigned char i,key;
	for(i=0x80;i>8;i >>=1)
	{
		if(i==0x80){P44=0;P42=1;P3=~i;}
		else if(i==0x40){P44=1;P42=0;P3=~i;}
		else {P44=1;P42=1;P3=~i;}
		if(i==0x80){key=P3;key&=0x7f;}
		else if(i==0x40){key=P3;key&=0xbf;}
		else {key=P3;}
		if((key&0x0f)!=0x0f)
		{
			delay5ms();
			if((key&0x0f)!=0x0f)
			{
				switch(key)
				{
					case 0x7e:P2=0X80;P0&=0XFE;break;
					case 0x7d:P2=0X80;P0&=0XFD;break;
					case 0x7b:P2=0X80;P0&=0XFB;break;
					case 0x77:P2=0X80;P0&=0XF7;break;
				
					case 0xbe:P2=0X80;P0&=0XEF;break;
					case 0xbd:P2=0X80;P0&=0XDF;break;
					case 0xbb:P2=0X80;P0&=0XBF;break;
					case 0xb7:P2=0X80;P0&=0X7F;break;	

					case 0xde:P2=0X80;P0|=0X01;break;
					case 0xdd:P2=0X80;P0|=0X02;break;
					case 0xdb:P2=0X80;P0|=0X04;break;
					case 0xd7:P2=0X80;P0|=0X08;break;

					case 0xee:P2=0X80;P0|=0X10;break;
					case 0xed:P2=0X80;P0|=0X20;break;
					case 0xeb:P2=0X80;P0|=0X40;break;
					case 0xe7:P2=0X80;P0|=0X80;break;						
				}
			}
			while((key&0x0f)!=0x0f)
			{
				key=P3;
			}
		}
	}
}

void delay5ms(void)		//@11.0592MHz
{
	unsigned char i, j;

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

代码作用就是前两列按键控制LED亮,后两列按键控制指定LED熄灭。
效果如下:

蓝桥杯单片机矩阵键盘,蓝桥杯单片机,单片机,蓝桥杯,矩阵文章来源地址https://www.toymoban.com/news/detail-668680.html

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

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

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

相关文章

  • 蓝桥杯单片机比赛矩阵按键模块(原理函数代码详解)

    原件介绍 矩阵按键是由16个独立按键组成的,所以它的工作原理与独立按键相同。 独立按键的工作原理就是将 按键的信号转换成电脑可以理解的信号,并且传输给处理器 。 独立按键的内部结构是一个弹性贴片,在按下松手时会有抖动,抖动的时间大概有20ms,如果不进行处

    2024年02月07日
    浏览(39)
  • 蓝桥杯单片机开发及应用-基础模块06-矩阵键盘

    使用到的74HC138译码器、74HC573锁存器和数码管模块等,在前面的基础模块的介绍中都有简单介绍,这里就不再介绍了。 蓝桥杯板子上按键部分的右下角有个J5模块,用跳帽来进行独立按键和矩阵键盘之间的切换。此次使用矩阵键盘的时候需要把跳帽接到1~2引脚。 矩阵键盘就是

    2024年02月03日
    浏览(43)
  • 关于蓝桥杯单片机 官方例程 矩阵按键 消抖原理 ‘s 解释

    关于蓝桥杯单片机官方例程矩阵按键消抖原理解释 芯片:IAP15F2K60S 蓝桥杯原书41页官方例程 最开始我以为这款开发板有硬件消抖,对于下面这部分代码一直当作固定格式写,最近回看,发现其中另有“玄机”。 这里默认大家看过并且会了 = = 之前的按键扫描例程了 众所周知

    2023年04月08日
    浏览(37)
  • 【蓝桥杯_学习_51单片机】矩阵键盘 状态机法

    一.基础知识 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态 矩阵键盘和独立按键一样,也需要进行消抖处理! 于此补充一下抖动的含义: 对于机械开关,当机械触点断开、闭合时,

    2023年04月09日
    浏览(54)
  • C51单片机-按下K0至K15,显示按键标号(4x4矩阵键盘电路,1个数码管)

    keil uVision4界面: proteus仿真界面:

    2024年02月04日
    浏览(48)
  • 单片机——矩阵按键模块

    主要目的 学会按键扫描 1.延时函数 延时函数部分详见链接: 单片机控制一盏灯的亮与灭程序解释 这个程序里面的延时函数的目的是按键消抖。 2.按键扫描模块 这是本次实验的重点,将详细介绍。 先来观察矩阵按键模块的连接 总共8个口。 先实现关于列的扫描,设置初始值(

    2024年02月08日
    浏览(39)
  • 【51单片机】矩阵按键

    参考:普中 51 单片机开发攻略 main.c 只有第一个数码管量,并且按第几个键,就显示第几(0-F)。

    2024年01月21日
    浏览(61)
  • 51单片机 | 矩阵按键实验

      开发板上板载了一个 4*4 矩阵键盘。本节所要实现的功能是:通过开发板上的矩阵键盘控制静态数码管显示对应的键值 0-F 。   独立按键与单片机连接时,每一个按键都需要单片机的一个 I/O 口,若某单片机系统需较多按键,如果用独立按键便会占用过多的 I/O 口资源。

    2024年02月05日
    浏览(50)
  • 五、51单片机控制矩阵按键

    1.1、矩阵按键原理分析 这里矩阵按键为4*4的矩阵按键。 (1)矩阵按键横向和纵向分割。 (2)按键两端分别接不同的IO引脚。 (3)按键物理作用不变:按下按键两端接通,弹起按键两端断开。 1.2、矩阵按键的工作过程 JP4接P3端口,JP4_8接P3^7...JP4_1接P3^0。 (1)IO端口(P3)先输出0x0f,按键列

    2023年04月20日
    浏览(63)
  • 蓝桥杯单片机类按键代码讲解和考点探究(三行代码消抖讲解)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 CON3中将1,2用跳线帽短接是矩阵键盘,可用范围为S4到S19。将2,3短接则是独立按键,可用范围是S4到S7. 按键原理讲解 单取一个按键,一端接到GND,一段接到单片机的IO口上(以下称I口,输入口)。当按

    2023年04月20日
    浏览(71)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包