51单片机基础部分——独立按键检测

前言

在单片机开发中,我们会经常对单片机的状态进行控制,比如我们会控制某个灯点亮,某个灯熄灭,这个时候我们就要开始做控制,我们可以通过什么控制呢,这个地方我们选择按键控制

按键实物及工作原理

生活中很常见的东西,在手机,遥控器,键盘上面,我们可以看到很多的按键,很常用,我们开发板上面的按键是这样的

左侧的是按键的样子,右侧是按键被拆开的样子,我们可以看到右图左一有三个银点,两侧的是他连接外部的引脚,中间的是一个将左二顶起的一个扭,当我们按下左二的时候,会让两边的引脚相连,这是我们判断是否导通就可以来判断按键是否按下了。

以上就是按键的工作原理,我们来看我们实际设备的原理图

上面是我们实际设备的原理图,结合实物,我们可以看到板子的左下角有四个并排的按键,就是对应这里的原理图,他们分别连接了P31,P30,P32,P33四个IO。结合上面我们的按键工作原理,我们只需判断四个IO的状态,我们就可以判断按键是否按下。这么来看,还是比较简单的,大家可能也都有一个写代码的思路了,写一个if做一个判断就行了是吧

这里我们先这样写一个代码看看,可以不可以,我们以嘴左侧的按键为例

c 复制代码
if(P3_1 == 0)
{
	//按键按下后执行的任务
}

大家把代码烧进去,会发现这个代码不能执行,这是为什么呢,这里我们就来说一下按键的特性,按键有一个抖动的特性,在按下和抬起的时候,上图左二的铁片会产生抖动,导致我们的检测会有问题

他的抖动大概是这样的

上面是我们的理想状态下,我们按下按键后,单片机直接可以检测到低电平,然后我们就可以直接做任务,但是实际情况是下面的,我们在按下按键的时候,产生一定时间的抖动,然后到低电平,抬起的时候,也会抖动一定的时间,然后到高电平,这个时间一般是10到20毫秒,这里我们就可以在找出我们上一篇讲数码管消隐的时候说到的延时,加入延时后,我们的思路就可以是,我们先判断一下按键的状态,是低电平还是高电平,然后我们等一段时间判断是不是真的到了我们所需要的低电平还是高电平,这时候我们再掏出我们的代码,看看应该怎么写

代码

我们这里加上代码,并且复习一下之前的内容,我们写两个按键来控制我们所有LED的状态

c 复制代码
if(P3_2 == 0)//判断状态
{
	delay(20);//延时等待(消抖)
	if(P3_2 == 0)//继续判断
	{
		P2 = 0X00;//执行任务
	}
	while(!P3_2);//判断按键是否抬起
}
if(P3_3 == 0)
{
	delay(20);
	if(P3_3 == 0)
	{
		P2 = 0XFF;
	}
	while(!P3_3);
}

以上就是我们独立按键的部分,大家可以结合一下我们上一篇的内容,用按键和数码管写一个计分器,四个按键分别控制两个按数据加减分,然后在数码管的两侧显示两个数据,计数范围是0------99,这个还是比较简单的,大家可以自己尝试写一下,后面会在其他文章更新

相关推荐
偶像你挑的噻4 小时前
11-Linux驱动开发-I2C子系统–mpu6050简单数据透传驱动
linux·驱动开发·stm32·嵌入式硬件
Chat_zhanggong3456 小时前
K4A8G165WC-BITD产品推荐
人工智能·嵌入式硬件·算法
bai5459366 小时前
STM32 PWM驱动LED呼吸灯
stm32·单片机·嵌入式硬件
智者知已应修善业6 小时前
【51单片机普通延时奇偶灯切换】2023-4-4
c语言·经验分享·笔记·嵌入式硬件·51单片机
btzhy12 小时前
STM32单片机:基本定时器应用:单脉冲模式(STM32L4xx)
stm32·单片机·嵌入式硬件·基本定时器应用:单脉冲模式
文sir.13 小时前
温湿度采集系统(stm32+mqtt+Onenet云平台+esp8266)
stm32·单片机·嵌入式硬件·mqtt·onenet·云平台·esp8266
DIY机器人工房14 小时前
嵌入式面试题:你有没有用过直接基于TCP协议,不借助HTTP、MQTT这类上层协议的项目经历?
stm32·单片机·嵌入式硬件·面试题·diy机器人工房
zhmc16 小时前
Cortex M0单片机指令执行周期
单片机·嵌入式硬件
编程小白菜12316 小时前
STM32L051单片机485Ymode升级后程序不能正常运行问题
stm32·嵌入式硬件
NEU-UUN18 小时前
5.1.STM32-EXTI外部中断——全程手敲板书
stm32·单片机·嵌入式硬件