1.独立按键的原理(1703A)
1.独立按键一共有四个针脚,两个短针脚之间默认不导通,两个长针脚之间默认导通
2.按下按钮后,会出现“抖动”,消抖后,输入低电平;
2.为什么会出现按下按钮输入低电平?
1.对于p1,p2,p3口而言,是属于准双向IO口结构,在按下按钮(按钮在p3口)后,自然直接从内部输入低电平;
2.对于p1,p2,p3而言,上拉电阻是为了更好的控制高低电平,所以,p0口有外加的上拉电阻
3.而且在内部输入时NOT为非门,所以输入高电平时,到达这里变成了低电平,不能通过三极管,只有输入低电平时,才能转换为高电平,通过三极管(自己的理解,不太准确)
3.关于抖动的问题(转载)
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖
按键消抖有两种,一种是硬件消抖,一种是软件消抖
参考链接:http://www.eeworld.com.cn/mcu/2012/0806/article_9776.html
4.代码练习
#include<reg52.h>
typedef int u16;
typedef char u8;
sbit led1=P2^0; //D1
sbit led2=P2^1; //D2
sbit led3=P2^2; //D3
sbit led4=P2^3; //D4
sbit k1=P3^1;//定义一个独立按键
sbit k2=P3^2;//定义一个独立按键
sbit k3=P3^3;//定义一个独立按键
sbit k4=P3^4;//定义一个独立按键
//定义延时函数
void delay(u16 i)
{
while(i--);
}
void keypros()//定义独立按键控制
{
if(k1==0)//说明按下去了
{
delay(1000);//消抖
if(k1==0)
{
led1=~led1;//翻转
}
while(!k1);//按键松开
}
if(k2==0)//说明按下去了
{
delay(1000);//消抖
if(k2==0)
{
led2=~led2;//翻转
}
while(!k2);//按键松开
}
if(k3==0)//说明按下去了
{
delay(1000);//消抖
if(k3==0)
{
led3=~led3;//翻转
}
while(!k3);//按键松开
}
if(k4==0)//说明按下去了
{
delay(1000);//消抖
if(k4==0)
{
led4=~led4;//翻转
}
while(!k4);//按键松开
}
}
void main()
{
while(1)
{
keypros();
}
}