基于51单片机的电子密码锁设计与实现
一.硬件方案
本系统由STC89C52单片机、4*4矩阵键盘,蜂鸣器,复位电路和晶振电路、继电器等组成,4*4键盘主要用于密码的输入和修改,蜂鸣器报警,复位电路和晶振电路与STC89C52单片机组成单片机最小系统。它具有设置、修改6位用户密码、输错报警、密码错误报警等功能。
整体电路主要由51单片机最小系统,LCD1602液晶显示模块,蜂鸣器模块,LED指示灯模块,继电器驱动模块,矩阵键盘模块,AT24C02芯片模块;原理图如图:
PCB及仿真图如下:
二.设计功能
三.软件设计
主程序源码
/******************主程序**********************/
void main()
{
static uint value ;
password_chushifa();
init_1602();
UartInit();
time_init(); //定时器初始化
read_24c02_8(6,0,password);
beiguan = 0;
while(1)
{
if(flag_password_cichu1 < 3) //错误三次按键不能用了
{
key(); //按键函数
if(key_can < 20)
{
beep =0;
if(beiguan == 0)
{
if(menu_1 == 0)
key_with(); //按键处理函数
xiugai_password(); //修改密码
}
else
beiguan = 0;
flag_time = 0;
delay_1ms(300);
beep =1;
}
}
if(flag_200ms == 1)
{
flag_200ms = 0;
if(beiguan == 0) //延时关闭锁20秒关闭背光
{
flag_time ++;
if(flag_time >= 5 * 30) //30秒
{
flag_time = 0;
beiguan = 1; //关闭背光
}
}
if(relay == 0) //延时关闭锁
{
flag_guan++;
if(flag_guan >= 5 * 10) //10秒
{
flag_guan = 0;
relay = 1; //关闭密码锁
}
}else
flag_guan = 0;
if(flag_password_cichu1 >= 3)
{
value ++; //200ms
beep = ~beep; //蜂鸣器报警
if(value >= 5 * 60) //1分钟
{
value = 0;
beep = 1;
flag_password_cichu1 = 0;
}
}
}
delay_1ms(1);
}
}
/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{
static uchar value;
TH0 = 0x3c;
TL0 = 0xb0; // 50ms 12M
value ++;
if(value % 4 == 0)
{
flag_200ms = 1;
}
}
资料链接:https://pan.baidu.com/s/1Kayb5F75l42vpLBL90UOkQ?pwd=mnst
提取码:mnst