C51单片机独立按键的使用

发布时间:2024-03-20  

前面我们简单的学习了C51的IO结构,现在我们来看看,准双向IO口如何使用按键输入

图片

这是准双向IO的基本结构,单片机就靠内部输入线来读取IO的电平状态。

我们以这个电路分析准双向IO上的按键使用

图片

在准双向口中,我们需要先给IO写高电平才能去读取IO的电平变化(高->低)

在写高电平的情况下……

三极管截止

图片

没有按下按键,电流由正极经过上拉电阻流到内部输入线路,这时候内部读出高电平

图片

这时候按下按键,按下按键,电流由VCC流经上拉电阻再流经按键最后流向GND。由于电流由正极流向负极。内部输入线路线路的电流流向负极,这时候读出的数值就是低电平的

如果我们写IO是低电平的话,三极管始终导通,内部输入的电流经过三极管接到负极,这时候无论有没有按下按键,都只能读出低电平

图片

图片

按键的电路

图片

我们使用的开发板有四个独立按键,这四个独立按键接在P3.2 - P3.4

我们使用单片机准双向IO提供的IO内部的上拉电阻,所以不需要外部上拉电阻

首先,需要使用sbit定义我们的按键所连接的IO

sbit KEY = P3^4;

接下来,给这个按键所属的IO写高电平

KEY = 1;

读取按键按下的代码

if(KEY == 0)
{  unsigned char a = 550;  while(a--);//延迟消抖
  if(KEY == 0)
    {    while(!KEY);//检测按键是否松开,防止连按
    
    //这里是你的要放下按键按下后执行的代码

    }
}

这里需要说明一下

if(KEY == 0)用于读取按键是否按下按键,读取方式直接用KEY == 0,KEY == 1直接读取这一位IO寄存器值。

当我们第一次读取之后,还需要延迟一会再次读取按键,我们把这个过程称为延迟消抖

这是因为我们使用的按键是物理按键,内部的简化结构如图

图片

按键上面有一个弹片,按下按键弹片后触点接触,按键导通,松开按键,弹片回弹,按键断开,电压的变化总是高电平》低电平》高电平

上面描述的是理想状态,但是实际上,物理按键并不像我们想象如此理想,当我们按下按键的时候,按键的弹片会发生震动,导致电压会有一定的抖动幅度

图片

这些幅度的抖动会影响单片机对按键的读取和识别

我们可以用硬件电路消抖,下面展示一个简单的硬件消抖电路

图片

在这个电路里面,一颗0.1u的电容用于消除抖动,电容充放电实现消抖的效果

那么为什么不使用上面的电路实现消抖呢??

答案很简单——成本高嘛

所以我们使用软件消抖

if(KEY == 0)
{  unsigned char a = 550;  while(a--);//延迟消抖
  if(KEY == 0)
    {    while(!KEY);//检测按键是否松开,防止连按

    //这里是你的要放下按键按下后执行的代码

    }
}

单片机先读取按键引脚的电平,软件延迟后再次读取后再次读取按键的电平,如果还是按下的状态,那么就开始等待按键松开,等待按键松开是必要的,如果不等待按键松开,可能我们按下按键久一点按键就变成多次连按了


那么下面就是一个简单的项目,按键开关LED


/*

按键学习

按键按下,LED实现开关



青青子衿工作室

Zi Jin Code

*/

#include < reg52.h >



sbit LED = P1^0;

sbit KEY = P3^3;



void main()

{

  KEY = 1;//使用按键之前,对应的引脚写高电平

  LED = 1;

  while(1)

  {

    if(KEY == 0)

    {

      unsigned int a = 550;

      while(a--);//延迟消抖

      if(KEY == 0)//再次检测...

      {

        while(!KEY){}//检测按键是否松开

        LED = !LED;//LED状态取反

      }

    }

  }

}

编译并且上传程序,测试


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>