该电子密码锁是在普中STM32F103ZET6板子上写的,所有操作显示在了LCD屏幕上,解锁是通过解码红外遥控的码值进行的。
1. 是红红外遥控进行解锁,需要自己先将红外遥控器的0-9码值破解出来,然后修改程序elecodelock.c中的枚举中的值。
2. 可以自行修改本地密码,本地密码是保存在EEPROM中的,掉电不丢失。只需打开elecodelock.c中部分代码注释,再修改mima[6]数组中的值即可。该程序最大支持9位密码。10位以上需要对红外数据进行处理。
3. 所有的操作现象显示在LCD屏幕上。有输入密码,及密码错误提示,还有锁的状态提示,以及一些附加功能,如时间显示,日期,星期和温度。
4. 该程序适用于STM32F103ZET6型。
单片机源程序如下:
- #include "led.h"
- #include "Systick.h"
- #include "elecodelock.h"
- #include "24cxx.h"
- #include "usart.h"
- #include "ds18b20.h"
- #include "rtc.h"
- void System_Init(void)
- {
- SysTick_Init(72); //72MHz,进行8分频
- USART1_Init(9600);
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //分两组
- LED_Init();
- Hwjs_Init();
- ECL_Init(); //密码锁初始化
- AT24Cxx_Init(); //EEPROM初始化
- TFTLCD_Init(); //显示屏初始化
- DS18B20_Init(); //温度传感器初始化
- RTC_Init(); //RTC初始化
- }
- //处理温度数据
- void DataPro(void)
- {
- float value;
- u8 num;
- RTC_Get(); //获取时间
- value = DS18B20_GetTEMP(); //获取温度
- num = (u8)value;
- LCD_ShowNum(100, 180, num, 2, 24);
- LCD_ShowString(130, 180, tftlcd_data.width, tftlcd_data.height, 24, "C");
- LCD_ShowNum(100, 220, calendar.hour, 2, 24);
- LCD_ShowString(130, 220, tftlcd_data.width, tftlcd_data.height, 24, "H");
- LCD_ShowNum(160, 220, calendar.min, 2, 24);
- LCD_ShowString(190, 220, tftlcd_data.width, tftlcd_data.height, 24, "M");
- LCD_ShowNum(210, 220, calendar.sec, 2, 24);
- LCD_ShowString(240, 220, tftlcd_data.width, tftlcd_data.height, 24, "S");
- LCD_ShowString(20, 260, tftlcd_data.width, tftlcd_data.height, 24, "WEEK");
- LCD_ShowNum(100, 260, calendar.week, 1, 24);
- LCD_ShowString(20, 290, tftlcd_data.width, tftlcd_data.height, 24, "DATE");
- LCD_ShowString(150, 290, tftlcd_data.width, tftlcd_data.height, 24, "y");
- LCD_ShowString(190, 290, tftlcd_data.width, tftlcd_data.height, 24, "m");
- LCD_ShowString(230, 290, tftlcd_data.width, tftlcd_data.height, 24, "d");
- LCD_ShowNum(100, 290, calendar.w_year, 4, 24); //年
- LCD_ShowNum(160, 290, calendar.w_month, 2, 24); //月
- LCD_ShowNum(210, 290, calendar.w_date, 1, 24); //日
- }
- int main()
- {
- u8 i = 0;
- u8 flag = 0; //记录开锁状态
-
- System_Init();
- FRONT_COLOR=BLACK;
- LCD_ShowFontHZ(80, 10,"电子密码锁");
- LCD_ShowFontHZ(20,40, "请输入密码");
- LCD_ShowFontHZ(20,140, "状态");
- LCD_ShowFontHZ(100, 140, "关");
- LCD_ShowFontHZ(20,180, "温度");
- LCD_ShowFontHZ(20,220, "时间");
- while(1)
- {
- DataPro();
- if(flag)
- {
- So_Lock();
- flag = 0; //锁打开,状态置0
- LCD_Fill(20, 100,303, 130, WHITE); //清除错误提示
- }
- if(hw_jsm == 0x00FFA25D && !flag)
- {
- ECL = 0;
- flag = 1; //锁关闭,状态置1
- hw_jsm = 0;
- LCD_ShowFontHZ(100, 140, "关");
- }
-
- i++;
- if(i % 20 == 0)
- {
- LED0 = !LED0;
- }
- delay_ms(10);
- }
- }
复制代码
所有资料51hei提供下载:
电子密码锁.zip
(386.3 KB, 下载次数: 117)
|