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()函数。

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

    关注

    6034

    文章

    44554

    浏览量

    634504
  • 键盘
    +关注

    关注

    4

    文章

    859

    浏览量

    39645
  • 端口
    +关注

    关注

    4

    文章

    963

    浏览量

    32045
  • 键盘检测
    +关注

    关注

    0

    文章

    4

    浏览量

    5792
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    红外遥控键盘单片机接口实现技术

    本文介绍了一种利用电视遥控器作为单片机输入键盘的接口原理和方法,并讨论了如何使用单片机实现遥控指令的解码,实践证明这种 接口方式可以节省
    发表于 03-28 15:35 5次下载

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

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

    单片机键盘接口技术

    键盘单片机不可缺少的输入设备,是实现人机对话的纽带。键盘按结构形式可分为非编码键盘和编码键盘
    发表于 03-29 10:55 8次下载

    使用51单片机实现矩阵键盘的代码免费下载

    本文档的主要内容详细介绍的是使用51单片机实现矩阵键盘的代码免费下载。
    发表于 08-28 17:29 5次下载
    使用51<b class='flag-5'>单片机</b><b class='flag-5'>实现</b>矩阵<b class='flag-5'>键盘</b>的代码免费下载

    使用51单片机实现矩阵键盘的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机实现矩阵键盘的程序免费下载。
    发表于 07-18 17:38 3次下载
    使用51<b class='flag-5'>单片机</b><b class='flag-5'>实现</b>矩阵<b class='flag-5'>键盘</b>的程序免费下载

    使用单片机实现键盘扫面的程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现键盘扫面的程序免费下载。
    发表于 06-05 17:35 2次下载
    使用<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>键盘</b>扫面的程序免费下载

    单片机键盘检测与应用

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

    使用单片机实现LCD矩阵键盘的程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现LCD矩阵键盘的程序免费下载。
    发表于 04-02 11:39 19次下载

    51单片机键盘检测原理

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

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

    按键,每个按键对应一个IO口,通过循环或者中断去检测,这种方法常用于按键个数较少得时候。如果按键的个数较多,每个按键都分配一个IO口,会占用大量的资源,所以就有了矩阵键盘。矩阵键盘是通过单片机
    发表于 11-12 11:06 15次下载
    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>

    单片机-键盘检测

    弹起断开按键与单片机的连接方式如下图所示 :从上图可以看出,理想波形与实际波形之间是有区别的,实际波形再按下和释放的瞬间都有抖动的现象,抖动时间的长短和按键的机械特性有关,一般...
    发表于 11-24 11:06 12次下载
    <b class='flag-5'>单片机</b>-<b class='flag-5'>键盘</b><b class='flag-5'>检测</b>