蓝桥杯单片机必备知识—–(6)矩阵按键

蓝桥杯单片机必备知识—–(6)矩阵按键

蓝桥杯单片机必备知识—–(6)矩阵按键

思路: 就是线反转法

线反转法:将控制行的线置高控制列的线置地,如果哪个低,则为哪一行有按键按下;然后将控制列的线置高控制行的线置地,如果哪个低,则为哪一列有按键按下。如此之后就可以确定到底是哪个按键按下。
在这里插入图片描述

注:跳线帽设置为KBD!!!!!

扫描键盘函数

void read_key()
{
   
	static unsigned char hang;
	static unsigned char state = 0;
	
	switch(state)
	{
   
		case 0:	
		{
   
			P3 = 0x0f;P42 = 0;P44 = 0; 
			if(P3 != 0x0f) state = 1;
		}break;
		case 1:
		{
   
			P3 = 0x0f; P42 = 0; P44 = 0;	//列置低,行置高
			if(P3 != 0x0f) 		//判断行
			{
   
				if(P33 == 0) hang = 1;
				if(P32 == 0) hang = 2;
				if(P31 == 0) hang = 3;
				if(P30 == 0) hang = 4;
				switch(hang)
				{
   
					case 1:
					{
   
						P3 = 0xf0;P42 = 1;P44 = 1;				//行置低,列置高
						if(P44 == 0){
    s4++;state = 2;hang = 0;}
						if(P42 == 0){
    s8++;state = 2;hang = 0;}
						if(P35 == 0){
   s12++;state = 2;hang = 0;}
						if(P34 == 0){
    s16++;state = 2;hang = 0;}
					}break;
					case 2:
					{
   
						P3 = 0xf0;P42 = 1;P44 = 1;
						if(P44 == 0){
    s5++;state = 2;hang = 0;}
						if(P42 == 0){
    s9++;state = 2;hang = 0;}
						if(P35 == 0){
   s13++;state = 2;hang = 0;}
						if(P34 == 0){
    s17++;state = 2;hang = 0;}
					}break;
					case 3:
					{
   
						P3 = 0xf0;P42 = 1;P44 = 1;
						if(P44 == 0){
    s6++;state = 2;hang = 0;}
						if(P42 == 0){
    s10++;state = 2;hang = 0;}
						if(P35 == 0){
   s14++;state = 2;hang = 0;}
						if(P34 == 0){
    s18++;state = 2;hang = 0;}
					}break;
					case 4:
					{
   
						P3 = 0xf0;P42 = 1;P44 = 1;
						if(P44 == 0){
    s7++;state = 2;hang = 0;}
						if(P42 == 0){
    s11++;state = 2;hang = 0;}
						if(P35 == 0){
   s15++;state = 2;hang = 0;}
						if(P34 == 0){
    s19++;state = 2;hang = 0;}
					}break;
				}
			}
			else state = 0;
		}break;
		case 2:		//判断按键是否松开
		{
   
			P3 = 0x0f;P42 = 0;P44 = 0;
			if(P3 == 0x0f) state = 0;
		}break;
	}
	
}

测试效果图:

在这里插入图片描述
一般蓝桥杯会使用s4s5s8s9小矩形键盘来测试你对矩阵键盘的掌握程度。
在这里插入图片描述

小矩阵键盘

void read_key()
{
   
	static unsigned char hang;
	static unsigned char state = 0;
	
	switch(state)
	{
   
		case 0:	
		{
   
			P3 = 0x0f;P42 = 0;P44 = 0;
			if(P3 != 0x0f) state = 1;
		}break;
		case 1:
		{
   
			P3 = 0x0f; P42 = 0; P44 = 0;
			if(P3 != 0x0f) 
			{
   
				if(P33 == 0) hang = 1;
				if(P32 == 0) hang = 2;
				switch(hang)
				{
   
					case 1:
					{
   
						P3 = 0xf0;P42 = 1;P44 = 1;
						if(P44 == 0){
    s4++;state = 2;hang = 0;}
						if(P42 == 0){
    s8++;state = 2;hang = 0;}
					}break;
					case 2:
					{
   
						P3 = 0xf0;P42 = 1;P44 = 1;
						if(P44 == 0){
    s5++;state = 2;hang = 0;}
						if(P42 == 0){
    s9++;state = 2;hang = 0;}
					}break;
				}
			}
			else state = 0;
		}break;
		case 2:
		{
   
			P3 = 0x0f;P42 = 0;P44 = 0;
			if(P3 == 0x0f) state = 0;
		}break;
	}
	
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100142.html原文链接:https://javaforall.net

(0)
上一篇 2021年4月12日 下午5:17
下一篇 2021年4月12日 下午5:38


相关推荐

  • linux发邮件失败,Linux SendMail发送邮件失败诊断案例,sendmail发送邮件

    linux发邮件失败,Linux SendMail发送邮件失败诊断案例,sendmail发送邮件LinuxSendMail发送邮件失败诊断案例,sendmail发送邮件Linux上Sendmail经常由于一些配置问题,导致邮件发送失败,下面整理、收集了一些邮件发送失败、异常的案例。案例1:在新服务器上测试sendmail发送邮件时,发现邮件发送不成功,检查/var/log/maillog日志文件发现如下错误(Notice:hostname、邮箱地址等信息使用xxx代替)tail/var/…

    2022年10月20日
    4
  • 菜单权限表sql语句「建议收藏」

    菜单权限表sql语句「建议收藏」selectm.*     fromt_menum     wherem.state=’1′      and((menu_type=1andexists        (select1          fromv_user_menub          wherem.menu_id…

    2025年6月13日
    5
  • dedecms v5.7 图片集“图集内容”无法调用的解决办法

    dedecms v5.7 图片集“图集内容”无法调用的解决办法

    2021年9月24日
    48
  • 设置 IntelliJ IDEA 主题和字体的方法

    设置 IntelliJ IDEA 主题和字体的方法1前言在博文“IntelliJIDEA之HelloWorld项目创建及相关配置文件介绍”中,咱们已经用IntelliJIDEA创建了第一个Java项目HelloWorld,如下图所示:观察上图,大家有没有发现一些问题,例如,整个界面的字体是不是都太小了一点啊?不知道大家感受如何,反正博主看到这么小的字体,当真是头晕眼花啊!因此,接下来,就让咱们一起尝试着把IntelliJ

    2022年6月27日
    72
  • QMap类说明[通俗易懂]

    QMap类说明[通俗易懂]QMap是一个模板类,提供了一个红黑树结构的查找字典。注:红黑树结构是自平衡二叉树QMap是一个QT常用的容器类,它存储键值队,并且可以很快的根据键查找值。QMap和QHash提供很类似的功能,他们的区别如下:1. QHash的查找性能更好;2.在遍历QHash时,里面是已经按字母排序好的,但是对于QMap,里面的东西都是按键分类的。3.QHash的键类型必须提供一

    2022年5月29日
    46
  • sklearn库安装_sklearn简介[通俗易懂]

    sklearn库安装_sklearn简介[通俗易懂]Scikitlearn也简称sklearn,是机器学习领域当中最知名的python模块之一。sklearn包含了很多机器学习的方式:Classification分类Regression回归Clustering非监督分类Dimensionalityreduction数据降维ModelSelection模型选择Preprocessing数据与处理使用sklea…

    2022年10月9日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号