湖南工程学院单片机课设-密码锁
- 格式:doc
- 大小:369.00 KB
- 文档页数:30
课程:单片机课程设计密码锁设计报告系专业班级姓名指导教师学年学期大三上学期一、设计任务书功能:1、可以设置4位密码。
设置好后有指示灯显示已经设置。
2、如果输错三次,要有报警灯亮。
3、输入正确后,发出声音报警信号。
使用K1到K4作为密码的设置开关和输入开锁密码设置开关,接到P1.0-P1.3上。
使用k5和k6作为外部中断0和外部中断1作为密码设置和密码确定开关,接到p3.2和p3.3。
使用发光管作为报警灯和指示灯,黄灯、绿灯和红灯分别接到p1.5、p1.6和p1.7上。
二、设计思路:使用中断对密码进行设置和解密。
1、密码输入:使用四个拨码开关输入密码。
2、密码设置:四个拨码开关共有16个密码可设定,当密码设好后,三个LED灯熄灭。
在用户设置好四位密码后,按K5键,便可开锁,在本次设计中,用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。
利用外部中断/INT0:按下K4键对密码进行设置,此时绿灯亮。
利用外部中断/INT1:按下K5键对密码进行解密,如果密码输入正确绿灯进行了慢闪烁,解密成功,然后对密码进行重新设置,将K4键设为高电平就可以重新设置。
3、密码修改:当设定的用户密码不小心外泄时,这时就要及时通过密码修改程序来更改密码了,当选用用户密码修改时,首先要正确输入原用户密码然后按K5键,如果原密码正确则进入密码修改程序。
接下来输入四位新密码,接着新密码即被存入CPU中,至此用户密码修改成功。
4、密码错误报警当用户键入错误密码并按下K5键时,密码错误指示黄灯快闪烁;当连续三次出现密码错误时,红灯闪烁并将密码锁锁定一段时间,可有效防止非法操作。
这是本设计安全性的体现。
三、硬件设计原理图密码锁的原理是:用拨码开关输入一组密码,CPU把该密码和设置密码比较,对则将锁打开,错则要求重新输入,并记录错误次数,如果三次错误,则被强制锁定并报警。
实验核心元件:89C51芯片、6个拨码开关(4个拨码作为设置密码和输入密码,一个用作设置密码,一个用作确定)、三个发光二极管、P1.0到P1.7、P3.2、P3.3AT89C51的优点:AT89C51单片机是把中央处理器CPU、随即存储器RAM、只读存储器ROM、定时/计数器、I/O接口电路等主要计算机部件集成在一块电路芯片上的单片微型计算机 本设计中单片机应用的主要功能就是控制LED显示器的显示、报警电路以及开锁电路 还用作键盘的扫描等。
目录一、设计思路与基本框图 (2)1.1数字电路简介 (2)1.2密码锁总体设计思路 (2)1.2.1 设计要求 (2)1.2.2设计目的 (2)1.2.3设计思路 (3)1.2.4 总体设计简图及电路总图 (3)二、单元电路设计 (4)2.1计时显示电路 (4)2.1.1 60进制秒计数 (4)2.1.2 35秒报警电路 (5)2.2比较电路 (5)2.3编码单元 (8)2.3.1优先编码器 (8)2.3.2 消抖电路 (8)2.4存储单元电路 (9)2.4.1 存储器 (9)三、现场接线与调试 (12)3.1现场连接 (12)3.2现场调试 (14)四、故障分析与电路改进 (16)五、总结与体会 (17)附录 (18)1.元件清单 (18)2.参考文献 (18)3.总体仿真图 (19)一、设计思路与基本框图1.1 数字电路简介用数字信号完成对数字量进行算术运算和逻辑运算的电路称为数字电路,或数字系统。
由于它具有逻辑运算和逻辑处理功能,所以又称数字逻辑电路。
现代的数字电路由半导体工艺制成的若干数字集成器件构造而成。
逻辑门是数字逻辑电路的基本单元。
存储器是用来存储二进制数据的数字电路。
从整体上看,数字电路可以分为组合逻辑电路和时序逻辑电路两大类。
1.2 密码锁总体设计思路1.2.1 设计要求该密码锁设定密码为三位,有0至9十个数字组成。
当密码输入正确时,开锁指示灯(绿灯)亮,密码错误时,报警指示灯(红灯)亮,报警时间为35秒。
第一个密码输入时开始计时,如果在60秒内没有开锁指示,则电路进入自锁状态,并发出报警指示。
1.2.2设计目的(1)进一步熟悉和掌握常用数字电路元器件的应用。
(2)巩固加深理解数字电路的基本理论知识,学习基本理论在实践中综合运用的初步经验,掌握数字电路系统设计的基本方法及在面板上接线的方法、技术、要注意的问题。
(3)培养数字电路实物制作、调试、测试、故障查找和排除的方法。
(4)培养细致、认真做实验的习惯。
《单片机技术》课程设计说明书密码锁院、部:学生姓名:指导教师:职称:专业:班级:完成时间:摘要随着现代科技的发展,锁变得更加的多样化,实用性和安全性最为重要的,于是电子密码锁毋庸置疑的成为了最受欢迎的锁类。
电子密码锁具有众多的优点,保密性强、不需要钥匙、修改密码方便等。
该课程设计是一个基于51单片机的液晶显示电子密码锁的设计。
单片机技术是智能化检测与控制领域应用非常普及并且拥有很大潜力的技术。
本设计硬件方面采用美国Atmel公司的AT89S52单片机作为系统处理核心, AT24C02作为数据存储器,用于断电保护,液晶显示器则是采用LCD12684,作为系统输出设备,显示系统提示信息,4*4矩阵键盘作为输入设备,再加以蜂鸣器、电源等电路构成整个系统硬件;软件方面则采用C语言编写。
关键词:密码锁;at89s52;at24c02;lcd12684ABSTRACTWith the development of modern technology, diversification of the lock becomes more, practicality and safety is the most important, so the electronic password lock undoubtedly become the most popular lock. Electronic cipher lock has numerous advantages, strong confidentiality, do not need to modify the password key, convenient etc.The curriculum design is a design of electronic password lock based on MCU 51 LCD display. SCM technology is the application of intelligent detection and control field is very popular and have great potential technique. The design of hardware with USA Atmel company AT89S52 microcontroller as the core processing system, AT24C02 is used as the data memory, for power-off protection, liquid crystal display is the use of LCD12684, as the system output device, display system information, 4*4 matrix keyboard as input device, and then the buzzer, the power supply circuit of the whole system hardware; software using C language.Key words:password-lock; at89s52; at24c02; lcd12684目录1 设计课题任务、功能要求说明及总体方案介绍 (1)1.1 设计课题任务 (1)1.2 功能要求说明 (1)1.3 设计课题总体方案介绍及工作原理说明 (1)2 设计课题的硬件系统设计 (3)2.1 设计课题硬件系统各模块功能简要介绍 (3)2.2 设计课题电路原理图、PCB图、元器件布局图 (4)2.3 设计课题元器件清单 (4)3 设计课题软件系统的设计 (5)3.1 设计课题使用单片机资源的情况 (5)3.2 设计课题软件系统各模块功能简要介绍 (5)3.3 设计课题软件系统程序流程框图 (6)4 设计结论、仿真结果、误差分析、教学建议等等 (8)4.1 设计课题的设计结论及使用说明 (8)4.2 设计课题的仿真结果 (9)4.3 设计课题的误差分析 (13)4.4 设计体会 (13)参考文献: (14)致谢 (15)附录 (16)附录 A (16)附录 B (16)附录 C (17)附录 D (19)附录 E (20)1 设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务设计并制作一个液晶电子密码锁,具有密码修改,超级密码,报警等功能。
第1章设计目的1.利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、提高我们的综合应用能力。
2.我们这次的课程设计是以单片机为基础,设计出一个具有一定功能的电子密码锁。
3.掌握一些重要芯片的功能特性及使用方法,并能运用其组合成一个简单的单片机机应用系统。
4.锻炼同学们的动手能力和独立思考的能力,巩固理论知识,加深对课堂内容的理解。
5.培养同学们对单片机的兴趣,通过课程设计调动同学们的积极性,使更多的人将来能在单片机领域有所建树。
第2章设计要求及总体思路2.1设计要求1、密码的设定,此密码是固定在程序存储器ROM中,假设预设的密“12345”共5位密码。
2、密码的输入:采用两个按键来完成密码的输入,其中一个按键为功能键,另一个按键为数字键。
在密码都已经输入完毕并且确认功能键之后,才能完成密码的输入过程。
然后进入密码的判断比较处理状态并给出相应的处理过程。
3、按键禁止功能:初始化时,允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。
2.2 总体思路系统总体设计方案框图如下:图2-1一般而言,要实现相同的功能,硬件复杂的系统其软件一般较简单,而软件复杂的系统其硬件一般相对简单,本着经济性的原则,我们应该尽可能少用硬件,根据这个设计理念和设计要求,本单片机系统的设计思路如下:1)电子密码锁所用的数据的存储和运算用单片机来完。
2)因为没有专用的输入键盘,所以按键输入用计算器输入键盘代替。
按键密码从P3口输入。
3)用六位显示器显示五位密码,显示器选择动态扫描,用P0口作段控,用P2口作位控。
4)开锁信号从P1.1口输出,报警信号从P1.0口输出。
5) 按键分为功能键和数字键,具体如表2-1。
6)输入五位密码后按确认键,系统验证密码是否正确,若密码正确,则产生开锁信号,若接连三次输入错误密码,则产生报警信号。
7) 当错误输入某位密码时,可按删除键进行删除,也可按清零键对所输入的数进行整体清除。
任务及设计要求1.设计一多位电子密码锁,输入密码用“F”表示,输入密码正确,绿灯亮(或显示其它标志、蜂鸣器替代),输入密码错误,红灯亮(或显示其它标志、蜂鸣器替代).2.具有确定键和取消键,在未确定之前可以取消,重新输入.3.连续输入三次错误密码,红灯闪烁,报警电路动作,键盘锁定.4.具有密码重置、修改功能.5.具有密码输入等待操作时间限制功能,超过限定时间报警.6.显示北京时间,时间可调整.7.可利用蜂鸣器添加提示音.系统原理框图硬件原理图元件清单硬件原理图仿真用原理图由于元件库缺少ADUC848,故使用了STC89C51代替仿真,因为端口两个芯片的P1口输入输出的设置不同,在仿真中修改了键盘扫描函数,以适用STC89C51的仿真.电源模块原理图有如下3种供电方式:1/5V电源适配器供电(开关往上拨、插针1下面两脚接跳线帽).2/7~12V电源适配器供电(开关往上拨、插针1上面两脚接跳线帽).3/USB供电(开关往下拨).RS232串口连接原理图该模块中采用maxin公司的max232作电平转换,接上串口转换下载线就可以从计算机上下载程序了.数码管显示模块原理本开发板采用共阴极数码管,段码由PNP三极管驱动,位码由NPN型三极管驱动.本设计中使用了低5位的数码管.蜂鸣器原理图本设计中采用无源电磁式蜂鸣器,蜂鸣器由PWM1(P2.6)控制.PWM1为片内PWM模块的输出.蜂鸣器的驱动采用普通NPN三极管.按键输入模块原理图由于P1口(用于行扫描)内部无上拉电阻,为使无键按下时行信号为高电平,故将行信号接上拉电阻,电阻大小10K即可.P2.0~P2.3为4X4矩阵式键盘列扫描信号.程序主要程序流程图程序#include <aduc848.h>#include<intrins.h>/****************************************************************************** *****类型定义******************************************************************************* *****/#define uint unsigned int#define uchar unsigned char/****************************************************************************** *****状态定义******************************************************************************* *****/#define opened 0#define new1 15#define new2 16#define succed 5#define fanin 10#define null 11#define error 12#define different 13#define tover 14/****************************************************************************** *****按键定义******************************************************************************* *****/#define enter 10#define back 11#define trevise 12#define revise 13#define cancel 14#define vain 15#define off 16#define end 17#define finish 18/****************************************************************************** *****函数声明******************************************************************************* *****/void p_base();void p_revise();void p_new1();void p_new2();void p_trevise();void p_show();uchar p_scan();void p_record();void p_delay(uint f_n);void p_state(uchar f_s);uchar p_compare(uchar *f_k1,uchar *f_k2);void p_copy(uchar *f_s,uchar *f_k);void p_rsave();void p_wsave();void p_rtime();void p_stime();void p_start();void p_stop();bit p_rack();void p_nack();uchar rbyte();void p_wbyte(uchar f_b);uchar p_rdata(uchar f_a);void p_wdata(uchar f_a,uchar f_d);/****************************************************************************** *****I/O口定义******************************************************************************* *****/sbit p00=P0^0;sbit p10=P1^0;sbit p11=P1^1;sbit p12=P1^2;sbit p13=P1^3;sbit p14=P1^4;sbit p15=P1^5;sbitp16=P1^6;sbit p17=P1^7;sbit p20=P2^0;sbit p21=P2^1;sbit p22=P2^2;sbit p23=P2^3;sbit p24=P2^4;sbit p25=P2^5;sbit p26=P2^6;sbit p27=P2^7;sbit p30=P3^0;sbit p31=P3^1;sbit p32=P3^2;sbit p33=P3^3;sbit p34=P3^4;sbit p35=P3^5;sbit p36=P3^6;sbit p37=P3^7;/****************************************************************************** *****全局变量定义******************************************************************************* *****/ucharbot,key1[9],key2[9],save[9],stime[4],s,min,h,mino,mint,ho,ht,n1=1,n2=1,lock,minu,sign,tov, state,n,sound,point=1,ts,flash=7,bright33=1,bright35=1,bright36=1,bright37=1;showlist[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x71,0xff,0x21,0x85,0xe 1,0x7f,0x7d};uintms;/****************************************************************************** *****主函数******************************************************************************* *****/void main(){EA=1;ET0=1;TMOD=0x11;TH0=0xf9;TL0=0xdb;TR0=1;I2CCON=0xe8;sound=0;tov=1;P1=0x00;p_rsave();sign=p_rdata(40);if(sign!=1)p_new1();p_base();}/****************************************************************************** *****基础解锁函数******************************************************************************* *****/void p_base(){n=0;state=fanin;while(1){if(n==0)state=fanin;elsestate=n;bot=p_scan();if(n!=0&&tov==0){p_state(tover);main();}switch(bot){case vain:break;case enter:key1[n]=end;if(p_compare(key1,save)){p_state(succed);lock=0;point=1;state=opened;openedwhile(1){ bot=p_scan();switch(bot){case off:main();break;case back:while(1){bot=p_scan();switch(bot){case off:main();break;case enter:p_wdata(40,0);main();break;}}}}}else{p_state(error);p_record();main();}break;case cancel:main();break;case back:if(n!=0)key1[n--]=end;break;case revise:p_revise();break;case trevise:p_trevise();break;default:if(n+1==9){p_state(error);main();}key1[n++]=bot;}}}/****************************************************************************** *****密码修改函数******************************************************************************* *****/void p_revise(){n=0;p_state(fanin);state=fanin;while(1){if(n==0)state=fanin;elsestate=n;bot=p_scan();if(tov==0){p_state(tover);main();}switch(bot){case vain:break;case enter:key1[n]=end;if(p_compare(key1,save)){lock=0;point=1;p_state(succed);p_new1();}else{p_state(error);;p_record();main();}break;case cancel:main();break;case back:if(n!=0)key1[n--]=end;break;case revise:p_revise();case off:break;case trevise:p_trevise();break;default:if(n+1==9){p_state(error);main();}key1[n++]=bot;}}}/****************************************************************************** *****新密码输入函数******************************************************************************* *****/void p_new1(){n=0;state=new1;while(1){if(n==0)state=new1;elsestate=n;if((tov==0&&sign==1)||(n!=0&&tov==0)){p_state(tover);main();}bot=p_scan();switch(bot){case vain:break;case enter:key1[n]=end;p_new2();break;case cancel:main();break;case back:if(n!=0)key1[n--]=end;break;case revise:if(sign==1)p_revise();break;case trevise:p_trevise();break;default:if(n+1==9){p_state(error);main();}key1[n++]=bot;}}}void p_new2(){n=0;state=new2;while(1){if(n==0)state=new2;elsestate=n;bot=p_scan();if(tov==0){p_state(tover);main();}switch(bot){case vain:break;case enter:key2[n]=end;if(p_compare(key1,key2)){sign=1;p_copy(save,key2);lock=0;p_state(succed);p_wsave();p_wdata(40,1);main();}else{p_state(different);main();}break;case cancel:main();break;case back:if(n!=0)key2[n--]=end;break;case revise:if(sign==1)p_revise();break;case off:break;case trevise:p_trevise();break;default:if(n+1==9){p_state(error);main();}key2[n++]=bot;}}}/****************************************************************************** *****键盘扫描函数******************************************************************************* *****/uchar p_scan(){uchar f_s=vain;P2=P2&0xf0;if(P1!=0xff){p_delay(10);if(P1!=0xff){tov=1;P2=P2&0xf0;P2=P2|0x07;switch(P1){case 0xfe:f_s=1;break;case 0xfd:f_s=4;break;case 0xfb:f_s=7;break;case 0xf7:f_s=back;break;}while(P1!=0xff){sound=1;}sound=0;P2=P2&0xf0;P2=P2|0x0b;switch(P1){case 0xfe:f_s=2;break;case 0xfd:f_s=5;break;case 0xfb:f_s=8;break;case 0xf7:f_s=0;break;}while(P1!=0xff){sound=1;}sound=0;P2=P2&0xf0;P2=P2|0x0d;switch(P1){case 0xfe:f_s=3;break;case 0xfd:f_s=6;break;case 0xfb:f_s=9;break;case 0xf7:f_s=enter;break; }while(P1!=0xff){sound=1;}sound=0;P2=P2&0xf0;P2=P2|0x0e;switch(P1){case 0xfe:f_s=cancel;break;case 0xfd:f_s=off;break;case 0xfb:f_s=revise;break;case 0xf7:f_s=trevise;break; }while(P1!=0xff)sound=1;}sound=0;p_delay(10);}}return f_s;}/****************************************************************************** *****1毫秒中断函数.数码管显示函数******************************************************************************* *****/void time() interrupt 1{TH0=0xf9;TL0=0xdb;TR0=1;ms++;ms=ms%1000;p_show();if(sound)p26=!p26;if(ms==0){ts=!ts;tov++;tov=tov%11;s++;s=s%60;if(s==0){minu++;minu=minu%30;if(minu==0)lock=0;min++;min=min%60;mino=min%10;mint=min/10;if(min==0)h++;h=h%24;ho=h%10;ht=h/10;}}}}void p_show(){switch(n1){case 1:P3=0x80;if(bright37==1)P0=showlist[ht];elseP0=showlist[null];n1++;break;case 2:P3=0x20;if(bright35==1)P0=showlist[mint];elseP0=showlist[null];n1++;break;case 3:P3=0x00;p24=1;P0=showlist[state];n1++;p00=point;break;case 4:p24=0;P3=0x08;if(bright33==1)P0=showlist[mino];elseP0=showlist[null];n1++;break;case 5:P3=0x40;if(bright36==1){P0=showlist[ho];p00=0;}elseP0=showlist[null];n1=1;break;}}/****************************************************************************** *****时间修改函数******************************************************************************* *****/void p_trevise(){n2=1;p24=0;flash=7;state=null;p_stime();while(1){switch(flash){case 7:bright37=ts;break;case 3:bright33=ts;break;case 6:bright36=ts;break;case 5:bright35=ts;}if(tov==0){bright37=0;bright33=0;bright36=0;bright35=0;P3=0x00;p_state(tover);bright37=1;bright33=1;bright36=1;bright35=1;p_rtime();main();}if(bot!=finish)bot=p_scan();switch(bot){case vain:break;case finish:bright37=1;bright33=1;bright36=1;bright35=1;h=ho+ht*10;min=mino+mint*10;s=1;main();break;case enter:break;case cancel:bright37=1;bright33=1;bright36=1;bright35=1;p_rtime();main();break;case back:case revise:if(sign==1){bright37=1;bright33=1;bright36=1;bright35=1;p_rtime();p_revise();}break;case off:break;case trevise:bright37=1;bright33=1;bright36=1;bright35=1;p_rtime();p_trevise();break;default:switch(n2){case 4:mino=bot;bright33=1;bot=finish;flash=0;break;case 3:if(bot<=5){mint=bot;n2++;flash=3;bright35=1;}break;case 2:if(ht==2&&bot<=3||ht<=1&&bot<=9){ho=bot;n2++;flash=5;bright36=1;}break;case 1:if(bot<3){ht=bot;n2++;flash=6;bright37=1;}break;}}}}/****************************************************************************** *****时间存储函数******************************************************************************* *****/void p_rtime(){mino=stime[0];mint=stime[1];ho=stime[2];ht=stime[3];}/****************************************************************************** *****时间读取函数******************************************************************************* *****/void p_stime(){stime[0]=mino;stime[1]=mint;stime[2]=ho;stime[3]=ht;}/****************************************************************************** *****错误计数标志函数******************************************************************************* *****/void p_record(){lock++;minu=0;while(lock==3){sound=1;point=0;state=error;p_delay(99999);state=null;p_delay(99999);}}/****************************************************************************** *****结果显示函数******************************************************************************* *****/void p_state(uchar f_s){uchar f_n=3;while(f_n--){state=f_s;sound=1;p_delay(99999999);state=null;sound=0;p_delay(99999999);}}/****************************************************************************** *****密码读写函数******************************************************************************* *****/void p_rsave(){uchar f_n=9;while(f_n--)save[f_n]=p_rdata(f_n+10);}void p_wsave(){uchar f_n=9;while(f_n--)p_wdata(f_n+10,save[f_n]);}/****************************************************************************** *****延时函数******************************************************************************* *****/void p_delay(uint f_n){f_n=100*f_n;while(f_n--);}/****************************************************************************** *****数组比较函数******************************************************************************* *****/uchar p_compare(uchar *f_k1,uchar *f_k2){uchar f_k=0,f_n=0;{if(*(f_k1+f_n)==end&&*(f_k2+f_n)==end){f_k=1;break;}else if(*(f_k1+f_n)!=*(f_k2+f_n)){f_k=0;break;}f_n++;}return f_k;}/****************************************************************************** *****数组复制函数******************************************************************************* *****/void p_copy(uchar *f_s,uchar *f_k){uchar f_n;for(f_n=0;*(f_k+f_n)!=end;f_n++)*(f_s+f_n)=*(f_k+f_n);*(f_s+f_n)=end;}/****************************************************************************** *****EEPRom读写函数******************************************************************************* *****/uchar p_rdata(uchar f_a){uchar f_d;p_start();p_wbyte(0xd0);p_wbyte(f_a);p_rack();p_stop();_nop_();p_start();p_wbyte(0xd1);p_rack();f_d=rbyte();p_nack();p_stop();_nop_();return f_d;}void p_wdata(uchar f_a,uchar f_d) {p_start();p_wbyte(0xd0);p_rack();p_wbyte(f_a);p_rack();p_wbyte(f_d);p_rack();p_stop();_nop_();}void p_start(){MDE=1;MDO=1;MCO=1;MDO=0;}void p_stop(){MDE=1;MDO=0;MCO=1;MDO=1;}bit p_rack(){bit f_f;MCO = 0;MDE=1;MDO = 1;MCO = 1;MDE=0;f_f = MDI;MCO = 0;return f_f;}void p_nack(){MDE=1;MDO = 1;MCO = 1;MCO = 0;}uchar rbyte(){uchar f_b,n;f_b=0;MDE=1;MDO = 1;MDE=0;for (n=0;n<8;n++){MCO = 0;_nop_();MCO = 1;f_b<<=1;if (MDI)f_b|=0x01;}MCO = 0;return(f_b);}void p_wbyte(uchar f_b){uchar f_n;MDE=1;for(f_n=0;f_n<8;f_n++){MCO = 0;MDO = (f_b&0x80)>>7;_nop_();MCO = 1;f_b<<= 1;}MCO = 0;}使用说明书本产品为多功能密码锁.01.第一次启动后需要设定新密码,此时指示管显示一,输入新密码后按ENTER.然后需要确定新密码,此时指示管显示二,输入相同的密码后.指示管显示s闪烁3次,表示新密码设定成功.若两次密码不相同,则指示管显示d闪烁3次,然后指示管重新显示一,表明你需要重新输入新密码并确定.02.密码设定成功后,指示管显示f,表明你可以输入密码打开密码锁了.输入密码并按ENTER,如果密码正确,指示管显示s闪烁3次然后指示管显示o.表明密码锁已经打开.若密码不正确,指示管显示e闪烁3次.并且指示管重新显示f,此时你需要重新输入正确的密码.03.若密码锁已经打开,你需要按下OFF以关闭密码锁.04.如果你想要重设密码,请按下REVISE,然后,指示管显示f闪烁三次后,你需要输入原始密码后按ENTER,然后按第一步的方法设定密码.05.本产品有时间显示功能,如果你想修改时间,你可以按下TREVISE.这时候你可以调整你的时间了,此时需要调整位闪烁,若修改时间不符合实际,则无法修改.提示01.密码最多8位,超过8位会显示错误.02.无法输入不合理的时间.03.在半小时内连续输入错误的密码3次,键盘会锁定,无法进行任何操作, 蜂鸣器报警且指示管显示e一直闪烁直到半小时过去,并且指示管点亮起,提醒有人试图打开保险箱,直至再次输入正确的密码.04.BACK键可退格.05.CANCLE可返回表层.06.10秒操作超时, 蜂鸣器报警.07.按下任何一个键蜂鸣器都会响起提醒按键成功.08.本产品具有掉电储存功能,关闭电源后依然会记录密码.09.回复出厂设置,在OPENED状态下,先按BACK然后再按ENTER即可回复出厂设置.10.密码位数显示, 指示管会显示你输入了多少位密码.键位说明。
山东交通学院单片机原理与应用课程设计院(部):轨道交通学院班级:自动化121学生姓名:学号:指导教师:时间: 2015.6.1—2015.6.12课程设计任务书题目电子密码锁设计系 (部) 轨道交通学院专业班级自动化121学生姓名学号06 月 01 日至 06 月 12 日共 2 周指导教师(签字)系主任(签字)年月日一、设计内容及要求本实验基于51单片机利用矩阵按键、步进电机、lcd1602等模块实现电子密码锁的输入密码、密码比对、步进电机的驱动、修改密码等功能。
设计内容包括:1)lcd1602显示;2)矩阵按键的输入;3)24C08的储存于读取;4)步进电机的驱动;5)线路的链接。
设计要求:1)能演示;2)能回答答辩过程中提问的问题;3)完成设计报告。
二、设计原始资料单片机原理及接口技术李全利 2010年 1月单片机原理及应用教程范立南 2006年 1月单片机原理及应用教程刘瑞新 2003年07月三、设计完成后提交的文件和图表1.计算说明书部分1)方案论证报告打印版或手写版2)程序流程图3)具体程序2.图纸部分:具体电路原理图打印版四、进程安排教学内容学时地点资料查阅与学习讨论 2天 406实验室分散设计 4天 406实验室编写报告 2天 406实验室成果验收 2天 406实验室按分组选择不同的实验台,每组3人,题目可重复选择,但每题目不得超过10人。
五、主要参考资料《电子设计自动化技术基础》马建国、孟宪元编清华大学出版2004年4月《单片机原理及接口技术》张毅刚人民邮电出版社.2008年《实用电子系统设计基础》姜威 2008年1月《单片机系统的PROTEUS设计与仿真》张靖武 2007年4月指导老师成绩答辩小组成绩总成绩目录摘要 (1)1.设计要求 (2)2.功能概述 (2)3.总体设计 (2)4.硬件设计 (3)4.1矩阵按键设计 (3)4.2 LCD显示设计 (4)4.3步进电机模块设计 (5)4.4密码修改设计 (5)4.5密码比较模块 (6)5.软件设计及流程图 (6)6.个人体会 (8)7.参考文献 (9)附录 (10)摘要设计运用了ATMEL公司的AT89S52芯片系统,将微处理器、总线、蜂鸣器、矩阵键盘、存储器和I/O口等硬件集中一块电路板上,通过读取键盘输入的数据(密码)并储存到ATMEL912 24C08存储器中,然后判断之后键盘输入的数据与已存储的数据是否相同来决定打开密码箱或锁键盘或报警。
单片机课程设计密码锁设计在当今社会,安全问题越来越受到人们的重视,密码锁作为一种常见的安全防护设备,在保护个人财产和隐私方面发挥着重要作用。
本次单片机课程设计的任务就是设计一款基于单片机的密码锁。
一、设计要求本次设计的密码锁需要具备以下功能:1、能够设置和修改 4 位数字密码。
2、输入密码正确时,锁打开,并有相应的指示灯提示。
3、输入密码错误时,有错误提示,且错误次数超过 3 次则报警。
4、具备密码重置功能。
二、系统方案设计1、硬件设计单片机选型:选择 STC89C52 单片机作为核心控制器,其具有性能稳定、价格低廉、易于编程等优点。
输入模块:采用 4×4 矩阵键盘作为密码输入设备,可方便地输入数字和功能按键。
显示模块:选用 1602 液晶显示屏,用于显示密码输入状态、提示信息等。
存储模块:使用 EEPROM 芯片 AT24C02 来存储密码,以保证断电后密码不丢失。
报警模块:当密码输入错误次数超过 3 次时,通过蜂鸣器发出报警声音。
2、软件设计主程序:负责系统的初始化、键盘扫描、密码输入处理、密码验证、显示控制等。
键盘扫描程序:检测矩阵键盘上的按键动作,并将按键值返回给主程序。
密码处理程序:包括密码设置、修改、存储和验证等功能。
显示程序:控制 1602 液晶显示屏的显示内容。
三、硬件电路设计1、单片机最小系统包括单片机芯片、晶振电路和复位电路。
晶振为单片机提供时钟信号,复位电路用于系统的初始化。
2、矩阵键盘电路由16 个按键组成 4×4 矩阵,通过行线和列线的扫描来确定按键值。
3、显示电路1602 液晶显示屏通过数据总线和控制总线与单片机相连,实现数据的传输和显示控制。
4、存储电路AT24C02 通过 I2C 总线与单片机进行通信,用于存储密码数据。
5、报警电路蜂鸣器通过三极管驱动,当单片机输出高电平时,蜂鸣器发声报警。
四、软件程序设计1、主程序流程系统初始化,包括单片机端口初始化、液晶显示屏初始化、EEPROM 初始化等。
单片机课程设计- 密码锁1 设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“ P. ”,进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
1.2 总体方案介绍及工作原理说明⑴原始密码的设定,此密码是固定在程序存储器R0附,假设预设的密码为888888”共6 位密码。
(2) 密码的输入: 采用按键来完成密码的输入,输入时密码处于显示保密状态,输入六位密码后,自动结束输入,并判断其正确性(3) 密码若输入错误,显示输入错误提示信息,密码输入正确后,可以用键盘任意输入数字,若按下第八个按键,则进入修改密码(4) 密码修改: 可以任意输入“1 - 7”中的六位数字作为密码,密码输入时处于保密显示状态,六位密码输入结束确认后显示P. 。
电源模块报警装置AT89S52复位和振荡下载口单片机电路数码管显独立式键盘示模块图1 设计总框图2 密码锁硬件系统的设计12.1 密码锁硬件系统各模块功能简要介绍此次课程设计是基于单片机控制的电子密码锁,结合主要设计条件,本设计由单片机系统、独立式键盘、LED显示和报警系统组成,系统能完成开锁、错误报警、密码修改功能等功能,设计硬件系统如下(1) 单片机系统:此次课题采用一种是用以AT89S52为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO 端口,及其控制的准确性,进行电子密码锁的设计。
此次课题用单片机P1 口与键盘相连,做输入口,P0 口与显示器段控相连,输入段控码,P2 口输入位控码。
(2) 独立式键盘接口电路:此次课程设计采用独立式键盘,与P1 口相连,键按下则会使该端口变成低电平,单片机读P1 口,通过对P1 口数据的判断来确定哪一个键按下。
题目名称电子密码锁课程名称单片机原理及应用课程设计学生姓名学号系、专业信息工程系、电子信息工程指导教师2013年6 月26 日摘要随着人们生活水平的不断提高,一切向着数字化控制,智能化控制方向发展。
单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,同时也给人们带来了意想不到的安全,其中电子密码锁就是一个典型的例子。
单片机AT89C51具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点。
所以在本设计中采用单片机AT89C51作为控制器来控制电路本系统以单片机为核心,辅以键盘,显示电路,使用按键来输入到开锁密码,并将其反馈到单片机,用单片机测出是否正确,从而判断是否开门,电路简单可靠,成本低廉。
关键字:单片机;行列式键盘;数码显示管;继电器目录1 概述 (4)2 设计指标与要求 (4)3 设计方案 (4)4 电路设计原理和电路图4.1主要构成电路 .......................................... 错误!未定义书签。
4.2按键输入电路 ........................................ 错误!未定义书签。
4.3显示电路 ................................................ 错误!未定义书签。
4.4报警电路 ................................................ 错误!未定义书签。
5 采用的主要元器件 56 编程实现错误!未定义书签。
7 仿真结果与分析 ................................................. 错误!未定义书签。
参考文献.. (9)1 概述应用MCS-51单片机设计电子密码锁电路。
电子密码锁电路选用4位控制,连续三次输入错误密码,密码锁则警报8秒钟,之后又可以重新开始输入密码三次。
设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
; 40H-45H 按键缓冲区,用于存放键码值; 50H-55H 显示缓冲区,用于存放要显示的段码; 70H-75H 密码区保存区,用于存放密码; 30H 单个单元存放段码地址(即存放50-55); 31H 单个单元存放键码地址(即存放40-45); 21H.0位判断是否按下了修改密码键K2; 21H.1位修改密码时用于判断是否正确输入了原密码; 21H.2位产生初始P. 只要有键按下,则该位置1,否则置0来不断输出P.ORG 0000HSJMP MAINORG 0030HMAIN:MOV SP,#60HMOV P2,#01H ;用来产生P.0的位控MOV R1,#70H ;密码区,初始密码为六个8T: MOV @R1,#08HINC R1CJNE R1,#76H,TACALL PPAJMP FIRSTPP: MOV R0,#50H ;显示缓冲区首地址Q: MOV @R0,#0FFH ;“灭”段码INC R0CJNE R0,#56H,Q ;让8个显示缓冲区初始值为“灭”状态,后面按一次则赋一次值MOV 30H,#4FH ;段码地址临时MOV 31H,#3FH ;按键后存放键码的缓冲区首地址ACALL DLRETPQ:MOV P0,#0CH ;输出P.ACALL DLRET;下面实现按键功能FIRST:ACALL DIRACALL KEY ;调用键处理函数K1: JNB ACC.0,K2 ;K1键确定键判0 转移MOV 30H,#4FH ;段码地址临时MOV 31H,#3FH ;按键后存放键码的缓冲区首地址JB 21H.0,KK ;按了K2改密键,再K1,则表示修改密码,FUN0改密函数LJMP FUN1KK: CLR 21H.0LJMP FUN0K2: JNB ACC.1,K3 ;K2键改密码,但必须在输入原密码之后修改,而且要修改两次才确定修改ACALL PP ;调用函数让数码显示管灭JNB 21H.1,FIRST ;如果21H.1为0,表示未输入原密码SETB 21H.0ACALL DIRAJMP FIRSTK3: JNB ACC.2,K4 ;K3ACALL DIRINC 31HMOV R0,31H MOV @R0,#03H AJMP FIRST洞洞板/万能板成品图片左下角有地址-有录像K4: JNB ACC.3,K5 ;K4ACALL DIRINC 31HMOV R0,31HMOV @R0,#04HAJMP FIRSTK5: JNB ACC.4,K6 ;K5ACALL DIRINC 31HMOV R0,31HMOV @R0,#05HAJMP FIRSTK6: JNB ACC.5,K7 ;K6ACALL DIRINC 31HMOV R0,31HMOV @R0,#06HAJMP FIRSTK7: JNB ACC.6,K8 ;K7ACALL DIRINC 31HMOV R0,31HMOV @R0,#07HAJMP FIRSTK8: JNB ACC.7,FIRST ;K8ACALL DIRINC 31HMOV R0,31HMOV @R0,#08HAJMP FIRSTKS:MOV A,P1CPL ARETKEY: ACALL KSJNZ AGAIN ;有键闭合则转向再次判断AJMP EXTI ;无键闭合则转向结束AGAIN:ACALL DIR ;延时16毫秒ACALL DIRACALL KSJNZ LKP ;两次判断有键闭合,则转向按键键值判断;MOV A,20HAJMP EXTI ;第二次判断无键闭合,则转向结束LKP:SETB 21H.2 ;有键闭合JB ACC.0,LK1 ;要排除K1和K2键,因为那是作为确认和修改密码的,不是密码值JB ACC.1,LK1LK0:INC 30H ;有键闭合,显示缓冲区地址加1MOV R0,30HMOV @R0,#0BFH ;有键闭合,则让显示缓冲区状态为横杠LK1:PUSH ACCLK: ACALL DIR ;判断是否键起ACALL KSJNZ LKPOP ACCEXTI:JB 21H.2,TTACALL PQTT: RETDIR: MOV R0,#50H ;50H为显示缓冲区首地址N1: MOV P2,#80H ;位控制MOV P0 ,@R0 ;输出段控码ACALL DL ;延时1毫秒N2: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN3: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN4: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN5: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN6: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN7: INC R0MOV A,P2RR AMOV P2,AMOV P0,#0FFH ;输出横杠线ACALL DLN8: INC R0MOV A,P2RR AMOV P2,AMOV P0,#0FFH ;输出横杠线ACALL DLEXTI0:RET;延时一毫秒函数DL: MOV IE,#00HMOV TMOD,#10H ;工作方式1,MOV TH1,#0FCH ;延时程序延时一毫秒MOV TL1,#18HSETB TR1STEP1:JBC TF1,STEP2AJMP STEP1STEP2:CLR TR1RETFUN0:MOV R2,#06HMOV R0,#40H ;修改密码把40H-45H里的内容放到70H-75H里面去MOV R1,#70HH: MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,HMOV R0,#50HZ: MOV @R0,#0F9H ;输出1表示密码修改正确INC R0CJNE R0,#56H,ZACALL DIRAJMP FIRSTFUN1:MOV R0,#40H ;输入的键码MOV R1,#70H ;密码区W: MOV A,@R0SUBB A,@R1JNZ NO_SAME ;非0就转移不相等就转移INC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMEINC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMEINC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMEINC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMEINC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMESAME:MOV R0,#50HZ2: MOV @R0,#0F9H ;输出1表示密码正确INC R0CJNE R0,#56H,Z2ACALL DIR;ACALL PP ;如果有这条语句,则显示1后立刻消失SETB 21H.1AJMP FIRSTNO_SAME:MOV R0,#50HY: MOV @R0,#0C0H ;输出0表示密码错误INC R0CJNE R0,#56H,YACALL DIRAJMP FIRSTEND毕业论文题目:基于单片机的电子密码锁的设计专业:通信工程摘要单片机已经在家电领域中得到了广泛的应用,而且在安全密保方面,具有防盗报警功能的电子密码锁逐渐取代了传统的机械密码锁,克服了机械密码锁密码过少的安全性问题。
目录第1章概述 ---------------------------------------------------------------------------------- 4第2章系统总体方案设计------------------------------------------------------------ 62.1系统总体设计框图-----------------------------------------------------------------------62.1.1系统总体设计方案框图2.1: ---------------------------------------------------62.1.2电子密码锁结构流程图2.2: ---------------------------------------------------72.2初步设计思路 ----------------------------------------------------------------------------8第3章硬件电路设计------------------------------------------------------------------ 93.1单片机主控电路 -------------------------------------------------------------------------9----------------------------------------------------------------------------------------------------93.2液晶1602显示电路 ------------------------------------------------------------------- 103.3键盘电路设计 --------------------------------------------------------------------------- 113.4开锁电路--------------------------------------------------------------------------------- 143.5报警电路 --------------------------------------------------------------------------------- 143.6时钟电路--------------------------------------------------------------------------------- 153.7存储模块 --------------------------------------------------------------------------------- 153.71主要元件介绍-------------------------------------------------------------------- 16第4章软件设计----------------------------------------------------------------------- 174.1软件设计思路 --------------------------------------------------------------------------- 174.2各子程序设计 -------------------------------------------------------------------------- 184.2.1 键盘扫描子程序 --------------------------------------------------------------- 18第5章系统调试----------------------------------------------------------------------- 19第6章心得体会----------------------------------------------------------------------- 22附录-------------------------------------------------------------------------------------- 24附录A:源程序清单 ---------------------------------------------------------------------- 24附录B:硬件原理图 ----------------------------------------------------------------- 29电气信息学院课程设计评分表----------------------------------------------------------- 32第1章概述随着电子产品向智能化和微型化的不断发展,单片机已成为电子产品研制和开发中首选的控制器。
为了更好地推广单片机在家电领域中的应用,本文介绍一种应用AT89C52 单片机设计的智能电子密码锁。
经实际制作表明该密码锁具有安全、实用、成本低等特点,符合现代用锁的要求,具有一定的现实意义。
本设计是基于单片机的密码锁设计方案,根据要求,给出了该单片机密码锁的硬件电路和软件程序,同时给出了单片机型号的选择、硬件设计、软件流程图、单片机存储单元的分配、C语言源程序及详细注释等内容。
随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。
而锁自古以来就是把守门的铁将军,人们对它要求甚高,即要求可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。
传统的门锁既要备有大量的钥匙,又担心钥匙丢失后的麻烦。
随着单片机的问世,出现了带微处理器的密码锁,它除具有电子密码锁的功能外,还引入了智能化、科技化等功能。
从而使密码锁具有很高的安全性、可靠性。
目前西方发达国家已经大量应用智能门禁系统,可以通过多种的更加安全更加方便可靠的方法来实现大门的管理。
但电子密码锁在我国的应用还不广泛,成本还很高,希望通过不断地努力使电子密码锁能够在我国及居民日常生活中得到广泛应用,这也是一个国家生活水平的体现。
第2章系统总体方案设计2.1系统总体设计框图本系统采用89C52作为主控制器,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。
STC89C52是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。
该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
当在4x4的按键上输入8位数字密码时,89C52通过分析输入的8位数值与所预存的数值比较,在LCD上显示输入密码,以及在LCD上提示用户输入信息。
当输入密码正确时,电子密码锁开锁成功,当输入密码连续3次输入错误时,系统自动报警,LED指示关锁状态并由蜂鸣器发出持续10至20秒的报警信号根据设计要求与设计思路,确定系统的设计方案,图2.1为系统组成原理框图。
硬件有以下几部分组成:单片机、键盘电路、串行EEPROM扩展电路、LCD液晶显示电路、LED 指示灯电路、蜂鸣器电路等。
2.1.1系统总体设计方案框图2.1:图 2.1 系统总体设计方案框图2.1.2电子密码锁结构流程图2.2:图 2.2 系统总体设计方案流程图2.2 初步设计思路根据设计要求,初步思路如下:1、系统的原始密码放在RAM区,在运行过程中可以实时更改系统密码。
.2、利用串行EEPROM存储芯片,可以随时读取新密码,且具有掉电保护功能。
3、人机交互通过键盘输入,系统根据键值做出相应的处理,完成具体的功能。
4、液晶12864通过驱动电路,显示相应的状态。
5、系统运用LED指示灯来反映开关锁的情况,如果连续输入三次密码错误蜂鸣器就会报警。
6、此系统共设计了4个基本功能键:密码设置键、确认键、复位键、撤销键。
密码设置键:当用户需更改密码时,可通过此功能键方便地修改原先的旧密码。
确认键:当完成密码输入后,可按此功能键即可实现密码的比较和处理。
复位键:当密码三次输入错误时,系统进入死锁状态,可按此功能键跳出此状态。
第3章硬件电路设计3.1 单片机主控电路STC89C52具体介绍如下:①主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线②外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端③控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
图3.1 1602显示电路1602引脚功能:D0~D7 双向的数据总线,LCD数据读写方式可以分为8位及4位两种,以8位数据进行读写则D0~D7皆有效,若以4位方式进行读写,则只用到D4~D7.RS 寄存器选择控制线,当RS=0时,并且做写入的动作时,可以写入指令寄存器,若RS=0时,并且做读取的动作时,可以读取忙碌标志及地址计数器的内容。
如果RS=1则用于读写数据寄存器。
R/W LCD读写控制线,直接接地,由于R/W=0时,LCD执行写入的动作,R/W=1时则执行读取的动作。
EN 启用控制线,由P1.1控制,高电平动作。
高电平时LCD动作有效。
VCC 电源正端VO 亮度调整控制引脚,直接接地,使字符显示最亮。
GND 电源地端3.3键盘电路设计本项目运用4x4的矩阵键盘设定密码位数为八位,具有不容易套取的作用,运用不同功能的按键处理不同的程序。
在此系统设计中,键盘行列与单片机P3口连接,通过单片机程序实现对按键码的识别。
键盘上有好多键,每一个键对应一个键码,以便将键码转到相应的键处理子程序,进一步实现数据输入和命令处理的功能。
键识别的流程图如图3.2所示。
图3.2 键识别的流程图使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图3.3图3.3 矩阵键盘在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。