打印
[应用相关]

(分享)基于STM32单片机的电子密码锁设计

[复制链接]
597|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2022-5-12 09:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一.硬件方案
本设计采用STM32F103C8T6单片机作为主控芯片,结合外围的矩阵按键输入、LCD1602液晶显示、报警、开锁等电路模块实现开锁、上锁、报警、密码更改等功能,设计了一款可以多次修改密码并且具有报警功能的液晶显示电子密码锁。
主要由STM32单片机+最小系统+LCD1602液晶显示模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+矩阵键盘模块+AT24C02芯片模块;如图:



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

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



(2)PCB图如下:



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


使用特权

评论回复
沙发
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只是做基本时钟,不涉及外面其它硬件,

使用特权

评论回复
5
Bblythe| | 2022-10-7 18:21 | 只看该作者

这么简单,那么程序员大概率就要失业了

使用特权

评论回复
6
童雨竹| | 2023-6-1 07:18 | 只看该作者

单片机一般都有内部程序区和数据区

使用特权

评论回复
7
Pulitzer| | 2023-6-1 08:21 | 只看该作者

机器容易EMI辐射超标的屏和摄像头

使用特权

评论回复
8
公羊子丹| | 2023-6-1 09:24 | 只看该作者

AD功能禁用掉,再配置切换为带下降沿触发的外部中断触发脚

使用特权

评论回复
9
公羊子丹| | 2023-6-1 10:17 | 只看该作者

只要内存占用量不超过 256.0 就可以用 small 模式编译

使用特权

评论回复
10
Wordsworth| | 2023-6-1 11:20 | 只看该作者

主从定时器门控的方式

使用特权

评论回复
11
Uriah| | 2023-6-1 12:23 | 只看该作者

如果make_youtiao()这个函数执行的很快并可以立即返回

使用特权

评论回复
12
万图| | 2023-6-1 14:19 | 只看该作者

电源电压处于1.6V到5.5V之间

使用特权

评论回复
13
Uriah| | 2023-6-1 15:22 | 只看该作者

任何外设都需要时钟才能启动

使用特权

评论回复
14
帛灿灿| | 2023-6-1 17:18 | 只看该作者

一种了解状态变化的简单方法

使用特权

评论回复
15
Bblythe| | 2023-6-1 18:21 | 只看该作者

B写好函数之后,A只能使用B声明的函数名来使用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1443

主题

4019

帖子

6

粉丝