单片机按键检测电路原理详解

描述

在本次课程中,我将向大家介绍单片机的输入口的使用。

在这里,我以最简单的检测一个按键是否被按下为例来向大家介绍。

一、STC15W408AS按键检测电路

下面是本例中按键检测的电路原理图,K1是一个按键,它接在单片机的P3.3口上,R2是一个与按键连接的上拉电阻。

电路原理图

二、按键检测原理

在本例中,按键与单片机的第14脚(P3.3引脚)相连。当按键没有按下时,P3.3的电平是高电平;当按键被按下时,按键将P3.3与地短接,此时P3.3的电平为低电平。

从分析可知,根据P3.3电平的变化状态,我们可以知道按键是否被按下。因此,我们只要检测P3.3电平的状态,就可以判断出按键的状态。

三、STC15W408AS输入模式配置方法

为了让单片机能检测按键,我们必须将单片机的P3.3口设置为输入口,也就信号是从单片机外输入到单片机内。因此,必须将单片机的IO口模式设置为输入模式。

如果要将STC15W408AS的引脚配置成输入模式,只需修改PxM0和PxM1两个寄存器的值。下面是STC15的STC15W408AS引脚的配置说明:

电路原理图

四、按键检测有关代码

下面是本例中,按键检测相关的代码:

#define Pin_KEY P33

#define Pin_KEY_M1 P3M1

#define Pin_KEY_M0 P3M0

#define Pin_KEY_BIT BIT3

#define GetKey_High() Pin_KEY==1

void PinKEY_DirIn(void)

{

    Pin_KEY_M1 &=~Pin_KEY_BIT;

    Pin_KEY_M0 &=~Pin_KEY_BIT;

}

五、本例中按键检测指示

为了显示按键的是否被按下,我们用上节课程中介绍的单片机点LED的亮灭状态来表示按键的状态。当按键没被按下时,LED不亮;当按键被按下时,LED灯点亮。

请看下面代码:

PinKEY_DirIn();   //将按键所在的口设置为输入模式

while(TRUE)

{

  if(GetKey_High())  //如果检测到按键口是高电平

  {

    PinLed_High(); //则将LED所在口置高,LED不亮。

  }else{

    PinLed_Low(); //否则,将LED所在口置低,LED点亮

  }  

}

六、按键检测完整源程序

#define BIT0 0x01

#define BIT1 0x02

#define BIT2 0x04

#define BIT3 0x08

#define BIT4 0x10

#define BIT5 0x20

#define BIT6 0x40

#define BIT7 0x80

#define TRUE 1

#define FALSE 0

#define BEEP_ON    1

#define BEEP_OFF    0

#define Pin_LED P32

#define Pin_LED_M1 P3M1

#define Pin_LED_M0 P3M0

#define Pin_LED_BIT BIT2

#define PinLed_High() Pin_LED=1

#define PinLed_Low() Pin_LED=0

#define Pin_KEY P33

#define Pin_KEY_M1 P3M1

#define Pin_KEY_M0 P3M0

#define Pin_KEY_BIT BIT3

#define GetKey_High() Pin_KEY==1

void PinKEY_DirIn(void);

void PinLED_DirOut(void);

void main(void)

{

  PinLED_DirOut();

  PinKEY_DirIn();

  PinLed_Low();



  while(TRUE)

  {

    if(GetKey_High())

    {

       PinLed_High();

    }else{

       PinLed_Low();

    }

   }

}

void PinKEY_DirIn(void)

{

    Pin_KEY_M1 &=~Pin_KEY_BIT;

    Pin_KEY_M0 &=~Pin_KEY_BIT; 

}

void PinLED_DirOut(void)

{

    Pin_LED_M1 &=~Pin_LED_BIT;

    Pin_LED_M0 |=Pin_LED_BIT;  

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分