51单片机电子密码锁

合集下载

51单片机课程设计 电子密码锁

51单片机课程设计 电子密码锁

华中师范大学武汉传媒学院传媒技术学院电子信息工程2011仅发布百度文库,版权所有.基于单片机的密码锁的设计1设计题目:电子密码锁要求采用AT89S51单片机为主控芯片,通过软件程序组成电子密码锁系统2设计框图3方案设计课题设计目标本设计采用AT89S51单片机为主控芯片,通过软件程序组成电子密码锁系统,能够实现:1.正确输入密码前提下,开锁提示;2.错误输入密码情况下,蜂鸣器报警;3.密码可以根据用户需要更改;4.断电存储功能主控部分的选择选用单片机作为系统的核心部件,实现控制与处理的功能。

单片机具有资源丰富、速度快、编程容易等优点。

利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标。

密码输入方式的选择由各按键组成的矩阵键盘每条行线和列线都对应一条I/O口线,键位设在行线和列线的交叉点,当一个键按下就会有某一条行线与某一条列线接触,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动。

行线设计成上拉口线,初始时被置高电位,列线悬空,初始置低。

通过不断读行线口线,或者中断方式触发键位扫描。

当发现有键按下,将列线逐一置低,其他列线置高,读行线口线。

当某条列线置低时,某条行线也被拉低,则确定这两条线的交点处的按钮被按下。

每个按键都可通过程序赋予功能,从而完成密码识别。

4 硬件原图设计5程序流程图主程序流程图键功能程序流程图开锁程序流程图6仿真图7制作本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。

其中矩阵键盘用于输入数字密码和进行各种功能的实现。

由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。

毕业设计-基于51单片机电子密码锁设计

毕业设计-基于51单片机电子密码锁设计

基于51单片机电子锁设计摘要随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统机械锁由于构造简单,被撬事件屡见不鲜;电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。

本设计以单片机AT89C51作为密码锁监控装置的检测和控制核心,分为主机控制和从机执行机构(本设重点介绍主机设计),实现钥匙信息在主机上的初步认证注册、密码信息的加密、钥匙丢失报废等功能。

根据51单片机之间的串行通信原理,这便于对密码信息的随机加密和保护。

而且采用键盘输入的电子密码锁具有较高的优势。

采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,提高信号传输的抗干扰性,减少错误动作,而且功率消耗低;反应速度快、传输效率高、工作稳定可靠等。

软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。

测试结果表明,本系统各项功能已达到本设计的所有要求。

关键词:单片机;密码锁;单片机设计,电子锁。

Electronic Lock Design with 51 Serires Single Chip ControllerAbstractAlong with the exaltation of social science and the living level of people, how carry out the family to guard against theft, this problem also change particularly outstanding.Because of the simple construct of traditional machine lock,the affairs of theft is hackneyed.the electronics lock is safer because of its confidentiality, using the vivid good, the safe coefficient is high, being subjected to the large customer close.It can carry out the key information to register in the main on board initial attestation, the password information encrypt etc. Go to correspond by letter the principle according to the string between 51 machines, this is easy to encrypt and protect to the passwords information random. Adopt the numerical signal codes,not only can carry out many controls of the road information, raise the anti- interference that signal deliver, reduce the mistake action,but also the power consume is low, Respond quickly,the efficiency deliver is high, work stable credibility etc. The software design adoption the design thought from top to bottom, to make the system toward wear distribute type,turn to the direction development of small, strengthen the system and can expand the stability and circulate.Test the result enunciation, various functions of this system are already all request of this design.keyword:singlechip;cryptogram lock;singlechip design; electronics lock.目录1 绪论 (1)1.1 引言 (1)1.2 电子密码锁的背景 (1)1.3 电子锁设计的意义的本设计特点 (2)2.系统设计 (3)2.1系统总设计结构图 (3)2.2.开锁机构设计 (3)2.2.1主控芯片AT89C51单片机的简介 (4)3系统硬件设计 (6)3.1键盘设计 (6)3.2系统电路设计: (8)3.2.1 晶振时钟电路 (8)3.2.2复位电路设计 (8)3.2.3串口引脚功能介绍 (8)3.2.4 其它引脚 (9)3.3电路图的绘制 (9)3.3.1 PROTEL 99 SE简介: (12)3.4原器件采购 (14)3.5电路焊接 (14)4.软件设计 (17)4.1 系统软件设计整体思路 (17)4.2系统软件设计流程图 (18)5 程序调试 (19)5.1 程序调试用到的软件及工具 (19)5.2 KEIL C51简介 (19)5.3 调试过程 (19)6 设计总结与展望 (22)致谢 (23)参考文献 (24)附录 (25)1 绪论1.1 引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的喜爱。

基于51单片机电子密码锁设计PPT

基于51单片机电子密码锁设计PPT

3晶振时钟电路与复位电路
7
晶振时钟电路
复位电路
系统电路图
8
电路PCB板
9
4.软件设计
10
软 件 设 计 流 程 图
5.程序调试
11
调试本程序需要用到KEIL C51,及51开 发板一块及其配套的下载烧录软件
首先打开KEIL C51主程序,新建工程, 新建文本框写入程序,保存,检查是否有语 法错误,经反复检查无误后汇编,生成51单 片机可执行的HEX文件。然后用51开发板相 匹配的烧录软件把HEX文件写入单片机 。
学的精神去解决问题。很多事情看起来是很简单的问题,但实际
做起来去会发现有许多奥妙!这是因为其中蕴含着许多科学的问
题。运用科学的方法去解决问题,这是我这次实训给我带来的思
想上的改变。学习上,使自已在大学所以的知识在这次得到实践
,学到一些书本上无法学到的经验,对电子元件有了进一步的认
识。
电子锁是信息化时代发展的产物,应时而生,我9C51
开锁驱动电路
电磁阀
通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而 达到开锁的目的。本设计通过P3.0接一个3极管驱动继电器打开 电磁阀线圈实现开关门。
当用户输入的密码正确而且是在规定的时间及次数输入之内 ,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁 ,达到开门的目的。
1
89C52
51单片机的电子锁设计 九组 DZ0901
密码锁的功能
2
开关锁,修改密码
还原,记忆
输入密码
目录
3
1.系统设计
2.硬件设计
3.软件设计
4.程序调试
1.系统设计
4
系统总设计结构图

基于51单片机的电子密码锁

基于51单片机的电子密码锁

电子密码锁一、工作原理本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O 线的数目,在按键比较多的时候,通常采用这样方法。

每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N ×M个按键的键盘。

在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

4×4矩阵键盘的工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图5所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

扫描原理把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。

由于这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。

利用51单片机设计一个用16个按键输入,6位数字输出显示的电子时钟。

如图1-1所示。

图1-1按键分布图具体要求和按键功能介绍如下:1. 上电后,6 位数码管显示“—”;2. 设置6 位密码,密码通过键盘输入,按“确定”键确认,如密码正确,将锁打开;3. 密码由用户自己设定,若密码正确即锁被打开,则指示灯被点亮;4. 若密码1 次输入错误,则报警;5. 按Set 键,修改密码;6. 按Cle 键可清除已输入的密码,重新进行输二、系统硬件组成本次设计的主要有键盘,数码管,STC89C52芯片,以及LED灯。

基于51单片机的电子密码锁—1

基于51单片机的电子密码锁—1

基于51单⽚机的电⼦密码锁—1这个程序是为了实现基于51单⽚机的电⼦密码锁,⽬前,程序解决了最重要之⼀的输⼊的密码和保存的正确密码相⽐较的问题。

通过定义了两个数组:uchar table2[6]; //临时密码保存uchar password[6]="123456"; //进门密码将输⼊的密码写⼊到table2[]中有⼀点需要特别注意:因为我写到table2[]数组内的是ASCII值的0-9,⽽ASCII值的0-9对应的符号却是NUT,SOH... (省略)所以在刚开始调试时,LCD1602屏幕输出的总是奇怪的字符,⽽不是我想要的0-9,通过查询ASCLL码表可以知道字符(0-9)对应的数值是48-57,所以我通过定义了⼀个新的数组,uchar smgduan[10]={48,49,50,51,52,53,54,55,56,57};以及lcd_write_data(smgduan[table2[i]]);的⽅式,实现了在LCD上输出字符0-9的功能。

在最后做两个数组⽐较时,开始同样出现了这个情况,因为数字1和字符1对应的ASCII值不同,所以password[i]不等于table2[i],需要进⾏转换,我的⽅式的是password[i]==smgduan[table2[i]];罗⾥吧嗦这个多,主要还是给未来的⾃⼰看看,当初犯得错误多么低级。

---------------------------------------------------分割线-----------------------------------------------------------------------------------下⼀版改进考虑把重复按键选择数字改成矩阵按键,加进些其他的功能。

---------------------------------------------------分割线-----------------------------------------------------------------------------------程序部分:/*这个⽅案是我写基于51单⽚机的电⼦密码锁过程中,未完成全部功能的程序。

51单片机四位密码锁课程设计

51单片机四位密码锁课程设计

51单片机四位密码锁课程设计51单片机四位密码锁是一种常见的电子锁,它使用51单片机作为控制核心,通过输入四位密码来控制锁的开关。

本文将介绍关于51单片机四位密码锁的课程设计。

我们需要明确设计的目标和要求。

本设计的主要目标是实现一个四位密码锁系统,并且需要满足以下要求:1.能够输入四位数字密码。

2.密码输入正确时,能够解锁并输出解锁信号。

3.密码输入错误时,不能解锁。

4.能够重置密码。

接下来,我们将详细介绍设计的步骤和实现。

1.硬件设计:在硬件设计方面,我们需要准备以下器件:- 51单片机-数码管显示模块-按键模块-继电器模块-电源模块2.软件设计:在软件设计方面,我们需要编写51单片机的程序,通过编程实现密码锁的功能。

以下是设计的主要步骤:-初始化:设置输入输出引脚,并初始化时钟和数码管显示。

-输入密码:设计密码输入的函数,通过按键模块获取用户输入的密码。

-检验密码:设计密码检验的函数,将用户输入的密码与预设的密码进行比对。

-解锁信号:如果密码输入正确,输出解锁信号,通过继电器控制开关,实现解锁。

-密码错误:如果密码输入错误,通过数码管显示密码错误的提示信息。

-重置密码:设计密码重置的函数,将新设置的密码保存。

3.程序流程:根据以上设计的步骤,我们可以得到以下主要的程序流程:-初始化引脚和时钟。

-设置初始密码。

-进入主程序循环。

-接收用户输入的密码。

-检验密码是否正确。

-如果密码正确,显示解锁信号并控制继电器解锁。

-如果密码错误,显示密码错误信息。

-进入下一次循环。

4.调试和测试:完成程序编写后,我们需要进行调试和测试。

在测试过程中,我们需要输入正确和错误的密码进行验证,检查程序是否能够正常运行,并且能够正确判断和处理用户输入的情况。

5.优化改进:如果在测试中发现问题或不足之处,我们可以对程序进行优化和改进。

例如,可以增加密码输入的最大尝试次数,增加延时等待时间,增加密码保护等功能。

总结:通过对51单片机四位密码锁的课程设计,我们学习了如何使用51单片机编写程序,实现密码锁的功能。

基于51单片机的8位电子密码锁

基于51单片机的8位电子密码锁

课程设计基于51单片机的8位电子密码锁/****************************************************8位电子密码锁程序****************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit fmq=P3^0;sbit led1=P3^1;sbit led2=P3^2;sbit scl=P3^4;sbit sda=P3^5;uchar code wela[]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};uchar code dula[]={0x24,0xbd,0xe0,0xa8,0x39,0x2a,0x22,0xbc,0x20,0x28,0x24,0xfb,0xee,0x31,0Xef};uchar temp;uchar *play;uchar screa_ok=0;uchar at24c02[8]={0,0,0,0,0,0,0,0}; //存储源密码uchar atdata[8]={11,11,11,11,11,11,11,11}; //存储开锁密码uchar atdata1[8]={12,12,12,12,12,12,12,12}; //存储HHHHHHHH uchar atdata2[8]={11,11,11,11,11,11,11,11}; //存储修改密码uchar atdata3[8]={14,14,14,14,14,14,14,14}; //存储换密码时输入的密码void at24c02_init();void start();void stop();void respons0(); //应答void respons1() ;void write_add(uchar address,uchar date);uchar read_add(uchar address);void read_data(void);void write_data(void);uchar keyscan();void display();void keyprocess();void delay(){ ;;;;;;}void delayms(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){// at24c02_init();play=atdata2;read_data();//write_data();while(1){display();keyprocess();}}void display(){uchar j;for(j=0;j<=7;j++){P1=0Xff;P0=dula[play[j]];P1=wela[j];P1=0Xff;}}uchar keyscan(){uchar num=0xff;P2=0xfe;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delayms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delayms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delayms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xeb:num=9;break;case 0xdb:num=0;break;case 0xbb:num=11;break;case 0x7b:num=12;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delayms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}return num;}void keyprocess(){uchar keydata=0;uchar i,error=0;static unsigned char flag=0;static unsigned char num=0;keydata=keyscan();if(keydata==0xff)return;switch(keydata){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 0:if(flag==1){if(num<8){atdata3[num]=13;atdata[num]=keydata;num++;}}elseif(flag==2){if(num<8){atdata1[num]=keydata;num++;}}else{if(num<8){atdata2[num]=13;atdata[num]=keydata;num++;}}break;case 11:if(flag==0&&num==8){num=0;for(i=0;i<8;i++){if(atdata[i]==at24c02[i]){;}elseerror=1;}}if(error==0){led1=0;delayms(1000);led1=1;}else{led2=0;fmq=0;delayms(500);led2=1;fmq=1;delayms(500);led2=0;fmq=0;delayms(500);led2=1;fmq=1;delayms(500);led2=0;fmq=0;delayms(500);led2=1;fmq=1;}error=0;for(i=0;i<8;i++){atdata[i]=11;atdata2[i]=11;}}elseif(flag==1&&num==8) { num=0;for(i=0;i<8;i++) {if(atdata[i]==at24c02[i]) ;else{error=1;}}if(error==0){flag=2;play=atdata1;}else{led2=0;fmq=0;delayms(500);led2=1;fmq=1;delayms(500);led2=0;fmq=0;delayms(500);led2=1;fmq=1;delayms(500);led2=0;fmq=0;delayms(500);led2=1;fmq=1;}error=0;for(i=0;i<8;i++){atdata[i]=11;atdata3[i]=14;}}break;case 12:if(num>0){num--;if(flag==1){atdata3[num]=14;}if(flag==2){atdata1[num]=12;}else{ atdata[num]=11;atdata2[num]=11;}}break;case 13:if(flag==0){play=atdata3;flag=1;}break;case 14:if(flag==2&&num==8){write_data();for(i=0;i<8;i++){at24c02[i]=atdata1[i];}led1=0;delayms(300);led1=1;delayms(300);led1=0;delayms(300);led1=1;delayms(300);led1=0;delayms(300);led1=1;for(i=0;i<8;i++){atdata2[i]=11;}play=atdata2;for(i=0;i<8;i++){atdata1[i]=12;}flag=0;num=0;}break;case 15:flag=0;play=atdata2;break;case 16:/* on=0;flag=0;num=0;play=atdata2;for(i=0;i<8;i++){atdata2[i]=11;}*/break;}}void start() //开始信号{sda=1;delay();scl=1;delay();sda=0;delay();}void stop() //停止{sda=0;delay();scl=1;delay();sda=1;delay();}void respons0() //应答{sda=0;delay();scl=1;delay();scl=0;delay();}void respons1() //应答{sda=1;delay();scl=1;delay();scl=0;delay();}void init(){sda=1;delay();scl=1;delay();}void write_byte(uchar date) {uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl=0;delay();sda=CY;delay();scl=1;delay();// scl=0;// delay();}scl=0;delay();sda=1;delay();}uchar read_byte(){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){scl=1;delay();k=(k<<1)|sda;scl=0;delay();}return k;}void write_add(uchar address,uchar date) {start();write_byte(0xa0);respons0();write_byte(address);respons0();write_byte(date);respons0();stop();}uchar read_add(uchar address) {uchar date;start();write_byte(0xa0);respons0();write_byte(address);respons0();start();write_byte(0xa1);respons0();date=read_byte();respons1();stop();return date;}void read_data(){uchar i;for(i=0;i<8;i++){delayms(5);at24c02[i]=read_add(i);delayms(5);}}void write_data(){uchar i;for(i=0;i<8;i++){delayms(5);write_add(i,atdata1[i]);delayms(5);}}。

51单片机密码锁程序

51单片机密码锁程序
case 0xdd: return 5;break;
case 0xbd:return 6;break;
case 0x7d:return 12;break;//取消键12
}
while(temp!=0xf0)
{
temp=P1;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{ youxiaoled(); //按键有效指示灯亮,即蓝灯亮
temp=P1;
switch(temp)
{
case 0xee: return 1;break;
uchar i;
for (i=0;i<4;i++)
{
if (pw[i]==pwbuf[i])
flag = 1;
else
{
flag = 0;
i = 4;
error_cnt++; //错误次数加1
}
}
return(flag);
uchar num,num1;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7fd delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
键盘分布 7 8 9 修改密码
4 5 6 取消
键盘接法 行 P1.2 P1.1 P1.0 P1.3
列 P.4 P1.5 P1.6 P1.7
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录第1节引言 (1)1.1 电子密码锁述 (1)1.2 本设计主要任务 (1)1.3 系统主要功能 (2)第2节系统硬件设计 (3)2.1 系统的硬件构成及功能 (3)2.2 AT89C2051单片机及其引脚说明 (3)第3节系统软件设计 (5)3.1 系统主程序设计(流程图) (5)3.2 软件设计思想 (5)3.3 储单元的分配 (5)3.4 系统源程序 (6)3.5 系统应用说明 (9)3.6 小结 (9)结束语 (10)参考文献 (11)附录 (12)电子密码锁第1节引言1.1 电子密码锁概述随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。

而锁自古以来就是把守门的铁将军,人们对它要求甚高,即要求可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。

传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。

另外,如:宾馆、办公大楼、仓库、保险柜等,由于装修施工等人住时也要把原有的锁胆更换,况且钥匙随身携带也诸多便。

随着单片机的问世,出现了带微处理器的密码锁,它除具有电子密码锁的功能外,还引入了智能化、科技化等功能。

从而使密码锁具有很高的安全性、可靠性。

目前西方发达国家已经大量应用智能门禁系统,可以通过多种的更加安全更加方便可靠的方法来实现大门的管理。

但电子密码锁在我国的应用还不广泛,成本还很高,希望通过不断地努力使电子密码锁能够在我国及居民日常生活中得到广泛应用,这也是一个国家生活水平的体现。

很多行业的许多地方都要用到密码锁,随着人们生活水平的提高,如何实现家庭或公司的防盗这一问题也变的尤其突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜,再者,普通密码锁的密码容易被多次试探而破译,所以,考虑到单片机的优越性,一种基于单片机的电子密码锁应运而生。

电子密码锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲睐。

设计本课题时构思的方案:采用以AT89C2051为核心的单片机控制方案;能防止多次试探而不被破译,从而有效地克服了现实生活中存在的许多缺点。

1.2 本设计主要任务(1)共8位密码,每位的取值范围为1~8。

(2)用户可以自行设定和修改密码。

(3)按每个密码键时都有声、光提示。

(4)若键入的8位开锁密码不完全正确,则报警5秒钟,以提醒他人注意。

(5)开锁密码错3次要报警10分钟,报警期间输入密码无效,以防窃贼多次试探密码。

(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1秒的提示音。

(7)密码键盘上只允许有8个密码按键和1个发光管。

锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的。

(8)密码设定完毕后要有2秒的提示音。

以上是初步设定的电子密码锁的主要功能。

1.3 系统主要功能本系统主要由单片机系统、键盘、报警系统组成。

系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。

除上述基本的密码锁功能外,还具有调电存储、声光提示等功能,依据实际的情况还可以添加遥控功能。

本系统成本低廉,功能实用。

第1节电子密码锁硬件设计2.1 系统的硬件构成及功能根据总体要求分析,该密码锁电路所需要的I/O口线少于15个,所以可选择质优价廉的AT89C2051,而且不需要外接程序存储器和数据存储器及其它扩展部件。

电子密码锁由电路和机械两部分组成,此次设计的电子密码锁可以完成密码的修改、设定及非法入侵报警、驱动外围电路等功能。

从硬件上看,它由六部分组成,分别是:LED显示器,显示亮度均匀,显示管各段不随显示数据的变化而变化,且价格低廉,它用于显示键盘输入的相应信息;无须再加外部EPROM存储器,且外围扩展器件较少的AT89C52单片机是整个电路的核心部分;振荡电路为CPU产生赖以工作的时序;显示灯是通过CPU输出的一个高电平,通过三极管放大,驱动继电器吸合,使外加电压与发光二极管导通,从而使发光二极管发光,电机工作。

现在来进行修改密码操作。

修改密码实质就是输入的新密码去取代原来的旧密码。

密码的存储用来存储一位地址加1,密码位数减1,当八个地址均存入一位密码,即密码位数减为零时,密码输入完毕,此时按下确认键,新密码产生,跳出子程序。

为防止非管理员任意的进行密码修改,必须输入正确密码后,按修改密码键,才能重新设置密码。

密码输入值的比较主要有两部分,密码位数与内容任何一个条件不满足,都将会产生出错信息。

当连续三次输入密码出错时,就会出现报警信息,LED显示出错信息,蜂鸣器鸣叫,提醒人注意。

在电路中,P1口连接8个密码按键AN1~AN8,开锁脉冲由P3.5输出,报警和提示音由P3.7输出。

BL是用于报警与声音提示的喇叭,发光管D1用于报警和提示,L是电磁锁的电磁线圈。

图1 电子密码锁硬件电路图2.2.1AT89C2051单片机及其引脚说明AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版与Intel MCS-51系列单片机的指令和输出管脚相兼容。

由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。

内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,AT89C2051是一个有20个引脚的芯片,引脚配置如图2所示。

与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。

图2 AT89C2051引脚配置AT89C2051芯片的20个引脚功能为:VCC 电源电压。

GND 接地。

RST 复位输入。

当RST变为高电平并保持2个机器周期时,所有I/O引脚复至“1”。

XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2 来自反向振荡放大器的输出。

P1口 8位双向I/O口。

引脚P1.2~P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。

P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1”后,可用作输入。

在闪速编程与编程校验期间,P1口也可接收编码数据。

P3口引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/0引脚。

P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。

P3口的输出缓冲器能接收20mA 的灌电流;P3口写入“1”后,内部上拉,可用输入。

P3口也可用作特殊功能口,功P3口同时也可为闪速存储器编程和编程校验接收控制信号。

P3口引脚特殊功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INT0(外部中断0)P3.3 INT1(外部中断1)P3.4 T0(定时器0外部输入)第3节系统的软件设计图3给出了该单片机密码锁电路的软件流程图。

图中AA1~AA8以及START、SET、SAVE是程序中的标号,是为了理解程序而专门标在流程图的对应位置的,分析程序时可以仔细对照参考。

3.1 系统主程序设计流程图(见附页)3.2 软件设计思想软件任务分析环节是为软件设计做一个总体规划。

从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能(如计算、显示、输出控制和通信等);另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。

这两类软件的设计方法各有特色;执行软件的设计偏重算法效率,与硬件关系密切,千变万化;监控软件着眼全局,主要处理人机关系,特点是逻辑严密、千头万绪。

本设计要完成的软件任务主要有:一是键盘输入的识别;二是8位LED的显示;三是密码的比较、修改、存储;;四是报警和开锁控制电平的输出。

根据以上任务,结合硬件结构,可以将键盘输入的识别用来作为系统的监控程序(主程序),用显示程序来延时,不断查询键盘。

如果有键按下,就得到相应的键值。

结合当前系统所处的状态,调用不同的操作模块,实现相应的功能。

而执行模块主要有数字输入模块、确定键模块、修改键模块、显示模块及报警模块。

3.3 存储单元的分配该密码锁中RAM存储单元的分配方案如下:31H~38H:依次存放8位设定的密码,首位密码存放在31H单元;R0:指向密码地址;R2:已经键入密码的位数;R3:存放允许的错码次数3与实际错码次数的差值;R4至R7:延时用;00H:错码标志位。

对于ROM存储单元的分配,由于程序比较短,而且占用的存储空间比较少,因此,在无特殊要求时,可以从0030H单元(其它地址也可以)开始存放主程序。

3.4 系统源程序ORG 0000HAJMP STARTORG 0030HSTART:ACALL BPMOV:R0,#31HMOV:R2,#8SET:MOV:P1,#0FFHMOV:A,P1CJNE:A,#0FFH,L8AJMP SETL8: ACALL DELAYCJNE A,#0FFH,SAVEAJMP SETSAVE:ACALL BPMOV @R0,AINC R0DJNZ R2,SETMOV R5,#16D2S:ACALL BP DJNZ R5,D2SMOV R0,#31HMOV R3,#3AA1:MOV R2,#8AA2:MOV P1,#0FFH MOV A,P1CJNE A,#0FFH,L9 AJMP AA2L9:ACALL DELAY CJNE A,#0FFH,AA3 AJMP AA2AA3 ACALL BPCLR CSUBB A,@R0INC R0CJNE A,#00H,AA4 AJMP AA5AA5:DJNZ R2,AA2 JB 00H,AA6CLR P3.5L3:MOV R5,#8 ACALL BPDJNZ R4,L3 MOV R3,#3SETB P3.5 AJMP AA1AA6:DJNZ R3,AA7 L5:MOV R4,#200 L4:ACALL BP DJNZ R4,L4 DJNZ R5,L5 MOV R3,#3AA7:MOV R5,#40 ACALL BPDJNZ R5,AA7AJMP AA1BP:CLR P3.7 MOV R7,#250L2:MOV R6,#124L1:DJNZ R6,L1CPL P3.7DJNZ R7,L2SETBRETDELAY MOV R7,#20L7:MOV R6,#125L6:DJNZ R6,L6DJNZ R7,L7RETEND3.5 应用说明若按键AN1~AN7分别代表数码1~7,按键AN0代表数码8。

相关文档
最新文档