查看: 2497  |  回复: 0
51单片机独立按键的使用
IcanDO
4
主题
0
回复
发表于2019-02-06 10:38:38 | 只看该作者
1# 电梯直达

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


 



 


主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部