目录

1.硬件设计

2.软件设计

2.1.矩阵键盘扫描

2.2.矩阵键盘-密码锁

3.知识点

3.1.模块化编程的应用

3.2.#include详解


1.硬件设计

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

扫描原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果

2.软件设计

2.1.矩阵键盘扫描

功能需求:矩阵键盘扫描,LCD1602显示键码

程序设计:首先,确定扫描方式,此处选用逐列扫描;其次,确定驱动方式,单片机的IO口的模式是一种弱上拉模式(输出0时,驱动能力较强);

MatrixKey.c文件

#include <REGX52.H>
#include"Delay.h"//*逐列扫描
unsigned char MatrixKey()
{unsigned char KeyNumber=0;P1=0xFF;//P1口全部置高电平P1_3=0;//P1_3低电平if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}//如果P1_7也置低电平,按键1导通if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}//如果P1_6也置低电平,按键5导通if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}//如果P1_5也置低电平,按键9导通if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}//如果P1_4也置低电平,按键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;
}

MatrixKey.h文件

#ifndef __MATRIXKEY_H__
#define __MATRIXKEY_H__unsigned char MatrixKey();#endif

main.c文件

#include <REGX52.H>
#include"LCD1602.h"//引用LCD1602头文件
#include"MatrixKey.h"//引用MatrixKey头文件unsigned char KeyNum;//定义一个字符KeyNum,其实就是我们想要的键码
void main()
{LCD_Init();LCD_ShowString(1,1,"MatrixKey:");//第1行,第1列,显示字符串"MatrixKey:"while(1){KeyNum=MatrixKey();//将KeyNum等于我们已经定义好的矩阵键盘程序if(KeyNum)//如果有按键按下{LCD_ShowNum(2,1,KeyNum,2);//在第2行,第1列,显示对应的按键码}}
}

2.2.矩阵键盘-密码锁

功能需求:用矩阵键盘,做一个简易密码锁

程序设计:首先,确认所需按键,需要用到的按键1~10(密码区),11确认键,12清除键;那如何程序如何设计呢?

main.c文件

#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:");//定义字符创“Password:”while(1){KeyNum=MatrixKey();if(KeyNum)//如果按键按下{if(KeyNum<=10)//密码区:如果S1-S10按键按下,输入密码{if(Count<4)//密码位:定义为4位密码(int整型的数值范围0-65535;如果定义6为密码会超出int范围){Password*=10;//密码每输入一位,密码左移一位Password+=KeyNum%10;//取与的目的,主要是要将S10按键定义为数字0Count++;//没输入一次密码,计次+1}}LCD_ShowNum(2,1,Password,4);//更新显示if(KeyNum==11)//如果按下按键S11{if(Password==1229)//如果密码是1299{LCD_ShowString(1,10,"OK ");//那LCD的第1行,第10列显示OKPassword=0;//密码清零Count=0;//计次清零LCD_ShowNum(2,1,Password,4);//更新显示}else{LCD_ShowString(1,10,"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);更新显示}}}
}

3.知识点

3.1.模块化编程的应用

  • 在密码锁的代码中,主要用到的模块函数有<REGX52.H>,"LCD1602.h","MatrixKey.h";
  • 模块化编程的主要优势是,模块管理,逻辑清晰,可移植等
#include <REGX52.H>
#include"LCD1602.h"
#include"MatrixKey.h"

3.2.#include详解

  • 作用:叫做文件包含命令,用来引入对应的头文件(.h文件);#include 也是C语言预处理命令的一种。
  • 处理过程:就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件,这与复制粘贴的效果相同。
  • 用法:主要有两种,如下:
#include <REGX52.H>//查找<系统目录>,引用系统自带的程序文件
#include"LCD1602.h"//查找"当前工作目录",应用自己编辑好的程序文件

51单片机-矩阵键盘相关推荐

  1. c51单片机矩阵键盘1602计算器_基于51单片机矩阵键盘的简易计算器制作

    1. 运算过程.符号公式实时显示在显示屏上(I2C 1602). 2. 自带三角函数.开根号.平方运算. 3. 计算得出的结果可设置保存并用以下一次计算. 4. 所有运算结果精确到至少小数点后两位. ...

  2. 51单片机矩阵键盘的控制原理-扫描及使用方式

    矩阵键盘 矩阵键盘一般和之前学的LCD1602液晶屏一起控制,建议先看一下之前的博客学习一下液晶屏的使用. 当然矩阵键盘也可以和数码管和LED等一起操作,但是数码管需要扫描,很费CPU,LED又不能直 ...

  3. 51单片机矩阵键盘扫描及使用方法

    一.矩阵键盘简介 矩阵键盘,也称矩阵按键,是为了节约单片机IO口占用所引入的一种外设. (图片截取至普中A2开发板原理图) (图片截取至普中A2开发板实物图) 我们知道,一个独立按键需要1个IO口.但 ...

  4. 51单片机矩阵键盘——数码管显示

    1.前言 当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了. 1.1实验现象 按下矩阵键盘S1并松开,数码管第一位(LED8)显示0:按下矩阵键盘S2并松开,数码管第一位显示 ...

  5. 51单片机矩阵键盘——LCD1602显示

    1.前言 本次的实验需要用到LCD1602液晶屏,需要用到LCD1602.c 与LCD1602.h文件链接: https://download.csdn.net/download/YLG_lin/86 ...

  6. 51单片机矩阵键盘C程序

    飞哥语录:别高估关系,别低估人心. 主程序1: void main() {uchar i,j,ki=0;j=0;while(1){i=key();//键盘循环扫描,其值赋给变量数组tableif(i! ...

  7. c51单片机矩阵键盘1602计算器_51单片机矩阵键盘计算器.doc

    51单片机矩阵键盘计算器 51单片机矩阵键盘计算器 /**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD ...

  8. 【设计方案分享】基于单片机温度监测监控报警系统设计-基于单片机钞票自动智能识别系统设计-基于单片机乒乓球游戏机控制系统设计-基于单片机温度监测监控报警系统设计-基于单片机矩阵键盘的电子密码锁设计

    820基于单片机温度监测监控报警系统设计-设计资料 温度监测器功能描述: 1.主控芯片用的是51单片机(STC89C51). 2.使用温度传感器DS18b20采集温度. 3.用1602液晶显示显示温度 ...

  9. 基于单片机乒乓球游戏机控制系统设计-基于单片机矩阵键盘的电子密码锁设计-基于单片机温度监测监控报警系统设计-基于单片机钞票自动智能识别系统设计-设计资料【转发分享】

    819基于单片机乒乓球游戏机控制系统设计-设计资料下载 乒乓球游戏机设计任务为: (1)使用乒乓游戏机的甲乙双方各在不同的位置发球或击球. (2)乒乓球的位置和移动方向由灯亮及依次点燃的方向决定,球移 ...

  10. 一个51单片机的键盘扫描程序,算法简单有效

    一个51单片机的键盘扫描程序,算法简单有效 发一个51单片机的键盘扫描程序,算法简单有效                                        再给大家分享一个不错按键程序(来 ...

最新文章

  1. FUSE——用户空间文件系统
  2. 中国最厉害的人都上过这所最穷的大学!
  3. java 监听客户端的退出_Java ServerSocket 手动关闭监听
  4. 编写一个C程序,实现以下功能:动态申请长度为5的整数空间数组,用户输入5个整数;动态扩展数组空间为8,用户另外输入3个整数,最后输出扩展后的全部数组元素。
  5. 信息学奥赛C++语言:插队问题
  6. php 获得汉字拼音首字母的函数,php 获得汉字拼音首字母的函数
  7. ●BZOJ 4453 cys就是要拿英魂!
  8. 【思维题 单调栈】loj#2430. 「POI2014」沙拉餐厅 Salad Bar
  9. WIFI篇(1.windows下的CMD命令)
  10. 青囊如可授 从此访鸿蒙的意思,《坛滴槐花露,香飘柏子风。》
  11. c语言作业 分解质因数,C语言算法之分解质因数
  12. html的各种标签详解
  13. python相关性分析模型,相关性分析原理及Python实战
  14. 工作描述的介绍|如何写工作描述
  15. 2021电赛备赛心路历程(含代码例程)
  16. 电源篇 - 降压电路LDO
  17. SpringBoot使用elasticsearch-rest-high-level-client操作ElasticSearch
  18. sourcetree 中文版
  19. gsoap 调用 java_Qt5 + gSOAP 调用 Webservice
  20. 【团队介绍】命劫开发

热门文章

  1. 小程序 房租水电费记录管理_收租小程序开发有哪些功能和优势?
  2. python运行快捷键是什么_Python快捷键
  3. 在OBS中解决无法录制chrome的问题
  4. hcie到底是个啥 ?
  5. java代码读取txt文件_java读取txt文件代码片段
  6. 谷歌浏览器插件 清除 CSDN广告
  7. 微信H5分享钉钉分享设置方法
  8. 如何解决存在的1px问题?
  9. 极值波延拓matlab函数,函数极值是什么意思
  10. 计算机在护理专业中的论文题目,护理专业论文格式(通用模板)