摘要 本文介绍一种基于单片机和串行EEPROM的智能密码锁,对系统硬件设计和软件实现进行了详细的描述。该系统采用AT89C51单片机和AT24C01串行EEPROM,通过AT89C51模拟I2C总线和AT24C01通讯,实现密码锁的功能。
关键词 智能密码锁 单片机 串行EEPROM AT89C51 AT24C01
1.引言
电子技术的飞速发展,给传统的机械锁带来了巨大的变革,现代的电子技术与机械技术相结合,产生了一大批如声控锁、电子密码锁、遥控锁,指纹锁等先进的锁具。虽然这类产品安全性高,但因其生产成本高,安装使用不方便,在一定程度上限制了这类产品的普及和推广。本文介绍的是一种基于AT89C51单片机和AT24C01串行EEPROM的智能密码锁的硬件设计和软件实现方法,这种电路设计具有防试探按键输入、智能控制上锁、开锁、报警、修改密码等多种功能。密码长度可变,保密性强,灵活性高,外接各种执行机构,可广泛用于车辆、大门、保险柜等各种需上锁的场合。
2.设计思路
本设计中,智能密码锁工作时分为两种工作状态,分别是正常状态和锁定状态。锁定状态时,输出锁定信号,供外部执行机构使用,实现上锁功能;正常状态时,锁定信号消失,供外部执行机构使用,实现开锁功能。初始密码存储在AT24C01中,开锁时,将从面板上的微键盘输入的数字序列与AT24C01中存储的密码相比较,如果位数及每一位上的数都相吻合,则进行开锁动作,转入正常状态,否则仍将锁定。
为安全起见,密码可以进行更改。在正常状态时,程序允许用户随时进行密码修改,密码长度和数字可随意进行组合。
为防止程序“跑飞”等异常情况,本设计在软件中使用了简单的“程序陷阱”技术,根据实际需要,可酌情增加“看门狗”电路。无论是硬件复位还是软件复位后,自动进入锁定状态,保证异常情况下的安全。
锁定状态时,自动开启报警功能。如遇非法情况(如车辆锁定下仍万一发生移动等,可将这些情况转换为计数脉冲形式输入),计数若干次后报警(计数值可通过程序调整)。另外,为防止非法用户进行恶意多次试探开锁,连续三次输错密码,将进行报警。直至开锁后,所有报警消失。
3. AT89C51单片机和AT24C01串行EEPROM及其通讯
AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,内置8位中央处理器和Flash存储单元的AT89C51为智能密码锁提供了高性价比的解决方案。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口。AT89C51具有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。下图是PDIP封装的AT89C51引脚图:
AT24C01是美国ATMEL公司的低功耗CMOS串行EEPROM,它内含128×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。AT24C01具有PDIP、MSOP/TSSOP及SOIC等三种封装形式,以适应不同产品的需求。下图是PDIP封装的AT24C01引脚图:
AT24C01与外部通讯采用I2C总线。I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主控。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。时序如下图:
接收数据的IC在接收到8bit数据后,应向发送数据的IC发出特定的低电平脉冲(应答信号),表示已收到数据。时序如下图:
在开始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。控制字节如下图所示:
AT24C01写操作分为字节写和页面写两种操作,读操作分为当前地址读、随机读和顺序读等三种操作,每种读写操作都有规定的时序,可参考AT24C01用户手册。本系统采用字节写和随机读两种操作方式,具体时序由软件模拟。
4.硬件连接
AT89C51内含4k bytes程序存储器和128 bytes数据存储器,可以满足设计需要,因此外部无需扩展,节省了很多I/O口线。
系统输入部分主要有:“设置密码”键、“上锁”键、“开锁”键、3×4微键盘阵列(数字0~9以及“确定”和“取消”键)、异常情况下的计数脉冲输入等。系统输出部分主要是锁定信号的输出和报警信号的输出。
AT89C51与AT24C01的连接,通过RxD充当时钟信号线SCL,TxD充当数据线SDA来实现,I2C总线的时序由软件模拟。由于AT24C01是I2C总线上与CPU相连的唯一的一个芯片,因此可将AT24C01的地址置为000,即将A0、A1、A2接地。
具体硬件连接图如下:
5.软件实现
程序复位后,先将AT24C01中保存的密码取出,放入RAM缓冲区1中暂存,将定时器、堆栈等进行初始化,为报警系统作好准备,将RAM缓冲区2中的密码初值设置为和RAM缓冲区1中的密码不同,保证程序复位后比较密码不会相同,这时,进入RAM缓冲区1和RAM缓冲区2的密码比较程序,只有当两者位数相同而且每一位数字都相同时,执行开锁动作、输出开锁信号、进入正常状态,否则执行上锁动作、输出上锁信号、进入锁定状态。在正常状态时,可以进行重新设置密码、上锁等操作,重新设置密码时,首先验证原始密码,如相同则可进行密码更改,然后将新密码保存至AT24C01中,同时更新RAM缓冲区1。在锁定状态时,系统启动报警功能,同时等待用户开锁,如发现用户按下“开锁”键,则读入从微键盘输入的数字序列,用其更新RAM缓冲区2,转入密码比较程序,如密码相同则开锁,否则继续等待用户开锁,为防止非法用户恶意多次试探密码,可在程序中设置当连续三次输入错误密码后自动报警,直至开锁后解除。
报警系统由AT89C51内置的定时/计数器实现,锁定状态时开启,正常状态时关闭。如遇异常情况,如车辆锁定下仍万一发生移动、门锁定下仍被强行打开等,可将这些情况转换为计数脉冲形式输入,计数若干次后报警,计数值可通过程序调整。
按键和微键盘的“去抖”,为简单起见,采用软件延时的方法。为防止程序“跑飞”等异常情况,在软件中使用简单的“程序陷阱”技术,即在多余程序空间内设置一些长转移指令LJMP 0000H,进行程序复位。
程序流程图如下:
6.总结
本文作者创新点:采用串行EEPROM保存密码,用单片机实现密码锁的控制功能,克服了机械密码锁密码量少,安全性差的缺点,具有更高的安全性、可靠性。本设计中,输入采用3×4微键盘阵列,根据需要,可将其改为与电子表更改时间类似的装置。另外,可以与PC机联网,实施远距离监控、报警等功能,可广泛用于楼宇智能系统中。