基于51单片机的电子密码锁设计
由AT89S52单片机+AT24C02数据存储模块+按键模块+LCD1602显示+报警模块等构成,具体功能:1、输入密码,且输入的密码显示在液晶显示屏上;2、按下“DorBell”后,会响起门铃声;3、初始密码为“1234”,输入正确后,显示“OK”,并且LED灯闪烁,表示开门;4、输入密码错误后,显示“Eror”,三次输入错误后会报警;5、按下“DELE”,清除输入的密码;
wx供重浩:创享日记
对话框发送:密码锁
获取完整源码源文件+论文报告+原理图仿真源文件+视频等
由AT89S52单片机+AT24C02数据存储模块+按键模块+LCD1602显示+报警模块等构成,具体功能:
1、输入密码,且输入的密码显示在液晶显示屏上;
2、按下“DorBell”后,会响起门铃声;
3、初始密码为“1234”,输入正确后,显示“OK”,并且LED灯闪烁,表示开门;
4、输入密码错误后,显示“Eror”,三次输入错误后会报警;
5、按下“DELE”,清除输入的密码;
随着电子技术的不断发展和电子产品的智能化进步,电子密码锁在市场各领域的运用也变得越来越广泛,对于电子密码锁相关性能的研究也具有了极其重要的意义。本文提出的基于AT89S52单片机电子密码锁系统,采用了单片机AT89S52作为系统核心组件,并通过电源电路、矩阵电路、LCD显示电路以及报警电路构成密码锁系统,实现了安全、便捷的密码锁读取功能,确保了密码锁的安全,具有较高的市场推广价值。
原理图
PCB图
仿真图
软硬件设计框图
设计任务书
电子密码锁在当前市场运用较为广泛,其主要通过对外接密码输入来实现对系统或电路的控制,并进一步控制系统机械开关的操作。相关电子产品通过系统编程控制能够以电子密码锁的形式来实现系统的开关,尤其是对机械产品而言具有较高的安全性与可靠性。本文提出的电子密码锁系统设计主要以AT89C51单片机为基础,通过矩阵式键盘、LCD显示、蜂鸣器以及二极管等部件组成主系统。该系统设计编程方便、操作性强、具有较高的实用性,且耗能较低,在市场具有广阔的应用范围。
本设计采用了AT89C51单片机电子锁系统,进行初始化设置,启动密码锁功能,密码输入显示屏幕采用了LCD1602液晶显示屏。系统控制指令通过单片机进行实现,单片机根据实际操作情况分配部件工作内容,程序操作性强、方便简洁。在用户输入密码过程中,单片机将会采用矩阵按键布局模式记录当前输入密码,并将该密码与系统设置密码进行比对,若密码匹配则开启密码锁,若密码错误则需要用户按下删除键重新输入密码。当用户输入密码错误次数超过3次,电子密码锁将会自动锁定,需要用户切换管理员模式输入管理员密码才可解锁当前状态,并重新输入解锁密码。
部分源码
//按键扫描模块//
void Delay10ms(void)//延时函数//
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
void KeyDown(void)//键盘检测函数//
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f) //读取按键是否按下
{
Delay10ms(); //延时10ms进行消抖
if(GPIO_KEY!=0x0f) //再次检测键盘是否按下
{
//检测列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//检测行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<10)&&(GPIO_KEY!=0xf0))//按键松手检测
{
Delay10ms();
a++;
}
}
}
}
//*******************************************************************************************************************************
//数据处理模块//
void keysend(void)//键值传递//
{
switch(KeyValue)
{
case 0:{dwxs[now]='0';tempword[now]=0;now++;break;}
case 1:{dwxs[now]='1';tempword[now]=1;now++;break;}
case 2:{dwxs[now]='2';tempword[now]=2;now++;break;}
case 3:{dwxs[now]='3';tempword[now]=3;now++;break;}
case 4:{dwxs[now]='4';tempword[now]=4;now++;break;}
case 5:{dwxs[now]='5';tempword[now]=5;now++;break;}
case 6:{dwxs[now]='6';tempword[now]=6;now++;break;}
case 7:{dwxs[now]='7';tempword[now]=7;now++;break;}
case 8:{dwxs[now]='8';tempword[now]=8;now++;break;}
case 9:{dwxs[now]='9';tempword[now]=9;now++;break;}
case 11:{
upxs[12]='S';
upxs[13]='U';
upxs[14]='R';
upxs[15]='E'; break;
}
case 15:{
TR0=1; //定时器0打开
moshi=1; //模式1为门铃模式
KeyValue=16; break;//键值缓存清零
}
}
if(now==8) now=0; //只显示八位
}
void timer1() interrupt 3 //定时器1用于自动关门
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time1++;
if(time1==20)//一秒
{
time2++;
time1=0;
}
}
//**********************************************************************************************************************************
//主函数//
void main(void)//主函数
{
TMOD=0x10; //0001 0000//定时器1方式1,定时器0方式0
TH0=(8192-700)/32; //定时器0 700us 定时
TL0=(8192-700)%32;
TH1=(65536-50000)/256; //定时器1 50ms
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
shuchu=0; //门锁初始化
beep=0; //警报初始化
DoorBell=0; //门铃初始化
lcd_init(); //液晶初始化
while(1)
{
KeyDown(); //按键检测
keysend(); //数据传递
lcdxianshi(); //输入显示
sure(); //密码认证
condition_delete(); //按键清除
if(time2==4) //门锁打开后4秒关闭
{
shuchu=0;
time2=0;
delete(); //自动清除
TR1=0; //关闭定时器1
}
}
}
其余完整详见下载!
历时几个月,经过查阅无数的文献和多次的实验,本次毕设终于实现了预期目标,这对我这几年的努力是一个较好的检验和肯定,对于我以后的学习更是一份鼓舞和激励,在我看来,这对我的影响将超越毕设本身所具有的意义。这一切能够顺利的完成,首先不得不感谢所有的任课老师,正是有了他们的辛勤付出,才让我具备了扎实的理论基础,为毕设做好准备。其次,如果没有实验室各位同学的不计回报的帮助,我的毕设也绝不会进行的如此顺利。当然,最重要的是感谢我的指导老师,他在我有问题时替我答疑解惑,在我遇到困难时帮助我渡过难关,在我失败时不断鼓励我,在我成功时告诫我勿骄勿燥,正是他渊博的专业知识,身为人师的兢兢业业才成就了本次毕设的成功。最后感谢学校提供的平台和教诲。至此,再次感谢一切为本毕设成功有所帮助的每一个人,谢谢!
更多推荐
所有评论(0)