简介
根据按键在芯片中接的位置,利用sbit定义相应的变量
普中51开发板中的接法
控制原理
从图可知,每个按键一端是接对应的I/O口,另一端是接地,当按键按下时,对应的I/O会连接到地,会从高电平(1)变成低电平(0)
例如
sbit Key1 = P3^1;
if(Key1 == 0)
{
P2 = ~0x01;
}
当K1按键按下,P3.1接地,P3.1 = 0,key1 = 0,所以会进入if里面,执行P2 = ~0x01; 让第一个灯亮。
消抖原理
我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为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(); //处理按键事件
}
}