51单片机之独立按键控制LED

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();
}
}







评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值