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

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

3天内不再提示

如何实现基于单片机的键盘检测

CHANBAEK 来源:郎哥编程课堂 作者:郎宏林 2023-10-31 14:39 次阅读

键盘是单片机与用户交互设备之一,用户通过键盘输入数据或命令到单片机。最简单的键盘仅有一个按键,复杂一些的键盘有多个按键。在单片机的外围电路中,通常用到的按键都是机械弹性开关,当用户按下按键时,按键闭合,用户松开按键后,按键断开,单片机如何检测到按键被按下或释放呢?

按键一般与单片机的I/O口连接,按键的一端连接I/O口,另一端接地,与按键连接的I/O端口会被赋值为高电平,单片机键盘检测程序会持续检测该I/O端口的电平,若检测到该端口由高电平变为低电平,说明与该端口连接的按键被按下,因为按键闭合后,相当于I/O端口通过按键与地直接连接,导致该I/O端口变为低电平。

按键的连接非常简单,如下图所示,按键的一端与任一I/O端口相连,另一端与地连接。

图片

机械按键被按下后,会发生抖动现象,导致电平在按下阶段和释放阶段不会立即变为低电平,而是呈现锯齿状。下图是按键按下时的电压变化。

图片

机械按键被按下或释放后,抖动时间大约为5~10ms,此时电压不稳定,呈锯齿形,检测程序无法检测按键是否被按下,因此编写按键检测程序时,需要进行抖动延时处理。按键检测流程如下图所示:

图片

检测程序持续检测与键盘连接的I/O端口,当检测到I/O端口电压出现波动时,延时10ms,然后再次检测I/O端口,若I/O端口为低电平,说明按键被按下,同时还要检测按键是否被释放,检测按键是否被释放时,就不需要对抖动进行延迟处理了。

按键检测应用案例:应用两个按键分别控制发光二极管D1和D2的通断,按键1与单片机P2.0连接,按键2与P2.1端口连接,D1和D2分别与单片机P1.0、P1.1口连接,按下按键1,D1状态反转,按下按键2,D2状态反转。

下图是按键检测案例电路设计图:

图片

在P2.0和P2.1端口分别接入两个按键,按键的另一端接地。D1和D2发光二极管分别连接到单片机的P1.0和P1.1端口。

单片机内运行的完整C程序如下:

#include < reg51.h >
#include < stdio.h >
sbit  key_one = P2^0;
sbit  key_two = P2^1;
sbit  led_one = P1^0;
sbit  led_two = P1^1;


void delay(unsigned int millisecond)
{
       unsigned int i,j;
       for(i=millisecond;i >0;i--)
              for(j=120;j >0;j--);
}


void key_scan()
{
         if( key_one == 0 )
             {
                       delay(10);
                            if( key_one == 0 )
                            {
                                   while(!key_one);
                                   led_one = !led_one;
                            }
              }              
         if( key_two == 0 )
              {
                       delay(10);
                            if( key_two == 0 )
                            {
                                   while(!key_two);
                                   led_two = !led_two;
                            }
              }                     


 }


void main(void)
{ 
   unsigned int i;
        led_one = 1;
        led_two = 1;
        while(1)
        {
               key_scan();
        }
 }

位变量key_one和key_two为单片机P2.0端口和P2.1端口,用于检测按键状态。位变量led_one和led_two为单片机P1.0和P1.1端口,用于控制D1和D2的状态。函数delay()是延迟函数,参数millisecond用于设置延迟的毫秒数。

key_scan是按键检测函数,分别检测P2.0端口和P2.1端口电平变化,若检测到端口电平为低电平时,延时10ms后,若该端口依然是低电平,则确认与该端口连接的按键被按下,然后使用while循环等待按键的释放,循环条件是端口变换为高电平,最后取反led_one或led_two的电平。

main()函数主要完成按键的循环检测,具体实现方法是在函数内部实现一个无限循环结构,在循环结构内调用key_scan()函数。

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

    关注

    6001

    文章

    43973

    浏览量

    620825
  • 键盘
    +关注

    关注

    4

    文章

    843

    浏览量

    39004
  • 端口
    +关注

    关注

    4

    文章

    820

    浏览量

    31588
  • 键盘检测
    +关注

    关注

    0

    文章

    4

    浏览量

    5771
收藏 人收藏

    评论

    相关推荐

    基于单片机的矩阵键盘检测案例

    占用过多的I/O端口资源,导致单片机与其它外部设备无法连接。在这种情况下,可以使用矩阵键盘实现多个按键与单片机的连接,而且不浪费单片机的I
    的头像 发表于 10-31 14:35 616次阅读
    基于<b class='flag-5'>单片机</b>的矩阵<b class='flag-5'>键盘</b><b class='flag-5'>检测</b>案例

    单片机原理及应用:仿真4-4 矩阵键盘单列检测编程#单片机

    单片机键盘矩阵键盘单片机原理
    学习硬声知识
    发布于 :2022年11月09日 09:06:25

    单片机原理及应用:矩阵键盘实验#单片机

    单片机键盘单片机原理
    学习硬声知识
    发布于 :2022年11月09日 11:44:33

    单片机原理与应用:矩阵式键盘#单片机

    单片机键盘单片机原理
    学习硬声知识
    发布于 :2022年11月09日 17:17:12

    基于51单片机的红外PS_2键盘的设计与实现

    基于51单片机的红外PS_2键盘的设计与实现
    发表于 08-20 14:38

    基于单片机键盘控制

    大家好,我想做一个基于单片机键盘控制,通过单片机发送UART串口到电脑串口,从而可以控制电脑上的键盘,,比如我按下单片机一个键,那么电脑在
    发表于 01-14 09:24

    独立键盘检测与矩阵键盘检测

    键盘检测1、工作原理打开单片机原理图文件,找到独立键盘的原理图:上图中89C52与独立键盘的连接引脚没有标出来,可以再在原理图文件中找到89
    发表于 07-20 06:20

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

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

    单片机键盘扫描之状态机实现

    单片机键盘扫描之状态机实现:在编写单片机程序的过程中,键盘作为一种人机接口的实现方式,是很常用的
    发表于 09-26 10:37 205次下载

    基于单片机键盘接口的设计与实现

    文章详细介绍了基于单片机键盘接口的设计与实现。实际使用结果表明,该键盘接口电路设计简单,键盘处理程序运行稳定可靠,具有推广价值。
    发表于 03-28 17:35 9次下载

    独立键盘检测原理及程序实现方法

    由于在单片机在应用系统中,更多的会用到独立键盘,加之两者的检测原理基本相似,所以这一节里我主要讲解独立键盘检测原理及程序
    发表于 05-13 09:41 1w次阅读

    单片机键盘检测与应用

    非编码键盘通常又分为独立键盘和矩阵键盘两大类。所谓独立键盘是指按键在与单片机相连时,每一个按键都与一个
    的头像 发表于 09-18 16:34 4888次阅读

    51单片机键盘检测原理

    一、独立键盘检测1、按键的检测原理单片机的I/O口既可以作为输出也可以作为输入使用,检测按键时用的是输入功能。把按键的一端接地,另一端与
    发表于 11-10 18:46 36次下载
    51<b class='flag-5'>单片机</b>的<b class='flag-5'>键盘</b><b class='flag-5'>检测</b>原理

    PIC单片机矩阵键盘检测原理及实现

    PIC单片机矩阵键盘检测原理及实现
    发表于 11-16 11:51 2次下载
    PIC<b class='flag-5'>单片机</b>矩阵<b class='flag-5'>键盘</b><b class='flag-5'>检测</b>原理及<b class='flag-5'>实现</b>

    PIC单片机矩阵键盘检测原理及实现

    PIC单片机矩阵键盘检测原理及实现
    发表于 11-16 12:51 7次下载
    PIC<b class='flag-5'>单片机</b>矩阵<b class='flag-5'>键盘</b><b class='flag-5'>检测</b>原理及<b class='flag-5'>实现</b>