基于单片机的数字密码锁设计Word格式文档下载.docx
《基于单片机的数字密码锁设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字密码锁设计Word格式文档下载.docx(13页珍藏版)》请在冰点文库上搜索。
![基于单片机的数字密码锁设计Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/1d24f68d-0d02-45b7-ad72-0bb986ee3668/1d24f68d-0d02-45b7-ad72-0bb986ee36681.gif)
如图4所示。
图4
5、数字密码锁的完整原理图
6、元器件列表
序号
器件名称
参数
数量
1
USB座
2
USB线
3
双排针
(2)
4
跳帽
5
104电容
0.1uF
6
LED灯
7
电阻
2K
8
STC89C52
9
晶振
12MHz
10
电容
20pF
11
复位键
12
10K
13
蜂鸣器
14
三极管9015
15
330
16
16针座
17
MAX232
18
单排针(5)
19
按键
20
单排针(3)
21
22
4位LED数码管
23
4.7K
24
三、数字密码锁的软件设计
1、密码锁设计的程序流程图
系统初始化
2、源程序
#include<
reg52.h>
#include<
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
/*0123456789灭fn口_gd二全亮Pe*/
ucharcodeDuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x8e,0xc8,0x9c,0xf7,0x90,0xa1,0xfd,0x00,0x8c,0x86};
//共阳
ucharcodeWeiMa[]={0x7f,0xbf,0xdf,0xef};
//位码
voiddelay_50us(uintt);
ucharxianshi[]={14,14,14,14};
unsignedcharpw[4]={8,8,8,8};
unsignedcharpwin[4]={0,0,0,0};
bitupdataflag;
bitpwflag;
//密码正确
ucharcount;
//密码位计数
voiddisplay(uchar*point);
voiddelayaj();
voiddelay();
voidbijiao(void);
unsignedcharkeyscan(void);
voidanjian_xianshi();
voidmain()
{
count=0;
updataflag=0;
pwflag=0;
while
(1){
anjian_xianshi();
display(xianshi);
}
voiddelay(uintz)
{
ucharj=244;
for(;
z>
0;
z--)while(--j);
voiddelay_50us(uintt)
ucharj;
for(;
t>
0;
t--)
for(j=19;
j>
j--)
;
voiddelayaj(ucharddd)
uchardd;
for(dd=0;
dd<
ddd;
dd++)
voiddisplay(uchar*point)
unsignedchari=0;
for(i=0;
i<
4;
i++)
{
P2=WeiMa[i];
//取位
P0=DuanMa[*(point+i)];
delay_50us(20);
P0=0xFF;
//消除重影
P2=0x0;
}
voidbijiao(void)
unsignedcharj,aa;
aa=0;
for(j=0;
j<
j++)
if(pw[j]==pwin[j])
{
aa++;
if(aa==4)
pwflag=1;
}
}
else
{pwflag=0;
j=4;
if(count<
4)//密码小于4位,直接显示OFF
{pwflag=0;
count=4;
if(pwflag==1)//正确显示ON
{xianshi[0]=10;
xianshi[1]=0;
xianshi[2]=12;
xianshi[3]=10;
else
//显示off
xianshi[2]=11;
xianshi[3]=11;
unsignedcharkeyscan(void)
unsignedcharkeyvalue;
P3=0x7F;
switch(P3)
case0x7E:
keyvalue=1;
break;
case0x7D:
keyvalue=2;
case0x7B:
keyvalue=3;
case0x77:
keyvalue=4;
default:
keyvalue=17;
if(keyvalue==17)
{
P3=0xBF;
switch(P3)
case0xBE:
keyvalue=5;
case0xBD:
keyvalue=6;
case0xBB:
keyvalue=7;
case0xB7:
keyvalue=8;
default:
if(keyvalue==17)
{
P3=0xDF;
switch(P3)
case0xDE:
keyvalue=9;
case0xDD:
keyvalue=10;
case0xDB:
keyvalue=11;
case0xD7:
keyvalue=12;
default:
}
if(keyvalue==17)
{
P3=0xEF;
switch(P3)
case0xEE:
keyvalue=13;
case0xED:
keyvalue=14;
case0xEB:
keyvalue=15;
case0xE7:
keyvalue=16;
default:
}
}
}
returnkeyvalue;
voidanjian_xianshi()
{ucharn,j;
n=keyscan();
if(n!
=17)
{if(1<
=n&
&
n<
=8)
if(count<
4)
{xianshi[count]=13;
if(updataflag==1)//按下修改密码键
pw[count]=n;
else
pwin[count]=n;
count++;
delay(350);
elseif(n==14)//确认密码键
if(updataflag==0)
bijiao();
else
{
xianshi[0]=15;
//good
xianshi[1]=13;
xianshi[2]=13;
xianshi[3]=16;
delayaj(1000);
updataflag=0;
elseif(n==15)//重新输入键
for(j=0;
xianshi[j]=14;
pwin[0]=0;
pwin[1]=0;
pwin[2]=0;
pwin[3]=0;
elseif(n==16&
pwflag==1)//重设密码键
{updataflag=1;
xianshi[j]=18;
count=0;
pwin[0]=0;
四.课程设计总结
为了能够更好地完成这次课程设计的任务,我通过不同的渠道学习课
题相关的一些知识,这是我课堂上无法学到的,在这短暂的时间里不仅
让我对学过的东西有了很多的巩固,同时也对单片机这一门课程有了
更大的兴趣。
作为一名电子信息工程专业的大三学生,单片机作为我们最主要的
专业课之一,在这课程设计后我们发现自己在一点一滴的努力对单片机
的兴趣在增加,我觉得这次课程设计对我们来说非常重要,虽然过去从
未用过它,但是学习过程中带着问题去学我们发现效率很高,这是我们
课程设计的又一个收获。
五.指导教师评语
成绩指导教师签名