目录
1.课题意义
51单片机密码锁课题的意义如下:
1. 实践和应用能力提升:通过设计和开发51单片机密码锁,学生可以锻炼自己的实践能力和应用能力。他们需要理解密码锁的原理和工作方式,并将其应用在具体的项目中,提高问题解决和创新思维能力。
2. 综合学科知识的应用:51单片机密码锁涉及相关的电子电路、嵌入式系统和编程知识等多个学科领域。学生在课题中需要综合运用这些知识来设计和实现密码锁,从而加深对这些学科的理解和应用能力。
3. 学习项目管理和团队合作:完成51单片机密码锁课题需要进行项目计划、资源管理和团队协作等工作。学生可以通过这个课题学习项目管理技能和团队合作精神,提高自己的组织能力和沟通能力。
4. 创造力和设计思维培养:课题要求学生设计密码锁的外观、功能和用户交互界面等。通过课题,学生可以培养自己的创造力和设计思维,探索不同的设计方案,并将其实现在具体的产品中。
5. 理论与实践的结合:51单片机密码锁课题将理论知识与实际应用相结合。学生需要将课堂上学到的理论知识转化为实际的设计和实现,培养在真实场景中应用理论知识的能力。
6. 提高安全意识:密码锁涉及到安全和保密性的问题。通过设计和研究密码锁,学生可以提高对信息安全和保护隐私的意识,了解密码保护机制的原理和应用。
总之,51单片机密码锁课题有助于学生综合运用多个学科领域的知识和技能,提高实践能力和创新思维能力。同时,它也培养了学生的项目管理和团队合作能力,并提高对安全意识和信息保护的认识。最重要的是,这个课题为学生提供了一个实践和应用学习的机会,帮助他们将理论知识应用到实际项目中。
2.实现功能
本次实现的功能如下:
初始密码:123456 密码位数:6位
注意:掉电后,所设密码会丢失,重新上电时,密码恢复为原始的123456
与P1.0相连的8位发光LED点亮代表锁被打开;熄灭代表锁被锁上
程序功能:
1、开锁:
下载程序后,直接按六次数字123456(即代表密码123456),LED亮,锁被打开,输入密码时,
六位数码管依次显示小横杠。
2、更改密码:
只有当开锁(LED亮)后,该功能方可使用。
首先按下更改密码键,然后设置相应密码,此时六位数码管会显示设置密码对应
的数字。最后设置完六位后,按下确认密码更改,此后新密码即生效。
3、重试密码:
当输入密码时,密码输错后按下重试键,可重新输入六位密码。
当设置密码时,设置中途想更改密码,也可按下此键重新设置。
4、关闭密码锁:
按下上锁按键即可将打开的密码锁关闭。
功能测试:输入原始密码123456---按下更改密码按键---按0到9设置密码---按确认键
密码更改---按上锁按键关闭密码锁---输入新的密码打开密码锁
仿真图如下所示
主函数代码:
void main(void)
{
InitI2C(); //初始化
TMOD = 0x01;
TH0 = (65535-2000)/256;
TL0 = (65535-2000)%256;
EA=1;
ET0=1;
TR0=1;
WritePassWord_Ini();
ReadPassWord();
//if(PassWord[0]==0xff) WritePassWord_Ini();
while(1)
{
keyscan();
shumima();
yanzheng();
if(allow) //验证完后,若allow为1,则开锁
{
Lock=0;GLED=0;RLED=1;
if(!genggai) wanbi=0;
}
else
{
Lock=1;GLED=1;RLED=0;
if(wanbi)
{
delay(500);
beep=0;delay(500);beep=1;delay(500);
beep=0;delay(100);beep=1;delay(200);
beep=0;delay(100);beep=1;delay(200);
beep=0;delay(100);beep=1;delay(200);
beep=0;delay(100);beep=1;delay(200);
beep=0;delay(100);beep=1;delay(200);
beep=0;delay(100);beep=1;
wei=0;wanbi=0;allow=0;
a=16;b=16;c=16;d=16;e=16;f=16;
new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
}
}
if(genggai) //当S16更改密码键被按下,genggai会被置一
{
if(allow) //若已经把锁打开,才有更改密码的权限
{
while(!wanbi) //当新的六位密码没有设定完,则一直在这里循环
{
delay(20);
keyscan();
shumima();
if(retry|close) //而当探测到重试键S18或者关闭密码锁键S19被按下时,则跳出
{
wanbi=1;
break;
}
}
}
}
if(ok) //更改密码时,当所有六位新密码均被按下时,可以按下此键,结束密码更改
{ //其他时间按下此键无效
ok=0; wei=0;Lock=1;GLED=1;RLED=0;
genggai=0;
PassWord[0]=new1;PassWord[1]=new2;PassWord[2]=new3; //此时,旧的密码将被代替
PassWord[3]=new4;PassWord[4]=new5;PassWord[5]=new6;
WritePassWord();
wei=0;wanbi=0;allow=0;
a=16;b=16;c=16;d=16;e=16;f=16;
new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
}
if(retry) //当重试按键S18被按下,retry会被置位
{
retry=0; wei=0;wanbi=0;
a=16;b=16;c=16;d=16;e=16;f=16;
new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
}
if(close) //当关闭密码锁按键被按下,close会被置位
{
close=0;genggai=0;//所有变量均被清零。
wei=0; wanbi=0;
allow=0;
Lock=1;GLED=1;RLED=0;
a=16;b=16;c=16;d=16;e=16;f=16;
new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
}
}
}
3.功能演示视频
密码锁功能演示