安全性是我们日常生活中的主要问题,数字锁已成为这些安全系统的重要组成部分。有很多类型的技术可以保护我们的位置,例如基于PIR的安全系统,基于RFID的安全系统,激光安全警报,生物矩阵系统等。即使到现在,也可以使用我们的智能手机操作数字锁,这意味着没有更加需要保持不同的钥匙,仅一部智能手机就可以操作所有锁,这种概念基于物联网。
在此项目中,我们已经说明了使用8051 Microcontorller的简单电子密码锁,该密码只能由预定义的密码解锁,如果输入错误的密码,系统将通过蜂鸣器发出警报。我们已经使用Arduino创建了数字锁。
工作说明:
该系统主要包含AT89S52微控制器,键盘模块,蜂鸣器和LCD。At89s52微控制器控制整个过程,例如从键盘模块获取密码,比较密码预定义的密码,驱动蜂鸣器以及将状态发送到LCD显示屏。键盘用于将密码插入微控制器。蜂鸣器用于指示错误的密码,LCD用于显示状态或消息。蜂鸣器使用NPN晶体管内置驱动器。
组件:
- 8051单片机(AT89S52)
- 4X4键盘模块
- 蜂鸣器
- 16x2 LCD
- 电阻(1k,10k)
- 上拉电阻(10K)
- 电容器(10uf)
- 红色LED
- 面包板
- IC 7805
- 11.0592 MHz晶体
- 电源供应
- 连接线
使用多路复用技术从4X4键盘矩阵获取输入:
在此电路中,我们使用了多路复用技术来将键盘与8051微控制器接口,以便在系统中输入密码。在这里,我们使用具有16个按键的4x4键盘。如果要使用16个按键,则需要16个引脚来连接到89s52,但是在多路复用技术中,我们仅需要使用8个引脚来连接16个按键。因此,这是连接小键盘模块的明智方法。
复用技术是一种非常有效的方法,可以减少与微控制器用于提供输入或密码的引脚数量。基本上,这种技术有两种使用方式:一种是行扫描,另一种是列扫描。
在这里,我们将解释行扫描:
首先,我们必须为键盘模块定义8针。其中前四个引脚为列,后四个引脚为行。
对于行扫描,我们需要将数据或信号提供给列引脚,并从行引脚读取该数据或信号。现在假设我们将以下数据提供给列引脚:
C1 = 0;
C2 = 1;
C3 = 1;
C4 = 1;
然后,我们在行引脚上读取此数据(默认情况下,由于上拉电阻,行引脚处于高电平)。
如果用户按下键号“ 1”,则R1由高变低,意味着R1 = 0;并且控制器了解到用户已按下键“ 1”。然后它将在液晶显示屏上打印“ 1”,并以阵列形式存储“ 1”。因此,在R1上从HIGH到LOW的变化是控制器了解对应于第1列的某个键已被按下的主要原因。
现在,如果用户按下键号“ 2”,则R1保持在HIGH,因为C1和R1都已经处于HIGH。因此不会有任何变化,这意味着微控制器知道在第一列中什么都没有按下。同样,这个原理也适用于所有其他引脚。因此,在此步骤中,控制器仅等待第一列中的键:“ 1”,“ 4”,“ 7”和“ *”。
现在,如果我们要跟踪其他列中的键(如第2列中的列),则需要更改列pin上的数据:
C1 = 1;
C2 = 0;
C3 = 1;
C4 = 1;
该时间控制器仅等待第二列中的键:“ 2”,“ 5”,“ 8”和“ 0”,因为更改(从高到低)仅在按下第二列键时发生。如果我们按第1、3或4列中的任意键,则不会发生任何变化,因为这些列位于HIGH,而行已经位于HIGH。
因此,同样也可以通过一次将其设置为0来跟踪列C3和C4中的键。请查看此处的详细说明:与8051进行键盘接口。也请仔细阅读下面的“代码”部分,以正确理解其逻辑。
电路说明:
使用8051的此数字锁的电路图如下所示,可以很容易地理解。键盘模块的列引脚直接连接到89s52微控制器端口0的引脚P0.0,P0.1,P0.2,P0.3和行引脚连接到P0.4,P0.5,P0.6,P0.7 。16x2 LCD以4位模式与89s52微控制器连接。控制引脚RS,RW和En直接连接到引脚P1.0,GND和P1.2。数据引脚D4-D7连接到89s52的引脚P1.4,P1.5,P1.6和P1.7。一个蜂鸣器通过一个电阻连接到引脚P2.6。
程序说明:
我们在程序中使用了预定义的密码,该密码可以由用户在下面的代码中定义。当用户输入系统密码时,然后系统将用户输入的密码与程序代码中存储的或预定义的密码进行比较。如果发生匹配,则LCD将显示“ Access Grated”,如果密码不匹配,则LCD将显示“ Access Denied”,并且蜂鸣器将持续发出蜂鸣声一段时间。在这里,我们使用了string.h库。通过使用该库,我们可以使用“ strncmp”函数比较或匹配两个字符串。
在程序中,首先我们包含头文件,并定义用于键盘和LCD的变量以及输入和输出引脚。
#包括
已经创建了用于创建1秒延迟的功能,以及一些LCD功能,例如用于LCD初始化,打印字符串,用于命令等。您可以在Code中轻松找到它们。检查本文以了解与8051及其功能的LCD接口。
此后,在主程序中,我们已经初始化LCD,然后使用keyboard()函数从键盘读取输入,并将输入键存储到数组中,然后使用strncmp将其与预定义的数组数据进行比较。
void main(){buzzer = 1; lcd_init(); lcdstring(“电子代码”); lcdcmd(0xc0); lcdstring(“ Lock System”); 延迟(400); lcdcmd(1); lcdstring(“ Circuit Digest”); 延迟(400); while(1){i = 0; 小键盘(); if(strncmp(pass,“ 4201”,4)== 0)
如果输入的密码匹配,则调用accept()函数:
无效accept(){lcdcmd(1); lcdstring(“ Welcome”); lcdcmd(192); lcdstring(“密码接受”); 延迟(200); }
如果密码错误,则会调用rong()函数:
无效rong(){蜂鸣器= 0; lcdcmd(1); lcdstring(“密码错误”);lcdcmd(192); lcdstring(“ PLZ再试一次”); 延迟(200); 蜂鸣器= 1; }
在读取输入形式的键盘模块的代码中检查以下键盘功能。