1 按键相关知识
1.1 按键工作原理
(1)内部机械结构。
(2)电路连接与原理图中图标。
(3)按键电路接法、上拉电阻。上拉是为了让引脚默认是高电平,但是上拉的力量扛不住接地,所以按键没有按下时上拉的力量保证了IO引脚输入为1,而按下后绝对为0。
(4)按下和弹起的区。区别就是接不接地的问题,也就是引脚输入为1还是0的问题。
(5)按键这个设备对我们的意义:按键对于我们CPU来说是一个输入设备,输入的是人的操作。CPU通过监测按键连接的IO引脚的电平输入是1还是0就知道外部有没有人按下这个按键。相当于人通过按按键给CPU输入了一个信号,这个信号可以被CPU监测到从而指导CPU去做一定的工作。
1.2 CPU如何处理按键
(1)轮询式。所谓轮询式就是CPU不断的隔很小时间去查看有没有按键被按下,如果按下就处理按键,如果没按下就过一会再来查看。(按键什么时候被按下CPU是无法预知的)
(2)中断式。
1.3 按键电路接法分类
(1)独立按键。
(2)矩阵按键。
2 按键接法原理图
2.1 原理图和接线分析
2.2 准双向IO口
原理图设计法
2.3 矩阵按键
2.4 矩阵按键变独立按键示意图
独立按键扫描
1写法
2写法
按键消抖
硬件电容消抖
消抖过程
消抖原理
我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们再首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认。
代码分析
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led = P0^0; //设置灯的控制IO口
sbit k1 = P1^0; //设置按键的控制IO口
void delay(u16 i) //延时函数
{
while(i--);
}
void keyprocess()
{
if(k1 == 0) //判断按键是否按下
{
delay(1000); //延时消抖
if(k1 == 0) //再次判断按键是否按下
{
led = 1; //如果按键按下,则灯亮
}
else
{
led = 0; //如果按键没有按下,则灯灭
}
}
}
void main()
{
led = 0; //初始灯灭
while(1)
{
keyprocess(); //处理按键事件
}
}