毕业设计基于51单片机的密码锁设计程序
简易电子密码锁(基于51单片机)报告

简易电子密码锁设计&我的设计思想联想到日前在安全技术防范领域,具有防盗报警功能的电子密码控制系统逐渐代替传统的机械式密码控制系统,并结合近期的学习过程和一些参考书籍,完成了简易的电子密码锁设计学习。
电子密码控制是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
电子密码控制不论性能还是安全性都已大大超过了机械类结,具有良好的应用前景。
一、设计目的与内容设计了一个简易电子密码锁,可按要求从矩阵键盘输入6位数密码如“080874”,输入过程中有按键音提示。
当密码输入正确并按下确认键(“OK”键)后,发光二极管被点亮。
二、工作原理与基本操作过程介绍采用80C51为核心的单片机控制。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。
(1)键盘的人工编码给每个按键指定一个按键值,报告设定按键S1~S9对应的按键值分别为“1~9”,S10为数字“0”,S11为“OK”,S12~S16对应的按键值分别为12~16。
(2)根据按键值,指定每个按键对应的输入数字和信息。
如下表为每个按键代表的数字和输入信息。
当键盘扫描程序扫描到S10键被按下时,将其代表的按键值“0”通知CPU,CPU根据事先的规定,就会知道输入的数字是“0”。
矩阵键盘中每个按键所代表的数字和输入信息(3)输入数字和密码对比。
先将设定的密码用一个数组保存,报告中用的密码“080874”和“OK”确认信息可以用如下数组保存:Unsigned char D[ ]={0,8,0,8,7,4,11};在主程序接收到数字和信息后,通过逐位对比的方法进行判断。
输入的数字经对比正确时,程序才会继续顺序执行,否则,程序拒绝继续执行。
(4)执行预期功能。
如果输入密码正确,执行预期功能,报告设计为点亮P3.0口引脚LED。
三、电路图设计(Proteus绘制)四、程序设计(C语言)矩阵式键盘实现的电子密码锁程序#include<reg51.h> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚sbit sound=P3^7; //将sound位定义为P3.7unsigned char keyval; //储存按键值/************************************************************** 函数功能:延时输出音频**************************************************************/ void delay(void){unsigned char i;for(i=0;i<200;i++);}/************************************************************** 函数功能:软件延时子程序**************************************************************/ void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){unsigned char D[ ]={0,8,0,8,7,4,11}; //设定密码EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0keyval=0xff; //按键值初始化while(keyval!=D[0]) //第一位密码输入不正确,等待;while(keyval!=D[1]) //第二位密码输入不正确,等待;while(keyval!=D[2]) //第三位密码输入不正确,等待;while(keyval!=D[3]) //第四位密码输入不正确,等待;while(keyval!=D[4]) //第五位密码输入不正确,等待;while(keyval!=D[5]) //第六位密码输入不正确,等待;while(keyval!=D[6]) //没有输入“OK”,等待;P3=0xfe; //P3.0引脚输出低电平,点亮LED}/**************************************************************函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time0_interserve(void) interrupt 1 using 1 //定时器T0的中断编号为1,使用第一组寄存器{unsigned char i;TR0=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=1; //可判断是S1键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=2; //可判断是S2键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=3; //可判断是S3键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=5; //可判断是S5键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=6; //可判断是S6键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=7; //可判断是S7键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=9; //可判断是S9键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=0; //可判断是S10键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=11; //可判断是S11键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=12; //可判断是S12键被按下P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=13; //可判断是S13键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=14; //可判断是S14键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=15; //可判断是S15键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=16; //可判断是S16键被按下for(i=0;i<200;i++) //让P3.7引脚电平不断取反输出音频{sound=0;delay();sound=1;delay();}}TR0=1; //开启定时器T0TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%256; //定时器T0的高8位赋初值}五、用Proteus软件进行仿真利用Keil软件进行编译通过后,生成hex文件。
毕业设计-基于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单片机密码锁设计与调试 电子信息工程毕业设计论文

目录第一部分设计任务与调研 (1)第二部分设计说明 (2)第三部分设计成果 (5)第四部分结束语 (11)第五部分致谢 (12)第六部分参考文献 (13)第一部分设计任务与调研1.1设计的主要任务给抽屉设计一个四位密码的单片机密码锁控制系统,实现开锁功能,自动报警功能,改密功能,并取得仿真模拟调试成功。
1.2设计的思路本设计采用单片机为主控芯片,结合外围电路,组成电子密码锁,为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号,开锁密码位为四位。
能够让LCD1602显示器在密码正确时显示open!,密码错误时显示ERROR,输入密码时显示PASSWORD。
实现输入密码错误超过限定的三次电子密码时报警。
1.3设计的方法使用学校编写程序所学的单片机和C语言知识,利用在电工实训中学到的焊接技术焊接控制模块和LED接线及CAD所学的知识绘制驱动电路和控制电路,制作详细的设计方案和资料搜集后进行实际操作,通过程序设计,模拟仿真调试,修订完善后制作出成品。
1.4调研的目的和总结由于对电子密码锁的一些情况并不了解,为了使自己的电子密码锁能够更加完善,所以需要查阅大量的资料,通过查阅的资料与自己的想法进行一些结合做出取舍,最后获得了一些总结。
本设计从经济实用的角度出发,采用宏晶公司的单片机STC89C51与低功耗CMOS型作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警、开锁等电路,用C语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。
经实验证明,该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅、办公室用锁要求,具有推广价值。
第二部分设计说明2.1设计方案2.1.1系统框架图本次设计选用单片机STC89C51作为系统的核心元件,利用单片机灵活的编程设计和丰富的IO端口及其控制的准确性,实现基本的密码锁功能。
在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602显示器用于显示作用。
基于51单片机的密码锁程序

*************************************************/
void lcd_char(uchar row ,uchar cloum,uchar dat)
{
if(row==1)
{
lcd_writecom(0x80+cloum);
lcd_writedata(dat);
}
else
{
lcd_writecom(0x80+0x40+cloum);
lcd_writedata(dat);
}
}
/*********************************************
名称:lcd_string(uchar row,uchar cloum,uchar *p)
}
/********************************************************************
* 名称 : Delay_xMs()
* 功能 : 延时子程序,经过软件调试,测得延时程序大概为55us.
* 输入 : x
* 输出 : 无
***********************************************************************/
uchar init_password[6]="123456";
uchar a[5]="RIGHT";
uchar b[16]="The new password";
unsigned char code pu[282]={
基于51单片机电子密码锁的设计与开发

摘要自从人类开始制造锁以来长期所利用的锁都是机械锁,通俗的讲确实是弹子芯锁。
而传统的弹子芯锁,由于其本身锁芯密齿的有限加上开锁工具钥匙的容易复制性,使得其平安性大大降低,随着人们生活质量的提高,如何实现平安有效的防盗这一问题受到愈来愈多人的关注。
传统的机械锁由于平安性能太差,被撬的事件不足为奇,相较之下,电子密码锁因其保密性强,利用灵活性好,平安系数高,受到了广大用户的欢迎。
电子密码锁作为一种新型的锁,不仅拥有海量的密齿,通常从10000到不等,还省去了传统机械锁的钥匙,利用者只要记得其密码,即能够开启,从而大大提高了防盗功能,本文要紧设计了一种以单片机89C51为核心的电子密码锁,详细的介绍了该电子密码锁完整的设计进程和外围的开锁电路和报警电路的设计。
电子密码锁要紧由三部份组成:键盘接口电路、电子密码锁的操纵电路、输出八段显示电路。
键盘接口电路包括时序产生电路、键盘扫描电路、弹抖排除电路、键盘译码电路。
电子密码锁操纵电路设计包括数字按键的数字输入、存储和清除、功能按键的功能设计、移位寄放器的设计和操纵、密码清除、变更、存储、报警信号产生电路密码查对、解除电锁电路。
输出八段显示电路包括数据选择电路、八段显示器扫描电路。
关键词:电子密码锁,89C51,键盘接口,输出八段显示AbstractEver since mankind started making locks since locks are used in long-term mechanical lock, the popular talk is marbles core lock. The traditional marbles core lock cylinder due to its own limited addition fine-toothed tool for unlocking the key to easy reproduction, so their safety is greatly reduced, as people improve the quality of life, how to achieve safe and effective anti-theft problem by growing concern. Because traditional mechanical locks poor safety performance, was a common occurrence pry contrast, electronic locks for its confidentiality, use good flexibility, high safety factor, the majority of users. Electronic code lock as a new type of lock, not only has a mass of fine-toothed, usually ranging from 10,000 to 10,000,000, also eliminates the traditional mechanical key to the lock, the user just remember their password, they can open, thus greatly improving anti-theft feature, this paper designed a 89C51 microcontroller core with an electronic lock, a detailed description of the complete electronic locks to unlock the design process and the external circuit and alarm circuit. Electronic code lock consists of three parts: the keyboard interface circuit, electronic lock control circuit, the output Ba Duan display circuit. Keyboard interface circuit including the timing generating circuit, the keyboard scanning circuit, bounce elimination circuit, the keyboard decoder circuit. Electronic code lock control circuit design, including digital key digital input, storage and clean, functional design of function keys, shift register design and control, password remove, change, to step down, storage, alarm signal generating circuit password check, the lifting power locks circuit. Ba Duan display circuit including the output data selection circuit, eight out display scanning circuit.Keywords: electronic code lock, 89C51, keyboard interface, the output shows eight out目录第一章绪论......................................... 错误!未定义书签。
(完整版)基于51单片机的简易电子密码锁课程设计毕业设计论文

前言随着电子技术的发展,具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。
电子密码锁与普通机械锁相比,具有许多独特的优点:保密性好,防盗性强,可以不用钥匙,记住密码即可开锁等。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。
下面就是现在主流电子密码锁:目前常见的遥控式电子防盗锁主要有光遥控和无线电遥控两类。
键盘式电子密码锁从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。
卡式电子防盗锁使用各种“卡”作为钥匙的电子防盗锁是当前最为活跃的产品,无论卡的种类如何多种多样,按照输入卡的操作方式,都可分为接触式卡和非接触式卡两大类。
生物特征防盗锁人的某些与生俱来的个性特征(如手、眼睛、声音的特征)几乎不可重复,作为“钥匙”就是唯一的(除非被逼迫或伤害)。
因此,利用生物特征做密码的电子防盗锁,也特别适合金融业注重“验明正身”的行业特点。
人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。
锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。
随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。
据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。
这种锁是通过键盘输入一组密码完成开锁过程。
研究这种锁的初衷,就是为提高锁的安全性。
由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。
电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。
电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC 卡锁,生物锁等。
但较实用的还是按键式电子密码锁。
20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。
基于51单片机的电子密码锁系统设计制作,电路图+源程序

基于51单片机的电子密码锁系统设计制作,电路图+源程序这款基于51单片机的电子密码锁系统,单片机用STC89C52RC单片机,电路简单,制作过程中不需要进行调试,支持密码掉电保存功能!密码储存于单片机内部自带的的EEPROM中,不需要外置AT24C01保存密码,是学习电子密码锁比较好的教学试验系统,主要功能如下:1、1602液晶菜单显示。
2、6位密码,密码可重置,重置密码时,先输入原始密密,正确后输入新密码,再交输入新密码,两次输入的密码一致辞时,密码修改成功。
开锁时,密码通过键盘输入,若密码正确,则将锁打开,诺密码不正确时,无法开锁,密码输入错误三次时,蜂鸣器报警并且锁定键盘,10分钟。
3、支持掉电保存密码功能。
单片机中的密码是储存于单片内部的EEPROM中,在密码锁系统断电时,储存在密码锁系统中的密码不会丢失。
4、密码锁系统采用5V继电器模拟开锁过程。
5、输入的正确时,继电器吸合2-3秒,开锁指示灯亮2-3秒,模拟开锁。
6、密码错误报警且有错误提示(显示Error)。
7、密码正确开锁指示。
8、4X4矩阵键盘输入。
9、随时可修改密码存储,支持掉电保存密码功能,功能更为实用。
10、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
源程序如下:1. #include<reg52.h>2. #define uint unsigned int3. #define uchar unsigned char4. void key_scan();5. uchar count0,count1,count3,num,n=0,temp,a,j,count4;6. uchar mima[8]; //初始密码存储区7. uchar tab_key[50]; //输入密码存储区8. uchar code table[]={9. 0x3f,0x06,0x5b,0x4f,10. 0x66,0x6d,0x7d,0x07,11. 0x7f,0x6f,0x77,0x7c,12. 0x39,0x5e,0x79,0x71};13. bit enterflag; //确认键按下与否的标志14. bit mimaflag; //密码正确与否的标志15. bit xiugaiflag; //修改密码标志16. bit enter1flag; //修改密码确认键标志17. sbit red=P3^7;18. sbit bell=P3^6;19. sbit rs=P2^0;20. sbit rw=P2^1;21. sbit lcden=P2^2;22. sbit scl=P3^4;23. sbit sda=P3^5;24. uchar code table1[]="input the passco";25. uchar code table2[]="de: --------";26. uchar code table3[]="*";27. uchar code table4[]="right (^_^) ";28. uchar code table5[]="first error";29. uchar code table6[]="second error";30. uchar code table7[]="third error see ";31. uchar code table8[]="u tomorrow (^_^)";32. uchar code table9[]="define the passc";33. uchar code table10[]="ode: --------";34. uchar code table11[]="code is new";35. //******************************键盘消抖函数*******************************36. void delay1()37. { ;; }38. void delay2(uchar x)39. {40. uchar a,b;41. for(a=x;a>0;a--)42. for(b=100;b>0;b--);43. }44.45. void delay(uint z)46. {47. uint x,y;48. for(x=z;x>0;x--)49. for(y=110;y>0;y--);50. }51.52. //****************************e^2room的初始化*******************************53. void start() //开始信号54. {55. sda=1;56. delay1();57. scl=1;58. delay1();59. sda=0;60. delay1();61. }62.63. void stop() //停止64. {65. sda=0;66. delay1();67. scl=1;68. delay1();69. sda=1;70. delay1();71. }72. //****************************应答信号*************************************73. void respond()74. {75. uchar i;76. scl=1;77. delay1();78. while((sda==1)&&(i<250))i++;79. scl=0;80. delay1();81. }82. //*****************************写字节操作函数**********************************83. void write_byte(uchar date)84. {85. uchar i,temp;86. temp=date;87. for(i=0;i<8;i++)88. {89. temp=temp<<1; //保持最高位,左移到进位CY90. scl=0;91. delay1();92. sda=CY;93. delay1();94. scl=1;95. delay1();96. }97. scl=0;98. delay1();99. sda=1;//总线释放100. delay1();101. }102. //*******************************读字节操作函数***************************** 103. uchar read_byte()104. {105. uchar i,k;106. scl=0;107. delay1();108. sda=1;109. delay1();110. for(i=0;i<8;i++)111. {112. scl=1;113. delay1();114. k=(k<<1)|sda; //或运算,放到最低位115. scl=0;116. delay1();117. }118. return k;119. }120. //**********************************写地址函数****************************** 121. void write_add(uchar address,uchar date)122. {123. start();124. write_byte(0xa0);125. respond();126. write_byte(address);127. respond();128. write_byte(date);129. respond();130. stop();131. }132. //*******************************读地址函数************************************* 133. uchar read_add(uchar address)134. {135. uchar date;136. start();137. write_byte(0xa0);138. respond();139. write_byte(address);140. respond();141. start();142. write_byte(0xa1);143. respond();144. date=read_byte();145. stop();146. return date;147. }148. //****************************LCD1602的初始化******************************* 149. void write_com(uchar com)150. {151. rs=0;152. lcden=0;153. P0=com;154. delay(5);155. lcden=1;156. delay(5);157. lcden=0;158. }159.160. void write_date(uchar date)161. {162. rs=1;163. lcden=0;164. P0=date;165. delay(5);166. lcden=1;167. delay(5);168. lcden=0;169. }170.171. //***************************************密码比较函数******************************** 172. bit mimacmp()173. {174. bit flag;175. uchar i;176. for(i=0;i<8;i++)177. {178. if(mima[i]==tab_key[i])179. flag=1;180. else181. {182. flag=0;183. i=8;184. }185. }186. return(flag); //返回flag187. }188.189. ////**********************************LCD显示函数开始**************************************190. void lcd_display()191. {192. uchar i=0;193. write_com(0x80+0x40+8);194. for(i=0;i<n;i++)195. {196. write_date(table3[0]);197. }198. }199.200. //****************************************键盘功能分配函数群开始****************************201. //** 0 ** 1 **2 ** 3**202. //** 4** 5** 6 **7 **203. //**8** 9** 确认(A) **无效(B)204. //**取消(C)**修改密码键(D)**确认修改键(E)**无效(F)205.206. void key_manage1()207. {208. tab_key[n]=0;209. n++;210. if(xiugaiflag==1)211. {212. mima[count4]=0;213. count4++;214. }215. }216.217. void key_manage2()218. {219.220. tab_key[n]=1;221. n++;222. if(xiugaiflag==1)223. {224. mima[count4]=1;225. count4++;226. }227. }228.229. void key_manage3()230. {231.232. tab_key[n]=2;233. n++;234. if(xiugaiflag==1)235. {236. mima[count4]=2;237. count4++;238. }239. }240.241. void key_manage4() 242. {243. tab_key[n]=3; 244. n++;245. if(xiugaiflag==1) 246. {247. mima[count4]=3; 248. count4++;249. }250. }251.252. void key_manage5() 253. {254. tab_key[n]=4; 255. n++;256. if(xiugaiflag==1) 257. {258. mima[count4]=4; 259. count4++;260. }261. }262.263. void key_manage6() 264. {265. tab_key[n]=5; 266. n++;267. if(xiugaiflag==1) 268. {269. mima[count4]=5; 270. count4++;271. }272. }273. void key_manage7() 274. {275. tab_key[n]=6; 276. n++;277. if(xiugaiflag==1) 278. {279. mima[count4]=6; 280. count4++;281. }282. }283. void key_manage8() 284. {285. tab_key[n]=7; 286. n++;287. if(xiugaiflag==1) 288. {289. mima[count4]=7; 290. count4++;291. }292. }293.294. void key_manage9()295. {296. tab_key[n]=8;297. n++;298. if(xiugaiflag==1)299. {300. mima[count4]=8;301. count4++;302. }303. }304. void key_manage10()305. {306. tab_key[n]=9;307. n++;308. if(xiugaiflag==1)309. {310. mima[count4]=9;311. count4++;312. }313. }314. //**********************************确认键**************************************************************315. void key_manage11()316. {317. enterflag=1; //确认键按下318. if(n==8) //只有输入8个密码后按确认才做比较319. mimaflag=mimacmp();320. else321. mimaflag=0;322. if(enterflag==1)323. {324. enterflag=0;325. n=0;326. //用FFFFFFFF清除已经输入的密码327. for(count3=0;count3<8;count3++)328. {329. delay(5);330. tab_key[count3]=0x0f;331. }332.333. TR1=1; //打开计数器1334. count1=0; //定时器1由50MS累计到1S 所用的计数器335. if(mimaflag==1)336. {337. a=0;338.339. write_com(0x01);340. write_com(0x80);341. for(count3=0;count3<16;count3++)342. {343. write_date(table4[count3]); //密码正确,显示RIGHT,绿灯亮344. delay(5);345. }346. }347.348. else349. {350. n=0;351. red=0;352. bell=0;353. a++;354. if(a==1)355. {356. for(count3=0;count3<8;count3++) //ffffffff清除密码357. {358. delay(5);359. tab_key[count3]=0x0f;360. }361. write_com(0x01); 362. write_com(0x80);363. for(count3=0;count3<16;count3++)364. {365. write_date(table5[count3]); //密码错误,显示 first error,红灯亮366. delay(5);367. }368. TR1=1;369. }370. if(a==2)371. {372. for(count3=0;count3<8;count3++) //ffffffff清除密码373. {374. delay(5);375. tab_key[count3]=0x0f;376. }377. write_com(0x01);378. write_com(0x80);379. for(count3=0;count3<16;count3++)380. {381. write_date(table6[count3]); //密码错误,显示SECOND ERROR,红灯亮382. delay(5);383. }384. TR1=1;385. }386.387. if(a==3)388. {389. for(count3=0;count3<8;count3++) //ffffffff清除密码390. {391. delay(5);392. tab_key[count3]=0x0f;393. }394. write_com(0x01);395. write_com(0x80);396. for(count3=0;count3<16;count3++)397. {398. write_date(table7[count3]); //密码错误,显示third error see,红灯亮399. delay(5);400. }401. write_com(0x80+0x40);402. for(count3=0;count3<16;count3++)403. {404. write_date(table8[count3]);//密码错误,显示 U TOMORROW ,红灯亮405. delay(5);406. }407. TR1=0;408.409. }410.411. }412. }413.414. }415. void key_manage12()416. {417. tab_key[n]=11;418. n++; //密码计数清零419.420. }421. //****************************************************取消键********************************************422. void key_manage13()423. {424.425. n=0; //密码计数清零426. write_com(0x80); //指针所指位置427. for(count3=0;count3<16;count3++)428. {429. write_date(table1[count3]); //第一行显示INPUT THE PASSPORD:430. delay(5);431. }432. write_com(0x80+0x40);433. for(count3=0;count3<16;count3++)434. {435. write_date(table2[count3]); //开机显示--------436. delay(5);437. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码438. }439.440. }441. //*******************************************修改密码键********************************** 442. void key_manage14()443. {444. uchar aa=0;445. n=0;446. xiugaiflag=1;447. write_com(0x01);448. write_com(0x80);449. for(count3=0;count3<16;count3++)450. {451. write_date(table9[count3]); //显示define the password452. delay(5);453. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码454. }455. write_com(0x80+0x40);456. for(count3=0;count3<16;count3++)457. {458. write_date(table10[count3]); //显示--------459. delay(5);460. }461. TR0=1;462.463. }464. //******************************************修改密码键的确认键********************************465. void key_manage15()466. {467. n=0;468. enter1flag=1;469. if(enter1flag==1)470. {471. enter1flag=0;472. count4=0;473. for(count3=0;count3<16;count3++)474. {475. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码476. }477. write_com(0x01);478. write_com(0x80);479. for(count3=0;count3<16;count3++)480. {481. write_date(table11[count3]);482. delay(100);483. }484. TR1=1;485. count1=0;486. }487. }488. void key_manage16()489. {490. tab_key[n]=15;491. n++;492. }493.494. //****************************************定时器1的50MS,共延时1秒*****************************495. void time_1() interrupt 3496. {497.498. TH1=(65536-50000)/256;499. TL1=(65536-50000)%256;500. if(count1<20)501. {502. count1++;503. }504. else //计时到1S505. {506. TR1=0;507. count1=0;508. mimaflag=0;509.510. red=1;511. bell=1;512. //显示FFFFFFFF513. write_com(0x01);514. write_com(0x80);515. for(count3=0;count3<16;count3++)516. {517. write_date(table1[count3]); //显示INPUT THE PASSCODE518. delay(5);519. }520. write_com(0x80+0x40);521. for(count3=0;count3<16;count3++)522. {523. write_date(table2[count3]); //开机显示FFFFFFFF524. delay(5);525. }526. }527.528. }529. //***********************************************定时0**********************************************530. void time_0() interrupt 1531. {532.533. TH0=(65536-50000)/256;534. TL0=(65536-50000)%256;535. if(count4<8)536. {537. key_scan();538. }539. else540. {541. TR0=0;542. count4=0;543. }544. }545.546. //初始化函数547. void init()548. {549.550. uchar i;551. lcden=0;552. write_com(0x38); //打开显示模式设置553. write_com(0x0c); //打开显示,光标等等设置未零554. write_com(0x06); //当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移,555. write_com(0x01); //清零指令556. write_com(0x80); //指针所指位置557.558. //定时器初始化559. TMOD=0x11; //T0,T1工作方式1560. TH0=(65536-2000)/256;561. TL0=(65536-2000)%256; //T0初始化2MS563. TH1=(65536-50000)/256;564. TL1=(65536-50000)%256; //T1初始化50MS565.566. TR1=0;567. ET1=1;568. EA=1;569. TR0=0;570. ET0=1;571.572. count0=0; //初始没有密码输入,故为零573. enterflag=0; //没有确认键按下574. mimaflag=0; //密码正确与否键先置零575.576. red=1; //红灯不亮577. //************密码存入EPROM中**********************************578. sda=1;579. delay(5);580. scl=1;581. delay(5);582. for(i=0;i<8;i++)583. {584. write_add(i,8);585. delay2(100);586. }587. for(i=0;i<8;i++)588. {589. mima[i]=read_add(i);590. delay(5);591. }592.593. }594. void main()595. { rw=0;596. init();597. write_com(0x80); //指针所指位置598. for(count3=0;count3<16;count3++)599. {600. write_date(table1[count3]); //第一行显示INPUT THE PASSPORD: 601. delay(5);602. }603. write_com(0x80+0x40);604. for(count3=0;count3<16;count3++)605. {606. write_date(table2[count3]); //开机显示FFFFFFFF607. delay(5);608. }609. while(1)610. {611. key_scan(); //调用键盘扫描函数612. lcd_display();613. }614.615. }616. //**************************************************键盘扫描函数开始********************************619. //**********扫描第一行*********620. P1=0xfe;621. temp=P1;622. temp=temp&0xf0;623. if(temp!=0xf0)624. {625. delay(100);626. if(temp!=0xf0)627. {628. temp=P1;629. switch(temp)630. {631. case 0xee:632. key_manage1();633. break;634.635. case 0xde:636. key_manage2();637. break;638.639. case 0xbe:640. key_manage3();641. break;642.643. case 0x7e:644. key_manage4();645. break;646. }647. while(temp!=0xf0)648. {649. temp=P1;650. temp=temp&0xf0;651. }652. }653. }654. //**************************************************扫描第二行***********************************655. P1=0xfd;656. temp=P1;657. temp=temp&0xf0;658. if(temp!=0xf0)659. {660. delay(100);661. if(temp!=0xf0)662. {663. temp=P1;664. switch(temp)665. {666. case 0xed:667. key_manage5();668. break;669.670. case 0xdd:671. key_manage6();674. case 0xbd:675. key_manage7();676. break;677.678. case 0x7d:679. key_manage8();680. break;681. }682. while(temp!=0xf0)683. {684. temp=P1;685. temp=temp&0xf0;686. }687. }688. }689. //*********************************************扫描第三行***********************************690. P1=0xfb;691. temp=P1;692. temp=temp&0xf0;693. if(temp!=0xf0)694. {695. delay(100);696. if(temp!=0xf0)697. {698. temp=P1;699. switch(temp)700. {701. case 0xeb:702. key_manage9();703. break;704.705. case 0xdb:706. key_manage10();707. break;708.709. case 0xbb:710. key_manage11();711. break;712.713. case 0x7b:714. key_manage12();715. break;716. }717. while(temp!=0xf0)718. {719. temp=P1;720. temp=temp&0xf0;721. }722. }723. }724.725. //***************************************************扫描第四行****************************************727. temp=P1;728. temp=temp&0xf0; 729. if(temp!=0xf0) 730. {731. delay(100);732. if(temp!=0xf0) 733. {734. temp=P1;735. switch(temp) 736. {737. case 0xe7:738. key_manage13(); 739. break;740.741. case 0xd7:742. key_manage14(); 743. break;744.745. case 0xb7:746. key_manage15(); 747. break;748.749. case 0x77:750. key_manage16(); 751. break;752. }753. while(temp!=0xf0) 754. {755. temp=P1;756. temp=temp&0xf0; 757. }758. }759. }760. }复制代码。
基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告一、引言随着科技的不断发展,安全问题越来越受到人们的关注。
密码锁作为一种常见的安全防护设备,在保护个人财产和隐私方面发挥着重要作用。
本设计报告介绍了一种基于 51 单片机的密码锁系统,该系统具有成本低、可靠性高、操作简单等优点,适用于家庭、办公室等场所。
二、系统总体设计(一)设计目标设计一个基于 51 单片机的密码锁系统,实现以下功能:1、密码输入与验证功能。
2、密码修改功能。
3、错误输入次数限制及报警功能。
4、开锁状态指示功能。
(二)系统组成本系统主要由 51 单片机、矩阵键盘、液晶显示屏(LCD)、电磁锁驱动电路、报警电路等组成。
1、 51 单片机作为核心控制器,负责处理密码输入、验证、修改等操作,并控制其他模块的工作。
2、矩阵键盘用于输入密码和执行相关操作。
3、 LCD 显示屏用于显示系统状态和提示信息。
4、电磁锁驱动电路用于控制电磁锁的开关。
5、报警电路在密码输入错误次数超过限制时发出报警信号。
三、硬件设计(一)51 单片机选型本设计选用 STC89C52 单片机,该单片机具有丰富的 I/O 口资源、较高的性价比和良好的稳定性。
(二)矩阵键盘设计矩阵键盘采用 4×4 行列式结构,通过扫描的方式获取按键值。
(三)LCD 显示屏接口设计选用 1602 液晶显示屏,通过并行接口与单片机连接,实现数据的传输和显示。
(四)电磁锁驱动电路设计电磁锁采用直流电源供电,通过三极管驱动电路控制其开关。
(五)报警电路设计报警电路采用蜂鸣器实现,当密码输入错误次数超过限制时,单片机输出高电平驱动蜂鸣器发声报警。
四、软件设计(一)主程序流程系统上电后,首先进行初始化操作,包括单片机端口初始化、LCD 初始化等。
然后进入密码输入状态,等待用户输入密码。
用户输入密码后,进行密码验证,如果密码正确,则打开电磁锁,并显示开锁成功信息;如果密码错误,则记录错误次数,并显示错误提示信息。
基于51单片机的电子密码锁系统整体方案设计

基于51单片机的电子密码锁系统整体方案设计2.1设计目标2.1.1 设计方案这次的设计主要采用STC89C52单片机作为主控的芯片,而且和外围电路相结合,外围电路是由矩阵键盘,液晶显示器和密码存储这些部分组成的。
矩阵键盘就是用来输入代码和实现各种功能。
通过矩阵键盘输入的密码,再经过单片机对用户以前输入的密码和之前保存的密码进行比较,然后就判断密码的正确与否,最后就进行开锁和报警等各种其他功能。
这个电子密码锁是用STC89C52单片机为核心的芯片,然后配上相应的硬件电路,来完成密码的设置、存储和识别的功能,单片机接收键盘输入的代码,然后和以前保存的的六位密码进行比较,六位密码有298万多组密码可以供给人们进行随意的变换,保密性能特别高,可以选择的密码组是连续的进行排列的,如果输入的密码正确的话,就能进行开锁;如果输入的密码不正确,单片机就会通过通信线路向报警器发出报警的信号。
2.1.2 设计内容(1).密码输入正确可以选择打开或关闭密码锁(2).电子锁的密码有掉电保存的功能,用的是AT24C02芯片进行密码的保存。
(3).可以进行密码的修改(6位数的密码),在修改密码的前面要再次输入刚开始的密码,输入新的密码的时候要输入两次进行确认。
(4).还有报警和锁定键盘的功能,当输入密码错了3次,系统就会把键盘锁住一分钟而且还会有蜂鸣器的声音进行提示。
2.1.3基本内容(1)当输入密码错了3次,系统就会把键盘锁住一分钟而且还会有蜂鸣器的声音进行提示。
(2)矩阵键盘中有0-9的数字键和别的功能键(3)这个电子密码锁有报警的功能,当密码输入错误时候蜂鸣器就会响而且LED灯会亮。
(4)用户可以自己修改设定密码,在修改密码的前面要再次输入密码,在输入新的密码的时候要进行二次的确认。
2.2主控部分选用单片机为系统的核心部件,可以实现控制和处理作用。
单片机有很丰富的资源,快的速度,编程简单这些特点。
用单片机内部的随机存取存储器和只读存储器以及一些其它的引脚资源,用外部的液晶显示器和键盘的输入来进行传输数据和显示的功能,基本上可以达到设计指标。
电子密码锁毕业设计-C51程序

泉州信息职业技术学院毕业设计(论文)题目:带断电存储功能的电子密码锁设计系别:机电工程系专业:应用电子技术届别:09届学号:060001004姓名:陈素英指导老师:泉州信息学院教务处印制带断电存储功能的电子密码锁设计摘要本文介绍一种基于单片机和串行EEPROM的智能密码锁,是密码锁设计中比较简单的一种,考虑到经济和水平的原因设计中扩展的功能还不够强大,但是其主要功能有键盘输入、LED数码管显示、加密、修改密码、密码检测、错误报警等简单易懂、使用方便、安全性能高等。
本设计采用AT89S52单片机为芯片主体,采用AT24C08为掉电存储器的芯片。
这种芯片稳定性高,成本低,还能扩展很多功能,如红外探测技术,指纹识别技术,语音识别技术,图像识别技术等,但本设计没有采用这些扩展。
它是采用AT89S52单片机和AT24C08串行EEPROM,通过AT89S52模拟I2C总线和AT24C08通讯,实现密码锁的功能。
在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点,本次设计使用ATMEL公司的AT89S52实现一基于单片机的电子密码锁的设计。
件调试电路板,完成本次毕业设计。
关键词:AT89S52,AT24C08,密码锁,矩阵键盘目录第1章引言 ------------------------------------------------ 3第2章方案论证 --------------------------------------------- 42.1方案一:采用数字电路控制方案 -------------------------- 42.2方案二:采用一种是用以AT89S51为核心的单片机控制方案 --- 5第3章硬件设计 --------------------------------------------- 63.1 功能模块 --------------------------------------------- 63.2 原理图 --------------------------------------------- 93.3 PCB图 ----------------------------------------------- 93.4 实物 ------------------------------------------------ 10第4章软件设计-------------------------------------------- 11 4.1 程序流程图 ------------------------------------------- 114.2 程序实现功能. ---------------------------------------- 12第5章总结------------------------------------------------- 13 致谢语 ------------------------------------------------------ 14参考文献 --------------------------------------------------- 15附录一程序 ------------------------------------------------- 16附录二元件清单 -------------------------------------------- 22第1章引言.在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
毕业设计-基于AT89C51单片机的电子密码锁的设计

毕业设计(论文)题目:电子密码锁的设计学院:电气与信息工程学院专业:电子信息工程姓名:学号: ********* 指导老师:**完成时间: 2013年5月28日摘要随着经济社会发展,人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出。
传统的机械锁,由于其构造简单,安全性能低,无法满足人们的需要。
随着电子产品向智能化和微型化的不断发展,数字密码锁作为防盗卫士的作用显得尤为重要。
而单片机以其实用,功能强大,价格低廉等功能,已成为电子产品研制和开发中首选的控制器。
本文从经济实用的角度出发,阐述一个基于单片机的液晶显示电子密码锁的设计与实现。
系统采用ATMEL公司的AT89C51单片机作为系统核心,液晶显示器LCD1602作为输出设备显示系统提示信息,4*4矩阵键盘作为输入设备,CMOS串行E2PROM存储器AT24C02作为数据存储器,配合蜂鸣器、继电器等电路构成整个系统硬件;系统软件采用C语言编写。
设计的系统液晶显示,密码修改方便,具有报警、锁定等功能,使用便捷简单,符合住宅、办公用锁需求,具有一定的实用价值。
关键词:单片机,密码锁,AT89C51,LCD1602,AT24C02AbstractWith the development of our society and the i mprovement of people’s living standard, how to ensure the family security is becoming more and more important in particular. Traditional mechanical lock is unable to meet the need of us because of its simple structure and low security. Nowadays, electronic products become smarter and smaller, electronic password anti-theft lock plays a more important role as the security guards. The MCU with its practical, strong function, low price and other functions , has become the preferred controller in electronic product research and development.This article is written from the economic perspective, elaborates the design and implementation of a LCD electronic password anti-theft lock which is based on MCU. This system is composed of AT89C51 which is designed as the core of this system, LCD1602 as the output device to display the message of this system, 4 * 4 matrix keyboard as the input device, a CMOS serial E2PROM AT24C02 as the data storage, and a buzzer, relay circuit.The software of the system is written in C language. The system displays in a LCD, it can change password easily, and has the function of alarming, locking, and so on. This system has some practical value, and it is simple and easy to use, meets the demand of residential and the need of office lock.Key Words: MCU, Password-Lock, AT89C51, LCD1602, AT24C02目录摘要 (I)Abstract ............................................................................................................................. I I 目录 ................................................................................................................................. I II 1引言 . (1)1.1课题的背景和意义 (1)1.2课题的研究现状 (1)1.3课题研究内容 (2)2 数字密码锁总体设计 (3)2.1 系统方案论证 (3)2.1.1 采用数字电路的设计方案 (3)2.1.2 采用以单片机为核心设计方案 (4)2.2 基于单片机的数字密码锁的设计原理 (5)3 系统硬件设计 (6)3.1 主要元器件介绍 (6)3.1.1 主控芯片AT89C51的的介绍 (6)3.1.2 继电器的介绍 (9)3.1.3 存储芯片AT24C02的介绍 (10)3.1.4 LCD1602显示器的介绍 (10)3.1.5 矩阵键盘模块的介绍 (11)3.2 系统硬件部分 (12)3.2.1 系统电源部分 (12)3.2.2 键盘输入部分 (13)3.2.3 密码存储部分 (14)3.2.4 显示部分 (14)3.2.5 报警部分 (15)3.2.6开锁部分 (16)4 系统软件设计 (17)4.1 系统程序流程图 (17)4.1.1主程序流程图 (17)4.1.2 键功能程序流程图 (18)4.1.3 修改密码程序流程图 (19)4.1.4 开锁程序流程图 (20)4.2 子程序举例 (21)4.2.1 按键扫描子程序 (21)4.2.2 显示子程序 (22)4.2.3 开锁子程序 (22)4.3 系统软件调试及结果 (24)4.3.1 Proteus软件介绍 (24)4.3.2 系统软件调试 (25)4.3.3 仿真结果 (25)5 硬件系统制作及调试 (29)5.1焊接注意事项 (29)5.2硬件调试问题及解决办法 (30)5.3硬件调试效果 (31)总结 (34)致谢 (35)参考文献 (36)附录 (37)附录A 电路原理图 (37)附录B 系统总体程序 (38)1引言1.1课题的背景和意义随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜。
(完整版)单片机电子密码锁(可以修改设置密码)——基于51单片机毕业论文

单片机电子密码锁 (可以修改设置密码)――基于51单片机与AT24C02与LCD1602显示其电路图连接如下:本人已经用硬件实验,程序可用。
正确~~本程序特点:装载后读者可以自改密码,然后需要再次载入程 序时:可以把主程序aa=Sendstring(0xa0,1,table2,6)这一句去掉。
然后 程序的电子锁密码就是你个人设置的密码。
LCD1Vour Password* ・・程序代码为:#include<reg51.=P0A 2; sbit led=P3A0; uchar code table2[]="123456";EE J KBBI&flEK■i A A —i n Jll 理・J31mTrr W口 t■ i* TTS -■?TWKamHP —・U1■3TF4 LSl^fc 』 _ W>M. _ _, lJ-p — ...... 』 =]初始密码:〕23456XrMJRirF7.!|一 ■«*丿 r^35 一・4|E -L 凰P?E7TEF3 ■ir^OTTuchar code table[]="Your Password...";void delayms(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);},做总线的延时用void delay() 短延时,两个机器周期{;;}void write_com(uchar com){rs=0;rd=0;lcden=0;P2=com;delayms(3);lcden=1;delayms(3);lcden=0;}void write_date(uchar date){rs=1;rd=0;lcden=0;P2=date;delayms(3);lcden=1;delayms(3);lcden=0;}void Display_String(uchar *p,uchar com){ uchar i;write_com(com);for(i=0;i<16;i++){write_date(p[i]);}}void init_lcd(){lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);Display_String(table,0x80);Display_String("Lock OK! ",0xc0);void start() {sda=1;scl=1;delay4us();sda=0;delay4us();scl=0;}void stop(){sda=0;scl=1;delay4us();sda=1;delay4us();scl=0;}void init() 初始化{ sda=1;delay();scl=1;delay();void ack(){sda=0;scl=1; delay4us();scl=0;sda=1;}void noack(){sda=1;scl=1; delay4us();scl=0;sda=0;}uchar recbyte(){uchar i,rd; rd=0x00;sda=1;for(i=0;i<8;i++) {rd<<=1;scl=1;rd|=sda; delay4us(); scl=0;delay4us();}scl=0;delay4us();return rd;}uchar sendbyte(uchar wd){uchar i;bit ack0;for(i=0;i<8;i++){sda=(bit)(wd&0x80);_nop_();_nop_();scl=1;delay4us();scl=0;wd<<=1;}delay4us();sda=1;scl=1;delay4us();ack0=!sda; scl=0;delay4us();return ack0;}uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) { uchar i;start();if(!sendbyte(slave)) return 0;if(!sendbyte(subaddr)) return 0;start();if(!sendbyte(slave+1)) return 0;for(i=0;i<n-1;i++){buffer[i]=recbyte();ack();}buffer[n-1]=recbyte();noack();stop();return 1;uchar Sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) { uchar i;start();if(!sendbyte(slave)) return 0;if(!sendbyte(subaddr)) return 0; for(i=0;i<n;i++){if(!sendbyte(buffer[i])) return 0;}stop();return 1;}void clear_password(){ uchar i;for(i=0;i<6;i++){Userpassword[i]=' ';} for(i=0;i<16;i++){DSY_BUFFER[i]=' ';}} uchar Keys_Scan()uchar temp,keynum;P1=0x0F;delayms(5);temp=P1A0x0F;switch(temp){case 1:keynum=0;break;case 2:keynum=1;break;case 4:keynum=2;break;case 8:keynum=3;break; break;}P1=0xF0;delayms(5);temp=P1>>4A0x0F;switch(temp){case 1:keynum+=0;break;case 2:keynum+=4;break;case 4:keynum+=8;break;case 8:keynum+=12;break; break;}delayms(600);return keynum;void main(){ uchar temp,i=0,j=0,k=0,n;uchar IS_valid_user;beep=1;init();init_lcd();delayms(5);aa=Sendstring(0xa0,1,table2,6);delayms(5);aa=Recstring(0xa0,1,buffer,6); delayms(10);P1=0x0f;while(1){if(P1!=0x0f){temp=Keys_Scan();switch(temp){case 0: case 1: case 2: case 3: case 4:case 5: case 6: case 7: case 8: case 9:if (i<=5) 密码限制在 6 位以内{Userpassword[i]=temp; DSY_BUFFER[i]='*';Display_String(DSY_BUFFER,0xc0); i++;}break;case 10: 按 A 键开锁for(k=0;k<6;k++) {if(buffer[k]==(Userpassword[k]+48))flag=1;elseflag=0;}if (flag==1){ flag=0;i=0;led=0; 点亮LED clear_password();Display_String("OPEN OK! IS_valid_user =1;",0xc0);j=0;else{j++;led=1; 关闭LEDclear_password();Display_String("ERROR!Have trywrite_com(0xcf);write_date(0x30+j);IS_valid_user=0;}i=0;break;case 11: 按 B 键上锁led=1;clear_password();Display_String(table,0x80);Display_String("Lock OK! i=0;IS_valid_user=0; break;case 12: 按 C 键设置新密码如果是合法用户则提示输入新密码",0xc0);",0xc0);if ( !IS_valid_user){i=0;Display_String("No rights ! ",0xc0); delayms(1000);Display_String("Your Password...",0x80);Display_String("Lock OK! ",0xc0);}else{i=0;Display_String("New Password: ",0x80);Display_String(" ",0xc0); }break;case 13: 按 D 键保存新密码if( !IS_valid_user){ i=0;Display_String("No rights !",0xc0);delayms(1000);Display_String("Your Password...",0x80);Display_String("Lock OK! ",0xc0);else{i = 0;init();delayms(5);for(k=0;k<6;k++){Userpassword[k]=Userpassword[k]+48;} aa=Sendstring(0xa0,1,Userpassword,6); delayms(5);aa=Recstring(0xa0,1,buffer,6); delayms(5); clear_password();Display_String(table,0x00);Display_String("Password Saved! ",0xc0); delayms(1000);Display_String("Do lock agian ? ",0xc0); }break;case 14: 按 E 键消除所有输入i=0;clear_password();Display_String(" ",0xc0); break;case 15: 清除一位if(i!=0)i--;for(n=0;n<i;n++){ DSY_BUFFER1[n]='*';} Display_String(DSY_BUFFER1,0xc0);}P1=0x0f;}if(j==3){ Display_String("THIEF!!!THIEF!!!",0xc0);j=0;beep=0;}。
(完整版)基于51单片机的电子密码锁毕业设计论文

(完整版)基于51单⽚机的电⼦密码锁毕业设计论⽂⽬录第1章绪论 (1)1.1电⼦锁的发展状况 (1)1.2设计电⼦密码锁的意义及相关技术指标 (1)第2章总体设计及⽅案论证 (2)2.1单⽚机模块 (2)2.2输⼊键盘模块 (2)2.2.1独⽴式按键 (2)2.2.2矩阵式键盘 (3)2.3数码管显⽰模块 (3)2.3.1 LED静态显⽰⽅式 (3)2.3.2 LED动态显⽰⽅式 (3)2.4电源模块 (3)2.4.1蓄电池供电 (3)2.4.2双路电源供电 (3)2.5开锁电路模块 (4)2.6报警电路模块 (4)2.7最优⽅案 (4)第3章硬件电路设计 (4)3.1输⼊键盘 (4)3.2显⽰数码管 (5)3.3开锁电路 (6)3.4报警电路 (6)3.5电源电路 (7)3.6复位电路 (7)3.7振荡电路 (8)第4章软件设计 (9)4.1主程序流程图及程序 (9)4.2延时⼦程序 (11)4.3修改密码⼦程序 (11)4.4扫描键盘输⼊⼦程序 (11)4.5中断及报警⼦程序 (12)4.6显⽰⼦程序 (13)第5章设计总结 (15)参考⽂献 (16)附录Ⅰ (17)附录Ⅱ (18)第1章绪论1.1电⼦锁的发展状况随着科技的发展,传统的机械锁被破解的概率越来越⾼了,新型的盗贼也学会了与时俱进,通过各种技术⽅法和⼿段即会在短时间内开启结构复杂的机械锁,会不留痕迹的登堂⼊室,给失主和警⽅留下各种不易解惑的疑团。
由此我们想到,要是在机械锁的基础上再装上⼀把电⼦锁,就彻底杜绝了单⼀机械锁易被开启的弊端,从⽽极⼤提⾼门锁的安全防范性能。
当今世界,电⼦锁发展已经到了⾮常⾼的境界,由于电⼦元件特别是单⽚机应⽤在最近⼏年得到空前发展,电⼦锁⽆论是在功能还是在稳定性⽅⾯都有了较⼤的提⾼,在保密性⽅⾯已经做到了密码识别、指纹识别、⼈声识别等。
就整体形势⽽⾔,电⼦锁在国外发展⽐较早,所以应⽤也⽐较⼴泛,主要⽤于家庭门锁,银⾏公司等的财务保险柜锁和政府机关及⾼级宾馆等重要场合的智能控制门锁等。
基于51单片机的密码锁设计

基于单片机的密码锁设计1 引言1.1设计目的随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。
电子密码锁就是通过键盘输入一组密码完成开锁过程。
研究这种锁的初衷,就是为提高锁的安全性。
目前,国内自行研制开发的电子锁,应用还不广泛。
国内的不少企业也引进了世界上先进的技术,发展前景非常可观。
希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。
1.2设计要求本次课程设计要求使我们能够掌握并且实际运用课本知识。
通过利用所学的电子技术知识正确分析并设计电路,将适当电路运用到实际电路中,将课本知识转化为实际能力。
1.3设计方法(1)系能够从键盘中输入密码,并相应地在显示器上显示…*‟;能够判断密码是否正确,正确则开锁,错误则输出相应信息。
(2)密码由程序直接设定,不可用户自己设定。
(3)具有自动报警功能。
密码不正确,相应红灯亮,蜂鸣器发出报警声来提示。
(4)具有手动复位功能。
2设计方案及原理2.1系统总体设计根据以上分析,本次电子密码锁设计的主要重点是以下几个部分:4x3矩阵键盘设计、LCD信息显示和密码的比较和处理。
当然,除了这几个部分外还有报警等功能模块。
其中矩阵键盘用于输入数字密码和进行各种功能的实现。
由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路是报警。
系统整体框图如图1所示。
图1 系统整体框图2.2本设计硬件资源分配P3.0~P3.7用于LCD液晶显示作用。
P1.6、P1.7用于蜂鸣器和报警灯的控制。
P1.4用于开锁电路的控制。
P2.0~P2.7用于键盘电路的控制。
P1.0~P1.2用于LCD显示模块的控制端口的控制。
3硬件设计3.1.1芯片选择本次设计采用AT89C51贴片芯片,AT89C51是一个低电压,高性能CMOS 8位单片机,通过用Keil软件编写程序,然后装到单片机里面去,然后让它对整个系统进行信息的处理,如可以让它处理矩阵键盘传过来的信息,并根据编好的程序来确定哪个按键按下,并处理相应按键对应的功能,然后把相应的信息反应到单片机的各个引脚,来实现按键实现的现象,如:显示是否开启锁,报警等。
基于51单片机简易密码锁程序设计

基于51单片机简易密码锁程序设计//晶振11.0592MHz,T1每250微秒中断,按键P1.0-P1.7,发光二极管接P3.0-P3.3,p3.4 /*变量的定义:show_val[6]: 显示的值init_val[6]: 密码初始值key_val: 返回按键的值255-表示无按键按下key_index: 当前按键是哪一位密码T1_cnt: 定时器计数溢出数cnt_val_15s: 报警计时的数值cnt_val_5s: 待机时间计时cnt_val_4s: 输入正确,等待4秒清除开锁信号cnt_state: 计时状态error_num: 错误次数led_seg_code:数码管7段码*/#include <reg51.h>#define S1 0xEE;#define S2 0xDE;#define S3 0xBE;#define S4 0x7E;#define S5 0xED;#define S6 0xDD;#define S7 0xBD;#define S8 0x7D;#define S9 0xEB;#define S10 0xDB;#define S11 0xBB;//有源蜂鸣器sbit SPEAK=P3^5;unsigned char data cnt_val_15s,cnt_val_5s,cnt_val_4s,cnt_state;unsigned int data T1_cnt;unsigned char data key_val,key_index,key_val_old;unsigned char data state_val,error_num;unsigned char data show_val[7];char code init_val[6]={1,2,3,4,5,6};char code led_seg_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//--------延时程序----------------void delay(unsigned int i)//延时{ while(--i); }void pw_error()//密码错误信号{int i;for(i=0;i<1000;i++){SPEAK=!SPEAK;delay(1);}}void audio_out()//有源蜂鸣器{ int i;for(i=0;i<5000;i++){SPEAK=!SPEAK;delay(3);}}void init_variant(){unsigned char i;for(i=0;i<7;i++)show_val[i]=11; //led_seg_code[10]=0x00表示数码管不显示任何内容key_index=1; //没有任何输入或清除所有输入时,保存当前键的位置}//---------按键扫描---------------unsigned char scan_key(){unsigned char row,col,key;key=0;P1=0x0f;if(P1==0x0f)return(0xff);delay(10);if(P1==0x0f)return(0xff);switch(P1){case 0x0e:row=0;break;case 0x0d:row=1;break;case 0x0b:row=2;break;case 0x07:row=3;break;}P1=0xf0;switch(P1){case 0xe0:col=0;break;case 0xd0:col=1;break;case 0xb0:col=2;break;case 0x70:col=3;break;}key=row*4+col;while(P1!=0xf0);return(key);}//---------数码管显示--------------- void led_show(){P0=led_seg_code[show_val[1]]; P2=0xdf;delay(500);P0=led_seg_code[show_val[2]]; P2=0xef;delay(500);P0=led_seg_code[show_val[3]]; P2=0xf7;delay(500);P0=led_seg_code[show_val[4]]; P2=0xfb;delay(500);P0=led_seg_code[show_val[5]]; P2=0xfd;delay(500);P0=led_seg_code[show_val[6]];P2=0xfe;delay(500);}//--------定时器T1中断服务程序-----------------void timer1() interrupt 3 //T1中断{T1_cnt++;f(T1_cnt>3999) //如果计数>3999, 计时1sT1_cnt=0;switch (cnt_state){case 1://密码输入正确,需要计时4sif(cnt_val_4s<4){ cnt_val_4s++;}else{ cnt_val_4s=0;init_variant();//密码输入正确,计时到4秒时,清除输入的内容//已开锁信号清零//开锁信号清零cnt_state=0;TR1=0; //停止计时}break;case 2: //密码输入错误3次,计时15sif(cnt_val_15s<15){ cnt_val_15s++;}else{ cnt_val_15s=0;init_variant();//三次密码错误时,计时15秒,清除输入的内容// 清除所有指示和报警cnt_state=0;TR1=0; //停止计时}break;}}}//--------判断键盘输入内容与密码是否一致------unsigned char check_input_pw(){ unsigned char i,k;k=1;for(i=0;i<6;i++){ k=k && (show_val[i]==init_val[i]); }return k;}//---------主程序----------------main(){ //初始化各变量SPEAK=1;P3=0xff;cnt_val_15s=0;cnt_val_5s=0;cnt_val_4s=0;cnt_state=0;//0-待机计时5s状态;1-密码正确,计时4s状态;2-三次密码错误,处于计时15秒状态。
(完整版)基于单片机的电子密码锁参考毕业论文设计

毕业论文题目:基于单片机的电子密码锁的设计专业:通信工程摘要单片机已经在家电领域中得到了广泛的应用,而且在安全密保方面,具有防盗报警功能的电子密码锁逐渐取代了传统的机械密码锁,克服了机械密码锁密码过少的安全性问题。
本密码锁的主控芯片采用价格实惠而且容易购买的 STC89C52芯片。
密码输入采用矩阵键盘及独立键盘,密码显示采用共阴极的八段显示数码管。
系统能完成密码输入、正确开锁、超次报警这些基本的密码锁的功能。
系统的软件实现采用功能强大且易于开发的KeilC51环境,且支持ISP下载。
因此没使用编程器,用C 语言实现系统的软件部分。
由于51单片机也有一些不足之处如断电后内部RAM储存的数据会完全丢失,为了克服这一缺点,系统的外围加了掉电存储电路并且由AT24C02芯片来实现。
此设计具有安全性高、价格低廉便于实现、易于改进等优点。
【关键词】电子密码锁STC89C52矩阵键盘 AT24C02ABSTRACTMCU widely used in the security password protection aspect anti-theft alarm function electronic combination lockgradually replace the traditional mechanical trick lock,it also overcome the security problems that thepassword of machinery combination lock are too few.This combination lock's master chip adopts STC89C52which is affordable and easy to buy.Password’s inputadopt matrix keyboard and independent keyboard,password's display using the erection of the cathodetube display digital. This system can accomplishpassword input, correct unlock, super times alarm ,these basic combination lock function . Softwarerealization of this system is used in KeilC51environment .it is powerful and easy to develop, and tosupport ISP to download. Therefore it is not useprogrammer, use C language implementation softwareof system components. Because 51MCU also order to,the system's periphery added off electricity storagecircuit and use AT24C02 chip to overcome theseshortcomings. This design lock STC89C52 Matrixkeyboard AT24C02前言随着社会物质财富的日益增长,安全防盗已成为社会问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
ACC=ACC>>1;
ACC7=T_IO;
T_CLK=1;
T_CLK=0;
}
return (ACC);
}
void write_ds1302_dat(uchar addr,uchar dat)
{
T_EN=0;
T_CLK=0;
T_EN=1;
write_ds1302_byte(addr);
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rs_port=P3^5;
sbit lcd_rw_port=P3^6;
sbit lcd_en_port=P3^4;
#define lcd_data_port P0
sbit T_CLK=P2^4;
sbit T_EN=P1^0;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
void write_ds1302_byte(uchar dat);
uchar read_ds1302_byte();
void write_ds1302_dat(uchar addr,uchar dat);
void lcd_busy_wait();
void write_com(uchar command);
void write_data(uchar dat);
void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat);
T_EN=0;
T_CLK=0;retur源自 (date);}void set_real_time(uchar *pclock)
{
uchar i,addr=0x80;
EA=0;
write_ds1302_dat(0x8e,0x00);
for(i=0;i<7;i++)
{
write_ds1302_dat(addr,*pclock);
lcd_en_port=1;
lcd_en_port=0;
}
void lcd_init() /*LCD1602初始化*/
{
lcd_delay(20);
write_com(0x38);
lcd_delay(100);
write_com(0x38);
lcd_delay(50);
write_com(0x38);
uchar read_ds1302_data(uchar addr);
void set_real_time(uchar *pclock);
void get_real_time(uchar Curtime[]);
#endif
#include "delay.h"
#include "1602.h"
void lcd_busy_wait() /*LCD1602忙等待*/
lcd_delay(10);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
lcd_data_port = 0xff; /*释放数据端口*/
}
#ifndef __1602_H__
#define __1602_H__
#include <reg52.h>
write_ds1302_byte(dat);
T_CLK=1;
T_EN=0;
}
uchar read_ds1302_data(uchar addr)
{
uchar date;
T_EN=0;
T_CLK=0;
T_EN=1;
write_ds1302_byte(addr);
date=read_ds1302_byte();
lcd_rs_port=1;
lcd_rw_port =0;
lcd_en_port=0;
P0=dat;
lcd_en_port=1;
lcd_en_port=0;
}
void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat)
{
x_pos&=0x0f;
pclock++;
addr+=2;
}
//write_ds1302_dat(0x8e,0x80);
EA=1;
}
void get_real_time(uchar Curtime[])
{
uchar j;
uchar address=0x81;
EA=0;
for(j=0;j<7;j++)
{
Curtime[j]=read_ds1302_data(address);
address+=2;
}
EA=1;
}
#ifndef __1302_H__
#define __1302_H__
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit T_IO=P2^5;
{
lcd_rs_port = 0;
lcd_rw_port = 1;
lcd_en_port = 1;
lcd_data_port = 0xff;
while (lcd_data_port&0x80);
lcd_en_port = 0;
}
void write_com(uchar command) /*LCD1602命令字写入*/
{
lcd_busy_wait();
lcd_rs_port = 0;
lcd_rw_port = 0;
lcd_en_port = 0;
lcd_data_port = command;
lcd_en_port = 1;
lcd_en_port = 0;
}
void write_data(uchar dat)
{
lcd_busy_wait();
y_pos&=0x01;
if(y_pos==0)
{
x_pos=x_pos+0x80;
}
else
{
x_pos=x_pos+0x80+0x40;
}
write_com(x_pos);
lcd_busy_wait();
lcd_rs_port=1;
lcd_rw_port=0;
lcd_en_port=0;
P0=dat;
#include "1302.h"
void write_ds1302_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
T_IO=dat&0x01;
T_CLK=1;
T_CLK=0;
dat=dat>>1;
}
}
uchar read_ds1302_byte()
{
uchar i;