毕业设计论文单片机控制的电子密码锁.doc

上传人:sccc 文档编号:4858019 上传时间:2023-05-20 格式:DOC 页数:20 大小:1.55MB
返回 下载 相关 举报
毕业设计论文单片机控制的电子密码锁.doc_第1页
第1页 / 共20页
毕业设计论文单片机控制的电子密码锁.doc_第2页
第2页 / 共20页
毕业设计论文单片机控制的电子密码锁.doc_第3页
第3页 / 共20页
毕业设计论文单片机控制的电子密码锁.doc_第4页
第4页 / 共20页
毕业设计论文单片机控制的电子密码锁.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《毕业设计论文单片机控制的电子密码锁.doc》由会员分享,可在线阅读,更多相关《毕业设计论文单片机控制的电子密码锁.doc(20页珍藏版)》请在三一办公上搜索。

1、 单片机控制的电子密码锁毕业论文摘要:随着电子产品向智能化和微型化的不断发展,单片机已成为电子产品研制和开发中首选的控制器。为了更好地推广单片机在家电领域中的应用,本文介绍一种应用ATMEGA16单片机设计的电子密码锁。经实际制作表明该密码锁具有安全、实用、成本低等特点,符合住宅用锁的要求,具有一定的现实意义。本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、报警、管理员解密、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外,还具有声光报警等功能。本系统成本低廉,功能实用。关键词: ATMEGA16单片机,电子密码锁,矩阵键盘,声光报警一、 引言随着人们生活水平的

2、提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。设计本课题时构思了两种方案:一种是用以 ATMEGA16单片机为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。二、方案论证与比较方案一:采用数字电路控制。其原理方框图如图11所示。图41 数字密码锁电路方案采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核

3、心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。方案二:采用一种是用以 ATMEGA16单片机为核心

4、的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加声光报警提示等功能。其原理如图12所示。AVR单片机矩阵键盘控制锁定键盘报警控制电路开锁控制电路1602显示修改密码电路图42单片机控制方案 通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。三、电路的功能单元设计1开锁机构通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。其原理如图21所示。单片机微控制器开锁电磁锁密码正确?Y返回N图43密码锁开锁机构示意

5、图当用户输入的密码正确而且是在规定的时间(普通用户要求在12s内输入正确的密码,管理员要求在5s输入正确的密码)输入的话,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。其实际电路如图22所示。电路驱动和开锁两级组成。由D5、R1、T10组成驱动电路,其中T10可以选择普通的小功率三极管如9014、9018都可以满足要求。D5作为开锁的提示;由D6、C24、T11组成。其中D6、C24是为了消除电磁锁可能产生的反向高电压以及可能产生的电磁干扰。T11可选用中功率的三极管如8050,电磁锁的选用要视情况而定,但是吸合力要足够且由一定的余量。在本次设计中,基于节省材料的原则

6、,暂时用发光二极管代替电磁锁,绿色发光管亮,表示开锁;灭,表示没有开锁;黄灯亮,表示输入密码三次错误后报警。图44密码锁开锁机构电路图2按键电路设计由于设计要求使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。其原理如图43所示。图45 行列式键盘原理电路图每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有NM个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确

7、认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。对照图43所示的44键盘,说明线反转个工作原理。首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的

8、键必在此列,而且是在与零电平行线相交的交点上的那个键。10个数字键用来输入密码,另外6个功能键分别是:CLR、ENTER、open、修改密码、clock、关显示。其中CLR键的功能是当输入密码错误的时候,清除前面已经输入的数据,重新输入。ENTER键的功能是确认输入的密码。open是输入密码键。修改密码键是用来进入修改密码。关显示是用来关闭显示器,一来可以节省电量,另外也可以防止不法分子偷窥密码。clock用来锁键盘。3显示电路设计本系统设计的显示电路是为了给使用者以提示而设置的。显示器用1602显示。图46 1602显示器引脚图表1 1602管教功能引脚符号功能说明1VSS一般接地2VDD接

9、电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6EE(或EN)端为使能(enable)端,下降沿使能。7DB0底4位三态、 双向数据总线 0位(最低位)8DB1底4位三态、 双向数据总线 1位9DB2底4位三态、 双向数据总线 2位10DB3底4位三态、 双向数据总线 3位11DB4高4位三态、 双向数据总线 4位12DB5高

10、4位三态、 双向数据总线 5位13DB6高4位三态、 双向数据总线 6位14DB7高4位三态、 双向数据总线 7位(最高位)(也是busy flag)15BLA背光电源正极16BLK背光 电源负极5设计总框图图47总体设计框图6设计总体电路图图48 总体电路图参考文献1 李文石,电子锁的发展和设计综述, 3:3-6,19932 王磊,PLC 控制的多功能磁卡式电子密码锁设计,28(3):58-61,19983 宋文阁,李明颖,王学俊, 单片机控制IC卡电子锁,大连轻工业学院学报 18(2):111-115,1999附录、程序 /包含所需头文件#include #include #include

11、/*-宏定义-*/#define ucharunsigned char#define uintunsigned int/端口初始化void port_init(void) DDRA= 0x0F;/*输出复位*/ PORTA = 0xF0; PORTB = 0x00; DDRB = 0xff; PORTD = 0x10; DDRD = 0xff;void timer2_init(void) TCCR2 = 0x00;/停止定时器 ASSR = 0x00;/异步时钟模式 TCNT2 = 0x06;/初始值 OCR2 = 0x05;/匹配值 TIMSK |= 0x40;/中断允许 TCCR2 = 0

12、x02;/启动定时器void init_devices(void) CLI(); /禁止所有中断 port_init(); timer2_init(); port_init(); SEI();/开全局中断/void delay_1us(void) /1us延时函数 asm(nop); void delay_nus(unsigned int n) /N us延时函数 unsigned int i=0; for (i=0;in;i+) delay_1us(); void delay_1ms(void) /1ms延时函数 unsigned int i; for (i=0;i1140;i+); voi

13、d delay_nms(unsigned int n) /N ms延时函数 unsigned int i=0; for (i=0;i15) break; /void SetCur(uchar Para) /设置光标 delay_nms(10); switch (Para) case 0: LcdWc(0x08);/关显示NoDisp break; case 1: LcdWc(0x0c);/开显示但无光标 NoCur break; case 2: LcdWc(0x0e);/开显示有光标但不闪烁CurNoFlash break; case 3: LcdWc(0x0f);/开显示有光标且闪烁CurF

14、lash break; default:break; /void ClrLcd(void)/清屏 LcdWc(0x01);/void WaitIdle( void)/检测忙信号uchar temp;PORTD &=0xfb;/RS=0PORTD |=0x02;/RW=1 /*Rs=PD2;R/W=PD1;E=PD0; PORTB*/DDRB=0x00;PORTB=0x00;PORTD |=0x01;/E=1delay_nus(2);for( ; ; )delay_nus(3);temp=PORTB;temp &=0x80;if(temp=0)break;DDRB=0xff;PORTD &=0x

15、fe;/E=0/youwenti/void LcdWd(char c) /写字符WaitIdle();PORTD |=0x04;/RS=1PORTD &=0xfd;/RW=0delay_nus(2);PORTB=c;NOP(); delay_nus(2);PORTD |=0x01;/E=1NOP(); NOP( );PORTD &=0xfe;/E=0/keyi/void LcdWc(uchar c)/送控制字(检测忙信号)WaitIdle();LcdWcn(c);void LcdWcn(uchar c)/送控制字(不检测忙信号)PORTD &=0xfb;/RS=0PORTD &=0xfd;/R

16、W=0delay_nus(2);PORTB=c;delay_nus(2);PORTD |=0x01;/E=1 delay_nus(2); PORTD &=0xfe;/E=0/keyi/void LcdPos(uchar xPos,uchar yPos)/确定光标位置unsigned char tmp;xPos &=0x0f;yPos &=0x01;tmp=xPos;if(yPos=0) tmp=xPos; else tmp=xPos+0x40; tmp|=0x80; LcdWc(tmp); / void RstLcd(void)/复位 LcdWc(0x38);/八位数据,显示两行,5*7del

17、ay_nms(5); LcdWc(0x08);/关显示delay_nms(5); LcdWc(0x01);/清屏delay_nms(5); LcdWc(0x06);/光标右移一格,AC加1delay_nms(5); LcdWc(0x0c);/开显示但无光标/液晶驱动程序/unsigned char key_read(void) unsigned char i; PORTA = 0x0F; DDRA = 0xF0; delay_nus(10); i = PINA; PORTA= 0xF0; DDRA = 0x0F; delay_nus(10); i |= PINA; switch (i) /*将

18、按键码转换成键值*/ case 0xEE: return 1; case 0xDE: return 2; case 0xBE: return 3; case 0x7E: return 4; case 0xED: return 5; case 0xDD: return 6; case 0xBD: return 7; case 0x7D: return 8; case 0xEB: return 9; case 0xDB: return 10; case 0xBB: return 11; case 0x7B: return 12; case 0xE7: return 13; case 0xD7: r

19、eturn 14; case 0xB7: return 15; case 0x77: return 16; default : return 0x00; unsigned char get_key(void) unsigned char i; unsigned char jian;/*按键记录*/i = key_read();if (i = 0x00)/*无有效按键按下*/jian= 0x00;/*清除按键记录*/return 0x00;/*程序退出*/ jian = i;/*保存本次采样结果*/delay_nms(15);/*去按键颤抖*/ i = key_read();if(i = jia

20、n) delay_nms(10);return i; return 0x00;/unsigned char i=0,j=0;char shuo=0;uchar cout=0;unsigned char biao1=0,biao2=0;unsigned char f1=0,f20=0,f21=0,f3=0,f4=0;/char model1=1,model2=0,model3=0,model4=0;/unsigned char key_value=0;char ps26=0,0,0,0,0,0,ps36=0,0,0,0,0,0;/void clear(void)unsigned char k=0

21、;if(model1=1)f1=1;for(k=0;k6;k+)ps2k=0;if(model2=1 & f21=0)f20=1;for(k=0;k6;k+) ps2k=0;elseif(f21=3)f21=0;f20=1;for(k=0;k6;k+)/ ps2k=0; ps3k=0; void Entry(void)static char sancounr=0,cang=0;unsigned int i=0,h=0;if(model1=1) biao1=0; for(i=0;i6;i+) if(EEPROMread(i)!=ps2i) break; sancounr+; if(i=6) Cl

22、rLcd(); delay_nus(2); SetCur(CurFlash); delay_nus(2); WriteString(It is open!,0,0); shuo=1; for(i=0;i6;i+) ps2i=0; PORTD |=0x20; for(i=0;i=3) ClrLcd(); delay_nus(2); SetCur(CurFlash); delay_nus(2); WriteString(Zhuo Xiao Tou!,0,0); for(h=0;h5;h+) for(i=0;i5000;i+) PORTD &=0xef; delay_nms(2); PORTD |=

23、0x10; PORTD |=0x08; model1=0; sancounr=0; else ClrLcd(); delay_nus(2); SetCur(CurFlash); delay_nus(2); WriteString( ERROR,AGAIN !,0,0); delay_nms(1000); clear(); if(model2=1 & f21=2) i=0; for(i=0;i=3) cang=0; ClrLcd(); delay_nus(2); SetCur(CurFlash); delay_nus(2); WriteString(Zhuo Xiao Tou!,0,0); fo

24、r(h=0;h5;h+) for(i=0;i5000;i+) PORTD &=0xef; delay_nms(2); PORTD |=0x10; PORTD |=0x08; f20=1; f21=1; / if(model2=1 & f21=1) f21=2; f20=1; / if(model2=1 & f21=0) i=0; for(i=0;ii ) switch(key_temp) case 1:model1=1;f1=1;model2=0;model3=0;model4=0;f21=0;key=0;break; case 2:model2=1;f20=1;model1=0;model3

25、=0;model4=0;f21=0;key=0;break; case 3:model3=1;f3=1;model2=0;model1=0;model4=0;f21=0;key=0;break; case 4:model4=1;f4=1;model2=0;model1=0;model3=0;f21=0;key=0;break; case 5:key=1;break; case 6:key=2;break; case 7:key=3;break; case 8:key=4;break; case 9:key=5;break; case 10:key=6;break; case 11:key=7;

26、break; case 12:key=8;break; case 13:key=9;break; case 14:key=0;break; case 15:key=0;clear();i=0;j=0;biao1=0,biao2=0;delay_nus(5);break; case 16:key=0;Entry();i=0;j=0;delay_nus(5);break; default:key=0;break; if(key!=0 & j7) if(model1=1 | model2=1) SetCur(CurFlash); delay_nus(5); WriteChar(key,i,1); d

27、elay_nms(300); SetCur(CurFlash); delay_nus(5); WriteChar(*,i,1); delay_nus(5); i+; else j-; cout=0; if(model1=1 & f1=1) ClrLcd(); delay_nus(2); SetCur(CurFlash); delay_nus(2); WriteString(Password:,0,0); LcdPos(0,1); f1=0; f20=0; f21=0; f3=0; f4=0; j=0; i=0; if(model2=1 & f20=1) j=0; i=0; if(f21=0)

28、ClrLcd();/ delay_nus(2);/ SetCur(CurFlash); delay_nus(2); WriteString(Oldpassword:,0,0); LcdPos(0,1); if(f21=1) ClrLcd(); SetCur(CurFlash); delay_nus(2); WriteString(Newpassword:,0,0); LcdPos(0,1); if(f21=2) ClrLcd(); SetCur(CurFlash); delay_nus(2); WriteString(Please Again:,0,0); LcdPos(0,1); if(f2

29、1=3) ClrLcd(); SetCur(CurFlash); delay_nus(2); WriteString(Set succeed!,0,0); f1=0; f20=0; f3=0; f4=0; if(model3=1 & f3=1 & shuo=1) shuo=0; ClrLcd(); SetCur(CurFlash); delay_nus(2); WriteString(It was locked!,0,0); for(i=0;i6;i+) ps2i=0; PORTD |=0x08; for(i=0;i10;i+) delay_nms(1000); PORTD &=0xf7; f

30、1=0; f20=0; f21=0; f3=0; f4=0; if(model4=1 & f4=1) static unsigned char kaiguan=1; if(kaiguan=1) delay_nus(2); LcdWc(0x08);/关显示 kaiguan=0; else ClrLcd(); LcdWc(0x0c);/开显示但无光标 SetCur(CurFlash); delay_nus(2); WriteString( Welcome! ,0,0); kaiguan=1; f1=0; f20=0; f21=0; f3=0; f4=0; model1=0; model2=0; m

31、odel3=0; cout+; TCCR2 = 0x02;/启动定时器/void main(void)int x,y;CLI(); /禁止所有中断for(x=0;x6;x+) y=EEPROMread(x); WriteChar(y,x,0);delay_nms(2);if(EEPROMread(0x01)=0xff)EEPROMwrite(0x00,1);EEPROMwrite(0x01,2);EEPROMwrite(0x02,3);EEPROMwrite(0x03,4);EEPROMwrite(0x04,5);EEPROMwrite(0x05,6); init_devices(); /在这

32、继续添加你的代码 RstLcd( ); delay_nms(10); ClrLcd( ); SetCur(CurFlash); delay_nus(2); WriteString(Welcome Hoster!,0,0); delay_nus(2); WriteString(* LOVE *,0,1); while( 1 ) if(model1=1) if(biao16) switch(key_value) case 5:ps2biao1=1;biao1+;key_value=0;break; case 6:ps2biao1=2;biao1+;key_value=0;break; case 7:ps2biao1=3;biao1+;key_value=0;break; case 8:ps2biao1=4;biao1+;key_value=0;break; case 9:ps2biao1=5;biao1+;key_value=0;break; case 10:ps2biao1=6;biao1+;key_value=0;break; case 11:ps2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号