论文发表百科

基于51单片机密码锁毕业论文

发布时间:2024-07-05 18:13:47

基于51单片机密码锁毕业论文

电子密码锁的设计研究开题报告

紧张而又充实的大学生活即将结束,大家都开始做毕业设计了,在做毕业设计之前要先写好开题报告,优秀的开题报告都具备一些什么特点呢?下面是我帮大家整理的电子密码锁的设计研究开题报告,欢迎大家分享。

一、 课题背景和意义

锁是一种保安措施,是人类为了保护自己私有财产而发明的一种用钥匙才能开启的装置。随着人们生活水平的提高和安全意识的加强,对锁的要求也越来越高,既要安全可靠的防盗,又要使用方便。这就使得传统的锁防盗效果已经满足不了现代社会的防盗需要,而且还存在着随身带钥匙的不便。因此近几年,随着科学技术的不断发展,一种新型的电子密码锁应运而生。电子密码锁运用电子电路控制机械部分,使两者紧密结合,从而避免了因为机械部分被破坏而导致开锁功能失常的问题,而且密码输入错误是还有报警声,大大增加了电子密码锁的防盗功能。同时因为电子密码锁不需要携带钥匙,弥补了钥匙极易丢失和伪造的缺陷,方便了锁具的使用。传统的锁由于构造简单,所以被撬的事件屡见不鲜,电子密码锁由于具有保密性高、使用灵活性好、安全系数高等优点,受到了广大用户的青睐。

二、国内外研究现状

电子密码锁的种类繁多,例如数码锁、指纹锁、磁卡锁、IC卡锁、生物锁等,但较实用的还是按键式电子密码锁。20世纪xx年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,而且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显的进展。

目前,在西方发达国家,密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于只能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国密码锁整体水平尚处在国际xx年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不的努力,使电子密码锁在我国也能得到广发应用。

三、 设计论文主要内容

1、电子密码锁设计方案的分析与方案选择;

2、设计一典型结构的电子密码锁,分析其电路结构及控制程序;

3、选者合适的电器元件;

4、编写控制程序;

5、将程序输入PC机,并修改进行模拟运行;

四、 设计方案

查阅文献技术资料,分析电子密码锁结构、工作原理和技术要求。以单片机为主控芯片,结合外围电路,通过软件程序组成电子密码锁系统,能够实现:

1。 正确输入密码前提下,开锁提示;

2。 错误输入密码情况下,蜂鸣器报警;

3. 密码可以根据用户需要更改。

五、 工作进度安排

— 确定毕业设计课题,提交开题报告; 查阅相关论文,调研及收集相关资料; 方案设计、审查和确定,提交中期报告 编写控制程序 整理并撰写论文 完善论文,提交论文

六、 主要参考文献

[1] 石文轩,宋薇。基于单片机MCS—51的智能密码锁设计[M]。武汉工程职业技术学院学报,20xx,(01);

[2] 祖龙起,刘仁杰。一种新型可编程密码锁[J]。大连轻工业学院学报,20xx,(01);

[3] 叶启明,单片机制作的新型安全密码锁[J]。家庭电子,20xx,(10);

[4] 李明喜,新型电子密码锁的设计[J]。机电产品开发与创新,20xx,(03);

[5] 董继成,一种新型安全的单片机密码锁[J]。电子技术,20xx,(03);

[6] 杨茂涛,一种电子密码锁的实现[J]。福建电脑,20xx,(08);

[7] 瞿贵荣,实用电子密码锁[J]。家庭电子,20xx,(07);

[8] 王千,实用电子电路大全[M],电子工业出版社,20xx,p101;

[9] 何立民,单片机应用技术选编[M],北京:北京航空大学出版社,19xx;

[10] ATmega,ATmega8L—8AC,20xx,(01);

一、开题报告前的准备

毕业设计(论文)题目确定后,学生应尽快征求指导教师意见,讨论题意与整个毕业设计(论文)的工作计划,然后根据课题要求查阅、收集有关资料并编写研究提纲,主要由以下几个部分构成:

1.研究(或设计)的目的与意义。应说明此项研究(或设计)在生产实践上对某些技术进行改革带来的经济与社会效益。有的课题过去曾进行过,但缺乏研究,现在可以在理论上做些探讨,说明其对科学发展的意义。

2.国内外同类研究(或同类设计)的概况综述。在广泛查阅有关文献后,对该类课题研究(或设计)已取得的成就与尚存在的问题进行简要综述,只对本人所承担的课题或设计部分的已有成果与存在问题有条理地进行阐述,并提出自己对一些问题的看法。

3.课题研究(或设计)的内容。要具体写出将在哪些方面开展研究,要重点突出。研究的主要内容应是物所能及、力所能及、能按时完成的,并要考虑与其它同学的互助、合作。

4.研究(或设计)方法。科学的研究方法或切合实际的具有新意的设计方法,是获得高质量研究成果或高水平设计成就的关键。因此,在开始实践前,学生必须熟悉研究(或设计)方法,以避免蛮干造成返工,或得不到成果,甚至于写不出毕业设计(论文)。

5.实施计划。要在研究提纲中按研究(或设计)内容落实具体时间与地点,有计划地进行工作。

二、开题报告

1.开题报告可在指导教师所在教研室或学院内举行,须适当请有关专家参加,指导教师必须参加。报告最迟在毕业(生产)实习前完成。

2.本表(页面:A4)在开题报告通过论证后填写,一式三份,本人、指导教师、所在学院(要原件)各一份。

三、注意事项

1.开题报告的撰写完成,意味着毕业设计(论文)工作已经开始,学生已对整个毕业设计(论文)工作有了周密的'思考,是完成毕业设计(论文)关键的环节。在开题报告的编写中指导教师只可提示,不可包办代替。

2.无开题报告者不准申请答辩。

一、选题依据(拟开展研究项目的研究目的、意义)

随着人们生活水平和自身防范意识的提高,个人人身财产安全越来越受到重视,而锁就是主要的有效保障手段。但是机械锁发展到现在已有悠久的历史,人们对它的内部结构已经有了很透彻的研究,可以做到不使用钥匙而轻易打开锁,也由于金属材料在复杂多变的环境下会生锈,导致锁芯卡死、弹簧老化等问题。

在信息化高速发展的今天,锁也摆脱了以往的造型,向着科技化、信息化、智能化发展。自单片机面世以来,凭借着体积小、价格低、易于编程[2],逐步成为越来越多的电子产品的核心控制组件[4]。在这种趋势下,电子密码锁也就应运而生,并经过多年的快速发展,整体上有遥控式电子锁、键盘式电子锁[11]、卡式电子锁、生物特征扫描电子锁这几种类型,电子密码锁以其可以自由更换密码、操作简单、安全性高[16]、自动报警、自动锁死、功耗低、外观个性、附加功能多种多样[3]等优点深受人们的喜爱,但由于电子密码锁的价格远高于普通机械锁,因此市场上的主流还是机械锁,所以我们需要不断的研究、改进电子锁,学习借鉴前人的程序编码【18】,使其更加智能化、廉价化,让电子密码锁得到普及,使人们的自身财产安全得到更好的保障。

二、文献综述内容(在充分收集研究主题相关资料的基础上,分析国内外研究现状,提出问题,找到研究主题的切入点,附主要参考文献)

早在80年代,日本生产了最早的电子密码锁,随着经济复苏,电子行业得到快速发展,一些使用门电路设计的简单电路密码锁出现了。到了90年代,美国、意大利、德国、日本等地的微电子技术的进步和通信技术的发展为电子密码锁提供了技术上的支持。我国于90年代初开始对密码锁进行初步的探索。到目前为止,在此领域已经有了相当程度的发展,能够生产各种高智能、高安全性的密码锁。遥控式电子防盗锁分为光遥控和无线电遥控,光遥控利用窄角度的光传输密码,传输信息量大、速度极快、无法再光路径上以仪器捕获信号试图复制,保密性极高,无线电遥控传输信息量大、速度快但是信号发散广容易被仪器捕获。卡式防盗锁,利用磁卡存储个人信息而且在特定场合能够一卡多用。生物特征防盗锁利用生物自带的唯一特征能够起到极高的防盗作用。但是这种高端电子锁只适用于政府机关、大型企业等少数部门,不适用于广大的人们群众的日常生活。普通群众日常使用的还是机械锁,所以需要设计一款功能实用、价格低廉、操作简单的电子密码锁。利用单片机【1】作为控制元件的电子密码锁能够使用C语言[7]和汇编语言简单的对其进行各种人性化的编程[6],来控制单片机各引脚的高低电位[14]从而实现各元件的接通与关闭,通过整体的配合实现随意更改密码、防盗报警[9]、防暴力破解自锁、LED显示等功能,更加适应不同人群的需求。

参考文献:

[1]宁爱民应用AT89C2051单片机设计电子密码锁.淮海工学院学报.

[2]韩团军;基于单片机的电子密码锁设计[J];国外电子测量技术;2010年07期

[3]郭海英.基于单片机的电子安全密码锁的设计.现代电子技术.

[4]张洪润. 单片机应用技术教程[M].北京:清华大学出版社,1997

[5]李娜,刘雅举. Proteus在单片机仿真中的应用[J].现代电子技术,2007,(04)

[6]杨将新,李华军,刘到骏. 单片机程序设计及应用(从基础到实践)[M].北京:电子工业出版社,2006

[7]谭浩强. C++程序设计[M].北京:清华大学出版社,2004

[8]郑春来;韩团军;李鑫.编译软件Keil在单片机课程教学中的应用.高教论坛.

[9]周功明. 基于AT89C2051单片机的防盗自动报警电子密码锁系统的设计[J].绵阳师范学院学报,2007,(04)

[10]李全利. 单片机原理及接口技术[M].北京:高等教育出版社,2003

[11]瞿贵荣. 实用电子密码锁[J]. 家庭电子,2000,(07):34~73

[12]赵益丹,徐晓林,周振峰. 电子密码锁的系统原理、设计程序及流程图[J].嘉兴学院学报,2003,(15)

[13]李广弟,朱月秀,冷祖祁.单片机基础[M].(第三版) 北京:北京航空航天大学出版社,2007

[14]康华光,陈大钦,张林.电子技术基础(模拟部分)[M].(第五版) 北京:高等教育出版社,2006

[15]李伯成.基于MCS-51单片机的嵌入式系统的设计[M].北京:电子工业出版社,.

[16]郭海英.基于单片机的电子安全密码锁的设计[J].现代电子技术,2005,(13)

[17]蒋辉平 周国雄.基于PROTEUS的单片机系统设计与仿真实例[M].北京:机械工业出版社,.

三、研究方案(主要研究内容、目标,研究方法)

研究内容:

基于整个控制系统的研究设计情况,本设计主要进行如下方面的研究:用智能,集成且功能强大的单片机芯片[15]为控制中心,设计出一套按键式电子密码锁。

本设计主要做了如下几方面的工作:

1.确定密码锁系统的整体设计,包括密码的存储与更改、密码数字的显示、密码是否正确的LED灯提示,暴力破解的密码的蜂鸣器警报。

2.进行各模块的电路设计与连接、大体分配各个器件及模块的基本功能[13]要求。在P0口处接上拉电阻来保证LED屏幕的正常工作以给用户显示正确有效的提示信息,接入两个发光二极管(红、绿各一个)来提示用户的密码是否正确,接入一个蜂鸣器来提示用户密码错误以及在被暴力破解时的报警功能,接入一个4x4矩阵键盘来让用户输入密码,与LED屏幕、发光二极管、蜂鸣器一起起到人机交互的作用。

3.进行软件系统的设计,使用KEI采用C语言对系统进行编程,研究系统的判断逻辑,采用延时函数来有效实现键盘的防抖动功能,采用循环语句来实现键盘的实时监听,采用外接存储器保存密码,采用判断语句判断输入的密码是否正确以及输入错误密码的次数判断是否调用蜂鸣器和键盘响应,将各功能模块整合到一起形成一套高效、简练的系统。

研究目标:

设计一个基于单片机的电子密码锁电路,完成密码的存储与更改、密码数字的显示、密码是否正确的LED灯提示,暴力破解的密码的蜂鸣器警报的功能,完成proteus仿真。

研究方法:

通过文献资料、理论学习,使用KEIL和PROTEUS进行密码锁系统的模拟仿真,验证是否能够实现预期功能。

四、进程计划(各研究环节的时间安排、实施进度、完成程度)

20xx年12月—20xx年3月

进行大量论文相关材料阅读,撰写开题报告,开题。三月中旬完成开题报告;

20xx年3月—20xx年4月

20xx年四月中旬完成论文初稿,交给导师修改,对不足的地方进行改进,学院进行论文中期检查;

20xx年4月—20xx年5月

对论文不足之处再修改,五月中旬并完成论文,形成定稿;

20xx年5月—20xx年6月

对论文进行评阅,合格的论文进行资格检查,组织毕业论文答辩。

用STC52编的,下面是C程序,调试已经成功,自己看程序吧……#include<>#include <>#define uchar unsigned char#define uint unsigned int#define LCD_data P0sbit SDA=P3^5;sbit SCL=P3^4;//24C08控制口设置sbit LCD_RS = P3^3; //寄存器选择输入sbit LCD_RW = P3^6; //液晶读/写控制sbit LCD_EN = P3^7; //液晶使能控制sbit LCD_PSB = P3^2; //串/并方式控制sbit FM=P2^4;//蜂鸣器控制口sbit RS=P2^5;sbit T_CLK = P2^0; //实时时钟时钟线引脚 //sbit T_IO = P2^1; //实时时钟数据线引脚 //sbit T_RST = P2^2; //实时时钟复位线引脚 //sbit ds=P2^3;sbit EN=P2^6;sbit ZZ=P2^7;sbit FZ=P3^1;sbit ACC0=ACC^0;sbit ACC7=ACC^7;uint temp1,s_temp; //定义整形变量float f_temp; //定义浮点型变量uchar time[]=" : : ";uchar day[]=" 20 / / ( ) ";uchar temp0[]=" 温度: . 度 ";uchar num,num1,flag,count,a,b;uchar unlock_i;//解密标志位uchar t[4];uchar t1[4];void delay_ms(uint z)//长延时{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void delay() //短延时,大约5us{; ;}void reshi(){if(RS==1){ unlock_i=1;}else{unlock_i=0;}}uchar code mima[]={'0','1','2','3','4','5','6','7','8','9','0','*'};void lcd_xieping0(uchar x,uchar y,uchar date);void lcd_xieping(uchar x,uchar y,uchar *str);//********************************************************// 开机显示//********************************************************void kjxs(){uint i,j;lcd_xieping(0,0,"****************");lcd_xieping(1,0," 欢迎进入 ");lcd_xieping(2,0," 密码锁系统! ");lcd_xieping(3,0,"****************");delay_ms(4000);lcd_xieping(0,0," 系统初始化中 ");lcd_xieping(1,0," 请稍后… ");lcd_xieping(2,0,"————————");lcd_xieping(3,0," ");for(j=3;j>0;j--){for(i=0;i<8;i++){lcd_xieping(3,i,"*");delay_ms(250);}lcd_xieping(3,0," ");}}//********************************************************// 12864显示//********************************************************void write_cmd(uchar cmd){LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;P0 = cmd;delay_ms(5);LCD_EN = 1;delay_ms(5);LCD_EN = 0;}void write_dat(uchar dat){LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delay_ms(5);LCD_EN = 1;delay_ms(5);LCD_EN = 0;}void lcd_xieping0(uchar x,uchar y,uchar date){switch(x){case 0: write_cmd(0x80+y); break;case 1: write_cmd(0x90+y); break;case 2: write_cmd(0x88+y); break;case 3: write_cmd(0x98+y); break;}write_dat(date);}void lcd_xieping(uchar x,uchar y,uchar *str){switch(x){case 0: write_cmd(0x80+y); break;case 1: write_cmd(0x90+y); break;case 2: write_cmd(0x88+y); break;case 3: write_cmd(0x98+y); break;}while (*str){write_dat(*str);str++;}}void lcd_init(){LCD_PSB = 1; //并口方式write_cmd(0x30); //基本指令操作delay_ms(5);write_cmd(0x0C); //显示开,关光标delay_ms(5);write_cmd(0x01); //清除LCD的显示内容delay_ms(5);}//**************************************************************// 键盘扫描函数//**************************************************************uchar keyscan1() //矩阵键盘扫描函数{uchar temp;while(!num){P1=0xfe; //赋值temp=P1; //读回数据temp=temp&0xf0; //与运算if(temp!=0xf0) //判断{delay_ms(2); //延时消抖temp=P1; //读回数据temp=temp&0xf0;if(temp!=0xf0){switch(temp) //多分支选择{case 0x70:num=1;break; //跳出case 0xb0:num=2;break;case 0xd0:num=3;break;case 0xe0:num=4;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}//等待按键释放}}P1=0xfd; //赋值temp=P1; //读回数据temp=temp&0xf0; //与运算if(temp!=0xf0) //判断{delay_ms(2); //延时消抖temp=P1; //读回数据temp=temp&0xf0;if(temp!=0xf0){switch(temp) //多分支选择{case 0x70:num=5;break; //跳出case 0xb0:num=6;break;case 0xd0:num=7;break;case 0xe0:num=8;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}//等待按键释放}}P1=0xfb; //赋值temp=P1; //读回数据temp=temp&0xf0; //与运算if(temp!=0xf0) //判断{delay_ms(2); //延时消抖temp=P1; //读回数据temp=temp&0xf0;if(temp!=0xf0){switch(temp) //多分支选择{case 0x70:num=9;break; //跳出case 0xb0:num=10;break;case 0xd0:num=11;break;case 0xe0:num=12;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}//等待按键释放}}}return(num); //返回值}uchar keyscan2(){uchar temp;while(!num1){P1=0xf7; //赋值temp=P1; //读回数据temp=temp&0xf0; //与运算if(temp!=0xf0) //判断{delay_ms(2); //延时消抖temp=P1; //读回数据temp=temp&0xf0;if(temp!=0xf0){switch(temp) //多分支选择{case 0x70:num1=1;break; //跳出case 0xb0:num1=2;break;case 0xd0:num1=3;break;case 0xe0:num1=4;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}//等待按键释放}}}return(num1);}//**************************************************************// 直流电机//**************************************************************void dianjiZZ(){EN=1;ZZ=1;FZ=0;}void dianjiFZ(){EN=1;ZZ=0;FZ=1;}void dianji_stop(){EN=0;}//**************************************************************// EPPROM//**************************************************************void start() //启动信号{SDA=1;delay();SCL=1;delay();SDA=0;delay();}void stop() //停止信号{SDA=0;delay();SCL=1;delay();SDA=1;delay();}void respons() //响应信号{uchar i;SCL=1;delay();while((SDA==1)&&(i<250))i++;SCL=0;delay();}void writebyte(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();SDA=1; //释放总线delay();}uchar readbyte() //读一个字节{uchar i,k;SCL=0;delay();SDA=1;for(i=0;i<8;i++){SCL=1;delay();k=(k<<1)|SDA;SCL=0;delay();}delay();return(k);}void write(uchar add,uchar date) //在一个地址写一个字节{start();writebyte(0xa0);respons();writebyte(add);respons();writebyte(date);respons();stop();}uchar read(uchar add) //在一个地址读一个字节{start();writebyte(0xa0);respons();writebyte(add);respons();start();writebyte(0xa1);respons();b=readbyte();respons();stop();return(b);}//**************************************************************// 时间日期函数//**************************************************************void v_WTInputByte(uchar ucDa){uchar i;ACC= ucDa;for(i=8; i>0; i--){T_IO = ACC0; //*相当于汇编中的 RRCT_CLK = 1;T_CLK = 0;ACC =ACC>> 1;}}uchar uc_RTOutputByte(void){uchar i;for(i=8; i>0; i--){ACC = ACC>>1; //*相当于汇编中的 RRCACC7 = T_IO;T_CLK = 1;T_CLK = 0;}return(ACC);}void v_W1302(uchar ucAddr, uchar ucDa){T_RST = 0;T_CLK = 0;T_RST = 1;v_WTInputByte(ucAddr); /* 地址,命令 */v_WTInputByte(ucDa); /* 写1Byte数据*/T_CLK = 1;T_RST =0;}uchar uc_R1302(uchar ucAddr){uchar ucDa;T_RST = 0;T_CLK = 0;T_RST = 1;v_WTInputByte(ucAddr); // 地址,命令 //ucDa = uc_RTOutputByte(); // 读1Byte数据 //T_CLK = 1;T_RST =0;return(ucDa);}void Init1302(void){v_W1302(0x8e,0x00); //控制写入WP=0v_W1302(0x80,0x80);v_W1302(0x90,0xa9);v_W1302(0x80,0x00); //秒v_W1302(0x82,0x24); //分v_W1302(0x84,0x12); //时v_W1302(0x86,0x29); //日v_W1302(0x88,0x10); //月v_W1302(0x8a,0x05); //星期v_W1302(0x8c,0x10); //年 //v_W1302(0x8e,0x80);}void donetime(void){uchar d;d=uc_R1302(0x87);day[10]=(d&0x0f)+48;day[9]=((d>>4)&0x03)+48;d=uc_R1302(0x89);day[7]=(d&0x0f)+48;day[6]=((d>>4)&0x01)+48;d=uc_R1302(0x8b);day[13]=(d&0x07)+48;d=uc_R1302(0x8d);day[4]=(d&0x0f)+48;day[3]=(d>>4)+48;d=uc_R1302(0x81);time[15]=(d&0x0f)+48;time[14]=(d>>4)+48;d=uc_R1302(0x83);time[12]=(d&0x0f)+48;time[11]=(d>>4)+48;d=uc_R1302(0x85);time[9]=(d&0x0f)+48;time[8]=(d>>4)+48;}//**************************************************************// 温度检测函数//**************************************************************void dsreset(void) //18B20复位,初始化函数{uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit tempreadbit(void) //读1位函数{uint i;bit dat;ds=0;i++; //i++ 起延时作用ds=1;i++;i++;dat=ds; //读数据i=8;while(i>0)i--;return (dat);}uchar tempread(void) //读1个字节{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里}return(dat);}void tempwritebyte(uchar dat) //向18B20写一个字节数据{uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01; //判断最后一位是1还是0dat=dat>>1;if(testb) //写 1{ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0; //写 0i=8;while(i>0)i--;ds=1;i++;i++;}}}void tempchange(void) //DS18B20 开始获取温度并转换{dsreset(); //初始化,每次对18B20的操作都首先要初始化delay_ms(1);tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0x44); // 写温度转换指令}void get_temp() //读取寄存器中存储的温度数据{uchar a,b;dsreset(); //初始化delay_ms(1);tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0xbe); //写读指令a=tempread(); //读低8位b=tempread(); //读高8位temp1=b;temp1<<=8; //两个字节组合为1个字temp1=temp1|a;f_temp=temp1*; //温度在寄存器中为12位 分辨率位°}//**************************************************************// 解密函数//**************************************************************void unlock(){uchar in,i;if(num==0){lcd_xieping(0,0,"**密码锁系统** ");lcd_xieping(1,0,"—————————");lcd_xieping(2,0," 请输入密码: ");lcd_xieping(3,0," ");for(i=0;i<4;i++){t1[i]=keyscan1();lcd_xieping(3,i,"*");num=0;}//输密码}in=keyscan1();if(in==12)//in-确定键标志位{in=0;num=0;if((t1[0]==t[0])&&(t1[1]==t[1])&&(t1[2]==t[2])&&(t1[3]==t[3])){flag=1;//解密成功与否标志位//unlock_i=1;a=0;//功能键标志lcd_xieping(0,0,"**密码锁系统** ");lcd_xieping(1,0,"——————————");lcd_xieping(2,0," 密码正确! ");lcd_xieping(3,0," 您的身份已确认");delay_ms(1500);lcd_xieping(1,0,"————————");lcd_xieping(2,0,"功能 I 开锁 ");lcd_xieping(3,0," II修改密码");}else{flag=0;count++;if(count==3){count=0;num=1;lcd_xieping(1,0,"——————————");lcd_xieping(2,0,"您的机会已用完 ");lcd_xieping(3,0,"对不起**无法进入");FM=0;delay_ms(1000);FM=1;}}}}//**************************************************************// 修改密码函数//**************************************************************void xiugaimima(){ uchar i,j,l,im,ib;uchar t2[4];uchar t3[4];num=0;lcd_xieping(1,0,"————————");lcd_xieping(2,0,"请输入新密码: ");lcd_xieping(3,0," ");for(i=0;i<4;i++){t2[i]=keyscan1();lcd_xieping0(3,i,mima[num]);num=0;}im=keyscan1();if(im==12)//im,in,ib,同为确定键标志位{im=0;num=0;lcd_xieping(1,0,"————————");lcd_xieping(2,0,"请再次输入新密码");lcd_xieping(3,0," ");for(i=0;i<4;i++){t3[i]=keyscan1();lcd_xieping0(3,i,mima[num]);num=0;}}ib=keyscan1();if(ib==12){ib=0;num=0;if(t2[0]==t3[0]&&t2[1]==t3[1]&&t2[2]==t3[2]&&t2[3]==t3[3]){t[0]=t3[0];t[1]=t3[1];t[2]=t3[2];t[3]=t3[3];lcd_xieping(1,0,"————————");lcd_xieping(2,0," 祝贺您! ");lcd_xieping(3,0," 密码修改成功 ");flag=0;for(j=0;j<4;j++){l=j+1;write(l,t[j]);delay_ms(10);}//24C08写数据delay_ms(1000);}else{lcd_xieping(2,0,"两次输入密码不同");lcd_xieping(3,0," 密码修改失败 ");flag=1;delay_ms(500);}}}//**************************************************************// 显示函数//**************************************************************void xianshi(){donetime();tempchange();get_temp();s_temp=f_temp*100;temp0[7]=(s_temp/1000)+48;temp0[8]=(s_temp%1000/100)+48;temp0[10]=(s_temp%100/10)+48;temp0[11]=(s_temp%10)+48;lcd_xieping(0,0,"**密码锁系统** ");lcd_xieping(1,0,temp0);lcd_xieping(2,0,day);lcd_xieping(3,0,time);num=0;}//**************************************************************// 开锁函数//**************************************************************void kaisuo(){uchar i;lcd_xieping(2,0," 开锁中…… ");lcd_xieping(3,0,"——耐心等待——");for(i=3;i>0;i--){FM=0;delay_ms(100);FM=1;delay_ms(100);flag=0;}dianjiZZ();delay_ms(10000);dianji_stop();lcd_xieping(2,0,"—开锁过程结束—");lcd_xieping(3,0," 请开门 ");delay_ms(5000);dianjiFZ();delay_ms(10000);dianji_stop();flag=0;}//**************************************************************// 主函数//**************************************************************void main(){uchar m;unlock_i=1;lcd_init(); //液晶初始化//Init1302();kjxs(); //开机显示for(m=0;m<4;m++){t[m]=read(m+1);delay_ms(10);}//24C08读数据while(1){reshi();if(!unlock_i){unlock();//解密函数}else{xianshi();//时间、日期、温度显示函数}if(flag==1){num1=0;a=keyscan2();if(a==1){kaisuo();//开锁函数}if(a==2){xiugaimima();//修改密码函数}}}}

基于51单片机的密码锁的话其实我是不知道是什么意思的 所以说不好意思咯(๑ó﹏ò๑)

用STC的单片机,里面有EEPROM,把设定的密码写到里面。正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

51单片机密码锁毕业论文

[1]单片机多功能密码锁系统/防火防盗系统设计实现功能:1、 密码锁功能/可以修改密码, 下次开机后新密码仍然有效2、 支持一键恢复初始密码3、 可添加防火防盗报警功能4、 可进行功能定制☆已作出的实物优酷视频演示地址:单片机蓝牙密码锁系统实现功能:1、 密码锁功能/可以修改密码, 下次开机后新密码仍然有效2、 支持一键恢复初始密码3、 手机蓝牙可以实现输入密码进行开锁4、 可进行功能定制☆已作出的实物优酷视频演示地址:

这个问题很简单!你主要检查一下电路连接是否正确,重点检查一下按键电路及AT24C02的这块的电路。还有就是晶振用对没有。

我这里有一个LCD显示的,密码是多少位的忘记了.懂事电子设计 Vgz

电子密码锁摘要 本文的电子密码锁利用数字逻辑电路,实现对门的电子控制,并且有各种附加电路保证电路能够安工作,有极高的安全系数。关键词 电子密码锁 电压比较器 555单稳态电路 计数器 JK触发器 UPS电源。1 引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。设计本课题时构思了两种方案:一种是用以AT89C2051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到单片机方案原理复杂,而且调试较为繁琐,所以本文采用后一种方案。

51单片机简易密码锁毕业论文

新款的单片机都可以设置密码

用STC的单片机,里面有EEPROM,把设定的密码写到里面。正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

你好!是仿真出效果还是用的开发板?是c语言写程序吗

首先得说明我这个可是自己原创手打的,但是没去仿真了,程序可能有错误,你自己修改下吧#include<>typedef unsigned char uchar;typedef unsigned int uint;sbit key1=P0^0;sbit key2=P0^1;sbit key3=P0^2;sbit key4=P0^3;sbit wela=P2^0;//位锁存端#define SMG P1sbit LED=P3^0;//低电平亮uchar code table[]={0x8d,0x86};//共阳数码管 P,Euchar chushi_mima[]={2,1,3};uchar shuru_mima[3];uchar index;//控制输入密码的位数uchar flag_3s=0;//3s标志位uchar keydown;//确定按键变量#define times 15//去抖时间15Msuchar key1_count,key2_count,key3_count,key4_count;void init(){ wela=0; SMG=0xff; TMOD=0x01; TH0=(65536-1000)/256; TL0=(65536-1000)%256; ET0=1; EA=1; TR0=1; LED=1;}void main(){ init(); while(1) { switch(keydown) { if(index>2)index=0; case 1: shuru_mima[index]=0; index++; break; case 2: shuru_mima[index]=1; index++; break; case 3: shuru_mima[index]=2; index++; break; case 4: shuru_mima[index]=3; index++; break; } flag_3s=0; for(i=0;i<3;i++) { if(shuru_mima[i]==chushi_mima[i]) { LED=0; wela=1; SMG=table[0]; if(flag_3s) { flag_3s=0; wela=0; } } else { LED=1; wela=1; SMG=table[1]; if(flag_3s) { flag_3s=0; wela=0; } } } }}void timer0() interrupt 1{ uchar count; TH0=(65536-1000)/256; TL0=(65536-1000)%256; if(++count>=600) { count=0; flag_3s=1; }/*********1ms中断扫描按键(包含去抖程序)********/ if(!key1&&key1_count!=0) { key1_count--; if(key1_count==0) { keydown=1; } } else if(!key1) key1_count=times;// key2,key3,key4你自己写吧}

毕业论文基于51单片机

温度控制系统的设计(555定时器) [单片机] 04-20摘要 在日常的生产与生活中,温度是一个非常重要的过程变量,因为它直接影响燃烧、化学反应、发酵、烘烤、煅烧、蒸馏、浓度、挤压成形、结晶以及空气流动等物理和化学过程。所以人们需要用到良好的温度检测及控制装置系统来解决这些问题。本文介绍了采用A/D ...http:// 化工液的温度控制与检测(程序+电路图+Protel原理图+PCB图)精品☆ [电子] 01-01摘 要 为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本文利用单片机结合传感器技术而开发设计了这一温度监控系统。文中传感器理论单片机实际应用有机结合,详细地讲述了利用AD5 ...http:// 温度控制器的设计(AT89S51单片机)(程序+电路图+原理图+PCB图)☆ [单片机] 11-17摘 要 随着科技的不断进步,在工业生产中温度是常用的被控参数,而采用单片机对这些被控参数进行控制已成为当今的主流。本文介绍了以AT89C51单片机为核心的数字温度测量及自动控制系统的设计,该温度控制器可以实时显示和设定温度,实现对温度的自动控制。其 ...http:// MCS-51单片机智能温度控制系统设计 [单片机] 07-16温度控制在热处理工艺过程中,是一个非常重要的环节。控制精度直接影响着产品质量的好坏。本文研究的电炉是一种具有纯滞后的大惯性系统,传统的加热炉控制系统大多建立在一定的模型基础上,难以保证加热工艺要求。 ...http:// 基于AT89C2051单片机的温度控制系统的设计(程序+电路图)☆ [单片机] 07-16摘 要 :温度控制在工业生产中运用的非常广泛,其控制过程中存在着很大的时滞性和很强的干扰。采用一般的控制方法如PID控制,都不能很好地满足要求。而基于AT89C2051单片机的温度控制策略可以很容易的解决这些问题。 以AT89C2051单片机为基础,结合温度传感 ...http:// 基于单片机饮水机温度控制的设计(实物图+原理图+PCB图+程序)☆ [单片机] 07-16摘 要 温度是表征物体冷却程度的物理量,也是一种最基本的环境参数。在农工业生产及日常生活中,对温度的测量及控制始终占据着极其重要的地位。目前,典型的温度测控系统由模拟式温度传感器、A/D 转换电路和单片机组成。由于模拟式温度传感器输出的模拟信号必 ...http:// 基于AT89S51单片机核心的温度控制系统的设计 [单片机] 07-16摘要 本文介绍了以AT89S51单片机为核心的温度控制系统的工作原理和设计方法。温度信号由温度芯片DS18B20采集,并以数字信号的方式传送给单片机。文中介绍了该控制系统的硬件部分,包括:温度检测电路、温度控制电路、PC机与单片机串口通讯电路和一些接口电路 ...http:// 基于单片机的温度控制系统的设计 [单片机] 07-16摘 要 本文列举了单片机在锅炉中的一个实际应用,并对设计的温度控制系统的组成及主要电路的作用进行了详细的介绍。 文章介绍了用单片机控制的、基于数字温度传感器DS1820的温度测量和控制系统:重点阐述了DS1820的工作原理、指令系统、单片机与DS1820之间的 ...http:// 基于单片机的模糊PID温度控制系统设计 [单片机] 07-16摘 要 温度控制在热处理工艺过程中,是一个非常重要的环节。控制精度直接影响着产品质量的好坏。本文研究的电炉是一种具有纯滞后的大惯性系统,传统的加热炉控制系统大多建立在一定的模型基础上,难以保证加热工艺要求。因此本文将模糊控制算法引入传统的加热 ...http:// 嵌入式系统在多点温度控制中的应用 [嵌入式] 07-16第一章 概述 引言 嵌入式系统被定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。实际上嵌入式系统是计算机的一种应用形式,是将先进的计算机技术、半导体技术和电子技 ...http://

程序设计内容

(1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2). 密码的输入问题:  由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

C语言源程序

#include unsigned char code ps[]={1,2,3,4,5};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                               

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsigned char pslen=9; unsigned char templen;

unsigned char digit; unsigned char funcount;

unsigned char digitcount;

unsigned char psbuf[9];

bit cmpflag;

bit hibitflag;

bit errorflag;

bit rightflag;

unsigned int second3;

unsigned int aa;

unsigned int bb;

bit alarmflag;

bit exchangeflag;

unsigned int cc;

unsigned int dd;

bit okflag;

unsigned char oka;

unsigned char okb;

void main(void)

{  

unsigned char i,j;  

P2=dispcode[digitcount];  

TMOD=0x01;  

TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

TR0=1;  

ET0=1;  

EA=1;  

while(1)   

  {      

if(cmpflag==0)        

{          

if(P3_6==0) //function key           

  {              

for(i=10;i>0;i--)              

for(j=248;j>0;j--);      

         if(P3_6==0)                

{                

   if(hibitflag==0)       

              {     

                  funcount++;  

                     if(funcount==pslen+2)

                        {  

                         funcount=0;

                          cmpflag=1;

                         }

                       P1=dispcode[funcount];

                    }

                    else

                      {

                         second3=0;

                      }  

                 while(P3_6==0);

                }

            }

          if(P3_7==0) //digit key

            {

              for(i=10;i>0;i--)

              for(j=248;j>0;j--);

              if(P3_7==0)

                {

                  if(hibitflag==0)

                    {

                      digitcount++; 

                  if(digitcount==10)

                        {

                          digitcount=0;

                        }

                      P2=dispcode[digitcount];

                      if(funcount==1)

                        {

                          pslen=digitcount;                          

templen=pslen;

                        }

                        else if(funcount>1)

                          {  

                           psbuf[funcount-2]=digitcount;

                          }

                    }

                    else

                      {

                        second3=0;

                      }

                  while(P3_7==0);

                }

            }

        }  

       else

          {

            cmpflag=0;

            for(i=0;i

              {  

               if(ps[i]!=psbuf[i])

                  {

                    hibitflag=1;

                    i=pslen;

                    errorflag=1;

                    rightflag=0;

                    cmpflag=0;

                    second3=0;

                    goto a;  

                 }

              }   

          cc=0;  

           errorflag=0;  

           rightflag=1;

            hibitflag=0;

a:   cmpflag=0;

          }

}

}

void t0(void)

interrupt 1 using 0 {   TH0=(65536-500)/256;  

TL0=(65536-500)%6;  

if((errorflag==1) && (rightflag==0))  

{

      bb++;

      if(bb==800)

        {

          bb=0;

          alarmflag=~alarmflag;

        }

      if(alarmflag==1)

        {

          P0_0=~P0_0;

        }

      aa++;

      if(aa==800)

        {

          aa=0;

          P0_1=~P0_1;

        }

      second3++;

      if(second3==6400)

        {

          second3=0;

          hibitflag=0;

          errorflag=0;

          rightflag=0;

          cmpflag=0;

          P0_1=1;  

         alarmflag=0;

          bb=0;  

         aa=0;  

       }

    }

  if((errorflag==0) && (rightflag==1))

    {

      P0_1=0;

      cc++;

      if(cc<1000)

        {

          okflag=1;

        }

        else if(cc<2000)

          {

            okflag=0;

          }

          else

            {

              errorflag=0;

              rightflag=0;

              hibitflag=0;

              cmpflag=0;

              P0_1=1;

              cc=0;  

             oka=0;

              okb=0;

              okflag=0;  

             P0_0=1;  

           }

      if(okflag==1)

        {  

         oka++;  

         if(oka==2)

            {

              oka=0;

              P0_0=~P0_0;

            }

        }

        else

          {

            okb++;

            if(okb==3)

              {

                okb=0;

                P0_0=~P0_0;

              }  

         }

    }

}

可以去我百度空间看看

这个 我可以写 按照老师的要求来写 包通过 包修改↓↓↓↓↓下面找我

单片机密码锁毕业论文百度

给你推荐一下,我要的论文就是在那里找到的,,希望能帮到你!关于单片机电子密码锁的毕业论文,是电子密码锁的,对.看我的名字!

电子密码锁摘要 本文的电子密码锁利用数字逻辑电路,实现对门的电子控制,并且有各种附加电路保证电路能够安工作,有极高的安全系数。关键词 电子密码锁 电压比较器 555单稳态电路 计数器 JK触发器 UPS电源。1 引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。设计本课题时构思了两种方案:一种是用以AT89C2051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到单片机方案原理复杂,而且调试较为繁琐,所以本文采用后一种方案。

这里有 毕业论文 基于单片机的电子密码锁设计AT89S51|矩阵键盘|电子密码锁|毕业设计文件格式:word毕业论文 基于单片机的电子密码锁设计论文正文共49页。共19073个字符数(不计空格)。如需下载,请点击页面最下方“下载地址 点击下载”。基于单片机的电子密码锁设计摘 要随着人们对安全的重视和科技的发展,对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求 ,增加其安全性 ,用密码代替钥匙的密码锁应运而生。电子锁由于具有报警功能,保密性高,使用灵活性好,安全系数高,设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求 , 具有推广价值。受到了广大用户的亲睐。这种应用以单片机为核心 ,通过编程来实现整体基本功能和安全性要求设计。系统将能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。能用PROTEL99SE绘制电路原理图,并做出调试好基于单片机的电子密码锁的实物。关键词:AT89S51,矩阵键盘,电子密码锁Microcontroller-based design of electronic locksABSTRACTAs people focus on security and technology development, life insurance for the safety devices in increasingly high demand. To meet people’s use of the lock request to increase their safety, replace the key with a password lock came into being. Electronic lock as an alarm, high secrecy, use good flexibility, high safety factor, design reasonable, simple, low cost, consistent with residential, office lock request is worth promoting. By the user pro-gaze. This application to SCM is the core of the overall program to achieve the basic functions and design safety will be able to complete the unlock, alarm out, and Ultra lock, decrypt administrator, modify the basic user password lock feature. Can PROTEL99SE circuit schematic drawing and make a good debugging MCU-based electronic code lock of the words: AT89S51, matrix keyboards, electronic lock目 录第一章 绪论 引言 电子密码锁的研究现状 课题研究方法 2第二章 开发环境和开发工具 Protel 99se简介 keil介绍 开发工具在系统中的作用 主要元器件介绍 主控芯片AT89S51 数码管 掉电存储模块AT24c02 8第三章 电子密码锁设计硬件部分 电子密码锁总原理图 开锁电路设计 按键电路设计 显示电路设计 掉电存储电路设计 电源电路设计 12第四章 电子密码锁软件部分 主程序流程图: 键功能流程图: 14第五章 电子密码锁实物制作和调试过程 电路板制作中的问题和调试结果分析 制作好的实物的图片 16第六章 总结 20设计总结 20参考文献 21致 谢 22附录一 电子密码锁的电路图 23附录二 电子密码锁3D截图 24附录三 电子密码锁程序清单 24

哈哈。快点回答吧。好几天了

相关百科
热门百科
首页
发表服务