基于单片机的密码锁.docx

上传人:b****8 文档编号:9192403 上传时间:2023-05-17 格式:DOCX 页数:16 大小:17.45KB
下载 相关 举报
基于单片机的密码锁.docx_第1页
第1页 / 共16页
基于单片机的密码锁.docx_第2页
第2页 / 共16页
基于单片机的密码锁.docx_第3页
第3页 / 共16页
基于单片机的密码锁.docx_第4页
第4页 / 共16页
基于单片机的密码锁.docx_第5页
第5页 / 共16页
基于单片机的密码锁.docx_第6页
第6页 / 共16页
基于单片机的密码锁.docx_第7页
第7页 / 共16页
基于单片机的密码锁.docx_第8页
第8页 / 共16页
基于单片机的密码锁.docx_第9页
第9页 / 共16页
基于单片机的密码锁.docx_第10页
第10页 / 共16页
基于单片机的密码锁.docx_第11页
第11页 / 共16页
基于单片机的密码锁.docx_第12页
第12页 / 共16页
基于单片机的密码锁.docx_第13页
第13页 / 共16页
基于单片机的密码锁.docx_第14页
第14页 / 共16页
基于单片机的密码锁.docx_第15页
第15页 / 共16页
基于单片机的密码锁.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的密码锁.docx

《基于单片机的密码锁.docx》由会员分享,可在线阅读,更多相关《基于单片机的密码锁.docx(16页珍藏版)》请在冰点文库上搜索。

基于单片机的密码锁.docx

基于单片机的密码锁

基于52单片机的密码锁程序

C语言版

/*初始密码为四位,1,2,3,4如果想修改密码的长度,可将程序中的密码长度4改为你想设置的长度值

初始密码1,2,3,4也可在函数init_main()函数中修改

密码锁上电后,锁合灯亮,初始密码为1,2,3,4。

当输入的四位密码按确定键后,密码正确时锁开灯亮,锁合灯灭。

当不正确时,锁合灯继续亮,蜂鸣器短报警

累计有三次密码输入错误时,蜂鸣器一直叫,键盘会自动锁定

在输入密码的过程中可以按取消键重新输入密码

在锁开的状态下按下修改密码键可以修改密码,红灯闪三下后可以输入四位新密码,然后按确定键修改成功,锁合灯亮

若输入的新密码不为四位,红灯快闪三下,提醒没有修改成功,可以重新输入四位新密码

--------------------------------------------------------------------------------------------------------------------------------------------------------*/

/*--------------------------------------------密码锁硬件简要说明-----------------------------------------------------------------------------

黄灯接P2.7,绿灯接P2.5,蓝灯接P2.3,红灯P2.1,蜂鸣器接P2.0都是低电平时工作

键盘接法行P3.2P3.1P3.0P3.3

列P3.4P3.5P3.6P3.7

键盘分布

123确定

456取消

789修改密码

0

---------------------------------------------------------------------------------------------------------------------------------------------------------*/

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcount;//密码位计数

ucharpw[4];//初始密码存储区

ucharpwbuf[4];//输入密码存储区

ucharselfdefinebuf[4];//自定义密码存储区

ucharerror_cnt;//错误次数计数器

bitenterflag;//确认键按下与否标志

bitpwflag;//密码正确与否标志

bitlast_pwflag;//前一次密码输入正确与否标志

sbitopen=P1^5;//锁开指示灯,绿灯。

低电平亮

sbitbeep=P2^3;//蜂鸣器,低电平叫

sbitred=P1^1;//红灯,低电平亮

sbitclose=P1^7;//锁合指示灯,黄色。

低电平亮

sbityouxiao=P1^3;//蓝灯,按键有效指示。

低电平亮

voidflashred_L(void);//闪红灯,表示可输入自定义密码

voidflashred_S(void);//快闪红灯,重新输入自定义密码

voidflashall(void);//三盏灯全亮,不能继续输入

/*键消抖延时函数*/

voiddelay(void)

{

uinti;

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

}

//蓝灯亮一下,再灭,用来表示按键按下有效

voidyouxiaoled()

{

youxiao=0;

delay();

youxiao=1;

}

//蜂鸣器短叫报警

voidbaojing()

{

beep=0;

delay();

beep=1;

delay();

beep=0;

delay();

beep=1;

}

/*键扫描函数*/

ucharkeyscan()//键盘扫描函数

{

uchartemp;

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay();//键盘去抖,

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{youxiaoled();//按键有效指示灯亮,即蓝灯亮

temp=P3;

switch(temp)

{

case0xee:

return1;break;

case0xde:

return2;break;

case0xbe:

return3;break;

case0x7e:

return11;break;//确定键11

}

while(temp!

=0xf0)//按键抬起检测

{

temp=P3;

temp=temp&0xf0;

}

}

elsereturn0;//无键按下返回0

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay();

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{youxiaoled();

temp=P3;

switch(temp)

{

case0xed:

return4;break;

case0xdd:

return5;break;

case0xbd:

return6;break;

case0x7d:

return12;break;//取消键12

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

elsereturn0;

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay();

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{youxiaoled();

temp=P3;

switch(temp)

{

case0xeb:

return7;break;

case0xdb:

return8;break;

case0xbb:

return9;break;

case0x7b:

return13;break;//重设密码键13

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

elsereturn0;

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay();

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{youxiaoled();

temp=P3;

switch(temp)

{

case0xe7:

return10;break;//数字0

default:

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

elsereturn0;

}

}

/*密码比较函数*/

bitpwcmp(void)

{

bitflag;

uchari;

for(i=0;i<4;i++)

{

if(pw[i]==pwbuf[i])

flag=1;

else

{

flag=0;

i=4;

error_cnt++;//错误次数加1

}

}

return(flag);

}

//初始化设置函数

voidinit_main()

{

count=0;//初始没有输入密码,计数器设为0

error_cnt=0;//错误次数归0

enterflag=0;//没有按下确认键

pwflag=0;//密码标志先置为0

last_pwflag=0;

close=0;//锁合灯亮,其它灯灭

open=1;

beep=1;

red=1;

/*假设内定密码为1234,修改初始密码可在这里改*/

pw[0]=1;

pw[1]=2;

pw[2]=3;

pw[3]=4;

}

//长闪红灯,表示可输入自定义密码

voidflashred_L(void)

{

red=0;

delay();

delay();

delay();

delay();

red=1;

delay();

delay();

delay();

delay();

red=0;

delay();

delay();

delay();

delay();

red=1;

delay();

delay();

delay();

delay();

red=0;

delay();

delay();

delay();

delay();

red=1;

}

//快闪红灯,重新输入自定义密码

voidflashred_S(void)

{

red=0;

delay();

delay();

red=1;

delay();

delay();

red=0;

delay();

delay();

red=1;

delay();

delay();

red=0;

delay();

delay();

red=1;

}

voidflashall(void)

{

beep=0;

open=0;

red=0;

delay();

delay();

beep=1;

open=1;

red=1;

}

/*主程序*/

voidmain()

{

ucharj,key;

uchartempkey;

init_main();

while

(1)

{

if(error_cnt<3)//错误次数小于3

{

key=keyscan();//调用键盘扫描函数

if(key>0&&key<=10)//用户输入密码

{

if(key==10)

key=0;

if(count<4)

{

pwbuf[count]=key;

count++;

}

}

elseif(key==11)//确认键按下

{

enterflag=1;//确认键按下

if(count==4)//只有输入4个密码后按确认键才作密码比较

{

delay();

pwflag=pwcmp();

}

else

{

pwflag=0;//否则直接pmflag赋0

error_cnt++;//错误次数加一

}

last_pwflag=pwflag;//前一次密码输入正确与否标志

enterflag=0;//标志位置回0

count=0;//密码位计数器清零

delay();

if(pwflag==1)

{open=0;close=1;red=1;beep=1;}//密码正确时,绿灯亮,其它灯灭

else

{open=1;close=0;red=1;baojing();}//密码错误时,黄灯亮并短报警

}

elseif(key==12)//取消键按下

{

count=0;//密码计数清零

}

elseif(key==13)//重设密码键按下

{open=1;

if(last_pwflag==1)//判断上次用户输入密码正确与否

{

flashred_L();//闪红灯表示可输入自定义密码

while(last_pwflag)

{

tempkey=keyscan();

if(tempkey>0&&tempkey<=10)//用户输入密码

{

if(tempkey==10)

tempkey=0;

if(count<4)

{

selfdefinebuf[count]=tempkey;//保存用户自定义密码

count++;

}

}

elseif(tempkey==11)//确认键按下

{

enterflag=1;

if(count==4)

{close=0;open=1;beep=1;

for(j=0;j<4;j++)

pw[j]=selfdefinebuf[j];//修改密码存储数组

last_pwflag=0;

enterflag=0;

count=0;

}

else//如果输入数据不足四位或大于四位,输入作废,重新输入

{

flashred_S();//快闪红灯,重新输入自定义密码

count=0;//密码计数清零

}

}

}

}

}

}

else

{

while

(1)//错误次数超过三次,停止工作蜂鸣器一直叫

beep=0;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2