0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C51单片机独立按键的使用

CHANBAEK 来源:Zi Jin Code 作者:锟酱不是酱 2023-11-01 11:34 次阅读

前面我们简单的学习了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状态取反
      }
    }
  }
}

编译并且上传程序,测试

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 三极管
    +关注

    关注

    142

    文章

    3611

    浏览量

    121866
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634629
  • led灯
    +关注

    关注

    22

    文章

    1592

    浏览量

    107950
  • C51单片机
    +关注

    关注

    12

    文章

    164

    浏览量

    34756
  • 独立按键
    +关注

    关注

    1

    文章

    45

    浏览量

    11561
收藏 人收藏

    评论

    相关推荐

    学习C51单片机按键移位

    今天开始学习C51单片机按键移位实验实验所用的是LED和独立按键首先讲光盘给的案例代码给出
    发表于 12-01 06:19

    C51单片机实现独立按键点亮LED灯

    :stc-isp-15xx-v6.85H.exe驱动:ch341ser(适用于win10操作系统)实验部分1、C51单片机实现流水灯实验2、美化你的流水灯(自加)3、C51单片机实现蜂
    发表于 12-13 06:37

    单片机C51编程规范

    单片机C51编程规范 1单片机C51编程规范- 前言   为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。
    发表于 01-14 21:03 2569次阅读

    单片机基础知识C51

    单片机基础知识C51版,学习单片机的基础知识。包括单片机的简介,单片机的程序如何写,单片机的应用
    发表于 11-18 16:48 0次下载

    独立按键依次输入数据

    独立按键依次输入数据 C51单片机源码,KEIL源文件,C语言编写
    发表于 06-20 16:36 17次下载

    C51单片机汉字机内码

    C51单片机汉字机内码
    发表于 01-14 15:04 26次下载

    基于C51单片机的烟雾报警器设计

    基于C51单片机的烟雾报警器设计
    发表于 05-11 08:00 78次下载

    使用51单片机独立按键的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机独立按键的程序免费下载。
    发表于 07-05 17:41 3次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>独立</b><b class='flag-5'>按键</b>的程序免费下载

    C51单片机流水灯C代码

    C51单片机流水灯C代码
    发表于 11-05 15:20 34次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b>流水灯<b class='flag-5'>C</b>代码

    单片机按键使用程序 (51单片机

    单片机独立按键使用程序 (51单片机独立按键
    发表于 11-11 18:36 108次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>按键</b>使用程序 (<b class='flag-5'>51</b><b class='flag-5'>单片机</b>)

    C51单片机学习笔记(三)——按键对灯、蜂鸣器等器件的控制

    C51单片机学习笔记(三)——按键对灯、蜂鸣器等器件的控制文章目录C51单片机学习笔记(三)——按键
    发表于 11-14 13:21 25次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b>学习笔记(三)——<b class='flag-5'>按键</b>对灯、蜂鸣器等器件的控制

    51单片机(V51)———独立按键、4x4矩阵按键

    51单片机(V51)———独立按键、4x4矩阵按键
    发表于 11-16 17:36 26次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>(V<b class='flag-5'>51</b>)———<b class='flag-5'>独立</b><b class='flag-5'>按键</b>、4x4矩阵<b class='flag-5'>按键</b>

    C51单片机C52单片机内部的资源区别

    C52单片机可以理解为是C51单片机的增强版• 两个方面有差异,存储空间和定时器计数器方面有区别 ○ C52
    发表于 11-19 10:36 20次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b>与<b class='flag-5'>C</b>52<b class='flag-5'>单片机</b>内部的资源区别

    基于89C51单片机的8位端口检测8独立按键源程序

    基于89C51单片机的8位端口检测8独立按键源程序
    发表于 05-16 10:49 1次下载

    基于89C51单片机独立按键依次输入数据源程序

    基于89C51单片机独立按键依次输入数据源程序
    发表于 05-16 09:12 3次下载