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

相关推荐
杯子不吃紫菜35 分钟前
LangGraph 体系实战(下):中断恢复、流式、子图与设计模式
单片机·嵌入式硬件·设计模式
qq_448011161 小时前
中断服务函数简介
嵌入式硬件
Risehuxyc1 小时前
STM32程序逻辑---入口函数逻辑和NVIC嵌套向量中断控制器初始化
stm32·单片机·嵌入式硬件
【 STM32开发 】1 小时前
CubeMX+STM32】SD卡U盘实现__USB+FATFS (F103 篇)
stm32·单片机·嵌入式硬件
jianqiang.xue2 小时前
3倍向量算力:Arm给最小MCU装上本地AI
arm开发·人工智能·单片机
无敌最俊朗-16 小时前
【电感专题2:电感的感抗、电路的阻抗、电流的滞后】
单片机·嵌入式硬件·元器件·电感
wuyk55520 小时前
嵌入式故障诊断-Bug002-局部大数组压栈高温必死机
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·嵌入式实时数据库
Zwawa1 天前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
c语言·单片机·嵌入式
Dev_XH1 天前
【成品设计】基于沁恒单片机的电动汽车充电站智慧调度系统
stm32·单片机·嵌入式硬件·物联网
shimly1234561 天前
(done) 嵌入式硬件电路图 (5) 重要的元器件特性之二极管三极管
嵌入式硬件