C51单片机002-key-独立按键

上一节是说,我们可以通过给寄存器赋值来达到控制led亮灭的效果

而现在,(因为另一边接的是GND)所以按键按下和松开是表示0和1的状态(按下-0,松开-1)

所以我们现在要是,寄存器通过检测高低电平来检测按键是否是被按下的状态。

(PS:MCU默认上电即为高电平)

 关于寄存器:

sfr    定义(8位)寄存器

sbit  定义位寄存器

关于c语言中的数据运算(位运算) 位移:

<<按位左移; >>按位右移;

&按位与 ;| 按位或; ^按位异或; ~按位取反;

 

 关于c语言中的基本语句:

 

 

 关于按键抖动:

 

 软件消抖(为什么不用硬件消抖,为了一个按键而专门做一个电路,有点浪费成本,何况软件也能达到一样的效果(在不要求很细微的情况下)):

原理:如上图,按下时,会有5-10ms的抖动,松开时,也会有个5-10ms的抖动;

所以我们加一个20ms的延时就可以,软件消抖了。

 

 

 如果key1按下(=0,此时处于抖动状态),(进入if循环)延时20ms消抖,然后进入平稳为0的状态,

当一直是持续按下的状态(也就是一直按下,并且处于平稳0时)存在于while循环中,直到松开按键(检测松手)

松开时属于抖动状态,延时20ms,消抖

 

第一张是死循环

 

 

posted @ 2023-03-22 22:45  鬼幽电z  阅读(202)  评论(0编辑  收藏  举报