一.硬件方案
本设计采用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);
- }
- }
-
-
- }
复制代码
|