131 1300 0010
其他
当前位置: 首页>> 元件技术>>其他>>
  • 导航栏目
  • 二极管
  • 整流桥
  • MOS管
  • 其他
  • 51单片机对矩阵键盘实现16个按键操作的电路设计
    51单片机对矩阵键盘实现16个按键操作的电路设计
  • 51单片机对矩阵键盘实现16个按键操作的电路设计
  •   发布日期: 2019-07-11  浏览次数: 1,916

    矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。矩阵键盘的优点是节约单片机IO口,例如普通键盘8个IO口只能用作8个按键,而矩阵键盘能作16个按键。

    本文以51单片机为载体介绍一种4*4矩阵键盘实现16个按键操作的原理、电路和软件设计要点。

     

    1、 矩阵键盘的一般电路

    51单片机对矩阵键盘实现16个按键操作的电路设计

    图 1 矩阵键盘电路

    如图 1

    矩阵键盘电路所示,4*4矩阵键盘有4行4列按键,单片机4个I/O口接矩阵键盘的行线,另外4个I/O口接矩阵键盘的列线,通过对行线列线的操作完成按键的识别和操作。

    2、 矩阵键盘的原理

    矩阵键盘按键识别的流程一般是这样的:

    (1)置第1行为低电平(0),其余行为高电平,读取列线数据,列线有低电平表示此行有按键按下。

    (2)置第2行为低电平(0),其余行为高电平,读取列线数据,列线有低电平表示此行有按键按下。

    (N-1)根据行线列线的电平不同可以识别是否有按键按下,哪一个按键按下,获取按键号。

    (N) 根据按键号跳转至对应的按键处理程序。

    3、 一个矩阵键盘程序的例子

    51单片机对矩阵键盘实现16个按键操作的电路设计

    2为按键处理的主流程,思路是依次拉低按键的各个行,再读取列线的数据,假如列线有低电平,则认为此行有按键按下,标记此行有按键按下并存入行值。

    读取列线数据的思路则是这样,依次读取第1-4列,假如读取此列时为低电平,则标记并存入列值。

    下面是部分代码:

    //(1)按键识别程序

    void key() //按键扫描

    {

    unsigned char key_value_temp; //临时按键值,默认1111 1111(二进制)

    key_value=0xff;

    //键值

    key_value_temp=0xff; //键值临时变量

    //矩阵键盘程序流程

    //依次拉低第1234行,读入列线数据

    Pin_r_1=0; Pin_r_2=1;Pin_r_3=1;Pin_r_4=1; //拉低第1行。

    //Pin_r_1第1行行线,Pin_r_2第2行行线,其余类似

    key_value_temp=read_column();//读列数据

    if (key_value_temp != 0xff)

    //表示第一行有按键按下

    {key_value=key_value_temp & 0x1f;

    //获取按键号,例如0001

    1101表示第1行第2列的按键按下

    }

    Pin_r_1=1; Pin_r_2=0;Pin_r_3=1;Pin_r_4=1; //拉低第2行

    key_value_temp=read_column();//读列数据

    if (key_value_temp != 0xff)

    //表示第2行有按键按下

    {key_value=key_value_temp &

    0x2f;

    }

    Pin_r_1=1; Pin_r_2=1;Pin_r_3=0;Pin_r_4=1; //拉低第3行

    key_value_temp=read_column();//读列数据

    if (key_value_temp != 0xff)

    //表示第3行有按键按下

    {key_value=key_value_temp &

    0x3f;

    }

    Pin_r_1=1; Pin_r_2=1;Pin_r_3=1;Pin_r_4=0; //拉低第4行

    key_value_temp=read_column();//读列数据

    if (key_value_temp != 0xff)

    //表示第4行有按键按下

    {key_value=key_value_temp &

    0x4f;

    }

    }

    //(2)读取列线数据

    unsigned char read_column() //读矩阵键盘的列

    {unsigned char key_column;

    key_column=0xff;

    if(Pin_c_1==0 ) key_column=key_column & 0xfe;

    //1110

    表示第1列按键按下。 key_column的低4位表示按键号,高4位常为1111

    if(Pin_c_2==0 ) key_column=key_column & 0xfd;

    //1101

    表示第2列按键按下。

    if(Pin_c_3==0 ) key_column=key_column & 0xfb;

    //1011

    表示第3列按键按下。

    if(Pin_c_4==0 ) key_column=key_column & 0xf7;

    //0111

    表示第4列按键按下。

    return key_column;

    }

    以上程序对应的键值表如下:

    51单片机对矩阵键盘实现16个按键操作的电路设计

    最后在程序中处理键值跳转至相应的操作即可。

    有一个4*4矩阵键盘的proteus仿真例子实现了如下功能:

    1、利用行扫描法读取4x4矩阵键盘键值;

    2、LCD1602上显示按下的按键值。


  • ·上一篇:
    ·下一篇:
  • 其他关联资讯
    深圳市日月辰科技有限公司
    地址:深圳市宝安区松岗镇潭头第二工业城A区27栋3楼
    电话:0755-2955 6626
    传真:0755-2978 1585
    手机:131 1300 0010
    邮箱:hu@szryc.com

    深圳市日月辰科技有限公司 版权所有:Copyright©2010-2023 www.szryc.com 电话:13113000010 粤ICP备2021111333号