电子密码锁制作及源代码Word格式.docx
- 文档编号:4177457
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:25
- 大小:716.47KB
电子密码锁制作及源代码Word格式.docx
《电子密码锁制作及源代码Word格式.docx》由会员分享,可在线阅读,更多相关《电子密码锁制作及源代码Word格式.docx(25页珍藏版)》请在冰点文库上搜索。
2、提示输入密码,密码为六位数,初始密码为“456789”,“*”代表确定键,“#”代表取消键,按“*”可以表示确定密码输入,按“#”表示重新输入密码。
3、如果密码输入正确则开启电磁锁,同时提示按“A”键可以修改密码,同时开始倒计时,如果无按键按下,5秒钟倒计时后电磁锁自动释放,重新上锁。
4、如果在倒计时期间按下“A”键,则进入修改密码界面,密码的要求是4~6位的0~9任何数字,如果输入不符合要求会出现相应提示,输入第一遍密码后会出现再次输入密码提示,然后进行密码验证,如果两次密码一致,将新密码写入单片机自带的内部E2PROM存储器中,同时提示修改密码成功,电磁锁上锁。
否则提示重新输入密码。
5、如果输入密码错误三次,则启动报警,蜂鸣器发出报警音,LED不断闪烁。
6、如果一分钟无按键操作,则设备自动进入节电模式,关闭液晶屏,关闭背光,关闭闪灯,直到再次有按键按下,又恢复进入节电前的状态。
7、遥控功能,遥控器A键可以开启和关闭照明,B键可以开启和关闭电磁锁,D键可以实现远程复位单片机。
键盘的B、C、D键和遥控器的C键尚未用于设备中,也就是以上按键在设备中不起作用。
作品整体结构:
程序流程图:
无按键
是
否
提示相关信息
提示修改密码失败
提示密码输入成功,向单片机中写入密码
倒计时结束,电磁锁关闭
程序初始化,读取密码
液晶显示开机画面
提示输入密码
输入密码
取消键
开启电磁锁,开始倒计时,提示A键修改密码
提示密码错误,是否错误3次
开始声光报警
进入修改密码界面
创新部分:
1、采用128*64液晶屏显示界面,支持中文,更加人性化。
2、具有密码保存功能,将修改后的密码写入到单片机自带的E2PROM中。
3、漂亮的五彩闪灯,增加视觉享受。
4、采用具体的电磁锁和真正的骨架,密码正确后会自动开锁。
5、密码输入错误三次后,开启声光报警,更加真实趣味。
6、节能睡眠功能,大大节省电能。
7、采用4~6位密码均可,修改密码会进行密码格式和重复密码验证。
8、无线遥控功能,遥控器A键可以开启和关闭照明,B键可以开启和关闭电磁锁,D键可以实现远程复位单片机。
【附录】
/*电子密码锁C语言源程序*/
/*主函数*/
/*******************电子密码锁设计*********************
主程序入口
*******************************************************/
#include<
reg52.h>
#include<
intrins.h>
#include"
word.h"
lcd.h"
eprom.h"
key_scan.h"
uinta,j;
/*按键声音*/
voiddidi()
{beep=0;
delay1(70);
beep=1;
}
/*灯光闪烁*/
voidflash()
{led=0;
led=1;
led=0;
/*密码响应程序*/
pass_word()
{ucharj,m,i,k,l,p=0,n=0,key1=1;
loop:
start();
//SectorErase(0x2000);
//擦除扇区
//writeROM();
//delay1(10);
readROM();
m=0;
for(i=0;
i<
7;
i++)
{key[i]='
z'
;
while
(1)
{j=keyscan();
wireless();
//无线遥控响应程序
if(j>
='
0'
&
j<
9'
)
{key[m++]=j;
write_x();
//输入密码}
if(j=='
#'
{gotoloop;
*'
{n=0;
for(k=0;
k<
6;
k++)
{if(pw[k]==key[k])//比较密码
n++;
if(n!
=6)
{p++;
write_com(0x01);
write_com(0x0c);
write_com(0x90);
for(i=0;
16;
write_date(tab4[i]);
//密码输入错误
write_com(0x88);
write_date(tab4[16+i]);
//请重新输入
didi();
delay1(500);
if(p==3)
{p=0;
for(i=0;
8;
{didi();
flash();
}}
gotoloop;
}
if(n==6)
{l=5;
p=0;
//避免出现正确前的的错误累加bug
rg_key();
lock=0;
while(l--)
{write_com(0x9e);
write_date(0x30+l);
//正在倒计时
40;
{if(modify_pw())
{key1=0;
break;
delay1(25);
if(key1==0)
{key1=1;
break;
lock=1;
gotoloop;
}}}
/*修改密码程序*/
ucharmodify_pw()
{uchari,m,n,k,flag=0,flag1;
j=keyscan();
if(j=='
A'
{flag=1;
loop1:
m=0;
flag1=0;
for(i=0;
{pw[i]='
pw1[i]='
}
while
(1)
{j=keyscan();
if(j>
{
if(flag1==0)//判断是第一次密码
pw[m++]=j;
if(flag1==1)
pw1[m++]=j;
//第二次密码
write_x();
}
if(j=='
{gotoloop1;
{if(m<
5&
flag1==0)//第一次进入输入密码
{
write_com(0x01);
write_com(0x0c);
//关光标
write_com(0x90);
write_date(tab8[i]);
//密码不能小于4位
write_com(0x88);
//请重新输入
didi();
delay1(700);
gotoloop1;
}
elseif(m==7&
flag1==0)
{write_com(0x01);
//密码不能
write_date(tab11[i]);
//大于11位
elseif(flag1==0)//再次输入密码
write_com(0x80);
write_date(tab7[i]);
//请再次
10;
write_date(tab3[i+2]);
//输入密码
write_com(0x98);
4;
write_date(enter[i]);
//确定
write_com(0x98+0x06);
write_date(reset[i]);
//取消
write_com(0x0f);
//显示光标
flag1=1;
m=0;
elseif(flag1==1)//两次输入结束开始对比两次密码
{n=0;
for(k=0;
{if(pw1[k]==pw[k])//比较密码
n++;
if(n==6)
{write_com(0x01);
write_com(0x0c);
write_com(0x90);
write_date(tab9[i]);
//密码修改成功
SectorErase(0x2000);
delay1(10);
writeROM();
didi();
delay1(500);
lock=1;
}
if(n!
write_date(tab10[i]);
//密码不一致
write_com(0x88);
write_date(tab10[16+i]);
//修改失败
}}}}
}
returnflag;
voidmain()
{init();
kai_lcd(tab2);
kai_lcd2(tab1);
didi();
pass_word();
voidtime0()interrupt1//定时器中断0
{TH0=0x3c;
TL0=0xb0;
a++;
if(a==1200)
{a=0;
TR0=0;
write_com(0x08);
//关显示
write_com(0x34);
//进入睡眠
lcdlig=1;
shan=1;
led=1;
lock=1;
{if(keyscan()!
Z'
{TR0=1;
//脱离睡眠
write_com(0x30);
write_com(0x0f);
//显示开
lcdlig=0;
shan=0;
//led=0;
break;
}}}}
/*word文件,用于存放相关数组等*/
/*延时子函数*/
voiddelay(uchari)
{for(;
i>
0;
i--);
/*延时子函数1*/
voiddelay1(uintz)
{uintx,y;
for(x=z;
x>
x--)
for(y=110;
y>
y--);
/*lcd.h文件*/
/********************液晶显示模块*************************/
/*12864忙检测*/
voidbuys()
{P1=0xff;
lcdrs=0;
lcdrw=1;
lcdne=1;
delay1(5);
//while(busy==1);
lcdne=0;
/*12864写命令*/
voidwrite_com(ucharcom)
{buys();
lcdrw=0;
P1=com;
P1=0xff;
/*12864写数据*/
voidwrite_date(uchardate)
lcdrs=1;
P1=date;
/*初始化函数*/
voidinit()
{TMOD=0x01;
//设置定时器0为工作方式1
TH0=0x3c;
//初值50ms
EA=1;
//开总中断IE
ET0=1;
//开定时器中断0IE1IE
TR0=1;
//启动定时器0TCON
shan=0;
//开闪灯
lcdlig=0;
//开背光
write_com(0x01);
/*待命模式,清屏,地址指针指向00H*/
write_com(0x30);
/*30---基本指令动作,基本指令集*/
write_com(0x06);
write_com(0x0c);
/*开显示,关游标*/
write_com(0x00);
/*光标的移动方向*/
}
/*进入系统选择功能*/
start()
{uchari;
//清屏,地址指针指向00H
write_com(0x80);
12;
write_date(tab3[i]);
//请输入密码
write_com(0x98);
write_date(enter[i]);
write_com(0x98+0x06);
write_date(reset[i]);
write_com(0x90);
write_com(0x0f);
/*eprom.h文件*/
/*打开ISP.IAP功能*/
voidISP_IAP_enable()
{EA=0;
//关中断
ISP_CONTR=ISP_CONTR&
0x18;
//0001.1000
ISP_CONTR=ISP_CONTR|WaitTime;
//写入硬件延时
ISP_CONTR=ISP_CONTR|0x80;
//ISPEN=1
/*关闭ISP.IAP功能*/
voidISP_IAP_disable()
{ISP_CONTR=ISP_CONTR&
0x7f;
//ISPEN=0
ISP_TRIG=0x00;
//开中断
/*公用触发代码*/
voidISPgoon(void)
{ISP_IAP_enable();
//打开ISP.IAP功能
ISP_TRIG=0x46;
//触发ISP.IAP命令字节1
ISP_TRIG=0xb9;
//触发ISP.IAP命令字节2
_nop_();
/*字节读*/
ucharbyte_read(uintbyte_addr)
{ISP_ADDRH=(uchar)(byte_addr>
>
8);
//地址赋值
ISP_ADDRL=(uchar)(byte_addr&
0x00ff);
ISP_CMD=ISP_CMD&
0xf8;
//清除低3位
ISP_CMD=ISP_CMD|RdCommand;
//写入读命令
ISPgoon();
//触发执行
ISP_IAP_disable();
//关闭ISP,IAP功能
returnISP_DATA;
//返回读到的数据
/*扇区擦除*/
voidSectorErase(uintsector_addr)
{uintiSectorAddr;
iSectorAddr=(sector_addr&
0xfe00);
//取扇区地址
ISP_ADDRH=(uchar)(iSectorAddr>
ISP_ADDRL=0x00;
ISP_CMD&
=0xf8;
//清空低3位*
ISP_CMD|=EraseCommand;
//*擦除命令3
//触发执行
//关闭ISP,IAP功能
}
/*字节写*/
voidbyte_write(uintbyte_addr,ucharoriginal_data)
{ISP_ADDRH=(uchar)(byte_addr>
/*取地址*/
ISP_ADDRL=(uchar)(byte_addr&
0x00ff);
/*清低3位*/
ISP_CMD|=PrgCommand;
/*写命令2*/
ISP_DATA=original_data;
/*写入数据准备*/
/*触发执行*/
/*关闭IAP功能*/
/*写入数据*/
voidwriteROM()
{byte_write(0x2000,pw[0]);
byte_write(0x2001,pw[1]);
byte_write(0x2002,pw[2]);
byte_write(0x2003,pw[3]);
byte_write(0x2004,pw[4]);
byte_write(0x2005,pw[5]);
/*读取数据*/
voidreadROM()
{pw[0]=byte_read(0x2000);
pw[1]=byte_read(0x2001);
pw[2]=byte_read(0x2002);
pw[3]=byte_read(0x2003);
pw[4]=byte_rea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 密码锁 制作 源代码