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,这个还是比较简单的,大家可以自己尝试写一下,后面会在其他文章更新

相关推荐
代码游侠6 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
CODECOLLECT10 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen11 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠13 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_13 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技16 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计16 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报17 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业17 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能17 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微