千家信息网

单片机矩阵按键设计方法的实现

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"单片机矩阵按键设计方法的实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"单片机矩阵按键设计方法的实现"吧!一、原理如果我们每个按键用两
千家信息网最后更新 2026年11月02日单片机矩阵按键设计方法的实现

本篇内容主要讲解"单片机矩阵按键设计方法的实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"单片机矩阵按键设计方法的实现"吧!

一、原理

如果我们每个按键用两个位表示,那么一组端口8只引脚则可以实现C82=16个按键的输入。按键4×4布置,按键的键位表示为行和列的交点,同样可以准确的表示按键输入。

二、设计步骤

1. 设计电路。

按键布置为4行×4列。P1.0、P1.1、P1.2、P1.3分别连接第1、2、3、4行按键,P1.4、P1.5、P1.6、P1.7分别连接第4、3、2、1列按键。

当某一按键被按下时,对应的行和列对应的引脚被接通而发生变化。由于每一个按键对应了唯一的行列,因此可以精确确定按键的位置。

2. 程序设计的思路。

逐行输出低电平,其它引脚输出高电平。对于输出低电平每一行,如果某一列有按键被按下,则对应的引脚会被下拉为低电平。检测低电平所在的位置,即可得到按键所在列。行和列都确定的情况下,即得到按键的所处位置。

本设计中,程序功能设计为当按下某一按键时,动态数码管上显示按键所在行列。

3. 行和列的按键编码

(1)扫描检测行时P1输出的编码

正在检测的行P1输出
P1.3P1.2P1.1P1.0二进制编码十六进制编码
11110111111100xFE
21101111111010xFD
31011111110110xFB
40111111101110xF7

(2)检测时编码所对应的列

P1输入被按下按键对应的列
P1.7P1.6P1.5P1.4二进制编码十六进制编码*
111011100xEX4
110111010xDX3
101110110xBX2
011101110x7X1
*X表示因所在行不同,数值有所变化。





4. 程序设计

(1)列数的检测

/** * @brief 获取按键所在列 *  * @return 返回1-4或F。F表示无按键。  */UCHAR getColumn(){    UCHAR tmp = P1;    tmp = tmp >> 4; // 请结合P1输入表思考:这是什么操作?    switch (tmp)    {    case 0xF /* 0b1111 */:        return 0xf;    case 0xE /* 0b1110 */:        return 4;    case 0xD /* 0b1101 */:        return 3;    case 0xB /* 0b1011 */:        return 2;    case 0x7 /* 0b0111 */:        return 1;    }}

(2)行数和按键的检测

/** * @brief 扫描输入的按键并将序号显示在数码管上。 *  */void inputKeyScan(){    UCHAR row = 0x10, column = 0x10;    UCHAR i;    const UCHAR rows[] = {0xFE, 0xFD, 0xFB, 0xF7};    delayNms (20);  //  消除抖动    for (i = 0; i < 4; i++)    {        P1 = rows[i];        if (getColumn() != 0xf)        {            row = 0x10, column = 0x10;            row = i + 1;            column = getColumn();            display4N(0x10, 0x10, row, column);        }    }        display4N(0x10, 0x10, 0x10, 0x10);  // 请思考这是为什么?}

(3)主函数调用

/** * @brief 主函数 *  */void main(){    P1 = 0xFF;    while (1)    {        inputKeyScan();    }}
三、用到的其它函数

分别在4个数码管上显示数字的函数

/** * @brief 分别在4根数码管上显示数字。每个数字的范围都是0-F。 *  * @param n1 第一个数码管上显示的数字。 * @param n2 第二个数码管上显示的数字。 * @param n3 第三个数码管上显示的数字。 * @param n4 第四个数码管上显示的数字。 */void display4N(UCHAR n1, UCHAR n2, UCHAR n3, UCHAR n4){    P2 = 0x01; // 选择第一个数码管    if (n1 >= 0 && n1 < 0x10)        P0 = HexBCD[n1]; // 显示n1    else        P0 = 0xFF;    delayNms(5);    P2 = 0x02; // 选择第二个数码管    if (n2 >= 0 && n2 < 0x10)        P0 = HexBCD[n2]; // 显示n2    else        P0 = 0xFF;    delayNms(5);    P2 = 0x04; // 选择第三个数码管    if (n3 >= 0 && n3 < 0x10)        P0 = HexBCD[n3]; // 显示n3    else        P0 = 0xFF;    delayNms(5);    P2 = 0x08; // 选择第四个数码管    if (n4 >= 0 && n4 < 0x10)        P0 = HexBCD[n4]; // 显示n4    else        P0 = 0xFF;    delayNms(5);}

到此,相信大家对"单片机矩阵按键设计方法的实现"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

按键 设计 数码 数码管 数字 编码 检测 所在 电平 输入 输出 方法 函数 单片机 矩阵 位置 程序 二进制 内容 十六进制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州找大状互联网科技有限公司 腾讯阿里互联网科技 互联网络科技有限公司 易互联网科技有限公司 互联网科技ppt模板 上海亿帐通互联网科技 人人互联网科技是培训 现代科技和互联网有关系吗 哈尔滨新华互联网科技学院 科技互联网的估值 成都互联网科技公司100强 互联网大会黑科技排名 卓翼科技产业互联网合作 互联网科技圈年度人物 互联网方面的科技前沿 上海京穆互联网科技有限公司 元气玛特互联网科技公司是外包吗 浙南科技城互联网大厦招聘 互联网科技手抄报图片 张家口科技产业互联网平台 互联网电商科技 科技信息互联网 广州互联网科技公司 狮子座互联网科技 唐信互联网科技 大连 互联网科技汛 深圳卡尔迅互联网科技有限公司怎么样 海南科技产业互联网平台 湖北码尼互联网科技有限公司电话 长沙茂晟互联网科技有限公司
0