单片机
返回首页

51单片机玩转物联网基础篇03-独立按键

2022-05-16 来源:eefocus

前言

上一节,我们完成了51单片机控制LED灯,并实现流水灯效果,本节我们学习操作独立按键,并通过两个按键,分别打开和关闭所有LED灯,按键作为输入设备,在系统开发过程中十分常见,一般来说,按键可以设置系统参数、控制系统运行状态。


一、基础知识

1.按键简介

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号会发生变化,常见的按键开关如下图所示,其中A端引脚在同侧,默认断开,B端引脚在不在同侧,默认导通,当按键按下时,A端导通,B端断开。

此类开关,按下时候通常不会立刻导通,开和关的瞬间伴有一连串抖动,一般为5ms到10ms,具体抖动时间由按键机械特性决定,抖动过程如下图所示:

为了解决这个问题,通常可以采用硬件消抖和软件消抖两种方式,硬件消抖原理是利用电容平波,再经过施密特反相器整形之后就得到了没有毛刺的脉冲波,大多数实际项目中为了节约成本,通常采用软件滤波方式,软件滤波一般采用延时方式处理,当首次检测到按键按下时,软件延时10ms左右时间,然后再次查看按键状态,如果还是按下则认为有按键按下。


2.按键检测原理

简单的独立按键连接电路原理图如下所示

独立按键电路中,按键一边接GND,另一边接到单片机IO口上,当按键按下时候,按键两边1和2导通,单片机P2.5引脚直接连接GND,电平为低电平,所以只需要让单片机不断的检测P2.5引脚的I/O口是否为低电平,一旦程序检测到I/O口引脚变为低电平说明按键按下了。


3.开发板按键硬件电路

实验使用开发板独立按键部分原理图如下,K1、K2、K3、K4四个按键一端引脚均接地,另一端接到单片机不同I/O口,可以根据不同I/O口的电平检测按键是否按下。

二、实例

1.创建工程

将上一节工程复制出来,并修改名字为02-key

2.程序修改

#include


sbit key1 = P2^4;

sbit key2 = P2^5;


unsigned char val = 0;


void delay_ms(int ms)

{

        int i = 0, j = 0;

        for (i = ms; i > 0; i--)

        {

                for (j = 110; j > 0; j--);

        }

}


int main(void)

{

        while(1)

        {

                if (0 == key1 || 0 == key2)

                {

                        delay_ms(10);

                        if (0 == key1)

                        {

                                P1 = 0x00;

                        }


                        if (0 == key2)

                        {

                                 P1 = 0xFF;

                        }

                }

                delay_ms(5);

        }

}


程序中检测KEY1和KEY2的状态,当按下KEY1时候,点亮LED3-LED10 8个LED灯,KEY2按键按下时候,熄灭LED3-LED10。


三、运行

编译代码后,按照第一节内容,将生成的project.hex文件下载到板子中,按下KEY1时候,效果如下图所示:

点击KEY2时候,灯熄灭,由于比较简单,就不放图了。

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 如何构建一个触摸传感器电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章