项目方案: (1)、刷取指纹,指纹识别正确,马上开门 (2)、蜂鸣器提醒,设备的运行状态 (3)、OLED实时显示当前时间,和用户操作情况 (4) 、门内自动开门,外来访客,用户可无线蓝牙实现开门
制作出来的实物图如下:
PCB版正面
PCB背面
主函数代码: - uint8_t percent;
- uint16_t ad;//ad采集到值
- uint16_t t = 0,i = 0;
- int main(void)
- {
- SystemInit();//系统时钟初始化
- NVIC_Configuration();//中断向量优先级分组2(抢占优先级2位;子优先级2位)
- delay_init();//延时函数初始化
- uart_init(9600);//串口一初始化
- USART3_Init(9600);//串口三初始化 -- Bluetooth初始化
- FPC1020_Init();//初始化指纹输入接口
- //LED_Init();//LED初始化
- KEY_Init();//按键初始化
- Beep_Init();//蜂鸣器初始化
- Adc_Init();//初始化ADC
- RTC_Init();//RTC初始化
- Door_Init();//舵机初始化
- OLED_Init();//OLED初始化
- OLED_Clear();//OLED清屏
- WWDG_Init(0x7F, 0x5F, WWDG_Prescaler_8);//窗口看门狗计数器值为7f,窗口寄存器为5f,分频数为8
- //IWDG_Init(4, 625); //分频数为64,重载值为625,溢出时间为1s count = 1 / 40 * 64 * 625
- while(1)
- {
- if(t++ / 200)
- {
- t = 0;//清零
- ad = Get_Adc_Average(0, 10);//获取AD值
- percent = ad * ((3.3 / 4096) / 2.9090) * 100;//转化为电量百分比 12 * (24 / (24 + 75)) = 2.90909088
- //OLED_Clear();//OLED清屏
- OLED_Static_Display();//固定显示"二零九指纹锁"
- Battery_Display(percent);//电量显示(0% - 100%)
- OLED_Display_RealDate(calendar.w_year, calendar.w_month, calendar.w_date, calendar.week);//显示年月日
- //LED0 =! LED0;//工作指示灯
- }
- // if(Door_Flag && Door_Status_Flag)//蓝牙开门--门的状态为关闭时-->开门
- // Open_Door();//开门
- // if((i++ / 30) && Door_Status_Flag)//延时时间到和门关闭的时候同时触发测距
- // //if(i++ / 30)
- // {
- // i = 0;
- // USART1_Send_Byte(0x55);//触发测距
- // }
- if(Door_Status_Flag)//门关闭的时候
- {
- if(i++ / 30)
- {
- i = 0;//重新计数
- USART1_Send_Byte(0x55);//触发测距
- }
- if(Door_Flag)//蓝牙开门
- Open_Door();//开门
- delay_ms(10);//延时100ms
- }
- OLED_Display_RealTime(calendar.hour, calendar.min, calendar.sec);//显示时分秒
- KEY_Judge();//按键扫描
- FPC1020_Work();//指纹模块工作函数
- //delay_ms(1);//延时1ms
- //IWDG_Feed();//独立看门狗喂狗
- }
- }
复制代码
全部资料51hei下载地址:
指纹锁项目.7z
(394.01 KB, 下载次数: 161)
|