一.硬件方案
本设计采用STM32F103C8T6单片机作为主控芯片,结合外围的矩阵按键输入、LCD1602液晶显示、报警、开锁等电路模块实现开锁、上锁、报警、密码更改等功能,设计了一款可以多次修改密码并且具有报警功能的液晶显示电子密码锁。
主要由STM32单片机+最小系统+LCD1602液晶显示模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+矩阵键盘模块+AT24C02芯片模块;如图:
二.设计功能
(1)采用矩阵键盘输入、1602液晶显示、AT24C02实现存储的密码掉电保存、继电器模拟开锁。
(2)六位数字密码(0-9),更改密码时需要先验证初始密码,初始密码正确,输入两次新密码,两次输入一致即更改密码成功。
(3)开锁时密码输入错误,声光报警提示。
(4)如修改的密码忘记,可以通过管理员重置。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)PCB图如下:
四.软件设计
(1)程序流程图
(2)主程序源码
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计算一次速度的值,并显示
.....
// flash1[0]=100;
//STMFLASH_Write(ADDR_hum_up_1,(u16*)flash1,sizeof(flash1));
//STMFLASH_Write(ADDR_hum_up_2,(u16*)flash2,sizeof(flash2));
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);
}
}
}
如需资料请关注公众号“单片机实例设计”,首页回复“STM32密码锁”获取资料;
版权声明:本文为CSDN博主「单片机实例设计」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/eletronicfish/article/details/120596997
暂无评论