基于51单片机密码锁设计
(仿真+程序+设计报告)
功能介绍
具体功能:
1.密码为六位数字,有键按下,LCD1602就会显示出字符 “*”;
2.当用户键入正确密码后,再按确认键,便会开锁;
3.数字与数字之间输入的间隔时间为最长30秒;
4.当用户键入错误密码时,系统就会报警,由扬声器发出报警声,连续三次错误就会被锁定;
演示视频:
基于51单片机密码锁—六位密码LCD1602显示
添加图片注释,不超过 140 字(可选)
程序
/*******************************
*
* 液晶字符显示函数
*
********************************************/
#include <AT89X52.h>
#include "液晶.h"
#include "function.h"
#include "fun_char.h"
#define uchar unsigned char
#define uint unsigned int
extern uchar mydata[6];
extern uchar testdata[6];
uchar code errorchar[]="PASSWORDERROR";
uchar code differentchar[]="it'sdifferent";
uchar code againchar[]="INPUTAGAIN!";
uchar code okchar[]="PASSWORDOK!";
uchar code lockchar[]="KEYISLOCK";
uchar code resetchar[]="NEWPASSWORD";
uchar code initchar[]="INPUTPASSWORD";
/*******************************************
*函数名称:delayms( ) 延时函数
*函数作用:延时时间 t ms*********************************************/
void delayms(uint t)//
{uint i,j;for(i=0;i<t;i++)for(j=0;j<110;j++);
}
/*******************************************
*函数名称:init_char( ) 初始化字符显示
*函数作用:系统启动后,初始化字符显示,并读取密码值
*********************************************/
void init_char() reentrant
{uchar i;lcd_wcmd(0x01);//首先要清屏delayms(10);for(i=0;i<6;i++){mydata[i]=0;}/*// 非常重要。。。。忘记密码,打开这个地方,系统会重新设置初始密码。。012345for(i=0;i<6;i++) // 这个部分是向存储器中写密码的,也就是如果你忘记密码了,可以通过这个地方写入新的密码{testdata[i]=i;//初始密码为012345}delayms(10);ISendStr(AT24C02,0, &testdata[0],6); //读取 默认密码已经保存了,全为000,000delayms(10); for(i=0;i<6;i++){testdata[i]=0;//初始密码为,012345} *///初始化字符 for(i=0;i<13;i++){if(i<5){lcd_pos(i+2);}else{ lcd_pos(i+3);}lcd_wdat(*(initchar+i));}//INPUT PASSWORDdelayms(10); IRcvStr(AT24C02,0, &testdata[0],6); //读取 默认密码已经保存了,全为000,000delayms(10);}
/*******************************************
*函数名称:error_char( ) 错误提示字符显示
*函数作用:当输入的密码与存储器中的密码不一致时,提示报错
********************************************/
void error_char()
{uchar i=0;lcd_wcmd(0x01);//首先要清屏delayms(100);for(i=0;i<13;i++){if(i<8){lcd_pos(i+1);}else{lcd_pos(i+2);}lcd_wdat(*(errorchar+i));}
}
/*******************************************
*函数名称:different_char( ) 密码不同提示字符显示
*函数作用:当设置密码时,如果两次输入的通过,则提示输入字符不同
*********************************************/
void different_char()
{uchar i=0;lcd_wcmd(0x01);//首先要清屏delayms(100);for(i=0;i<13;i++){if(i<4){lcd_pos(i+1);}else{lcd_pos(i+2);}lcd_wdat(*(differentchar+i));}
}
/*******************************************
*函数名称:again_char( ) 再次输入密码
*函数作用:当设置密码时,第一次输入密码后,提示再次输入密码
*********************************************/
void again_char()
{uchar i=0;lcd_wcmd(0x01);//首先要清屏delayms(100);for(i=0;i<11;i++){if(i<5){lcd_pos(i+2);}else{ lcd_pos(i+3);}lcd_wdat(*(againchar+i));}}
/*******************************************
*函数名称:ok_char( ) 输入密码正确提示函数
*函数作用:输入密码正确,提示PASSWORD OK
*********************************************/
void ok_char()
{uchar i=0;lcd_wcmd(0x01);//首先要清屏delayms(100);for(i=0;i<11;i++){if(i<8){lcd_pos(i+2);}else{lcd_pos(i+3);}lcd_wdat(*(okchar+i));}
}
/*******************************************
*函数名称:lock_char( ) 系统锁定提示字符
*函数作用:当输入密码错误次数达到3次时,开始锁键盘
*********************************************/
void lock_char()
{uchar i=0;lcd_wcmd(0x01);//首先要清屏delayms(100);for(i=0;i<9;i++){if(i<3){lcd_pos(i+3);}else if(i<5){lcd_pos(i+4);}else{lcd_pos(i+5);}lcd_wdat(*(lockchar+i));}
}
/*******************************************
*函数名称:reset_char( ) 设定新的密码
*函数作用:当设定新的密码时,提示NEW PASSWORD
*********************************************/
void reset_char()
{uchar i=0;lcd_wcmd(0x01);//首先要清屏delayms(100);for(i=0;i<11;i++)//这里出现了问题的{if(i<3){lcd_pos(i+2);}else{lcd_pos(i+3);}lcd_wdat(*(resetchar+i)); }
}
硬件设计
使用元器件:
单片机:AT89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
添加图片注释,不超过 140 字(可选)
流程图:
设计资料
01仿真图
本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!
添加图片注释,不超过 140 字(可选)
02程序
本设计使用Keil5版本编程设计!具体如图!
添加图片注释,不超过 140 字(可选)
03设计报告
五千字设计报告,具体如下!
添加图片注释,不超过 140 字(可选)
04设计资料
资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件 、设计报告、流程图等。具体内容如下,全网最全! !
可以关注下方公众号!
点赞分享一起学习成长。