基于单片机的四位电子密码锁的设计Word格式文档下载.docx
《基于单片机的四位电子密码锁的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的四位电子密码锁的设计Word格式文档下载.docx(46页珍藏版)》请在冰豆网上搜索。
(8)输入密码的显示/隐藏任意切换;
(9)可无线遥控,无线/有线键盘任意切换。
关键词:
AT89S52AT24C02电子密码锁矩阵键盘掉电保护无线收发
第1章方案设计与论证
·
1.1方案设计
1.1.1方案一:
采用数字电路控制
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;
如果用户输入密码的时间超过10秒(一般情况下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作。
采用数字电路设计的方案好处就是设计简单但控制的准确性和灵活性差。
故不采用
1.1.2方案二:
采用以单片机为核心的控制方案
本设计选用单片机AT89C52作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用。
当用户需要开锁时,先按键盘开锁键之后按键盘的数字键0-9输入密码。
密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当n9(次数可改)次密码错误则发出报警;
当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确后才能设置新密码。
新密码输入无误后按确认键使新密码将得到存储,密码修改成功。
可以看出方案二控制灵活准确性好且保密性强还具有声光提示、掉电存储、无线遥控等扩展功能,根据现实生活的需要此次设计采用此方案,如图1-1所示。
矩阵
键盘
控制
89C52
单片机
输入错误锁定键盘
延时报警控制电路
无线遥控控制电路
AT24C02掉电存储
指示电路
串口显示电路
图1-1单片机控制方案
1.2系统结构
图1-2
如图1-2所示系统主要由AT89C52、AT24C02液晶显示屏、蜂鸣器、LCD、4×
4矩阵键盘、复位电路、无线收发模块、无线发射键盘组成。
第2章硬件电路设计
2.189C52单片机最小系统
图2-1-1AT89S52最小工作系统
1、时钟电路:
单片机工作的时间基准,决定单片机工作速度。
时钟电路就是振荡电路,向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。
AT89S51单片机时钟频率范围:
0—33MHz。
本设计晶振选择频率为12MHZ,电容选择30pF如图(3-4)。
经计算得单片机工作胡机器周期为:
12×
(1÷
12M)=1us。
时钟电路连接方式为:
图2-1-2时钟电路
3、复位电路:
确定单片机工作的起始状态,完成单片机的启动过程。
单片机接通电源时产生复位信号,完成单片机启动,确定单片机起始工作状态。
手动按键产生复位信号,完成单片机启动,确定单片机的初始状态。
通常在单片机工作出现混乱或“死机”时,使用手动复位可实现单片机“重启”。
图2-1-3复位电路
2.24×
4矩阵键盘
如图所示,本系统采用4×
4矩阵键盘,16个按键分为输入数字键:
*、0、#、1、2、3、4、5、6、7、8、9;
功能键lock、modify、cel、Enter。
矩阵键盘。
图2-2-1
注:
其中,【0—9】为数字键,用于输入相应的密码,【*】号键为取消当前操作【#】号键为确认【D】键为修改密码【C】产生随机密码【B】修改密码输入次数
2.3液晶显示屏LCD1602
1602是指显示的内容为16*2,即可以显示两行,每行16个字符。
现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。
1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602型LCD可以显示2行16个字符,有8位数据总线D0~D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母大小写、常用符号和日文假名等,每个字符都有一个固定的代码,需要显示是可通过控制指令直接调用。
2.4蜂鸣器、发光二极管
(a)图2-4-1(b)
由于蜂鸣器(a)使用P0口驱动要加上上拉电阻如图2-4-1(a)。
在本设计中,蜂鸣器每当按下一个数字按键短蜂鸣一次,发生错误长蜂鸣一次。
由于LED(b)使用P0口驱动要加上上拉电阻如图2-4-1(b)。
2.5无线收/发模块
发射模块型号:
T1000BS1。
该模块工艺成熟、性能优秀,电磁转换效率高、发射功率大、功耗低,采用声表器件(SAW)稳频,6.5G超高频三极管,编码芯片品种繁多,满足各个方面、层次的应用。
接收模块型号:
R03BS。
接收方式:
超再生、解码芯片:
PT2272-M4(L4)。
有四路并行数据输出,一路解码有效指示输出(非锁)。
八位三态地址码、解码有效时输出TTL高电平。
输出方式:
有两种,一种为非锁(M)方式(即点动或脉冲方式),另一种为互锁(L)方式(即信号锁存方式)。
2.6掉电存储(AT24C02)
AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256×
8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)、抗干扰能力强、数据不易丢失、体积小等特点。
而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。
图2-5AT24C02的电路接线图
24C02中带有片内地址寄存器。
每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。
所有字节均以单一操作方式读取。
为降低总的写入时间,一次操作可写入多达8个字节的数据。
第3章软件程序的设计
3.1功能设计
本系统程序部分使用C语言编写,C语言是一种高级程序设计语言,它的优点是简洁明了、可移植性高。
主要完成,开始时数码管显示提示“input”输入密码。
输入密码后按下确认键,系统会将所输入与系统密码进行比对。
若输入密码正确则显示“open”开锁。
然后可以选择上锁或者修改密码、产生随机码并任意保存、修改键盘锁定错误次数、出场默认值恢复。
此外,还有声光提示、掉电保护,无线/有线切换控制和密码显示与隐藏等附加功能。
图4-1-1软件设计流程图
3.2总电路图及源程序(见图附)
第4章结束语
通过这电子设计,让我们重新学习了很多学过的旧知识,也锻炼了自己的动手能力和查阅资料的能力,以及发扬了团队的协作精神。
尤其是完成无线键盘的制作过程中,总会遇到大大小小的问题而无法成功。
归其原因,忽略了单片机设计基本的步骤和思路,急于求成。
但值得高兴的是,我们组虚心求教,及时补救,积极面对。
一次次的弯路和失败,并没有让我们感到沮丧,却让我们的知识更加的细化和完善,探索精神也被强烈的激发。
在感叹科技力量的永无止境的同时,也发现了自身知识的欠缺和不足,我们应当在以后的学习和实践过程中,更加努力和善于思考,以应对以后更加激烈的挑战。
附:
总电路图
源程序
#include<
REG51.h>
#include<
intrins.h>
stdio.h>
stdlib.h>
#defineLCM_DataP0
#definewxjcP1
#defineucharunsignedchar
#defineuintunsignedint
//#defineBusy0x80//用于检测LCM状态字中的Busy标识
#definew4//定义密码位数
sbitlcd1602_rs=P2^7;
sbitlcd1602_rw=P2^6;
sbitlcd1602_en=P2^5;
sbitwxbz=P3^6;
sbitScl=P3^4;
//24C02串行时钟
sbitSda=P3^5;
//24C02串行数据
sbitALAM=P2^1;
//报警
sbitKEY=P2^0;
//开锁
sbitmmxs=P3^7;
//密码显示
sbitopen_led=P2^2;
//开锁指示灯
bitoperation=0;
//操作标志位
bitpass=0;
//密码正确标志
bitmmsd=0;
//1~9次密码设定标志
//bitResetEn=0;
//重设密码充许标志
bitReInputEn=0;
//重置输入充许标志
bits3_keydown=0;
//3秒按键标志位
bitkey_disable=0;
//锁定键盘标志
unsignedcharcountt0,second;
//t0中断计数器,秒计数器
voidDelay5Ms(void);
staticunsignedchartmp2=80;
unsignedcharm,d,sjmbz=0;
unsignedcharcodea[]={0xFE,0xFD,0xFB,0xF7};
//控盘扫描控制表
unsignedcharcodesuijishu[]={"
RandNumber:
"
};
//随机码
unsignedcharcodeset[]={"
setting:
unsignedcharcodecwcs[]={"
Numberoferrors"
//1~9次随机码任意设定
unsignedcharcodesjp[]={"
Lockthekeypad"
unsignedcharcodestart_line[]={"
password:
----"
unsignedcharcodename[]={"
===CodedLock==="
//显示名称
unsignedcharcodeCorrect[]={"
correct"
//输入正确
unsignedcharcodeError[]={"
error"
//输入错误
unsignedchar