基于单片机的电子密码锁系统设计

2022-11-17 03:09
无线互联科技 2022年5期
关键词:密码锁按键密码

邹 健

(湖南科技学院 智能制造学院,湖南 永州 425199)

0 引言

随着电子技术的发展,密码锁在生活中随处可见,以往的机械锁只能通过钥匙开启,而且存在容易丢失、忘记携带钥匙的缺点,给人们的工作和生活带来不少麻烦[1]。而电子密码锁可以通过指纹、蓝牙、卡片、密码、远程、应急钥匙等方式开锁,不用担心因钥匙遗失、忘带钥匙带来的烦恼。电子密码锁是大趋势,而且安防性能近年也有飞速提升。各种开锁方式,回归根本,锁本身也需要够坚固,材质要坚固,锁体要防爆,锁芯防盗防撬性能高才行。中消协普及的B级锁芯的概念,防撬时间等都有固定标准,市场上现在也有很多远远超过这个标准的锁芯,对应的企业标准也有超B级、C级等。而在开门方式上,卡容易被复制,密码容易被偷窥,指纹的安全性能是最高的[2]。指纹识别的技术也越来越先进,从早期的光学读头进步到现在的半导体读头,读取的已经不是表皮层的纹路而是深入真皮层,而且是活体识别,所以也适用于指纹淡的人群,也杜绝被复制[3-4]。

1 设计与实现

1.1 需求分析

根据前期对密码锁用户的调研,了解到密码锁的基本功能需求,现具体阐述如下。本设计采用AT89C51单片机电子锁系统,进行初始化设置,启动密码锁功能,密码输入显示屏幕采用了7段数码管半导体发光器件。系统控制指令通过单片机进行实现,单片机根据实际操作情况分配部件工作内容,程序操作性强、方便简洁。在用户输入密码过程中,单片机将会采用矩阵按键布局模式记录当前输入密码,并将该密码与系统设置密码进行比对,若密码匹配则开启密码锁,若密码错误则需要用户按下删除键重新输入密码。当用户输入密码错误次数超过3次,电子密码锁将会自动锁定,需要用户切换管理员模式输入管理员密码才可解锁当前状态,并重新输入解锁密码。

1.2 总体设计

根据设定好的密码,采用矩阵式按键实现密码的输入功能,当密码输入正确之后,锁就打开(即绿灯亮),如果输入的3次密码不正确,就锁定按键3 s,同时报警(即红灯亮)。我们将密码程序存在EPROM中,用户通过单片机上P1.0口上的按键进行选择。具体操作如下:首先按一下P1.0口上的按键,然后再逐渐输入密码,最后按#号确认即可。设置显示初始符号“—”,为了帮助用户确认是否有键按下,并且防止密码外泄,在输入显示时,并不是显示用户按下的数字符号,而是以一个特定的字母符号提醒用户是否有键按下。有键按下,就会显示字符“F”,没有键按下就是初始状态。首先按下P1.0口上的按键,然后输入密码,正确则绿灯亮,输入3次都不正确的则红灯亮。

1.3 硬件与软件设计

设计思路如下:初始化从EEPROM中读取密码,单片机通电即显示首页,按任意键进入功能选择界面,可通过按键移动光标选择直接输入密码登录,或者进行修改密码操作。(1)直接输入密码登录:通过矩阵按键输入6位数字密码,并存入数组,然后通过该数组与EEPROM读取的密码进行比对,从而判断密码是否正确,如果密码正确则显示登录成功并触发流水灯反馈结果,如果密码错误则显示输入错误并触发蜂鸣器警告,当输入密码次数超过3次则直接返回首页。(2)进行修改密码操作:提示输入原密码,键入6位密码并判断,当输入密码正确时提示输入新密码,键入6位新密码后存入EEPROM,重启或重新登录时从EEPROM读取密码,此时使用为新密码。

硬件设计主要由以下几个部分构成:AT89S52单片机最小系统、AT24C02数据存储模块、按键模块、LCD1602显示+报警模块的设计与实现,以及电路板的焊接等。主要工作包括电路图的设计、PCB图的设计、电路板的焊接与测试等。通过编写C语言程序后,将程序放入KEIL软件中进行调试,并利用该软件将C代码烧录到单片机最小控制系统中。以下为本次程序设计的编程思路:定义数值类型,调用延时程序,定义数据发送位;按键扫描程序;密码匹配及报警程序。

1.3.1 EEPROM初始化

将51单片机的头文件和i2c.h的头文件包含进来,对24C02芯片进行读写操作,调用At24c02Write函数将变量、数据写入对应的地址,调用 At24c02Read 函数进行读取操作,将从对应地址内读取的值存储在变量中。

1.3.2 LCD1602初始化

LCD1602驱动的底层协议中几个常用的函数:

(1)LcdWriteCom():写命令函数,通过此函数向LCD1602写命令。比如:清屏LcdWriteCom(0x01);设置数据指针起LcdWriteCom(0x80)。

(2)LcdWriteData():显示函数,在写数据之前需要通过LcdWriteCom()函数告诉要写数据的地址,LCD1602的第一行的16个显示位地址是0x80到0x8f;第二行的地址是0xc0到0xcf。比如在1602的第一行第一位显示数字8:LcdWriteCom(0x80)或LcdWriteData(‘8’)。

(3)showString (unsigned char Coordinate,char ∗ptr):ShowString (首地址,字符串)函数在需要显示字符串时使用。比如在第二行第3位开始显示hello:ShowString (0x13,”hello”)。其中首地址的高四位为0则表示在第一排显示,为“1”则在第二排显示。低四位为0则在第0位显示。

1.3.3 矩阵按键扫描

矩阵按键P1口的低四位接的4×4矩阵键盘的行,高四位接的矩阵键盘的列。检测矩阵键盘是否有按键按下时:先将P1端口的低四位置1,高四位清零,检测P1端口的状态,如果高四位不为零,则表示有按键按下,并且可以知道是x0-x3哪一列有按键按下,比如P1=0x1f;则第一列有按键按下。此时将P1口第四位清零,高四位置1;检测P1的状态,就知道y0-y3哪一行有按键按下。结合xy就可以知道具体是哪个按键按下。

1.3.4 输入密码

检测按键‘0’~‘9’的按下,将键入数字信息保存至输入密码数组,+‘0’因为需要存入的是ASCII码,显示密码在Lcd显示屏第2行,可修改传入值m改变密码显示形式,m=0密码以‘∗’显示,m=1密码直接显示,按下return键时返回一步,按下OK键时结束输入。

1.3.5 密码比对

先判断密码长度,如果不为6位直接跳转密码错误反馈,满足密码位数,再逐位与EEPROM内存的密码进行比对,逐一对应则跳转密码成功反馈,否则跳转密码错误反馈。

2 结语

本文设计实现的电子密码锁,基本达到了预期的功能。在整个设计和调试过程中,遇到的问题总结如下。实验调试过程中,由于数据的录入和显示会出现各种状况,在实现修改密码功能的调试过程中,由于统一使用字符型,需要与int型进行转换,可能会出现密码录入EEPROM后出现矩阵键盘无法输入的字符或其他非法字符,此时由于无法输入正确密码而需要反复调试将会增加很多麻烦,此时解决方法可以使用语句:At24c02Write(0,0);清除内存,初始化,将密码重置到888888,用于调试时可对EEPROM存入密码初始化。调试成功后可将此语句注释,恢复单片机重启后依然可以读取上次录入的新密码的功能。

猜你喜欢
密码锁按键密码
密码里的爱
基于有限状态机的按键检测程序设计
密码抗倭立奇功
开启密码锁
数字密码锁的逻辑实现
一种多方向导光按键结构设计
密码藏在何处
夺命密码
按键的多种状态检测及消抖处理方法
解析某型号手机按键检测程序的缺陷