一.硬件方案
本设计主要由STM32单片机+最小系统+LCD1602液晶显示模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+矩阵键盘模块+AT24C02芯片模块;如图:
二.设计功能
1.采用矩阵键盘输入、1602液晶显示、AT24C02实现存储的密码掉电保存、继电器模拟开锁。
2.六位数字密码(0-9),更改密码时需要先验证初始密码,初始密码正确,输入两次新密码,两次输入一致即更改密码成功。
3.开锁时密码输入错误,声光报警提示。
4.如修改的密码忘记,可以通过管理员重置。
三.设计原理图
1.原理图主要采用AD软件进行设计,如图:
2.PCB图如下:
四.软件设计
1.主程序源码
int main(void)
{
BEEP_Init();
LED_Init();
delay_init();
LCD1602_Init();
KEY_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
TIM2_Int_Init(4999,7199);
TIM3_Int_Init(29,35999);
TIM4_Int_Init(4999,7199);//每500ms计算一次速度的值,并显示
.....
TIM_Cmd(TIM3, ENABLE);
STMFLASH_Read(ADDR_hum_up_1,(u16*)flash1,sizeof(flash1));
setpass_flag=flash1[0];
STMFLASH_Read(ADDR_hum_up_2,(u16*)flash2,sizeof(flash2));
for(j=0;j<6;j++)
{
setpassword1[j]=flash2[j];
}
j=0;
open_flag=1;
pass_shuru=0;
while(1)
{
mound();
if(down_flag==2)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
if(down_flag==5)
{
down_flag=0;
if(setpass_flag11==2)
{
TIM_Cmd(TIM2, DISABLE);
}
else
{
open_flag=1;
pass_shuru=0;
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
TIM_Cmd(TIM2, DISABLE);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}
}
if(errtime_flag==2)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
if(errtime_flag==3)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
if(errtime_flag==4)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
if(errtime_flag==5)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
if(errtime_flag==6)
{
open_flag=1;
pass_shuru=0;
errtime_flag=0;
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
TIM_Cmd(TIM4, DISABLE);
}
}
}
链接:https://pan.baidu.com/s/1n37IfldC7D0oecjxW5K00A?pwd=yjv2
提取码:yjv2