基于C语言STC89C52单片机电子密码锁的设计与仿真

时间:2022-09-07 11:30:38

基于C语言STC89C52单片机电子密码锁的设计与仿真

摘 要:介绍一种通过Protues软件成功仿真的电子密码锁的实现过程。它采用高可靠性的STC89C52单片机来实现开锁和密码的识别,采用具备I2C总线接口的E2PROM芯片来完成密码的存储,通过1602液晶显示器提示程序运行状态和使用步骤,利用蜂鸣器模拟报警,发光二极管模拟锁的开关。该系统用C语言编写程序,与汇编语言相比具备更好的移植性和可读性,便于修改和增减功能。

关键词:Protues; 密码锁; 单片机; C语言

中图分类号:TN433-34文献标识码:A

文章编号:1004-373X(2010)19-0176-03

Design and Simulation of Electronic Code Lock Using STC89C52 MCU Based on C Language

JIN Gui, XIANG Guo-liang

(Department of Physics & Electronic Information Engineering, Xiangnan University, Chenzhou 423000, China)

Abstract: The implementation of an electronic code lock which was successfully simulated by Protues is introduced. It uses high reliable microcontroller STC89C52 to achieve the unlocking and identification of the code, adopts I2C bus-based E2PROM chip to complete the code′s storage, uses LCD1602 to prompt the program′s running state and working procedures, adopts buzzer to imitate the alarm and LED to imitate the switch. It is convenient to modify and add function by using C language program,which is more transplantable and reliable compared to assembly language.

Keywords: Protues; code lock; single chip microcomputer; C language

0 引 言

电子密码锁是现代生活中常用的加密工具。它克服了机械式密码锁密码量少、安全性能差的缺点,尤其是微控制器的智能电子密码锁,不仅具有电子密码锁的功能,还可引入智能化管理功能,从而使密码锁具有更高的安全性和可靠性。

电子密码锁通常使用ARM和单片机控制[1],单片机相对ARM实现较为简单,功能较为完善,因此使用单片机控制较多。用单片机控制的密码锁常使用汇编语言编写程序,显示器多数用数码管[2-3]。而本文所介绍的电子密码锁使用移植性及可读性强的高级语言C语言编写,便于修改和增减功能;同时采用显示清楚,功率消耗小而且寿命长的1602液晶显示器,显示更加直观,使用更加方便。从经济实用的角度出发, 采用STC89C52[4]单片机设计出一种具有密码设置、报警和防止多次试探密码功能的电子密码锁,通过Protues软件成功地进行了仿真。

1 系统工作原理

本系统以STC89C52单片机为核心,使用4×4矩阵键盘作为数据输入方式,驱动1602显示器提示程序运行过程和开锁的步骤。本系统的密码判断过程如下:

当使用者输入6位密码后按下BESURE键,单片机通过密码逐个比较,如果输入的6位密码和设定的密码完全相同,那么能成功驱动开锁模拟灯将锁打开。若输入6位密码与设定的密码不相同,按下BESURE键后,模拟灯不亮,可以按BACK键重新输入。由于输入密码过程中难免输入失误,如果密码输错,可直接按下BACK键重新输入,但是系统不允许无限次地按BACK键,以免密码被套用,当3次密码输入都错误,单片机将驱动蜂鸣器报警[5]。并且本系统输入密码还有时间限制,若在规定的时间内没有将正确密码输入也会报警。

修改密码功能如下:当密码输入正确后,按下SET键可新设置密码。每设定一位新密码,单片机将其送给E2PROM,当6位新密码都输入完毕,系统将自动回到程序开始,重新读取密码并保存,使用者需输入新的密码才能将锁打开。

2 系统设计

2.1 硬件支持

使用的元器件有:核心芯片STC89C52、存储芯片AT24C02、液晶显示1602、矩阵键盘、报警蜂鸣器、独立按键(模拟门的开关)、发光二极管(模拟锁的开关)和┤极管(放大电流)。

2.2 软件设计

本系统软件包括主程序模块、密码比较判断模块、修改密码模块、键盘扫描模块、液晶显示模块及定时程序等模块。系统程序流程如图1所示。

图1 系统程序流程图

2.2.1 主程序模块

主程序主要用于定义全局变量,给全局变量赋初值,初始化E2PROM,启动定时器以及从AT24C02[6]中读取密码,为整个程序提供数据。

2.2.2 密码比较判断模块

该模块的功能是将键盘输入的密码利用if语句与设定的密码进行逐个比较,若密码完全正确则开锁;若不正确,则按下BACK键,重新输入密码,每按下BACK键一次,输入次数将自加1,当3次都出错则报警。

2.2.3 密码修改模块

在密码输入正确情况下,可以按下SET对密码进行重新设置,每设定一位就将密码送给AT24C02存储起来,当设置6位密码完毕后,系统将自动跳到程序开始,调用新设置的密码。

STC89C52向AT24C02写入密码子程序:

void write_byte(uchar date)

{

uchar i,temp;

temp=date;

for(i=0;i

{

temp=temp

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

delay1();

}

scl=0;

delay1( );

sda=1;

delay1( );

}

STC89C52从AT24C02读取密码子程序:

uchar read_byte()

{

uchar i,k;

scl=0;

delay1();

sda=1;

delay1();

for(i=0;i

{

scl=1;

delay1();

k=(k

scl=0;

delay1( );

}

return k;

}

2.2.4 键盘扫描模块[7]

该模块具备功能有:逐列扫描键盘确定被按键的具置、判断键盘上有无键按下、消除去抖动、判断闭合的键是否释放等功能。

2.2.5 定时模块[8]

本模块用于对密码输入时间控制。在程序开始运行时首先对定时器进行了初始化,从按下PUT IN键开始,系统开始计时,当输入的时间达到规定的时间将立即报警。

2.2.6 液晶显示模块[9]

此模块包括液晶初始化、命令的输入、显示数据的输入。其中命令是用于控制液晶状态是否显示光标,光标是否闪烁,是否清除原来数据以及显示的具置。数据显示主要是将要显示的信息按需要准时显示出来。

3 系统仿真

为了方便程序调试,本文采用了Proteus仿真[10],仿真图如图2所示。

图2 系统仿真图

3.1 系统介绍

图2中U1为STC89C52是整个系统的核心,编写的程序以二进制的文件导入其中;U2为AT24C02,┑5和第6个引脚分别与单片机的P1.2和P1.3相连;LCD1为1602液晶显示器,引脚连接如图2所示;独立按键DOOR,当门关上为键按下状态;D1为模拟开锁灯,当密码正确,按下BESURE键D1将亮;BUZ1为蜂鸣器报警。当程序编写好并导入到单片机里后,按下┩2最下面的开始按钮,1602液晶显示器将提示密码锁的运行状态,系统开始工作。

3.2 开锁功能

当电源开启时,1602液晶显示Welcome欢迎界面,当按下PUT IN键后,显示器显示PUT IN CODES提示使用者输入密码,如图3所示。几秒后液晶显示器上提示将自动消失。此时可输入正确密码,且密码输入时显示*而不会将输入的数据显示出来。当输入密码完毕后,按下BESURE键,如果输入的密码正确D1将亮(D1作为开锁的模拟开关)。若密码错误,可以按下BACK键,程序将跳到loop(开始界面),重新输入密码,同时输入次数将增加一次。当3次都输入错误则自动报警,并且输入密码的时间必须在规定的时间完成,否则也会报警。

图3 液晶显示

3.3 密码设定

在密码输入正确后,按下SET键可对密码进行重新设置,液晶显示器显示SET CODS。同样几秒后提示信息将自动消失,此时开始重设密码。在密码设定过程中会将设定的数字显示出来,每输入一位密码需按下YES键确定,当设置的密码达到6位将自动回到启动界面。

4 结 论

(1) 成功仿真实现了1602液晶显示,密码开锁,密码设置,防止多次试探,报警等功能。

(2) 采用C语言编写程序,具有很强的移植性,为系统增减和修改功能带来了方便。

参考文献

[1]郭海英.基于单片机的电子安全密码锁的设计[J].现代电子技术,2005,28(13):95-97.

[2]赵益丹,徐晓林,周振峰.电子密码锁的系统原理、设计程序及流程图[J].嘉兴学院学报,2003(15):103-105.

[3]曾高荣,胡宁,高扬.一种新型电子安全密码锁的设计[J].电子科技,2003(8):44-45.

[4]张天凡.完全手册51单片机C语言开发详解[M].北京:电子工业出版社,2008.

[5]周功明.基于AT89C2051单片机的防盗自动报警电子密码锁系统的设计[J].绵阳师范学院学报,2007(4):112-115.

[6]刘振栋.EPROM芯片的特殊应用[J].电子工程师,1999(6):26-27.

[7]唐德礼,王襄.单片机学习机及编程器的设计与制作[J].现代电子技术,2005,28(12):117-120.

[8]倪淑艳,李晓波,于涵.单片机C8051F303在数字锁相式频率合成器中的应用[J].现代电子技术,2006,29(4):19-21.

[9]贵国庆.用ME300B型单片机开发系统设计智能电子密码锁[J].单片机学习与交流,2006(5):55-56.

[10]李娜,刘雅举.Proteus在单片机仿真中的应用[J].现代电子技术,2007,30(4):181-182.

上一篇:光纤接口适配器的研究与实现 下一篇:基于车辆动力学模型的AMT在环仿真实验系统研究