51单片机设计16个按键的矩阵键盘

这篇具有很好参考价值的文章主要介绍了51单片机设计16个按键的矩阵键盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先如图所示导入各个元器件,并连线。

51单片机设计16个按键的矩阵键盘

因为P3口连接着矩阵键盘,所以上来要先付个初值,从高位到低位H0,H1,H2,H3,L0,L1,L2,L3的值是11110000,高位全是1,低位全是0,十六进制就是0xF0,也就是P3=0xF0。如果有按键按下了,肯定就不是这个值了。

比如说:

第一行789+中的任何一个按下,H0的高电平就会被拉低,P3口就变成了01110000, P3=0x70

第二行中的456-任何一个被按下,H1的高电平也会被拉低,P3口就变成了10110000, P3=0xB0

第三行中的123X任何一个被按下,H2的高电平也会被拉低,P3口就变成了11010000, P3=0xD0

第四行中的%0.÷任何一个被按下,H3的高电平也会被拉低,P3口就变成了11100000, P3=0xE0

上面是行都检查完了,下面检查列,检查列之前先把P3口设置成00001111,所有的列上的低位端口都设置成1,行上的端口都设置成0,也就是把P3赋初值为0x0f

然后再去检查每一列:

第一列中的741%任何一个被按下,L0的高电平都会被拉低,P3口就变成了00000111, P3=0x07

第二列中的8520任何一个被按下,L1的高电平都会被拉低,P3口就变成了00001011, P3=0x0B

第三列中的963.任何一个被按下,L2的高电平都会被拉低,P3口就变成了00001101, P3=0x0D

第四列中的+-X÷任何一个被按下,L3的高电平都会被拉低,P3口就变成了00001110, P3=0x0E

这样就能确定到底是哪一个按键被按下了,比如说按下的是7键,首先P3=0xf0,检查值有变化了就先保存下来,比如说是0x70,再把P3=0x0f,再检查P3的值有没有变化,如果有变化了,也要保存下来比如说是0x07,这会7键按下的值就是0x70+0x07=0x77,这样每一个键都会有一个固定的值,需要自己来编码,因为接线画图有不一样的地方,编码都会有变化的。

0到9的按键值就为:

{0xd7, 0xeb, 0xdb, 0xbb, 0xed, 0xdd, 0xdb, 0xee, 0xde, 0xbe}

51单片机设计16个按键的矩阵键盘

下面编写c程序,每行都有注释。主要给自己看。


#include"reg52.h"
char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  // 段码,也是就是数码管要显示的0到9的值
char s[]={0xd7, 0xeb, 0xdb, 0xbb, 0xed, 0xdd, 0xbd, 0xee, 0xde, 0xbe}; // 所有按键的值
unsigned int num=0;    // 定义要显示的数字变量

void delay(unsigned int n){             // 延时函数
    unsigned int i=0, j=0;
    for(i=0; i<n; i++){
        for(j=0; j<120; j++);
    }
}

void key_scan(){
    unsigned int i=0;
    unsigned char temp0=0, temp1=0, temp=0;    // 定义3个变量存放按键接口的值
    P3=0xf0;            //  P3口赋初值
    if(P3 != 0xf0){     //  如果P3不等于初值了,证明有按键被按下了
        delay(20);               // 延时20毫秒去抖
        temp0 = P3;             //  保存现在P3的值
        P3 = 0x0f;            // P3口再次赋初值,用来检查列,这里不用担心检查不到,单片机还是很快的。
        if(P3 != 0x0f){       // 如果P3不等于初值了,证明有按键被按下了
            temp1 = P3;              //  保存现在P3的值
        }
    }
    temp = temp0 + temp1;            // 键值= 第一次保存的值+ 第二次保存的值
    for(i=0; i<10; i++){              // 循环10次
        if(s[i]==temp){               //  把数组s中的每一个值和现在的键值比对,如果一样就是现在的第几个数字
            num=i;                          //就把num值设成i值
        }
    }

}

void display(){
    P2 = ~duan[num];     // P2口接的数码管显示段的第num个数字,正好是按下的按键的那个数字。
    
}

void main(){
    while(1){
        key_scan();    // 检测按键按下的是几的函数
        display();    //显示函数,用来显示按下的是数字几
    }
}

把hex文件导入proteus中仿真就能实现从0到9的按键并且数码管上会显示0到9这10个数字。

51单片机设计16个按键的矩阵键盘

proteus中接线要认真不然会有看着圆点在线上,实际一放大就不在的现象,也就是根本没接上,会带来很多麻烦事。

最近从网上买了一个4X4的矩阵键盘,其接口定义要理清了关系,不然会出错的,特此记录一下。

51单片机设计16个按键的矩阵键盘

今天在弄proteus时发现了一个矩阵键盘,特此记录一下,当时要是知道有这个东西就不用搞那么多的button了,一个矩阵键盘就搞定了,多简单啊!看看图片吧!

51单片机设计16个按键的矩阵键盘

查找的方法也很简单搜索时输入KEYPAD就可以了,从旁边选就好了。这就是proteus中导入矩阵键盘的方法。

51单片机设计16个按键的矩阵键盘文章来源地址https://www.toymoban.com/news/detail-447299.html

到了这里,关于51单片机设计16个按键的矩阵键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机矩阵键盘

    目录 前言 一、矩阵键盘扫描 二、LCD1602显示矩阵键盘键值 三、趣味小项目——密码锁 总结          矩阵键盘的原理很浅显易懂,不涉及任何寄存器,就是纯线路连接。         矩阵键盘的内部接线图如下:         不难看出其组成就是多个独立按键彼此相连形成,在

    2024年02月08日
    浏览(64)
  • 51单片机--矩阵键盘

    一、接线(4×4) 将16个键盘排成4行4列,第一行将每个按键的一端连接在一起构成行线,第一列将每个按键的另一端连接在一起构成列线,所以共有4行4列8根线,连接到单片机的GPIO口。 二、原理 总体来说检测该键对应IO口是否为低电平。 1、检测时,先将一行设为低电平,其

    2024年02月11日
    浏览(42)
  • 51单片机:数码管和矩阵按键

    目录 一:动态数码管模块 1:介绍  2:共阴极和共阳极 A:共阴极 B:共阳极 C:转化表  3:74HC138译码器 4:74HC138译码器控制动态数码管(位选) 5:数码管显示完整代码 6:74HC573锁存器 A:基本点 B:原理图介绍 c:74HC573控制数码管代码 二:矩阵按键模块 1:介绍 2:原理图  3:矩阵按键代码       

    2024年02月15日
    浏览(50)
  • 嵌入式51单片机04-矩阵按键系列

    一、矩阵按键基础知识 矩阵按键工作原理 : 逐行扫描 :通过高四位轮流输出低电平来对矩阵键盘进行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过判断低四位数据中哪一位为零来判断哪一个按键被按下。 逐列扫描 :通过低四位轮流输出低电平来

    2024年02月07日
    浏览(64)
  • 51单片机——矩阵按键实验,小白讲解,相互学习

    矩阵按键介绍:         独立按键与单片机连接时,每一个按键都需要单片机的一个I/O 口,若某单片机系统需较多按键,如果用独立按键便会占用过多的I/O 口资源.单片机系统中I/O 口资源往往比较宝贵,当用到多个按键时为了减少I/O 口引脚,引入了矩阵按键。       

    2024年02月12日
    浏览(49)
  • 【51单片机】矩阵按键实现数码管显示

    闲的没事看一看玩一玩········· 矩阵按键 数码管是一种导体发光器件,其基本单元是发光二极管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管 共阴极数码管是指将所有发光二极管的阴极接到一起形成共阴极的数码管,共阴极的数码管在应用时将公共

    2024年02月02日
    浏览(59)
  • 51单片机入门——矩阵键盘(附51代码)

    硬件如图非常简单,将一个4*4的矩阵键盘的8个管脚引到端子上,在连接到8个I/O口上,ARRAY_H代表着行,ARRAY_L代表着列,当行与列的电平都置低的时候,就选中的相应的矩阵按键,比如当s1按下时,ARRAY_H1会置低,其他ARRAY_H给高电平,那么选中的就是第一行,然后到列,ARRAY_

    2024年02月11日
    浏览(43)
  • 51单片机——数码管、按键、矩阵按键C语言入门编程

    目录 数码管: 1.静态数码管:第二位数码管显示0 2.动态数码管:每一位数码管依次显示对应位数 按键: 1.独立按键:按下按键对应LED亮灭 矩阵按键: 1.矩阵按键:按下的每个按键,数码管显示对应键码          数码管按段数可分为七段数码管和八段数码管,八段数码管

    2024年01月23日
    浏览(47)
  • 51单片机(六)矩阵键盘和矩阵键盘密码锁

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月04日
    浏览(53)
  • 51单片机实现按键、键盘的功能,五面拿下阿里飞猪offer

    } /******************************************************************************* 函 数 名 : main 函数功能 : 主函数 输 入 : 无 输 出 : 无 *******************************************************************************/ void main() { led=0; while(1) { keypros(); //按键处理函数 } } 矩阵键盘代码 /************************************

    2024年04月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包