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

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

3天内不再提示

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

CHANBAEK 来源:科创追梦者 作者:谢士金 2023-11-02 15:28 次阅读

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

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

一、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;  

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

    关注

    6001

    文章

    43973

    浏览量

    620825
  • 上拉电阻
    +关注

    关注

    5

    文章

    345

    浏览量

    30258
  • 电路原理图
    +关注

    关注

    38

    文章

    344

    浏览量

    37768
  • 按键检测
    +关注

    关注

    0

    文章

    21

    浏览量

    4796
  • STC15W408AS
    +关注

    关注

    10

    文章

    27

    浏览量

    10063
收藏 人收藏

    评论

    相关推荐

    单片机按键检测

    Atmega16单片机按键电路如下,按键另一端一般都是直接接地的,这个比较另类。尝试了不少方法还是没写出检测
    发表于 05-25 01:31

    单片机按键详解

    单片机按键详解
    发表于 07-28 14:51

    51单片机按键检测的方法

    单片机检测到相应的端口为低电平时即可判断按键被按下,(实际应用时,为了提高抗干扰能力,在按键侧加上拉电阻)。 #include #define uchar unsigned char
    发表于 07-19 02:30

    单片机按键设计的四个方案详解

    单片机系统里,按键是常见的输入设备,在本文将介绍几种按键硬件、软件设计方面的技巧。一般的在按键的设计上,一般有四种方案:一、是GPIO口直接检测
    发表于 09-05 15:32

    单片机I/O口如何检测按键输入电平?

    单片机I/O口如何检测按键输入电平?
    发表于 10-26 07:01

    51单片机按键输入

    按键,每个按键对应一个IO口,通过循环或者中断去检测,这种方法常用于按键个数较少得时候。如果按键的个数较多,每个
    发表于 11-18 07:39

    按键和PIC单片机的物理连接与检测

    目录按键和PIC单片机一、按键二、按键的物理连接与检测三、PIC16F18854单片机
    发表于 11-24 06:39

    单片机按键检测程序分享

    单片机按键检测程序(定时器法消抖)相信大家在初学51单片机的时候按键检测为了消抖都会加一些空循环
    发表于 12-03 07:23

    如何自写单片机按键松手检测程序?

    如何自写单片机按键松手检测程序?
    发表于 01-25 07:01

    矩阵键盘检测独立按键单片机连接

    4.2 矩阵键盘检测独立按键单片机连接时,每个按键都需要单片机的一个I/O口,若单片机系统需要
    发表于 02-22 06:14

    单片机按键设计的四个方案详解

    单片机系统里,按键是常见的输入设备,在本文将介绍几种按键硬件、软件设计方面的技巧。一般的在按键的设计上,一般有四种方案:一是GPIO口直接检测
    的头像 发表于 03-15 14:05 9488次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>按键</b>设计的四个方案<b class='flag-5'>详解</b>

    简谈单片机检测按键原理和中断按键检测的办法

    首先说一下独立键盘检测,在单片机外围电路中 ,通常用到的按键都是机械弹性开关,当开关闭合时,线路导通,开关断开时,线路断开。单片机
    发表于 06-27 10:44 1.9w次阅读
    简谈<b class='flag-5'>单片机</b><b class='flag-5'>检测</b><b class='flag-5'>按键</b>原理和中断<b class='flag-5'>按键</b><b class='flag-5'>检测</b>的办法

    51单片机按键检测--独立按键与矩阵键盘

    按键,每个按键对应一个IO口,通过循环或者中断去检测,这种方法常用于按键个数较少得时候。如果按键的个数较多,每个
    发表于 11-12 11:06 13次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>按键</b><b class='flag-5'>检测</b>--独立<b class='flag-5'>按键</b>与矩阵键盘

    PIC单片机 按键检测识别

    目录按键和PIC单片机一、按键二、按键的物理连接与检测三、PIC16F18854单片机
    发表于 11-16 12:36 12次下载
    PIC<b class='flag-5'>单片机</b> <b class='flag-5'>按键</b><b class='flag-5'>检测</b>识别

    单片机按键检测

    独立按键电路:独立按键编程:一个独立按键单片机的一个I/O口连接,当按键按下时,对应I/O口由
    发表于 11-17 09:21 3次下载
    <b class='flag-5'>单片机</b>之<b class='flag-5'>按键</b><b class='flag-5'>检测</b>