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

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

3天内不再提示

基于51单片机的矩阵键盘设计

CHANBAEK 来源:滑小稽笔记 作者:电子技术园地 2023-01-17 16:23 次阅读

12.1 项目分析

矩阵键盘,是一种在节省端口的前提下控制大量按键的一种方法,对于传统的独立对地键盘,一个按键就需要占用一个单片机IO口,虽然有时候会加一些扩展芯片之类的用于一个端口控制多个按键,但是电路结构比较复杂,矩阵键盘则是一种尽可能的既不用驱动芯片又能最大限度的使用大量按键的方法,一个a行b列的矩阵键盘,它所占用的端口数量是a+b个端口,所控制的按键数量则是a×b个按键,比如常见的4×4矩阵键盘只需要占用8个端口就可以控制16个按键,矩阵键盘的接法如下图所示。

从图中可以看出,每一列的按键取一端接在一起,每一行的按键取按键的另一列接在一起,这样就会引出四条行扫描线和列扫描线,假设某个端口产生了低电平,那么对应的就会有四个按键变成了独立对地键盘,当这四个键按下的时候,对应的端口电平就会拉低,所以矩阵键盘的按键检测主要就是进行扫描检测,在短暂的时间内不停的扫描键盘,可以根据行扫描判断,也可以根据列扫描判断,矩阵键盘的识别主要有以下几种判断方法:

算法1 :对矩阵键盘的行(或者列)不停的扫描,然后检测对应的列(或者行),当扫描的频率超过人的反应时间时,便不会被感觉出来,但是这种方法的优点是程序编写较为简单,但是代码很长,且浪费CPU的资源。

算法2: 对矩阵键盘的列(或者行)全部赋低电平,然后判断是否有行(或者列)的端口有低电平产生,没有,证明按键没有被按下,如果有,那么此时将端口对应的数据存放入一个变量,并同时将列(或者行)的低电平转移到行(或者列)上,此时列(或者行)必然也会有一个低电平的端口,将这时候的数据存放入第二个变量,最后,撤销所有的低电平,将两个变量的数据相加,则必然会得出所有按键值的其中一个,那么这个按键值所对应的按键必然就是按下的按键,这种算法比较复杂,编程或者理解起来比较困难,但是代码短,节省CPU资源。

12.2 原理图

现在我们以原理图为例,实现如下功能,用0~F代表按键的编号,按下某个按键后,在数码管上显示按键的编号(要求采用算法2方式实现)。

**12.3 **源代码

/*********************************************************************************************************
                头    文    件    引    用
*********************************************************************************************************/
#include <reg51.h>                                            //导入51单片机头文件
#include <intrins.h>
/*********************************************************************************************************
              数    据    类    型    定    义
*********************************************************************************************************/
#define u8 unsigned char                                        //定义无符号字符型数据(0~255)
#define u16 unsigned int                                        //定义无符号整型数据(0~65535)
/********************************************************
Name    :KEY_Scan
Function  :键盘扫描
Paramater  :None
Return    :None
********************************************************/
void KEY_Scan()
{
  u8 x, y ;
  u8 TAB[] = { 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0x08, 0x03, 0x46, 0x21, 0x06, 0x0E } ;
  P2 = 0xF0 ;
  if( P2!=0xF0 )
  {
    x = P2 ;
    P2 = 0x0F ;
    if( P2!=0x0F )
    {
      y = P2 ;
      switch( x+y )
      {
        case 0xEE:  P0 = TAB[ 0 ] ;    break ;
        case 0xDE:  P0 = TAB[ 1 ] ;    break ;
        case 0xBE:  P0 = TAB[ 2 ] ;    break ;
        case 0x7E:  P0 = TAB[ 3 ] ;    break ;
        case 0xED:  P0 = TAB[ 4 ] ;    break ;
        case 0xDD:  P0 = TAB[ 5 ] ;    break ;
        case 0xBD:  P0 = TAB[ 6 ] ;    break ;
        case 0x7D:  P0 = TAB[ 7 ] ;    break ;
        case 0xEB:  P0 = TAB[ 8 ] ;    break ;
        case 0xDB:  P0 = TAB[ 9 ] ;    break ;
        case 0xBB:  P0 = TAB[ 10 ] ;  break ;
        case 0x7B:  P0 = TAB[ 11 ] ;  break ;
        case 0xE7:  P0 = TAB[ 12 ] ;  break ;
        case 0xD7:  P0 = TAB[ 13 ] ;  break ;
        case 0xB7:  P0 = TAB[ 14 ] ;  break ;
        case 0x77:  P0 = TAB[ 15 ] ;  break ;
      }
    }
  }
}
/*********************************************************************************************************
                    主    函    数
*********************************************************************************************************/
void main()
{
  while( 1 )
  {
    KEY_Scan() ;
  }
}

12.4 仿真效果

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

    关注

    1291

    文章

    6285

    浏览量

    232378
  • 单片机
    +关注

    关注

    6030

    文章

    44482

    浏览量

    631714
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10796

    浏览量

    210701
  • 51单片机
    +关注

    关注

    273

    文章

    5696

    浏览量

    122946
  • 矩阵键盘
    +关注

    关注

    7

    文章

    206

    浏览量

    31398
收藏 人收藏

    评论

    相关推荐

    51单片机矩阵键盘控制设计

    51单片机矩阵键盘控制设计
    发表于 05-30 11:33

    51单片机矩阵键盘c语言程序

    51单片机矩阵键盘c语言程序,c51单片机实现矩阵
    发表于 07-21 09:20

    基于51单片机矩阵键盘电子密码锁

    基于51单片机矩阵键盘电子密码锁,使用矩阵键盘输入四位密码,有错误和正确提示音。
    发表于 07-21 11:23 116次下载

    C51单片机矩阵键盘设计程序的详细资料免费下载

    本文档的主要内容详细介绍的是C51单片机矩阵键盘设计程序的详细资料免费下载。
    发表于 11-27 16:37 26次下载
    C<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>矩阵</b><b class='flag-5'>键盘</b>设计程序的详细资料免费下载

    51单片机矩阵键盘的原理说明和实验程序及电路图免费下载

    本文档的主要内容详细介绍的是51单片机矩阵键盘的原理说明和实验程序及电路图免费下载。
    发表于 04-18 17:27 7次下载

    使用51单片机矩阵键盘模拟密码锁的C语言程序免费下载

    本文档的主要内容详细介绍的是使用51单片机矩阵键盘模拟密码锁的C语言程序免费下载。
    发表于 08-15 17:32 17次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>矩阵</b><b class='flag-5'>键盘</b>模拟密码锁的C语言程序免费下载

    51单片机-矩阵键盘模块-长短按键&数码管显示-模块化编程模板

    51单片机-矩阵键盘模块-长短按键&数码管显示-模块化编程模板
    发表于 11-21 09:21 28次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>-<b class='flag-5'>矩阵</b><b class='flag-5'>键盘</b>模块-长短按键&数码管显示-模块化编程模板

    51单片机矩阵键盘的原理图

    51单片机矩阵键盘的原理图
    发表于 12-30 11:32 66次下载

    基于AT89C51单片机矩阵键盘电子琴

    方案介绍AT89C51单片机矩阵键盘电子琴通过16个按键弹奏16种音调;数码管根据按键显示。
    发表于 12-15 17:08 7次下载

    基于89C51单片机矩阵键盘反转扫描源程序

    基于89C51单片机矩阵键盘反转扫描源程序
    发表于 05-15 11:02 3次下载

    基于89C51单片机矩阵键盘简易计算器源程序

    基于89C51单片机矩阵键盘简易计算器源程序
    发表于 05-15 11:01 29次下载

    基于89C51单片机矩阵键盘密码锁源程序

    基于89C51单片机矩阵键盘密码锁源程序
    发表于 05-15 11:01 4次下载

    基于89C51单片机矩阵键盘行列扫描源程序

    基于89C51单片机矩阵键盘行列扫描源程序
    发表于 05-15 11:00 1次下载

    基于89C51单片机矩阵键盘中断扫描源程序

    基于89C51单片机矩阵键盘中断扫描源程序
    发表于 05-15 11:00 2次下载

    51单片机矩阵键盘扫描程序

    51单片机矩阵键盘扫描程序
    发表于 05-17 17:20 6次下载