电子密码锁技术文件.doc_第1页
电子密码锁技术文件.doc_第2页
电子密码锁技术文件.doc_第3页
电子密码锁技术文件.doc_第4页
电子密码锁技术文件.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长沙航空职业技术学院 声像0901 唐斌 王林达 许涛涛电子密码锁项目资料班级: 声像0901 指导老师: 蒋雄 组长: 唐斌 组员: 唐斌 王林达 许涛涛 基于单片机设计的电子密码锁摘要:本设计主要是基于AT89S52芯片为核心的电子密码锁,并有AT24C02、4x4矩阵键盘、79LS164、数码管等器件组成,包括单片机系统、开锁电路、报警电路、LCD显示电路。主要实现掉电存储、成功开锁显示、任意设定6-16位长度的密码、声光指示等功能。依据实际的情况还可以添加红外遥控,备用电源功能。本系统成本低廉,功能实用。关键词:AT89S52 AT24C02 4x4矩阵键盘 掉电存储 LCD显示电路1 引言随着人们生活水平的提高以及社会的发展,如何实现日常生活的安全这一问题也变的尤为重要,传统的机械锁由于其构造的简单,保密性并不高。现在,随着电子工业的发展,单片机技术已经深入到了人们生活的各个层面及领域,各种各样的电子产品也正在日新月异地向着高、精、尖技术发展。在安全技术防范领域,出于安全方面的需要性,许多电子密码锁已相继问世。由于其保密性高,使用灵活好,安全系数高,受到了广大用户的信赖。本文主要使用以AT89S52为核心的单片机设计编程,来实现控制开锁、掉电存储、超时报警、声光指示、液晶显示等功能。1.1使用说明书1密码设置初始密码通过密码修改程序用单片机写入E2PROM存储器,初始密码为201012142密码修改当需要修改密码时,先输入原始密码,单击确定按钮确认后,系统先进行密码校验,如果正确则显示“New Password ”,然后输入新的6-16位数密码,再单击确定按钮,然后系统会提示再次输入新密码,再单击确定按钮,如果两次新密码一致则提示密码修改成功3密码存储由键盘输入的密码存储在E2PROM则存储着系统设置的密码,掉电后密码依然还在,这就是采用E2PROM的优点。4本机键开锁输入正确的密码后,单击OK按钮,系统显示“Welcome!”的欢迎信息,同时输出指示灯LED点亮,驱动电控锁机构完成开锁动作。5密码错误报警当输入的密码不正确时,系统显示“Wrong password”,然后输入次数加1,返回等待继续输入密码,当输入错误的密码达3次后,系统显示“Lock”,系统同时发出报警,驱动蜂鸣器发出报警声。当系统锁定时所有按键无效,只有等待一定时间后,系统才会恢复正常状态6密码显示正常情况下,系统显示“Input Password ”,在每输入一位密码系统先显示数字后显示一个“*”,掩盖掉当前输入的密码,所以可以防止密码信息泄露而比较安全。2 总体设计方案2.1 设计思路l 本设计主要是以AT89S52为核心编程来实现对整个电路各个部分的控制。l 其中使用AT24C02来实现模拟I2C的功能,当设定密码时,将其传入AT24C02中,这样在失电时仍然能记忆其中的值,从而实现掉电存储,这样在再次上电输入密码时,将其和AT24C02中存储的密码进行比较,若密码一致便实现开锁,l 由于电路所使用的按键比较多,因此利用AT89S52的8个口来设计4x4矩阵键盘,其中0-9键分配为数字键,10-15键分配为功能键,依次为复位、退出、密码修改、删除、确定键。l 当输入密码正确时,使单片机给开锁驱动电路提供驱动信号,从而实现成功开锁。l 当输入密码连续三次输入错误时,利用单片机发出的信号驱动报警电路来实现报警并且锁定键盘,此时只有等待一定时间才实现键盘的解锁。2.2 电路原理方框图开锁驱动电路AT89S51单片机AT24C02存储LCD显示电路矩阵键盘电路指示电路错误锁定键延时报警电路图1 电路方框图开始2.3设计流程图初始化调用显示YN有键按下?键值识别N数字键?存储键值YY是否确定键?密码错误显示NY密码正确?记录错误次数YNYN3次?Y驱动开锁程序开锁锁定延时报警复位延时解锁改密键按下提示输入旧密码旧密码验证按键扫描OK键按下密码错误记录错误次数大于等于3次?锁定YN报警延时解锁密码正确提示输入新密码OK键按下提示再次输入新密码OK键按下两次新密码是否一致?是否密码修改成功改密键再次按下退出改密模式密码修改流程图 3 设计原理分析3.1 单片机最小系统其作用主要是为了保证单片机系统能正常工作。如图2所示,单片机最小系统主要由AT89S52单片机、外部振荡电路、复位电路和+5V电源组成。在外部振荡电路中,单片机的XTAL1和XTAL2管脚分别接至由12MHZ晶振和两个30PF电容构成的振荡电路两侧,为电路提供正常的时钟脉冲。在复位电路中,单片机RESET管脚一方面经22F的电容接至电源正极,实现上电自动复位,另一方面经一个按键和两个大小分别为200和1K的电阻分别接至电源正极和电源地,实现手动复位。其主要功能是把PC初始化为0000H,是单片机从0000H单元开始执行程序,除了进入系统的初始化之外,当由于程序出错或者操作错误使系统处于死锁状态时,为了摆脱困境,也需要按复位键重新启动,因此,复位电路是单片机系统中不可缺少的一部分。图2 单片机最小系统3.2 矩阵键盘电路键盘可以分为独立连接式和行列式(矩阵式)两类。根据设计要求,本电路设计采用44行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目。矩阵式键盘又叫行列式键盘。用I/O口线组成行列结构,按键设置在行列的交叉点上。本电路采用4条行线和4条列线,即可组成具有44个按键的键盘。其电路图如下图3所示。对键的识别通常用逐行扫描查询法。首先判别键盘中有无按键按下,由单片机I/O口向键盘送(输出)全扫描字,然后读入(输入)列线状态来判断。方法是:向行线输出全扫描字00H,把全部行线置为低电平,然后将列线的电平状态读入累加器A中。如果有键按下,总会有一根列线电平拉至低电平,从而使列输入不全为1。键盘中哪一个键按下,是由行线逐行置低电平后,检查列输入状态实现的,其方法是:依次给行线送低电平,然后查所有列线状态,如果全为1,则所按下的键不在此行,如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个键。图3 矩阵电路其工作原理为:将P3.0口置低电平,即第4行变为低电平,其余置高电平时输出编码为1110,然后读取列方法同上。判别第4行是否有键按下,在第4行上若有一按键按下,则相应的列被拉到低电平,则表示第4行和此列相交的位置上有按键按下,若没有任一列线为低电平,则说明第4行上无键按下,其余按键方法同上。3.3 报警电路图4 报警电路报警电路由一个蜂鸣器、一个8550三极管和一个5.1K的电阻构成,接在单片机的P2.6管脚,如图4所示,当密码的输入时间超过12秒或者连续3次输入失败,需要由报警来提示。本设计的报警电路由蜂鸣器及其驱动电路组成。其电路图如图4所示。P2.6口接晶体管基极输入端。当密码锁电路需要发出报警信号时,P2.6口输出低电平0,使晶体管导通,从而驱动蜂鸣器鸣叫;当密码锁没有报警信号时,P2.6口输出高电平1时,三极管截止,蜂鸣器停止发声。3.4 AT24C02掉电存储单元掉电存储单元的作用是在电源断开的时候,存储当前设定的密码值。AT24C02是ATMEL公司生产的2KB电可擦除存储芯片,采用两线串行的总线和单片机通信,电压最低可以到2.5V,额定电流为1mA,静态电流10A(5.5V),芯片内的资料可以在断电的情况下保存40年以上,采用8脚的DIP封装,使用方便。其电路如图5所示:图中上拉电阻的作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数。每当成功修改一次密码,系统就自动调用存储程序,将新密码保存在芯片内;当系统需要进行密码识别时,通过程序读取存储器中的密码值存入缓冲区,与所输入密码进行比较,完成密码锁的开锁控制。图5 掉电存储电路l 简介IIC总线(1)IIC总线特点I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够10Kbps的最大传输速率支持40个组件。IIC总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。(2)IIC总线工作原理 IIC总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,IIC总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。 (3)IIC总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。 l 24C02芯片的读写(1)24C02的引脚排列(2)24C02的引脚说明(3)与24C02有关的三个时序启动和结束时序应答时序完整的数据传送时序3.5 LCD显示电路图6 LCD显示电路图7该系统采用1602工业字符型液晶,字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。本系统采用长沙太阳人电子有限公司的1602字符型液晶显示器。一般1602字符型液晶显示器实物如图7所示1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图所示:图8 1602LCD尺寸图1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表1:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如下表所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表21602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。与HD44780相兼容的芯片时序表如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表3基本操作时序表读写操作时序如图7和8所示:图7 读操作时序图8 写操作时序1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置3.6 开锁电路当用户输入的密码正确时,由单片机发出开锁信号,送到开锁驱动电路,然后驱动电磁锁吸合,从而达到开锁的目的。其电路图如下图7所示。本电路由驱动和开锁两级组成。由三极管8550组成驱动电路。LED作为开锁的提示。其中二极管是为了消除继电器和电磁锁可能产生的反向高电压以及可能产生的电磁干扰。本设计中,基于节省材料的原则,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。图9 开锁电路4程序(1)主函数#include/头文件#include/1602的头文件#include/IIC协议头文件#include/矩阵键盘头文件#include/密码修改头文件#define uint unsigned int/宏定义#define uchar unsigned char/宏定义sbit kaisuo=P27;/开锁信号uchar code table2=Input Password;/输入密码uchar code table3=Welcome;/等待uchar code open=Open;void main()init1();/IIC初始化IIC(20);IIC(28);IIC(36);IIC(44);IIC(48);keynum=0;gaiminum=0;Errornum=0;h=0;k=0;kaisuo=1;b=0;write_com(0x38);/显示模式设置;write_com(0x0c);/开显示,关光标,光标不闪烁;write_com(0x04);/整屏显示不移动write_com(0x01);while(1)for(b=0;b14;b+)write_com(0x81+b);write_data(table2b);key();key1();changepassword();/密码修改if(ok=1)delay2(10);if(ok=1)while(!ok);/消抖confirm();/密码匹配if(k=16)kaisuo=0;/开锁keynum=0;/按键次数清零k=0;IIC(20);IIC(28);/IIC清除write_com(0x01);/清屏for(b=0;b7;b+)write_com(0x84+b);write_data(table3b);/显示Welcomejingbao=0;delay2(100);jingbao=1;delay2(100);jingbao=0;delay2(100);jingbao=1;delay2(6000);delay2(3000);/延时kaisuo=1;Errornum=0;else keynum=0;k=0;write_com(0x01);IIC(20);IIC(28);IIC(36);IIC(44);/IIC清除Errornum+;/清屏for(b=0;b=3)write_com(0x01);for(b=0;b4;b+) write_com(0x86+b); write_data(table7b);/Wrong passwordErrornum=0;jingbao=0;/发出警报for(b=0;b0;x-)for(y=120;y0;y-);/延时子函数void write_com(uchar com)/写指令RS=0;RW=0;P0=com;E=0;delay2(2);E=1;delay2(1);E=0;delay2(2);void write_data(uchar date)/写数据RS=1;RW=0;P0=date;E=0;delay2(2);E=1;delay2(1);E=0;delay2(2);void display(uchar dizhi,uchar num)write_com(dizhi);write_data(tablenum);/1602的显示(3)IIC协议头文件sbit sda=P24;sbit scl=P23;void delay1() ; ;void start()/开始sda=1;scl=1;delay1();sda=0;delay1();void stop()/停止sda=0;delay1();scl=1;delay1();sda=1;delay1();void ask()uchar i;scl=1;delay1();if(sda=1)&(i1)i+;sda=0;scl=0;delay1();void init1()sda=1;delay1();scl=1;delay1();/初始化void write_byte(uchar aa)uchar temp ,i;temp=aa;for(i=0;i8;i+)temp=temp1;scl=0;delay1();sda=CY;delay1();scl=1;delay1();scl=0;delay1();sda=1;delay1();uchar read_byte()uchar j,k;scl=0;delay1();sda=1;delay1();for(j=0;j8;j+)scl=1;delay1();k=(k1)|sda;scl=0; delay1(); return k; uchar read_add(uchar addrss)uchar shuju;start();write_byte(0xa0);ask();write_byte(addrss);ask();start();write_byte(0xa1);ask();shuju=read_byte();stop();return shuju;void write_add(uchar addrss ,uchar date)start();write_byte(0xa0);ask();write_byte(addrss);ask();write_byte(date);ask();stop();(4)矩阵键盘头文件#define uchar unsigned charuchar keynum,gaimi,ok,c,num,shanchu;sbit d0=P30;sbit d1=P31;sbit d2=P32;sbit d3=P33;sbit d4=P34;sbit d5=P35;sbit d6=P36;sbit d7=P37;/位定义void key1()if(c=1)delay2(10);if(c=1)while(!c);write_add(keynum+20,num);/存入IIC(起始地址20)delay2(100);display(0x80+0x40+keynum,read_add(keynum+20);/显示IIC存储器的内容delay2(250);display(0x80+0x40+keynum,13);/输入时显示*shanchu=0;/删除时要用的变量keynum+;if(keynum=17)keynum=0; /储存键盘按键void key2()if(c=1)delay2(10);if(c=1)while(!c);write_add(keynum+40,num);/存入IIC(起始地址40)delay2(100);display(0x80+0x40+keynum,read_add(keynum+40);/显示IIC存储器的内容delay2(250);display(0x80+0x40+keynum,13);/输入时显示*shanchu=1;/删除时要用的变量keynum+;if(keynum=17)keynum=0; /存储第二次新密码void key()/键盘扫描c=0;gaimi=0;ok=0;d3=0;d0=d1=d2=1;/第一行 if(d4=0)delay2(10);if(d4=0)while(!d4)num=6;c=1;/第一列if(d5=0)delay2(10);if(d5=0)while(!d5)num=2;c=1; /第二列if(d6=0)delay2(10);if(d6=0)while(!d6);gaimi=1; /第三列if(d7=0)delay2(10);if(d7=0)while(!d7);ok=1; /确定键 /第四列d2=0;d0=d1=d3=1;/第二行 if(d4=0)delay2(10);if(d4=0)while(!d4);num=7;c=1;/第一列if(d5=0)delay2(10);if(d5=0)while(!d5);num=3;c=1; /第二列if(d6=0)delay2(10);if(d6=0)while(!d6);keynum-;/按键次数减1,(即下次按键重该位置继续显示)if(shanchu=1)write_add(keynum+40,0xff);/IIC数据清除(用于第二次新密码)elsewrite_add(keynum+20,0xff);/IIC数据清除(用于第一次新密码与旧密码)display(0x80+0x40+keynum,12);/删除后显示空格if(keynum=-1)keynum=0; /第三列d1=0;d0=d2=d3=1;/第三行 if(d4=0)delay2(10);if(d4=0)while(!d4);num=8;c=1;/第一列if(d5=0)delay2(10);if(d5=0)while(!d5);num=4;c=1; /第二列if(d6=0)delay2(10);if(d6=0)while(!d6);num=0;c=1; /第三列d0=0;d1=d2=d3=1;/第四行if(d4=0)delay2(10);if(d4=0)while(!d4);num=9;c=1;/第一列if(d5=0)delay2(10);if(d5=0)while(!d5);num=5;c=1; /第二列if(d6=0)delay2(10);if(d6=0)while(!d6);num=1;c=1; /第四列(5)修改密码头文件uchar a,b,c,k,f,h,Backspace,gaiminum,Errornum,oknum,gaimikeynum=0;uchar d16;uchar code table4=Old Password;uchar code table5=New Password;uchar code table6=Input again;uchar code table7=Lock;/锁定uchar code table8=Wrong password;/密码错误uchar code table9=Input again;uchar code table11=Password Changed;/密码修改成功成功uchar code table12=Different Passwords;/密码不一致uchar code table1=too simple ;sbit jingbao=P26;/警报信号void IIC(uchar dizhi)start();write_byte(0xa0);ask();write_byte(dizhi);ask();for(a=0;a8;a+)write_byte(0xff);ask();stop();delay2(100);/8位初始密码存储/IIC储存内容清除void confirm()for(k=0;k16;k+)if(read_add(20+k)!=read_add(k)break;/密码校对void newconfirm()for(f=0;f16;f+)if(read_add(20+f)!=read_add(40+f)break;/两次输入的新密码校对void changepassword()/密码修改if(gaimi=1)delay2(10);gaiminum=1;if(gaimi=1)while(!gaimi);keynum=0;key();key1();write_com(0x01);for(b=0;b12;b+)write_com(0x82+b);write_data(table4b);/显示Old Passworddelay2(900);while(gaiminum)if(gaimi=1)delay2(10);if(gaimi=1)while(!gaimi);goto q;key();if(oknum2)key1();if(oknum=2)key2();if(ok=1)delay2(10);if(ok=1)while(!ok);oknum+;if(ok

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论