热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

蓝桥杯单片机独立按键和矩阵按键

首先看原理图1.独立按键:注意:我们使用蓝桥杯的板子时候,写代码之前一定要将在板子上将J5的2和3用跳线帽连接起来检测原理:51单片机上电之后P3的8个IO口全部都是高电平,

首先看原理图

1. 独立按键:

注意:我们使用蓝桥杯的板子时候,写代码之前一定要将在板子上将J523用跳线帽连接起来

检测原理:

51单片机上电之后P38IO口全部都是高电平,按键一端连接的是GND,按键按下电路接通使得另外一端的电平变成了低电平,也就是说我们只要检测对应的IO口是不是低电平就可以检测按键是否按下。

从原理图可以看到,J523连接的时候,如果S7被按下,P30会变成低电平,同样的S6对应着P31,S5对应P32,S4对应P33

程序目的:将每次的键值在数码管上面显示出来

程序测试:

我们只需要看P3的低三位哪一个是低电平,就可以知道哪一个键被按下

下面程序就是用数码管将键值打印出来,当没有独立按键按下时数码管显示0,有键按下的时候显示键值.



//按键检测函数
unsigned char key_scan(){unsigned char key_value = 0;//当独立按键按下时,会使低三位有一个不是高电平if((P3&0x0F)!=0x0F){delay_ms(50); //延时消抖if((P3&0x0F)!=0x0F){switch(P3&0x0F){case 0x0e:key_value = 7;break;case 0x0d:key_value = 6;break;case 0x0b:key_value = 5;break;case 0x07:key_value = 4;break;}}}return key_value;
}void main()
{while(1){
//关于数码管的显示的函数我有篇文章已经专门写好display_num(1,key_scan());}
}

2. 矩阵按键

首先我们必须非常清楚独立按键的原理,才能继续玩矩阵按键,独立按键是因为按键的一端连接GND,另一端连接IO,当按键按下的时候电路接通,IO口为低电平判断按键被按下.

我么检测矩阵按键也可以是同样的思路,这个时候我们蓝桥杯只要将J512引脚连上就可以用矩阵按键了,当时唯一值得注意的是,如果我们用时蓝桥杯的转接板有些引脚就不一样,我们的P36被替换成了P42,P37替换成了P44.在这里我们不考虑转接板的情况.

根据原理图,我们循环给某一行或者循环给某一列低电平,加入我们循环给四列依次给其中一列低电平,其他的列给高电平,检测行变化,某个键被按下会导致相应的行产生低电平,注意单片机的电平变化是”与”的关系,只有有一方为低电平,另外一方就会为低电平,这是单片机IO口内部结构决定的.我们根据相应的行和列出现低电平的位置就可以计算出被按下的键的位置

unsigned char key_code[] = {0x7f,0xbf,0xdf,0xef};
//按键扫描函数
unsigned char key_scan()
{int i,key_value&#61;0;//判断按键for(i&#61;0;i<4;i&#43;&#43;){P3 &#61; key_code[i];//如果检测到按键被按下if(P3!&#61;key_code[i]){delay_ms(20);//延时消抖if(P3!&#61;key_code[i])//如果仍然检测到按键被按下&#xff0c;则按键真的被按下{switch(P3&0x0f){//检测按键是不是松开case(0x0e):{while(P3&#61;&#61;(key_code[i]&0xfe));key_value&#61;4*i&#43;7;}break;case(0x0d):{while(P3&#61;&#61;(key_code[i]&0xfd));key_value&#61;4*i&#43;6;}break;case(0x0b):{while(P3&#61;&#61;(key_code[i]&0xfb));key_value&#61;4*i&#43;5;}break;case(0x07):{while(P3&#61;&#61;(key_code[i]&0xf7));key_value&#61;4*i&#43;4;}break;}}}}return key_value;
}






推荐阅读
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
鸟的蛋蛋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有