1、随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的
2、人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等。但较实用的还是按键式电子密码锁。20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。在我国电子锁整体水平尚处于国际七十年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可
3、观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。2 设计要求1、总共可以设置8位密码,每位密码值范围为18. 2、用户可以自行设定和修改密码。3、按每个密码键时都有声音提示。4、若键入的8位开锁密码不完全正确,则报警5s,以提醒他人注意。5、开锁密码连续错3次要报警1分钟,报警期间输入密码无效,以防窃贼多次试探密码。6、键入的8位开锁密码完全正确才能开锁,开锁时要有1s的提示音。7、电磁锁的电磁线圈每次通电5s,然后恢复初态。8、密码设定完毕后要有提示音。3 设计内容本设计的系统总方案设计方框图如图1所示。图1 系统总设计方框图3.1、具体硬件电路设计3.11、键盘输入模块设计:键
4、盘选用4*4矩阵,具有数字键0-9、开锁键、删除键、修改密码键和消除报警键等。4*4键盘输入模块如图2所示。图2 4*4键盘输入模块电路图3.12、单片机最小系统设计:本设计选用STC89C51单片机作为控制核心。STC89C51是具有高性能和低功耗优点的8位可编程控制器,内核具有丰富的指令集和32个通用工作寄存器,可以通过软件编程来实现电子密码锁设计中的各项要求和功能,而且单片机的 I/O 口也足够使用,硬件电路连接比较简单。单片机最小系统如图3所示3。图3 单片机最小系统电路图3.1.3、LCD显示模块设计:LCD显示模块选用LCD1602 作为主液晶显示器。此液晶显示屏能输入两行的字母或
5、数字,功能比较简单,通用性强。本次设计中要显示输入密码的数据值和各功能的提示,使用 LCD1602 液晶来作为显示模块比较直观形象。LCD显示模块如图4所示。图4 LCD显示模块电路图3.1.4、声光报警模块设计:采用声和光两种方式的双重效果进行报警,如果错误密码输入次数超过三次则报警灯闪烁而且蜂鸣器会报警,这样就能多角度进行密码错误报警。声光报警模块如图5所示。图5 声光报警模块电路图3.2、软件设计321、主程序流程图:主程序主要完成LCD初始化、检查有无按键按下、以及调用显示、密码修改程序等等。主程序流程图如图6所示。图6 主程序流程图3.2.2、LCD显示模块流程图:本系统使用LCD1
6、602实现显示,参照LCD1602的使用手册进行初始化和程序编写就可以显示,即在程序编写中添加LCD1602的驱动程序。这里的驱动程序主要包括:初始化函数、设置显示坐标、写字符函数及写字符串函数。在时钟界面时显示时间的运行,在密码锁界面时主要显示提示信息和输入的密码,当然,当输入密码数字时,输出不是显示数字,而是用“*”显示代替。LCD1602的部分读写控制时序程序如图7所示。图7 LCD显示模块流程图总结与致谢这一次做的电子密码锁及LCD显示。原理看似简单,但过程让我深深感受到再简单的电路图,理论与实际也会有一定的差入。在参考书原理图的基础上经过了个人的改进,让功能更完善,特别是程序的调试,
7、花的时间最多,也是最难的一个地方。通过本次设计,培养了创新意识和综合素质,更好地掌握了电子产品设计与制作的工艺和流程,提高个人基本能力、实验及设计能力和独立工作能力,基本知识更加牢固,会看图、会测量、会查资料在设计的过程和设计说明书的撰写过程中,老师给予了我热心的帮助和大力的支持,给我提了诸多的宝贵意见,拓宽了我的思路。在此我向老师致以崇高的敬意和衷心的感谢!参考文献 1 李朝青,单片机原理及接口技术(简明修订版)M.北京:北京航空航天大学出版社,1998 2 李全利.单片机原理及接口技术M.高等教育出版社,2003 3 PROTEL99 SE电路设计与制板M.械工业出版社,2007 4 St
8、even F.Barrett.Daneil J.Pack.Embedded SystemM.北京:电子工业出版社,20065 周立功.LPC900系列Flash单片机应用技术J.北京航空航天大学出版社, 2004 6 黄智伟.全国大学生电子设计竞赛训练教程M.北京:电子工业出版社, 2005 附录一:系统设计总原理图附录二:系统设计程序/*头文件*/#include intrins.h#define ulong unsigned long#define uint unsigned int#define uchar unsigned char#define scan_key_port P1 /*
9、定义矩阵按键端口*/#define lcd_data_port P0 /*定义LCD控制端口*/uchar code mun_to_char = 0123456789ABCDEF; /*定义数字跟ASCII码的关系*/uchar temp,num,flag,sum=0,r;uchar code table1= Welcome!(_);uchar code table2=/*定义数字跟ASCII码的关系*/uchar code table3=*uchar code table4=Code is wrong!uchar code table5=You are right!uchar code ta
10、ble6=The second time!uchar code table7=The last time!uchar code table8=Input new code:uchar code table9=Modify right!uchar code table10=Password:uchar code table11= Wu zi rong uchar code table12= Calling.uchar code table13= uchar code table14=Input again:uchar code table15=Modify error!uchar init_ps
11、wd8=1,2,3,4,5,6,7,8;/初始化密码uchar pswd8=0;sbit lcdrs=P17;/*定义LCD控制端口*/sbit lcdrw=P16;sbit lcden=P24;sbit Speaker_port = P27; /*喇叭控制端口*/*子函数声明*/void delay(uint z);void init();/初始化子函数void write_com(uchar com);/写指令子函数void write_data(uchar dat1);/写数据子函数void keyscan();void mima();void mima1();void delete()
12、;void delay_1ms(uchar x);/*液晶驱动*/*/*喇叭发声简单程序*/void Speaker_output() uchar i; for(i=0;i100;i+) Speaker_port = 0; delay_1ms(0.5); Speaker_port = 1; delay_1ms(1); void Speaker_output2()50;void Speaker_output3() delay_1ms(2);/*1MS为单位的延时程序*/void delay_1ms(uchar x) uchar j; while(x-) for(j=0;j0;x-) for(y=
13、110;yy-);void keyscan() uchar sccode,recode,out; scan_key_port=0xf0; /* 发全 0 的行扫描码,列线输入 */ if(scan_key_port&0xf0)!=0xf0) /* 若有键按下 */ delay_1ms(2); /*延时去抖动*/ sccode=0xfe; /*逐行扫描初值*/ while(sccode&0x10)!=0) scan_key_port=sccode; /* 输出行扫描码 */=0xf0) /* 本行有键按下 */ recode=(scan_key_port&0xf0)|0x0f; scan_key
14、_port = 0xff; /*释放按键扫描端口*/ out=(sccode)+(recode) ; switch(out) case 0xe7:num=0;flag=1;Speaker_output(); /*喇叭发出声音*/break; case 0xd7:num=1; case 0xb7:num=2; case 0x77:num=3; case 0xeb:num=4; case 0xdb:num=5; case 0xbb:num=6; case 0x7b:num=7; case 0xed:num=8; case 0xdd:num=9; case 0xbd:num=10;break; ca
15、se 0x7d:num=11; case 0xee:num=12; case 0xde:num=13; case 0xbe:num=14; case 0x7e:num=15; else sccode=(sccode1)|0x01; /* 行扫描左移一位 */ /*主程序*/void main() uchar m=0,w=0; init(); for(r=0;r15;r+) write_data(table1r);write_com(0x80+0x40);for(r=0; write_data(table11r); write_com(0x0c); do keyscan(); while(num
16、!=15);mima();while(pswdm=init_pswdm)&m=8)/密码正确 delay(200); Speaker_output3(); /*喇叭发出声音*/ keyscan(); while(flag=1&num=13); mima1();else/密码有误 m=0; write_com(0x80+0x40);14; delay_1ms(5); write_data(table4r); delay(1000);16; delay(20); write_data(table6r); mima(); while(pswdm=init_pswdm)&8)/再次比较 m+; if(
17、m=8) mima1(); else m=0; write_com(0x80+0x40); for(r=0; delay_1ms(5); write_data(table4r); Speaker_output2(); /*喇叭发出声音*/ init(); delay(20); write_data(table7r); delay(1000); mima(); while(pswdm=init_pswdm)&8)/第三次比较 m+; if(m mima1(); else init(); write_com(0x80+0x40); for(r=0; delay_1ms(100); write_data(table12r); if(flag=1&num=13) delay(100); break; else 120; delay_1ms(100); Speaker_output3(); keyscan(); else write_com(0x0c); void mima() uchar w=0;/局部变量很重要9; write_data(table10r); flag=0; write_com(0x80+9+w); if(flag=1&num=9) pswdw=num; write_data(table3w); w
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1