单片机小白学习之路(八)---独立按键

目标:独立按键取反一个led灯


按键是一种电子开关,使用时轻轻按下开关按钮就可使开关接通,当松开手时,开关断开。没按是高电平,按下就变低电平

单片机小白学习之路(八)---独立按键
按键

按键一开始有两种状态: 初始不导通,初始导通。当按键按下本来不导通的导通,本来导通的变不导通。这4根线可以看成两组,作为两个端口

比如按键导通的连个电视,按键按下就不导通就实现关闭功能。


这是按键按下的电平变化,上面是理想的,但往往现实和理想的丰满不同,下面的图体现了现实的骨感

单片机小白学习之路(八)---独立按键
现实

既然现实骨感,我们就要让它变理想,变理想的方式有两种:软件消抖硬件消抖

硬件消抖

单片机小白学习之路(八)---独立按键
硬件消抖

假如按下了,B处是低电平,那么5处是低,74LS00是与非门,所以有个0就是0,6处是0取反变1,到2处是1,而1本来就是1,所以输出是0,实现了消抖。原来就1(A),输出就1

如果你按键不多,还追求实时性的化,比如工业上的就用硬件消抖,我还是推荐大家用软件消抖,可以节省材料,还会减少不必要的麻烦


按键模块

单片机小白学习之路(八)---独立按键
按键模块

4根线,作为2个端口,每个按键一个端口并联到地,另一个引出来,按键按下接地导通实现关闭。

代码

单片机小白学习之路(八)---独立按键

keyless函数是软件消抖,if(k1==0)是为了判断按键是否按下,按下进入if语句,延迟1ms,再来判断下k1,其实那个延迟就实现了消抖,就是把抖动的部分跳过,第二个if满足则led取反。

while(!k)是k=0条件满足则一直在那循环,k是高电平就跳出,用于检测按键是否松开,松开就高电平跳出,这个函数就执行完了。这个函数还是有缺陷的,如果你一直按着不放那么那么cpu一直在那循环耗资源,下篇会讲到怎么改进哟