基于单片机的电子密码锁Word文档格式.docx
- 文档编号:16291416
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:31
- 大小:146.98KB
基于单片机的电子密码锁Word文档格式.docx
《基于单片机的电子密码锁Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
ucharcodetable6[]="
Overtime!
ucharcodetable7[]="
Changemodel!
ucharcodetable8[]="
Oldcode!
ucharcodetable9[]="
Newcode!
ucharcodetable10[]="
ChangeisOK!
ucharcodetable11[]="
Youaremanager"
ucharcodetable12[]="
Lockkeyboard!
ucharcodetable13[]="
Openkeyboard!
ucharcodekey_table[16]={1,2,3,10,4,5,6,11,7,8,9,12,0,13,14,15};
ucharpassword[]={2,2,2,2,2,2};
//设定初始密码
ucharpassword1[]={1,1,1,1,1,1};
ucharsave[6]={9,9,9,9,9,9};
//保存输入的数据
ucharconflag;
//确认标志位
ucharlockflag;
//锁键盘标志
ucharstartflag;
//开始标志
ucharmanflag;
uchartimeflag;
ucharchangeflag=0;
ucharuseflag;
voidsounder();
voiddelay(uintz);
//延时子程序
voidwright_com(ucharcom);
//写指令
voidwright_data(uchardate);
//写数据函数
voidinit();
//初始化
voiddisplay_OK();
//显示OK
voidfunction12();
voidfunction11();
voiddelete();
//删除输入的最后一个数
ucharkeyscan();
//带返回值的键盘扫描程序
voidMconfirm();
voidenter_code(uchart);
//输入密码函数
voidconfirm();
//确认密码正确与否
voidsucceed_an();
//输入正确时的响应
voidfail_an();
//输入错误时的响应
voidlockkey();
//锁键盘三秒
voidalarm();
//发出警报
voidreset();
//复位函数
voidreset1();
voiddisplay_enter();
//显示输入
voiddisplay_wrong();
voiddisplay_manager();
voiddisplay_time();
voiddisplay_change();
voiddisplay_old();
voiddisplay_new();
voiddisplay_chOK();
voiddisplay_you();
voiddisplay_lock();
voiddisplay_open();
voidmain(void)
{//ucharv;
//for(v=0;
v<
6;
v++)
//{Write_IIC(v,password[v]);
//}
init();
while
(1)
{
if(lockflag)
{
temp=keyscan();
//锁键期间也要进行键盘扫描
if(temp==12)
{
function12();
}
if(manflag)
enter_code(temp);
//每扫描一次键盘就要进行一次处理,保存输入的数值
if(temp==15)//按下确认键盘就要进行面膜确认
{
confirm();
//进行密码确认
if(conflag)//密码确认为正确
{
count=0;
display_open();
//显示成功
delay(1500);
j=0;
lockflag=0;
manflag=0;
init();
}
else
{
fail_an();
//密码错误
}
}
if(temp==14)
delete();
//作删除操作
}
else
//反复扫描输入,等待随时输入
if(temp!
=No_key)//有按键按下时进行下面操作
if(temp==10)
reset();
startflag=1;
//开始标志置位
if(temp==13)
init();
if(changeflag)
if(temp==11)
function11();
}
if(useflag==0)
enter_code(temp);
//每扫描一次键盘就要进行一次处理,保存输入的数值
if(temp==15)
confirm();
if(conflag)
{
display_new();
}
else
{
fail_an();
}
if(temp==14)
{
delete();
if(useflag==1)//按下确认键盘就要进行面膜确认
if(j==6&
&
temp==15)
{uintn;
for(n=0;
n<
n++)
{
Write_IIC(n,save[n]);
display_chOK();
delay(1500);
init();
changeflag=0;
useflag=0;
delete();
if(changeflag==0)
if(startflag)
{
enter_code(temp);
if(temp==12)
function12();
if(temp==15&
useflag==0)//按下确认键盘就要进行面膜确认
confirm();
if(conflag==1)//密码确认为正确
if(manflag)
manflag=0;
count=0;
display_you();
succeed_an();
init();
else
{
fail_an();
if(temp==14)
delete();
}
}
}
/***********显示enter***********/
voiddisplay_enter()
{
ucharnum;
wright_com(0x80);
for(num=0;
num<
17;
num++)
{
wright_data(table2[num]);
/***********显示manager***********/
voiddisplay_manager()
wright_com(0x80+0x40);
wright_data('
'
);
//显示的是空格
wright_data(table5[num]);
/***********显示进入修改程序***********/
voiddisplay_change()
wright_data(table7[num]);
/***********显示输入旧密码***********/
voiddisplay_old()
wright_data(table8[num]);
/***********显示修改成功***********/
voiddisplay_chOK()
wright_data(table10[num]);
aa=0;
timeflag=0;
/***********显示输入新密码***********/
voiddisplay_new()
wright_data(table9[num]);
useflag=1;
j=0;
/***********显示键盘锁定***********/
voiddisplay_lock()
wright_data(table12[num]);
/***********显示开启键盘***********/
voiddisplay_open()
wright_data(table13[num]);
/***********显示OK***********/
voiddisplay_OK()
wright_data(table3[num]);
/***********显示管理员***********/
voiddisplay_you()
wright_data(table11[num]);
/***********显示wrong***********/
voiddisplay_wrong()
wright_data(table4[num]);
/***********显示超时***********/
voiddisplay_time()
wright_data(table6[num]);
/*********删除最后一个*********/
voiddelete()
j--;
wright_com(0x80+0x40+j);
//确定删除对象
wright_data('
//显示空格即为删除
save[j]=0;
//删除后数据清零
//为下次输入数据时写好位置,必须是在最后一位后面
/**********对各位变量进行复位************/
voidreset()
display_enter();
//擦出屏幕上的显示
save[num]=0;
//对输入的数据进行清零
//下次再输入时可以有从起始位置输入
conflag=0;
voidreset1()
display_old();
/************输入密码正确进行响应***************/
voidsucceed_an()
if(lockflag)
lockflag=0;
manflag=0;
count=0;
display_you();
delay(1500);
else
light=0;
//灯亮
display_OK();
delay(4000);
light=1;
//灯灭
/**********输入密码错误进行响应***********/
voidfail_an()
light1=0;
display_wrong();
alarm();
light1=1;
lockkey();
/*********发出警报声**********/
voidalarm()
sounder();
/***********错误三次锁键盘************/
voidlockkey()
count++;
if(count==3)
lockflag=1;
display_lock();
/***********输入密码并在屏幕上显示星号************/
voidenter_code(uchart)
timeflag=1;
if(t>
=0&
t<
10&
j<
6)
if(j==0)
wright_com(0x80+0x40);
//第一输入时要先写入地址指令,否则无法显示
wright_data('
*'
else
//不是第一个输入则不用再写地址
save[j++]=t;
//保存输入的数据
/*********校对密码以确定是不是正确的***********/
voidconfirm()
{
uintk;
for(k=0;
k<
k++)
if(manflag==1)
if(password1[k]!
=save[k])//对数组中的内容进行逐一比较,一旦有数据不对马上退出循环
break;
if(Random_Read(k)!
if(k==6)//要是条件退出的话要说明六个数全对密码
conflag=1;
//进行标志密码正确
changeflag=1;
/********中断服务程序**********/
voidtimer()interrupt1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
//重装初值
if(timeflag)
aa++;
if(aa>
=300)//十秒到了
aa=0;
//清零可以方便下次再使用
display_time();
light1=0;
timeflag=0;
alarm();
delay(1000);
light1=1;
lockkey();
/*******初始化***********/
voidinit()
/**********定时器初始化*********/
TMOD=1;
TH0=(6553
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子 密码锁