一、矩阵键盘的使用

1、在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式 采用逐行或主列的“扫描”,就可以读出任何位置按键的状态(扫描快速)

2、原理图

3、 扫描的区分

数码管通过快速循环不同位数,实现数码管同时显示的效果,而矩阵键盘通过快速循环不同列与行实现所有按键同时检测。

优点:节省IO口

二、代码的实现

1、对于键盘而言 有

#include <REGX52.H>
#include "Delay.h"/*** @brief  矩阵键盘读取按键键码* @param  无* @retval KeyNumber 按下按键的键码值如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,返回0*/
unsigned char MatrixKey()
{unsigned char KeyNumber=0;P1=0xFF;P1_3=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}P1=0xFF;P1_2=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}P1=0xFF;P1_1=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}P1=0xFF;P1_0=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}return KeyNumber;
}

首先将P1所有的端口置1,对其进行每一列的扫描,先对P3置0,当按下对应的按键时,再松开的时候,会产生低电平0,此刻存在着一个松手检测,当松开手之后,才显示对应的数字。

三、制作简单的电子密码锁

1、先上代码

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"unsigned char KeyNum;
unsigned int Password,Count;void main()
{LCD_Init();LCD_ShowString(1,1,"Password:");while(1){KeyNum=MatrixKey();if(KeyNum){if(KeyNum<=10)    //如果S1~S10按键按下,输入密码{if(Count<4)   //如果输入次数小于4{Password*=10;              //密码左移一位Password+=KeyNum%10;      //获取一位密码Count++;  //计次加一}LCD_ShowNum(2,1,Password,4); //更新显示}if(KeyNum==11) //如果S11按键按下,确认{if(Password==2345)  //如果密码等于正确密码{LCD_ShowString(1,14,"OK ");  //显示OKPassword=0;      //密码清零Count=0;     //计次清零LCD_ShowNum(2,1,Password,4);  //更新显示}else             //否则{LCD_ShowString(1,14,"ERR");  //显示ERRPassword=0;     //密码清零Count=0;     //计次清零LCD_ShowNum(2,1,Password,4);  //更新显示}}if(KeyNum==12)    //如果S12按键按下,取消{Password=0;      //密码清零Count=0;     //计次清零LCD_ShowNum(2,1,Password,4);  //更新显示}}}
}

2、总结

密码锁的主要难点在于如何输入采集密码 对于密码而言 当我们按下对应的数字后 所显示的是我们所输入数的和 关键在于%和*的理解 取余只能得到末尾 因此合理的得到了密码序列

51单片机入门教程__矩阵键盘的使用相关推荐

  1. 51单片机入门教程学习笔记

    基于江科大自化协B站教学视频<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 一.单片机介绍 单片机,英文Micro Controller Unit,简称MCU 内部集成了 ...

  2. 51单片机入门教程(6)——外部中断

    51单片机入门教程(6)--外部中断 一.外部中断 1.1 中断 1.2 外部中断 二.中断优先级 一.外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了.(传送门:51单片机入门教程(5 ...

  3. 51单片机入门教程(5)——定时器中断

    51单片机入门教程(5)--定时器中断 一.中断的概念 二.定时器中断 2.1 软件延时的不足 2.2 中断寄存器 2.2.1 中断允许控制寄存器 IE 2.2.2 定时器工作方式寄存器 TMOD 2 ...

  4. 51单片机入门教程(1)——点亮一个LED灯

    51单片机入门教程(1)--点亮一个LED灯 一.什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器 ...

  5. 51单片机入门教程(3)——数码管显示

    51单片机入门教程(3)--数码管显示 一.LED数码管简介 二.数码管静态显示 三.数码管动态显示 特别鸣谢:HFUTer-朱聪强 一.LED数码管简介 LED数码管(LED Segment Dis ...

  6. b站江科大自化协51单片机入门教程笔记(2)

    文章目录 6-1 矩阵键盘 6-2 矩阵键盘密码锁 7-1 定时器 7-2 按键控制LED流水灯 & 定时器时钟 独立按键模块 定时器模块 8-1 串口通信 8-2 串口向电脑发送数据 &am ...

  7. 基于51单片机LCD1602的简易矩阵键盘密码锁

    写在前面 初次开始写博客,表达方面也许会有很多不足,希望自己能通过这种方式巩固自己的学习和锻炼表达能力,同时也是对于自己学习的记录. 一.功能介绍 四位密码锁,密码可更改,输入仅四次以内有效 矩阵键盘 ...

  8. 51单片机入门教程(1)——如何建立工程

    目录 1.Keil篇 2.Proteus篇 3.小结 由于大家可以在本网站上找到很多安装keil和protues的教程,在此我就不再赘述.当大家都顺利安装好这两个软件之后,下面我们来学习如何建立新工程 ...

  9. 51单片机入门教程(3)——数码管显示学号

    目录 1.数码管简介 2.静态显示 3.动态显示 4.小结 相信经过了流水灯的实现,大家已经弄清楚了Keil和Proteus是如何联动使用的,并且对51单片机也有了一定的认识,在这一章里,我带大家利用 ...

最新文章

  1. javascript之DOM编程正则表达式引入
  2. 一个有趣的Script脚本工具
  3. 关于解决mybase7继续使用的方法
  4. 6.19决战光荣日,一场魔兽狂欢里的青春、父爱和友谊
  5. activiti搭建
  6. 全志线刷工具如何刷linux,全志 Allwinner V3S 开发环境搭建 (二)安装必要工具
  7. oracle挂证多少钱一个月_惊呆,一条sql竟然把Oracle搞挂了
  8. python在工厂中的运用_在python中使用元类实现工厂设计模式
  9. 使用async读取异步数据
  10. 1.jenkins持续集成-jenkins安装
  11. python编程入门-最好的Python入门教材是哪本?
  12. 洛谷 P1164:小A点菜(DP/DFS)
  13. 数据链路层之以太网协议和网络层IP协议
  14. 微信公众号发送模板消息
  15. python绘图颜色代码_Python绘图的颜色设置
  16. Rational rose安装步骤
  17. android sim卡应用程序,Android双SIM卡API
  18. 2022-2028全球与中国纳米保湿美容仪市场现状及未来发展趋势
  19. 我数星星...宝宝,你智商差点,就数月亮吧
  20. c#取消word修订痕迹_法律人必备的WORD技能,从1.0到2.0丨星瀚技术派

热门文章

  1. 牛客网Java后端开发面经汇总
  2. APPLE越狱软件测试,iOS的越狱检测和反越狱检测剖析
  3. Hexo 博客优化之博客美化系列(持续更新)
  4. SignalR 2.0 系列: SignalR 自托管主机
  5. 看流行韩剧 简单学韩语
  6. spring boot 中使用 POP3协议读取并解析邮件
  7. TP4056/4057/4054充电不转灯闪FAE技术
  8. MFC ado操作mdb数据库
  9. python数组加入值_python一维数组怎么添加元素
  10. python扩展包安装_Python包管理工具Distribute的安装