[应用相关] (分享)基于STM32单片机的电子密码锁设计

[复制链接]
1332|4
 楼主| jcky001 发表于 2022-5-12 09:27 | 显示全部楼层 |阅读模式
一.硬件方案
本设计采用STM32F103C8T6单片机作为主控芯片,结合外围的矩阵按键输入、LCD1602液晶显示、报警、开锁等电路模块实现开锁、上锁、报警、密码更改等功能,设计了一款可以多次修改密码并且具有报警功能的液晶显示电子密码锁。
主要由STM32单片机+最小系统+LCD1602液晶显示模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+矩阵键盘模块+AT24C02芯片模块;如图:

134246qdpi4zu70gw3jptt.png

二.设计功能
(1)采用矩阵键盘输入、1602液晶显示、AT24C02实现存储的密码掉电保存、继电器模拟开锁。
(2)六位数字密码(0-9),更改密码时需要先验证初始密码,初始密码正确,输入两次新密码,两次输入一致即更改密码成功。
(3)开锁时密码输入错误,声光报警提示。
(4)如修改的密码忘记,可以通过管理员重置。

三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:

134246q3lg1sy511s15ylx.png

(2)PCB图如下:

134246lj49tgw4tjp4e9w7.png

四.软件设计
(1)程序流程图

134246zhc2vh4vm11t161v.png
 楼主| jcky001 发表于 2022-5-12 09:28 | 显示全部楼层
(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);
  •                 }
  •         }
  • }

复制代码


Pulitzer 发表于 2022-10-7 08:21 | 显示全部楼层

HSI、HSE以及PLLCLK经过分频或者倍频作为系统时钟SYSCLK来使用。
Uriah 发表于 2022-10-7 15:22 | 显示全部楼层

TIM4只是做基本时钟,不涉及外面其它硬件,
Bblythe 发表于 2022-10-7 18:21 | 显示全部楼层

这么简单,那么程序员大概率就要失业了
童雨竹 发表于 2023-6-1 07:18 | 显示全部楼层

单片机一般都有内部程序区和数据区
Pulitzer 发表于 2023-6-1 08:21 | 显示全部楼层

机器容易EMI辐射超标的屏和摄像头
公羊子丹 发表于 2023-6-1 09:24 | 显示全部楼层

AD功能禁用掉,再配置切换为带下降沿触发的外部中断触发脚
公羊子丹 发表于 2023-6-1 10:17 | 显示全部楼层

只要内存占用量不超过 256.0 就可以用 small 模式编译
Wordsworth 发表于 2023-6-1 11:20 | 显示全部楼层

主从定时器门控的方式
Uriah 发表于 2023-6-1 12:23 | 显示全部楼层

如果make_youtiao()这个函数执行的很快并可以立即返回
万图 发表于 2023-6-1 14:19 | 显示全部楼层

电源电压处于1.6V到5.5V之间
Uriah 发表于 2023-6-1 15:22 | 显示全部楼层

任何外设都需要时钟才能启动
帛灿灿 发表于 2023-6-1 17:18 | 显示全部楼层

一种了解状态变化的简单方法
Bblythe 发表于 2023-6-1 18:21 | 显示全部楼层

B写好函数之后,A只能使用B声明的函数名来使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1654

主题

5772

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部