我们可以再单片机上看到4个独立的按键,控制一个LED灯的亮灭先用第一个就可以,我们先找到独立按键的原理图来看看如何通过按键来控制LED灯的亮灭;
独立按键的一段接地,另一端接P3,则我们按下按键时会使端口为低电平,我们就可以通过逻辑 :当P31=0(按下去按键)时让灯亮,当P31=1时灯灭。
(大家记得加头文件哦)
这里直接用条件语句使P3_1控制LED2.结果就是按下第一个按键时,灯亮,松开时灯灭。
然后我们来看下如何按下之后控制开,再按一下控制关,这时候我们就会接触到按键消抖的问题
如何解决按键消抖呢,我们可以按下后进行延时,来吧抖动的时间掠过,这是软件消抖的一种方式
其中的延时函数和上节不太相同,我这里时通过stcisp写了一个1ms的延时函数,然后给他加循环,达到括号内输入想要的延时时间,但是我的代码出现了一些问题,就是我Delay函数里是3的情况下他就已经能延时500ms了,所以大家可以直接去stc里面搞一个20ms的延时函数,以下是我延时函数的代码(大佬可以看看我的错误在哪)
在主函数中我们通过if进行判断是否按下按键,按下后延时20ms左右,略过按键抖动时间,然后需要加一个while循环检测有没有松手,如果还在一直按着就不会改变状态,松手后我们直接让P2_0取反,也就是让LED1从灭变为亮,再按一次就会再取反一次,从亮变灭。
这是从江协截的图, ~就表示取反,当然我也写过位运算,可以看下我往期文章。
标签:LED,函数,消抖,51,取反,单片机,按下,延时,按键 From: https://blog.csdn.net/2301_80548884/article/details/145214031