单片机课程设计密码锁程序和仿真图Word文档格式.docx
- 文档编号:22523497
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:62.33KB
单片机课程设计密码锁程序和仿真图Word文档格式.docx
《单片机课程设计密码锁程序和仿真图Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计密码锁程序和仿真图Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
//位选码
uintkeyscan();
voiddelay(ucharz)//延时,ms级
{
uchary;
for(;
z>
0;
z--)
for(y=120;
y>
y--);
}
voidsetpw()//设置密码函数
keyscan();
uintkeyscan()//键盘扫描函数
P3=0xfe;
temp=P3;
temp=temp&
0xf0;
if(temp!
=0xf0)
{
delay(5);
//键盘去抖,最好ms以上,这里用了ms
temp=P3;
temp=temp&
if(temp!
{
count++;
//按键计数加
temp=P3;
switch(temp)
{
case0xee:
{
num=7;
if(count<
6)//六位密码,所以COUNT<
6
{
if(set==0)//设置密码键没有按下时
pwx[count]=num;
//存储按下的数字
else
pws[count]=num;
//设置密码键按下时,设置新密码
workbuf[count]=tabledu[11];
//相应位的数码管显示"
--"
不显示相应的数字,密码是保密的
}
}
break;
case0xde:
num=8;
6)//以下扫描键盘的原理差不多同上
{
if(set==0)
case0xbe:
num=9;
if(count<
6)
{
if(set==0)
pwx[count]=num;
else
pws[count]=num;
workbuf[count]=tabledu[11];
}
}
case0x7e:
//设置密码键按下
{
set=1;
//设置密码标志位置
P1_3=0;
//设置密码指示灯亮
workbuf[0]=0x00;
//数码管第一位不显示
workbuf[1]=0x00;
//......
workbuf[2]=0x00;
workbuf[3]=0x00;
workbuf[4]=0x00;
workbuf[5]=0x00;
count=-1;
//按键计数复位为-1
6)//密码没有设置完,继续设置密码
setpw();
//设置密码
}
}
while(temp!
=0xf0)//按键抬起检测
temp=P3;
temp=temp&
}
}
}
P3=0xfd;
case0xed:
num=4;
case0xdd:
num=5;
case0xbd:
num=6;
P3=0xfb;
{
case0xeb:
num=1;
case0xdb:
num=2;
case0xbb:
num=3;
P3=0xf7;
case0xd7:
num=0;
case0xe7:
num=20;
break;
//确定键按下检测
case0x77:
//复位键或者输入密码全部一次删除
P1_1=0;
//锁关
P1_3=1;
//密码设置指示灯灭
set=0;
//不设置密码
num=10;
//num复位
//COUNT复位
workbuf[0]=tabledu[10];
//第一位数码管不显示
workbuf[1]=tabledu[10];
//第二位数码管不显示
workbuf[2]=tabledu[10];
workbuf[3]=tabledu[10];
workbuf[4]=tabledu[10];
workbuf[5]=tabledu[10];
//......
P1_0=1;
//锁关
case0xb7:
//输入密码删除键(一位一位删除)
count--;
workbuf[count]=0x00;
//因确定键按下时,COUNT也会加,而确定键不是密码,所以这里是COUNT,而不是COUNT+1
//因确定键按下时,确定键不是密码,COUNT也会加,这里COUNT再自减
=-1)
return(num);
voidinit()//利用定时显示数码管
TMOD=0x01;
TH0=(65536-500)/200;
TL0=(65536-500)%200;
ET0=1;
EA=1;
TR0=1;
bitcompare()//密码比较函数
if((pwx[0]==pws[0])&
(pwx[1]==pws[1])&
(pwx[2]==pws[2])&
(pwx[3]==pws[3])&
(pwx[4]==pws[4])&
(pwx[5]==pws[5]))
rightflag=1;
else
rightflag=0;
return(rightflag);
voidmain()
uinti,j;
init();
P0=0;
P1_1=0;
//锁关
while
(1)
keyscan();
if(num==20)//如果确定键按下(修改密码和输入密码共用的确定键)
if(count==6)
if(set==1)//修改密码确定
workbuf[0]=0;
workbuf[1]=0;
workbuf[2]=0;
workbuf[3]=0;
workbuf[4]=0;
workbuf[5]=0;
else//输入密码确定
compare();
if(rightflag==1)//如果密码正确
P1_0=0;
//锁开
P1_1=1;
workbuf[0]=tabledu[8];
//数码管第一位显示"
8"
workbuf[1]=tabledu[8];
//数码管第二位显示"
workbuf[2]=tabledu[8];
workbuf[3]=tabledu[8];
workbuf[4]=tabledu[8];
workbuf[5]=tabledu[8];
//......
else
P1_1=0;
//锁仍然是关
workbuf[0]=0X71;
F"
workbuf[1]=0X71;
workbuf[2]=0X71;
workbuf[3]=0X71;
workbuf[4]=0X71;
workbuf[5]=0X71;
for(i=0;
i<
1000;
i++)//密码错误报警
for(j=0;
j<
80;
j++);
Beep=~Beep;
break;
else//若输入的密码位数不为位时
P1_1=0;
//锁仍然关
workbuf[0]=0X71;
workbuf[1]=0X71;
workbuf[2]=0X71;
workbuf[3]=0X71;
workbuf[4]=0X71;
workbuf[5]=0X71;
for(i=0;
i++)
for(j=0;
Beep=~Beep;
}
voidtimer0()interrupt1//显示数码管
uchari;
for(i=0;
6;
i++)
P0=workbuf[i];
P2=tablewe[i];
P0=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 密码锁 程序 仿真
![提示](https://static.bdocx.com/images/bang_tan.gif)