C51单片机实现矩阵键盘密码锁

简介: C51单片机实现矩阵键盘密码锁

       通过则篇文章,我将带领大家一起学习用C51单片机中的矩阵键盘制造一个简易的密码锁装置,希望这篇文章对大家有所帮助,希望大家在C51单片机学习中获取更多的知识。


硬件设备连接:


将矩阵键盘JP1引脚与JP8引脚用排线连接如图所示:


相关的代码程序及分析:


Delay延迟函数代码:

 
void Delay(unsigned int xms)
{
  unsigned char i, j;
  while(xms--)
  {
    i = 2;
    j = 239;
    do
    {
      while (--j);
    } while (--i);
  }
}

注释:此代码为软件自动生成的代码,如有不懂,可参考第一篇文章,这里不再详细讲述。


MatrixKey矩阵键盘按键设置函数代码:


#include <REGX52.H>
#include "Delay.h"
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;
}


MatrixKey函数代码分析:

引入两个头文件:

#include <REGX52.H>
#include "Delay.h"

检测第一列时,先把P1的所有引脚都赋值为1,然后将P1_3引脚赋值为0,开始检测第一列按键中,是否有按键被按下(按键被按下时,所对应引脚的值将为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;}

注释:因为按行检测时,可能会触发蜂鸣器,所以本次按列检测。其余三列的检测程序均与此列相似,这里不再一一陈述。


主函数代码:

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
 
unsigned char KeyNum;
unsigned int Password=0;
unsigned int Count=0;
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;//对10取余,让按键10对应数字0
          Count++;//次数加一
        }
        LCD_ShowNum(2,1,Password,4);//更新显示
      }
      
      if(KeyNum==11)//如果S11按键按下,表示确认
      {
        if(Password==1234)//输入密码和设定密码对比
        {
          LCD_ShowString(1,10,"Right!");//密码正确
          Password=0;//密码清0
          Count=0;//计次清0
          LCD_ShowNum(2,1,Password,4);//更新显示
        }
        else
        {
          LCD_ShowString(1,10,"ERR!  ");//密码错误
          Password=0;//密码清0
          Count=0;//计次清0
          LCD_ShowNum(2,1,Password,4);//更新显示
        }
      }
      
      if(KeyNum==12)//如果S12按键按下,表示取消
        {
          Password=0;//密码清0
          Count=0;//计次清0
          LCD_ShowNum(2,1,Password,4);//更新显示
        }
    }
  }
}

主函数代码分析:

引入头文件:

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"

控制输入次数4次,并让让按键1~9对应其对应数字,按键10是代表数字0,更新数据,并在显示屏上显示:

 
        if(Count<4)//输入要小于4次
        {
          Password*=10;
          Password+=KeyNum%10;//对10取余,让按键10对应数字0
          Count++;//次数加一
        }
        LCD_ShowNum(2,1,Password,4);//更新显示

如果按键11被按下,判断输入的密码是否是1234,如果是,则在显示屏上显示Right!,然后把密码清0,计数也清0,更新数据。如果不是,则在显示屏上显示ERR,然后把密码清0,计数也清0,更细数据。

 
      
      if(KeyNum==11)//如果S11按键按下,表示确认
      {
        if(Password==1234)//输入密码和设定密码对比
        {
          LCD_ShowString(1,10,"Right!");//密码正确
          Password=0;//密码清0
          Count=0;//计次清0
          LCD_ShowNum(2,1,Password,4);//更新显示
        }
        else
        {
          LCD_ShowString(1,10,"ERR!  ");//密码错误
          Password=0;//密码清0
          Count=0;//计次清0
          LCD_ShowNum(2,1,Password,4);//更新显示
        }
      }

如果12按键被按下,把密码清0,把计数也清0,然后再显示屏上更新数据。

if(KeyNum==12)//如果S12按键按下,表示取消
        {
          Password=0;//密码清0
          Count=0;//计次清0
          LCD_ShowNum(2,1,Password,4);//更新显示
        }

相关视频演示:

image.png

VID_20230524_215102

目录
相关文章
|
1月前
|
数据格式
用C51单片机制作LED流水的灯
用C51单片机制作LED流水的灯
46 0
|
3月前
|
存储 数据安全/隐私保护 芯片
毕业设计 基于51单片机的指纹红外密码电子锁
毕业设计 基于51单片机的指纹红外密码电子锁
|
6月前
|
监控 数据处理 开发工具
单片机的C51基础知识介绍2
三、单片机的开发流程和工具 单片机的开发流程通常包括以下几个步骤: 硬件设计:根据应用需求,设计和选择合适的外部电路和接口电路,包括时钟电路、输入输出电路、存储器等。 软件开发:根据应用需求,使用相应的开发工具和编程语言进行软件开发,如C语言、汇编语言等。开发人员需要编写相应的代码,实现系统的功能和控制。 编译和烧录:将开发好的软件代码进行编译和链接,生成可执行的机器代码。然后将机器代码通过编程器烧录到单片机的存储器中。 调试和测试:将烧录好的单片机进行调试和测试,验证系统的功能和性能是否符合要求。可以通过调试工具和示波器等设备进行调试和测试。 单片机的开发工具和软件包括: 开发板
42 0
|
6月前
|
存储 编译器 开发工具
单片机的C51基础知识介绍1
C51是指Intel公司推出的一款8位单片机,它的全称是Intel MCS-51系列单片机,也被称为8051系列单片机。C51系列单片机是一种非常经典和常用的单片机,具有广泛的应用领域和丰富的资源支持。下面将介绍C51单片机的基础知识。 一、C51单片机的特点和优势 1. 8位架构:C51单片机采用8位架构,即每个数据位的宽度为8位,能够处理8位的数据,适用于大部分嵌入式应用。 2. 高度集成:C51单片机具有高度集成的特点,包括CPU、存储器、输入输出端口、定时器、串口等功能模块,能够满足大多数应用的需求。 3. 低功耗设计:C51单片机采用低功耗设计,能够在低电压和低功耗的环境下正常工作,
160 0
|
8月前
|
安全
51单片机和LCD1602实现简单的密码锁
51单片机和LCD1602实现简单的密码锁
78 0
|
9月前
|
C语言
C语言课设项目-51单片机-独立按键与矩阵按键
C语言课设项目-51单片机-独立按键与矩阵按键
139 0
|
9月前
【单片机】数码管矩阵显示
【单片机】数码管矩阵显示
60 0
|
10月前
|
编译器
【C51单片机】中断系统之单一外中断应用
【C51单片机】中断系统之单一外中断应用
249 0
|
11月前
【STC15单片机】简单的矩阵键盘代码
【STC15单片机】简单的矩阵键盘代码
182 0
|
11月前
|
存储
【51单片机】用定时器扫描矩阵键盘
【51单片机】用定时器扫描矩阵键盘
213 0