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

相关推荐
碧海银沙音频科技研究院1 小时前
基于ATS308X的无线语音交互对话功能实现
人工智能·嵌入式硬件·深度学习·算法
inrichtt1 小时前
第十课时:中断优先级揭秘:抢占与嵌套的底层逻辑:
c语言·stm32·单片机·嵌入式硬件·github
国科安芯1 小时前
星载微控制器MCU功能安全与信息安全协同机制综述
网络·单片机·嵌入式硬件·安全·抗辐射
HRTOS1 小时前
HRTOS 4.0 官网系统正式更新发布:一轮系统升级完成,进入轻量维护阶段
经验分享·单片机·51单片机
深圳市恒锐丰科技杨生1 小时前
SS6209L 30V 集成 MOS 半桥功率芯片|LeadPower 率能半导体
嵌入式硬件·硬件工程
comyccccc2 小时前
STM32最小系统板高效布线与铺铜优化学习笔记
单片机·嵌入式硬件
一直C2 小时前
嵌入式 Linux 驱动开发学习笔记:中断、等待队列与工作队列
linux·驱动开发·嵌入式硬件·学习·imx6ull
HPT_Lt2 小时前
ZCC70X带看门狗功能的电压复位芯片,替代TPS3832
嵌入式硬件
LCG米10 小时前
STM32串口接收卡死根因排查:ORE溢出标志陷阱、错误标志清除顺序与中断恢复实测
stm32·单片机·嵌入式硬件·串口·嵌入式
创界工坊工作室12 小时前
38-基于单片机的老人健康监测系统
单片机·嵌入式硬件·51单片机·proteus