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,消抖
第一张是死循环