51单片机密码锁制作的程序和流程图
51单片机课程设计 电子密码锁
华中师范大学武汉传媒学院传媒技术学院电子信息工程2011仅发布百度文库,版权所有.基于单片机的密码锁的设计1设计题目:电子密码锁要求采用AT89S51单片机为主控芯片,通过软件程序组成电子密码锁系统2设计框图3方案设计课题设计目标本设计采用AT89S51单片机为主控芯片,通过软件程序组成电子密码锁系统,能够实现:1.正确输入密码前提下,开锁提示;2.错误输入密码情况下,蜂鸣器报警;3.密码可以根据用户需要更改;4.断电存储功能主控部分的选择选用单片机作为系统的核心部件,实现控制与处理的功能。
单片机具有资源丰富、速度快、编程容易等优点。
利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标。
密码输入方式的选择由各按键组成的矩阵键盘每条行线和列线都对应一条I/O口线,键位设在行线和列线的交叉点,当一个键按下就会有某一条行线与某一条列线接触,只要确定接触的是哪两条线,即哪两个I/O口线,就可以确定哪一个键被触动。
行线设计成上拉口线,初始时被置高电位,列线悬空,初始置低。
通过不断读行线口线,或者中断方式触发键位扫描。
当发现有键按下,将列线逐一置低,其他列线置高,读行线口线。
当某条列线置低时,某条行线也被拉低,则确定这两条线的交点处的按钮被按下。
每个按键都可通过程序赋予功能,从而完成密码识别。
4 硬件原图设计5程序流程图主程序流程图键功能程序流程图开锁程序流程图6仿真图7制作本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。
其中矩阵键盘用于输入数字密码和进行各种功能的实现。
由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。
基于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单片机的密码锁程序
*************************************************/
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单片机的密码锁设计程序_
uchar temp,count,aa,bb,cc。/*一般将这些变量定义在C文件中
当主函数需要时用extern引用*/
bit shu_flag,modify_flag,rst。
bit fun_flag。//功能键Байду номын сангаас志位没使用
bit down_flag,up_flag,open_flag。
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()。
sda=1。
delay1()。
}
void i2c_ack()
{
uchar i。
scl=1。
delay1()。
while((sda==1)&&(i<250)) i++。
scl=0。
delay1()。
}
void i2c_nack()
{
scl=1。
delay1()。
sda=1。
scl=0。
delay1()。
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)
51单片机密码锁程序.
/*停止条件*/ void Stop(void) { Sda=0; Scl=1; Nop(); Sda=1; Nop(); } /*应答位*/ void Ack(void) { Sda=0;
Nop(); Scl=1; Nop(); Scl=0; } /*反向应答位*/ void NoAck(void) { Sda=1; Nop(); Scl=1; Nop(); Scl=0; } /*发送数据子程序,Data 为要求发送的数据*/ void Send(uchar Data) { uchar BitCounter=8; uchar temp; do { temp=Data; Scl=0; Nop(); if((temp&0x80)==0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0; } /*读一字节的数据,并返回该字节值*/ uchar Read(void) { uchar temp=0; uchar temp1=0; //判断是否传送完成 //将待发送数据暂存 temp
= {"===Coded Lock==="}; = {" correct "}; = {" error "}; = {" pass "}; = {" open "}; = {"SetNewWordEnable"}; = {"input: "}; = {"ResetPasswordOK "};
unsigned char code initword[] unsigned char code Er_try[] unsigned char code again[]
单片机51--数字密码锁
-------------------------------------------------------------------------------------------------------------------;复位 SERR: MOV A, PAR ;C 为复位 CJNE A, #0CH, ERR ;若按下不是复位则继续出错 MOV IDX,#01H JB 00H, IPT2 LCALL DCODE AJMP CHEK IPT2 : LCALL ECODE AJMP CHEK --------------------------------------------------------------------------------------------------------------------;出错状态 ERR: MOV DPTR, #6000H ;二极管地址 MOV A, #40H ;错误指示灯 MOV @DPTR, A MOV IDX, #04H MOV RW, #00H AJMP CHEK --------------------------------------------------------------------------------------------------------------------;解码指示灯亮 DCODE: MOV DPTR, #6000H ;二极管地址 MOV A, #10H ;开始解码指示灯 MOV @DPTR, A RET -------------------------------------------------------------------------------------------------------------------;设置密码指示灯亮 ECODE: MOV DPTR, #6000H ;二极管地址 MOV A, #20H ;开始设密码指示灯 MOV @DPTR, A RET -------------------------------------------------------------------------------------------------------------------;延时 20ms DELAY1:MOV R7,#50H DEL11: MOV R6,#7BH NOP DEL12: DJNZ R6,DEL12 DJNZ R7,DEL11 RET --------------------------------------------------------------------------------------------------------------------;延时 5ms DELAY2: MOV R6,#28H DEL21: MOV R7,#07BH DEL22: DJNZ R7,DEL22 DJNZ R6,DEL21
51单片机密码锁程序
sbit beep=P2^0; //蜂鸣器,低电平叫
sbit red=P2^1; //红灯,低电平亮
sbit close=P2^7; //锁合指示灯,黄色。低电平亮
1 2 3 确定
0
---------------------------------------------------------------------------------------------------------------------------------------------------------*/
初始密码为四位,1,2,3,4 如果想修改密码的长度,可将程序中的密码长度4改为你想设置的长度值
初始密码1,2,3,4也可在函数init_main()函数中修改
密码锁上电后,锁合灯亮,初始密码为1,2,3,4 。
当输入的四位密码按确定键后,密码正确时锁开灯亮,锁合灯灭。当不正确时,锁合灯继续亮,蜂鸣器短报警
pwflag = 0; // 密码标志先置为0
last_pwflag=0;
close=0; //锁合灯亮,其它灯灭
delay();
red=1;
delay();
delay();
delay();
delay();
red=0;
delay();
delay();
delay();
delay();
red=1;
}
//快闪红灯,重新输入自定义密码
void flashred_S(void)
case 0xdb: return 8;break;
51单片机设计电子锁密码锁含代码
电子锁设计报告一,实验目的1. 学习8051定时器时间计时处理,键盘扫描及LED数码管显示的设计方法。
2. 设计任务及要求利用实验平台上8个LED数码管,设计带有报警功能的可掉电保存的电子密码锁。
3.通过本次实验,加强对所学知识的理解,增强编程能力及实践能力。
二,实验要求A.基本要求:1:用4×4矩阵键盘组成0-9数字键及确认键和删除键。
2:可以自行设定或删除8位密码,能够掉电保存。
3:用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
4:自由发挥其他功能.5:要求有单片机硬件系统框图,电路原理图,软件流程图B.拓展部分:无三,实验基本原理单片机密码锁是集计算机技术、电子技术、数字密码技术为一体的机电一体化高科技产品,具有安全性高,使用方便等优点。
本系统考虑到单片机密码锁成本及体积因素,在设计单片机密码锁部分时,以AT89S52单片机为核心,24C04、LED等构成外围电路。
本系统单片机密码锁硬件部分结构简单、成本低,软件部分使用电子加密提高锁的安全性,具有比较好的市场前景。
同时,由于本电子密码锁可以实现掉电保存,而且可以自行设计或者删除8位密码,所以具有较高的实用价值。
本密码锁采用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led 发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led 发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
此项功能方便用户使用。
单片机控制的电子密码锁(电路图 流程图 原理图)-课程设计
单片机控制的电子密码锁(电路图+流程图+原理图)-课程设计单片机控制的电子密码锁(电路图+流程图+原理图) 摘要:本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。
系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。
除上述基本的密码锁功能外,还具有调电存储、声光提示等功能,依据实际的情况还可以添加遥控功能。
本系统成本低廉,功能实用关键词:AT89S51,AT24C02, 电子密码锁,矩阵键盘一、引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。
设计本课题时构思了两种方案:一种是用以AT89s51为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。
考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。
二、方案论证与比较方案一:采用数字电路控制。
其原理方框图如图1-1所示。
图2-1 数字密码锁电路方案采用数字密码锁电路的好处就是设计简单。
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。
方案二:采用一种是用以AT89S51为核心的单片机控制方案。
基于51单片机电子密码锁的设计1详解
淮阴工学院课程设计说明书作者: 学号:学院: 计算机与软件工程学院专业: 物联网题目: 单片机密码锁金鹰胡荣林指导教师:2016 年 6 月课程设计中文摘要目录1 绪论 (1)1.1 引言 (1)1.2 电子密码锁的背景 (1)1.3 键盘式电子密码锁的特点 (2)2.1系统总设计结构图 (3)2.2 开锁机构的设计 (3)3.2.1键盘电路及连线图 (7)3.2.3 开锁和报警电路及连线图(由LED灯和扬声器电路代替) (8)3.3 整体电路图的绘制 (8)4.2 系统软件设计总流程图 (10)5 程序调 (11)5.1 程序调试需要用到的软件和工具 (11)5.2 调试过程 (11)总结 (12)结束语 (13)参考文献 (14)附录 (15)1 绪论1.1 引言在这个信息和科技高速发展的时代,人们的生活水平越来越高,随之应运而生的人们的安全意识也越来越强,然而传统的机械锁由于设计和工艺简单,操作和携带不便,已经不能满足人们对于安全保证和生活便利的需求,于是电子密码锁本着它自身的保密性高、操作简单、灵活好用等特性逐渐进入人们的视野,并已被广大群众接纳和使用。
锁是用以关住某个确定的空间或范围或某种器物的,必须以钥匙或密码打开的器件。
锁,从古至今,发展到现在已有近千年的历史了,人们对它的结构、原理也随着时间的增加研究的近乎透彻,因此,开锁的方法和工具早已不仅仅局限于配套的钥匙,种类也层出不穷。
现代社会中,由于各种矛盾冲突十分剧烈,人们的思想道德观念,价值观念,文化修养水平等参差不齐,人们的思想境界良莠不齐,善良、正直的人们能够自觉规范自已的行为,不是自己的东西不会眷恋,没有钥匙就不会乱闯乱动。
但是,生活中同样还存在着一些道德观念较差的人,总有着不劳而获的“梦想”,他们在受到诱惑的时候,往往会想方设法利用各种手段撬门开锁,使广大居民防不胜防。
之所以出现这种情况,除了人们的道德观外,还有一个很重要的原因,就是传统锁具都存在致命的弱点,例如,锁芯采用常见的铜、铝、锌等材料,抵抗不了强力破坏;再者,锁具制作工艺,技术落后,无法阻止先进技术手段的开启。
51单片机密码锁制作的程序和流程图
51单片机密码锁制作的程序和流程图(很详细)、基本组成:单片机小系统+4* 4矩阵键盘+ 1 6 0 2显示+ DC电机基本电路:键盘和和显示键盘接P1 口,液晶的电源的开、关通过P2.7 口控制电机(控制口P2.4)二、基本功能描述:1.验证密码、修改密码a)锁的初始密码是123456(密码最长为10位,最短为1位)。
2.恢复初始密码a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。
但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。
3.使系统进入低功耗状态a)在实际使用中,锁只有在开门时才被使用。
因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。
b)同时将LCD背光灯关闭4. DC电机模拟开锁动作。
a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。
DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。
三、密码锁特点说明:1.0 输入将被以字符形式输入,最长为10位。
超过10位时系统将自动截取前10位、但不作密码长度溢出提示。
2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。
3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。
4.0 若2分钟内无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。
5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。
6.0 修改密码键和恢复初始密码键最好置于室内。
这是Proteus仿真结果:输入密码123456:密码正确时电机启动、电机将持续5秒:这是键盘:开锁键是接I N T O引脚接的一个独立按键,用于唤醒C P U工作、进而开启整个系统密码正确时可以修改密码:再次输入新密码,两次输入相同时、更改有效改进:1.0 密码锁的秘密没有存储,因而在掉电时最新的密码将丢失,重新上电后密码将恢复成为初始密码。
基于51单片机的密码锁(可改密码)
实习报告实习名称:单片机应用实习院(系)名称:电气与信息工程学院专业班级:xxxxxxxxx学生姓名:xxxxxx学号:xxxxxx指导教师:xxxxxxxxxx黑龙江工程学院教务处制2014年7月目录第1章总体设计方案 (4)1.1总体设计方案 (4)第2章硬件电路设计 (5)2.1单片机最小系统电路设计 (5)2.2液晶显示模块 (6)2.3键盘输入模块 (7)2.4 AT24C02密码存储模块 (8)2.5 系统供电电路设计 (9)2.6 蜂鸣器和继电器模块 (10)第3章系统软件设计 (11)3.1软件总体设计思路 (11)3.2主程序流程设计 (12)总结 (13)参考文献 (14)附录 (15)附录一 (15)附录二 (15)实习任务书学生姓名xxxx 系部电气与信息工程学院专业班级测控12-1指导教师姓名xxx 职称副教授讲师是否外聘□是否题目名称键盘式电子密码锁一、设计的内容、目的和意义本次实习是有关于键盘式电子密码锁的设计。
在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
本次实习的目的是实现电子密码锁的功能,并运用单片机技术设计一个结构简单,并且相对低成本的密码锁。
二、设计的技术指标要求1、研究方法(1)总体按照最优化的方法进行软件设计和硬件设计,走软件实现道路;(2)对软硬件进行模块划分,并对各单元电路结合EDA工具进行论证设计;(3)在查阅文献基础上展开设计,力求创新。
2、技术要求(1)采用6位密码(2)报警、锁定键盘功能。
51单片机课程设计密码锁
课程设计课程名称单片机原理题目名称密码锁学生学院信息工程专业班级学号学生姓名指导教师2012 年 6 月8 日密码锁一设计构思:单片机控制的密码锁设计。
STC89C52单片机P1引脚外接独立式按键S1-S8,分别代表数字键0-5、确定键、取消键。
单片机从P3.0-P3.3输出4个信号,分别为1个电磁开锁驱动信号和密码错误指示、报警输出、已开锁指示信号,分别用发光二极管L1-L4指示。
P3.4接一有源蜂鸣器,用于实现提示音。
(1)初始密码为123450,输完后按确定键开锁,取消键清除所有输入,每次按键有短“滴”声按键提示音。
(2)密码输入正确后,输出一个电磁锁开锁信号与已开锁信号,并发出两声短“滴”声提示。
4秒后开锁信号与已开锁指示清零。
(3)密码输入错误时,发出一声长“滴”声错误指示提示音,并密码错误指示灯亮,三次密码错误时,发出长鸣声报警,并密码错误指示灯亮,报警指示灯亮,此后15秒内无法再次输入密码,15秒过后,清除所有报警和指示。
(4)5秒内无任何操作后,清除所有输入内容,等待下次输入。
二系统设计:(1)分析构思要求。
写出系统整体设计思路根据题目的要求,需要考虑如下几个任务:按键的输入,密码的判断,密码输入正确或错误的计时、输出信号的控制等。
键盘的输入:由于需要输入6个数字作为密码,先要判断按键时数字键还是功能键,若判断为数字键按下,则需要将每次键盘的输入内容依次暂存在一个数组中。
在每次按键输入时,需要启动定时器实现待机计时(5秒)。
若5秒内没有输入内容则清除已输入的内容。
密码的判断和计时:在按下确认键之后,要将输入的内容与初始密码核对,如果密码正确,输出相应的指示,同时还要启动定时器实现4s的计时。
如果密码错误,错误计数变量增1,同时输出密码指示信号,若错误次数超过3s,则输出报警等信号,同时启动定时器实现15秒的计时。
输出信号的控制主要根据按键输入与密码的核对情况来决定。
整体程序设计思想:程序分为主程序和中断服务程序两个主要部分,主程序完成变量和单片机特殊功能寄存器的初始化后,进入一个循环结构。
51单片机电子密码锁
中北大学信息商务学院课程设计说明书学生姓名:郑晓峰学号:10050644X22学生姓名:梁一才学号:10050644X30学生姓名:李功学号:10050644X32学院:信息与通信工程专业:电子信息工程题目:专业综合实践之单片机部分:基于单片机的电子密码锁的设计职称: 教授2014 年 1 月 10 日中北大学信息商务学院课程设计任务书2013/2014 学年第1 学期学院:信息与通信工程学院专业:电子信息工程学生姓名:郑晓峰学号:10050644X22学生姓名:梁一才学号:10050644X30学生姓名:李功学号:10050644X32课程设计题目:专业综合实践之单片机部分:基于单片机的电子密码锁的设计起迄日期:2013年12 月30 日~2014年1月10 日课程设计地点:5院楼201,510 实验室指导教师:王浩全下达任务书日期: 2013 年 12 月30日课程设计任务书课程设计任务书目录1 绪论 (1)1.1 引言 (1)1.2 电子锁设计的意义的本设计特点 (1)2.系统设计 (2)2.1系统总设计结构图 (2)2.2.开锁机构设计 (2)2.2.1主控芯片AT89C51单片机的简介 (3)3系统硬件设计 (6)3.1键盘设计 (6)3.2电路图的绘制 (7)3.2.1 PROTEL 99 SE简介: (10)4.软件设计 (10)4.1 系统软件设计整体思路 (10)4.2系统软件设计流程图 (11)5 程序调试 (12)5.1 程序调试用到的软件 (12)5.2 KEIL C51简介 (12)5.3 调试过程 (12)6 设计总结与展望 (13)参考文献 (14)附录 (15)1 绪论1.1 引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的喜爱。
51单片机简易密码锁
学号:201114040215HEBEI UNITED UNIVERSITY单片机课程设计说明书设计题目:简易电子密码锁学生某某:李红辉专业班级:测控技术与仪器2学院:电气工程学院指导教师:曹晓华2014年06月05日成绩评定表摘要在日常的生活和工作中, 住宅与部门的安全防X、单位的文件档案、财务报表以与一些个人资料的保存多以加锁的方法来解决。
假如使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
随着科学技术的不断开展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、本钱低、功耗低、易操作等优点。
在安全技术防X领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克制了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的开展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
本课程设计介绍了基于单片机电子密码锁的设计,该设计硬件主要由AT89C52最小系统、矩阵电路、1602LCD显示电路、电源电路和报警电路等几局部组成。
软件主要由C语言编程。
该密码锁由单片机技术,通过矩阵电路设置、修改密码、保护密码,并由LCD显示密码输入,从而实现对密码的设置、保护。
关键词:单片机,密码锁, 1602,最小系统,矩阵键盘AbstractIn daily life and work, the department of housing and security, unit documents, financial statements and some personal information to save more in order to lock the ways to solve. If use the traditional mechanical key to open the lock, people often need to carry multiple keys, use very convenient, and the key missing after security is promised. With the continuous development of science and technology, people in daily life the demand is higher and higher safety insurance device. To meet the requirements of people on the use of the lock, increase its safety, use the password instead of the key bination lock arises at the historic moment. bination lock with high safety, low cost, low power consumption, easy operation, etc.In the field of security technology to guard against, with electronic bination lock anti-theft alarm function gradually replace the traditional mechanical bination lock, overing the mechanical bination lock password quantity is little, the shortings of poor safety performance, make the bination lock both in technology and step in performance are improved greatly. With the development of large scale integrated circuit technology, especially the single chip microputer, appeared with the intelligent bination of the microprocessor, it besides has the function of electronic bination lock, also introduced the intelligent management, expert analysis system, and other functions, so that the bination lock of high security, reliability, and increasingly widely used.The course design of electronic bination lock based on MCU is introduced, the design of the hardware is mainly posed of AT89C52 minimum system, matrix circuit, 1602 LCD display circuit, power circuit and alarm circuit and so on several parts. Software is mainly posed of C language programming. The bination lock by the single chip microputer technology,through the matrix circuit setting, change passwords, password protection, and by the LCD display password input, so as to realize the password Settings, protection.Key words: single chip microputer, trick lock, the 1602, the smallest system, matrix keyboard目录摘要IIABSTRACT4第1章绪论77777第2章电子密码锁的工作原理与总体设计 (8)电子密码锁的工作原理88第3章硬件系统设计错误!未定义书签。
基于51单片机密码锁的设计
基于51单片XX码锁的设计电子密码锁是一种通过输入密码来控制芯片或电路工作,从而控制机械开关的闭合,完成密码锁的开锁、闭锁任务的电子产品。
它有很多的种类,包括简易的电路产品,也有性价比比较高的基于芯片的产品。
现在应用比较多的电子密码锁主要以芯片为主,内部通过编程实现实际功能。
本次毕业设计通过单片机C51语言编写密码程序,用3-8译码器和74LS138驱动的数码管来显示密码数字数码管以“—〞来实时显示当前输入密码的个数。
{ 94 %:当输入密码正确时,对应的指示灯变亮;当密码不正确时,另一个对应的指示灯变亮并且发出蜂鸣声报警。
}关键词:AT89S51;单元电路;密码程序;C51语言;电子密码锁目录第一章绪论11.1 电子密码锁的背景11.2 电子密码锁的开展趋势11.3 本设计要实现的目标2第二章系统方案比照与确认42.1 系统根本方案42.1.1系统框图42.1.2各模块方案选择与论证52.1.3系统各模块的最终方案5第三章系统的硬件设计与实现113.1 系统硬件概述113.2 主要单元电路的设计123.2.1键盘扫描模块电路的设计113.2.2单片机控制模块电路的设计113.2.3声光报警模块电路的设计113.2.4数码显示模块电路的设计11第四章系统软件设计174.1 系统软件的概述174.2 子程序的设计194.2.1 自检子程序174.2.2 键盘扫描子程序174.2.3 位移子程序184.2.4 开锁子程序174.2.5 修改密码子程序18第五章系统仿真与调试215.1 系统仿真过程215.2 仿真调试过程中遇到的困难及解决方法21致谢22参考文献22附录1系统电路图22附录2系统程序22附录3系统使用说明书22第一章绪论1.1电子密码锁的背景{ 44 %:由于应用科技的不断开展,锁的成员已经包括声控锁、电子锁、磁性锁、密码锁、机械锁等等。
} {46 %:开锁时,在金属钥匙的根底上,添加一种或多种密码,并组合不同图像,不同声音等〔如视网膜、指纹等〕来控制锁的开启。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机密码锁制作的程序和流程图(很详细) 一、基本组成:单片机小系统+4*4矩阵键盘+1602显示+DC电机基本电路:键盘和和显示键盘接P1口,液晶的电源的开、关通过P2.7口控制电机(控制口P2.4)二、基本功能描述:1.验证密码、修改密码a)锁的初始密码是123456(密码最长为10位,最短为1位)。
2.恢复初始密码a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。
但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。
3.使系统进入低功耗状态a)在实际使用中,锁只有在开门时才被使用。
因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。
b)同时将LCD背光灯关闭4.DC电机模拟开锁动作。
a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。
DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。
三、密码锁特点说明:1.0 输入将被以字符形式输入,最长为10位。
超过10位时系统将自动截取前10位、但不作密码长度溢出提示。
2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。
3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。
4.0 若2分钟内无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。
5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。
6.0 修改密码键和恢复初始密码键最好置于室内。
这是Proteus仿真结果:输入密码123456:显示结果:密码正确时电机启动、电机将持续5秒:这是键盘:开锁键是接INT0引脚接的一个独立按键,用于唤醒CPU工作、进而开启整个系统密码正确时可以修改密码:再次输入新密码,两次输入相同时、更改有效当然你可以随时放弃修改密码改进:1.0 密码锁的秘密没有存储,因而在掉电时最新的密码将丢失,重新上电后密码将恢复成为初始密码。
这使得每次换电池或停电后密码都得恢复一次,给使用带来不便,但是为了要存储一个最多只有十几字节的密码就增加一个存储器、似乎不是很值,最好是所选的单片机自带这样的存储器(容量很小、如32B)。
当然如果电源来自市电的话,就不会经常掉电了。
2.0 系统的最好再增加电源监测的设计,在电池电力不够时发出提示。
这时还可以增加备用电池,这样就可以保证系统不会掉电。
但是这些都要依赖于成本。
3.0 液晶的显示最好采用中文。
通过对1602的CGRAM的操作可以实现中文显示,使得用户界面更好。
主函数:确认函数_ confirm()操作:0_将 '\0' 置于输入table_input[]结尾(table_input[]的长度返回值在length里面) 根据操作标识选择任务:1_确认密码:判定输入密码正确与否2_修改密码:确认第一次输入并保存要求第二次输入比较两次输入是否相同根据比较结果选择任务:修改失败,进入输入密码态修改成功,将输入复制到table_password[]确认函数_confirm()相关标识位目录:flag_display;//根据其值可以确定显示信息flag_confirm;//确认键根据此标识判定任务,默认为0_即为确定密码状态flag_allow;//允许修改密码标识,在密码比较正确时置1flag_amend;//第一/二次输入新密码标识flag_M;//允许电机开锁标识相关变量sbit M=P3^6;//电机控制口flag_confirm;//操作任务标识位flag_compare;//比较输入与密码|相等时返回1,否则返回0static flag_amend;//修改密码时的标识第一次输入前=1,输入后置2第二次输入前=2,输入后置0flag_display=0;//确认键操作的返回值根据返回值可以确定显示信息flag_allow;//允许改密码标识,在密码比较正确时置1,不正确时置0process_char()函数::_M;//DC电机控制口process_char()函数::_length;//跟踪记录输入table_input[11]的字符长度( <=10 )lcd_display()函数中标识位flag_display的值与意义:=0:不显示|不刷新显示=1:密码错误=2:密码正确=3:请输入新密码=4:请再次输入新密码=5:密码修改成功=6:密码修改失败=7:显示输入密码状态_The password!=8:放弃修改密码=9:已开锁流图不怎么清晰、不过下一篇就是程序了,可以从程序推出流图。
程序比较多,所以写成了几个文件,同时应用了相当多的标识位来进行信号传递。
我觉得边看程序边画它的流程图会更好地帮助我们读程序。
1.0 main.c文件#include<reg52.h>#include<string.h>#include"mydefine_2.h"static void delay(unsigned int N)//N ms延时_12MHz/准确性高{unsigned int i=0,j=0;for(i=1;i<=N;i++)for(j=1;j<=355;j++) ;}void clock(){key_clock=0;delay(15);key_clock=1;}void init(){key_LCD=0;init_1602();TMOD=0x01;TH0=0x3C;//=(65535-5000)/256TL0=0xAF;//(65535-5000)%256EA=1;ET0=1;TR0=0;EA=1;//外部中断0唤醒CPU(空闲方式)EX0=1;IT0=1;command(0x80);lcd_display(7);}void main(){init();while(1){temp=keyboard_matrix();//扫描输入if(temp)//有按键输入信息{clock();//按键声TR0=0;//关闭计时timer=0;receive(temp);//输入的字符串长度为length( <= 10)if(i!=length)//输入时显示"*"{command(0xC0+length);//为显示密码输入设定位置display('*');i=length;}switch(temp)//根据按键号调用任务{//修改密码case 12: if((flag_allow) && (flag_amend==0))//输入密码正确的条件下可以更改{table_input[0]='\0';flag_display=3;//请输入新密码flag_confirm=1;//确认键进入确认修改密码功能flag_amend=1;//每次按下修改键时都是第一次输入新密码length=0; //重按修改键时也是第一次输入新密码i=0;}else{flag_confirm=0;//恢复初始态flag_amend=0;lcd_display(1);//密码不正确delay(500);flag_display=7;length=0;i=0;}break;case 11: //取消command(0xC0+length);//擦出显示display(' ');//显示后光标_显示地址又加了1command(0xC0+length);//重置光标_显示地址|实为将光标拉回来 i=0;if(length > 0){length--;//input[]位置后退一位}break;case 10: confirm();//确定i=0;break;case 13: //修改密码的过程中取消修改密码|将系统置于初始态即可 if((flag_amend==1) || (flag_amend==2)){flag_amend=0;flag_confirm=0;lcd_display(8);delay(500);flag_display=7;length=0;i=0;}break;}lcd_display(flag_display);}else{TR0=1;//开始计时等待}DC_Moter();resume_password();if(flag_clear)//恢复密码和开锁键_外部中断有效时重新计时{flag_clear=0;timer=0;}if(timer==100)//10秒后不允许更改密码{flag_allow=0;flag_amend=0;flag_confirm=0;length=0;i=0;lcd_display(7);//显示初始态,以提示修改超时 }if(timer==1200)//≈2分钟后休眠|空闲方式{TR0=0;timer=0;clear_system();//恢复初始态i=0;key_clock=0;delay(250);key_clock=1;PCON|=0x01;lcd_display(7);//唤醒CPU后显示初始态}}}void int0() interrupt 0{key_LCD=0;//开液晶电源key_clock=0;delay(250);key_clock=1;flag_clear=1;}void Timer0() interrupt 1 //50ms{TH0=0x3C;//(65535-50000)/256TL0=0xAF;//(65535-50000)%256timer++;}2.0 负责实现具体操作的 process_char.c 文件#include<reg52.h>#include<string.h>#include"mydefine.h"sbit key_self=P2^1;//独立按键,用于恢复初始密码sbit key_LED=P2^0;sbit key_M=P2^4;//DC电机控制口sbit key_LCD=P2^7;//液晶电源控制口extern bit flag_clear;//恢复密码和开锁键_外部中断的有效标识extern unsigned int timer;//定时器0计数时段标记_50ms一次定时中断extern unsigned char length=0;//跟踪记录输入table_input[11]的字符长度( <=10 )extern unsigned char flag_display=0;//根据其值可以确定显示信息extern unsigned char flag_confirm=0;//确认键根据此标识判定任务,默认为0_即为确定密码状态extern unsigned char flag_allow=0;//允许修改密码标识,在密码比较正确时置1extern unsigned char flag_amend=0;//第一/二次输入新密码标识unsigned char flag_M=0;//允许电机开锁标识extern void command(unsigned char command);extern void display(unsigned char date);//向I2C地址为address处写入数据dateextern void write_I2C(unsigned char address,unsigned char date);//读出I2C地址为address处的数据extern unsigned char read_I2C(unsigned char address);static void delay(unsigned int N)//N ms延时/准确性高{unsigned int i=0,j=0;for(i=1;i<=N;i++)for(j=1;j<=355;j++) ;}//休眠前清除table_input中的值extern void clear_system(){table_input[0]='\0';//恢复初始态length=0;flag_allow=0;flag_confirm=0;flag_amend=0;flag_clear=0;key_LCD=1;//关液晶电源}//接收键盘输入|以字符形式存入table_input[11]extern void receive(unsigned char temp){//按键在松手时读取按键号,故不会重复读取按键值if(temp && length<=9)//如此,则无按键时执行效率高{switch(temp){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9: table_input[length++]=temp+48;//以字符形式存入table_input[11]break;case 14: table_input[length++]=48;//字符0}}}//根据任务选择显示信息extern void lcd_display(unsigned char temp){unsigned char i=0,*p=NULL;if(temp){switch(temp)//选择显示信息{case 1: p=table_error;//密码不正确break;case 2: p=table_pass;//密码正确break;case 3: p=table_new;//请输入新密码break;case 4: p=table_again;//请再次输入新密码break;case 5: p=table_changed;//密码修改成功break;case 6: p=table_fail;//密码修改失败break;case 7: p=table_enter;//显示输入密码:The password!break;case 8: p=table_abandon;//放弃修改密码break;case 9: p=table_close;//锁闭break;case 10: p=table_resume;//锁闭break;}command(0x01);delay(1);command(0x80);while(*p!='\0'){display(*(p++));}flag_display=0;//显示后清0,避免重复显示}}//确认extern void confirm(void){unsigned char flag_compare=0;//用于记录比较输入与密码的结果|相等时返回1,否则返回0unsigned char flag_compare_2=0;//用于记录对两次输入的新密码的比较结果|相等时返回1,否则返回0unsigned char i=0;if(length > 0)//输入不为空{table_input[length]='\0';length=0;//输入字符串长度清0if(flag_confirm)//修改密码{switch(flag_amend){case 1: strcpy(table_newpassword,table_input);//第一次输入新密码table_input[1]='\0';//避免第一次输入的内容在放弃修改时再次被利用flag_amend=2;flag_display=4;//请再次输入密码break;case 2:flag_compare_2=strcmp(table_input,table_newpassword);//第二次输入新密码flag_amend=0;//清0,允许再次修改flag_confirm=0;//进入初始之确认密码状态if(!flag_compare_2)//两次输入相同==0{strcpy(table_password,table_input);table_input[1]='\0';//避免修改完成后再次被利用,造成重复修改,同时避免刚修改了就是pass状态lcd_display(5);//修改成功delay(500);flag_display=7;}else{lcd_display(6);//修改失败delay(500);flag_display=7;}break;}}else//验证密码{flag_compare=strcmp(table_input,table_password);if(!flag_compare)//密码正确==0{flag_allow=1;//允许修改密码flag_M=1;//允许开锁flag_display=2;//密码正确信息:Pass!table_input[1]='\0';//改变输入,使不致出乱}else//密码错误{flag_allow=0;//不允许修改密码lcd_display(1);//密码错误信息:Error!delay(500);flag_display=7;}}}}//电机控制extern void DC_Moter(){if(flag_M)//允许开锁{flag_M=0;key_M=0;//开锁key_LED=0;delay(1250);key_M=1;key_LED=1;timer=0;lcd_display(7);//进入初始态}}//恢复初始密码extern void resume_password(){if(!key_self)//==0{delay(3);if(!key_self)//==0{while(!key_self) ;//==0strcpy(table_password,table_original); flag_clear=1;lcd_display(10);delay(500);lcd_display(7);}}}确认函数_ confirm()操作:0_将 '\0' 置于输入table_input[]结尾(table_input[]的长度返回值在length里面)根据操作标识选择任务:1_确认密码:判定输入密码正确与否2_修改密码:确认第一次输入并保存要求第二次输入比较两次输入是否相同根据比较结果选择任务:修改失败,进入输入密码态修改成功,将输入复制到table_password[]确认函数_confirm()相关标识位目录:flag_display;//根据其值可以确定显示信息flag_confirm;//确认键根据此标识判定任务,默认为0_即为确定密码状态flag_allow;//允许修改密码标识,在密码比较正确时置1flag_amend;//第一/二次输入新密码标识flag_M;//允许电机开锁标识相关变量sbit M=P3^6;//电机控制口flag_confirm;//操作任务标识位flag_compare;//比较输入与密码|相等时返回1,否则返回0static flag_amend;//修改密码时的标识第一次输入前=1,输入后置2第二次输入前=2,输入后置0flag_display=0;//确认键操作的返回值根据返回值可以确定显示信息flag_allow;//允许改密码标识,在密码比较正确时置1,不正确时置0process_char()函数::_M;//DC电机控制口process_char()函数::_length;//跟踪记录输入table_input[11]的字符长度( <=10 )lcd_display()函数中标识位flag_display的值与意义:=0:不显示|不刷新显示=1:密码错误=2:密码正确=3:请输入新密码=4:请再次输入新密码=5:密码修改成功=6:密码修改失败=7:显示输入密码状态_The password!=8:放弃修改密码=9:已开锁3.0 定义各个数组的头文件mydefine.hextern unsigned char table_input[11]={0}; //接收键盘输入unsigned char table_password[11]="123456"; //密文unsigned char table_newpassword[11]="456"; //接收新密码unsigned char code table_original[11]="123456"; //初始密码//显示信息unsigned char code table_pass[]="Pass!"; //成功进入unsigned char code table_error[]="Operate Error!"; //密码错误信息unsigned char code table_enter[]="The password:"; //输入密码unsigned char code table_new[]="New password:"; //输入新密码unsigned char code table_again[]="Enter again:"; //再次输入新密码unsigned char code table_changed[]="Changed!"; //密码修改成功unsigned char code table_fail[]="Fail changce!"; //密码修改失败unsigned char code table_abandon[]="Abandon changce!";//放弃修改密码unsigned char code table_close[]="Locked!";//锁闭unsigned char code table_resume[]="Resumed!";//恢复初始密码4.0 头文件mydefine_2.h定义了各个外部文件向主函数用到的操作函数和外部变量#ifndef _mydefine_2_h_#define _mydefine_2_h_sbit key_LED=P2^0;sbit key_clock=P3^3;//蜂鸣器sbit key_LCD=P2^7;//液晶电源控制口extern bit flag_clear=0;//恢复密码和开锁键_外部中断的有效标识extern unsigned int timer=0;//定时器0计数时段标记_50ms一次定时中断static unsigned char i=0;//显示*用变量unsigned char temp=0;//用于接收键盘输入(按键在松手时读取按键号) extern unsigned int table_input[11];//接收输入extern unsigned char flag_allow;//允许改密码标识,在密码比较正确时置1extern unsigned char flag_confirm;//确认键根据此标识判定任务,默认为0_即为确定密码状态extern unsigned char flag_display;//确认键操作的返回值,根据返回值可以确定显示信息extern unsigned char flag_amend;//第一/二次输入新密码标识extern unsigned char length;//输入input的字符长度(length <= 16) //1602液晶:extern_1602.c***************************************************************** extern void init_1602();extern void command(unsigned char command);extern void display(unsigned char date);//键盘:extern_keyboard_no_T0_2.c********************************************************* //矩阵键盘.无按键动作时其返回值num_key=0,否则返回按键号num_key extern unsigned char keyboard_matrix();//(在松手时读取按键号****检测高四位)//密码处理:process_char.c**************************************************************** //电机控制extern void DC_Moter();//接收键盘输入|以bit形式存入input__返回值为输入的字符串长度length(length <= 10)extern void receive(unsigned char temp);//涉及文件间变量length //确认按键操作extern void confirm(void);//涉及跨文件调用的变量flag_confirm,flag_allow,flag_amend//根据任务选择显示信息extern void lcd_display(unsigned char flag_display);//涉及跨文件调用的变量flag_displayextern void clear_system();//恢复初始态extern void resume_password();//恢复初始密码。