标题: STM32电子密码锁源程序 LCD彩屏显示 [打印本页]

作者: jkla    时间: 2020-9-10 19:09
标题: STM32电子密码锁源程序 LCD彩屏显示
该电子密码锁是在普中STM32F103ZET6板子上写的,所有操作显示在了LCD屏幕上,解锁是通过解码红外遥控的码值进行的。

1.    是红红外遥控进行解锁,需要自己先将红外遥控器的0-9码值破解出来,然后修改程序elecodelock.c中的枚举中的值。
2.    可以自行修改本地密码,本地密码是保存在EEPROM中的,掉电不丢失。只需打开elecodelock.c中部分代码注释,再修改mima[6]数组中的值即可。该程序最大支持9位密码。10位以上需要对红外数据进行处理。
3.    所有的操作现象显示在LCD屏幕上。有输入密码,及密码错误提示,还有锁的状态提示,以及一些附加功能,如时间显示,日期,星期和温度。
4.    该程序适用于STM32F103ZET6型。



单片机源程序如下:
  1. #include "led.h"
  2. #include "Systick.h"
  3. #include "elecodelock.h"
  4. #include "24cxx.h"
  5. #include "usart.h"
  6. #include "ds18b20.h"
  7. #include "rtc.h"



  8. void System_Init(void)
  9. {
  10.         SysTick_Init(72);                 //72MHz,进行8分频
  11.         USART1_Init(9600);
  12.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //分两组
  13.         LED_Init();
  14.         Hwjs_Init();
  15.         ECL_Init();                          //密码锁初始化
  16.         AT24Cxx_Init();                      //EEPROM初始化
  17.         TFTLCD_Init();                       //显示屏初始化
  18.         DS18B20_Init();                      //温度传感器初始化
  19.         RTC_Init();                          //RTC初始化
  20. }


  21. //处理温度数据
  22. void DataPro(void)
  23. {
  24.         float value;
  25.         u8 num;
  26.         RTC_Get();                   //获取时间
  27.         value = DS18B20_GetTEMP();   //获取温度
  28.         num = (u8)value;
  29.         LCD_ShowNum(100, 180, num, 2, 24);
  30.         LCD_ShowString(130, 180, tftlcd_data.width, tftlcd_data.height, 24, "C");
  31.         LCD_ShowNum(100, 220, calendar.hour, 2, 24);
  32.         LCD_ShowString(130, 220, tftlcd_data.width, tftlcd_data.height, 24, "H");
  33.         LCD_ShowNum(160, 220, calendar.min, 2, 24);
  34.         LCD_ShowString(190, 220, tftlcd_data.width, tftlcd_data.height, 24, "M");
  35.         LCD_ShowNum(210, 220, calendar.sec, 2, 24);
  36.         LCD_ShowString(240, 220, tftlcd_data.width, tftlcd_data.height, 24, "S");
  37.         LCD_ShowString(20, 260, tftlcd_data.width, tftlcd_data.height, 24, "WEEK");
  38.         LCD_ShowNum(100, 260, calendar.week, 1, 24);
  39.         LCD_ShowString(20, 290, tftlcd_data.width, tftlcd_data.height, 24, "DATE");
  40.         LCD_ShowString(150, 290, tftlcd_data.width, tftlcd_data.height, 24, "y");
  41.         LCD_ShowString(190, 290, tftlcd_data.width, tftlcd_data.height, 24, "m");
  42.         LCD_ShowString(230, 290, tftlcd_data.width, tftlcd_data.height, 24, "d");
  43.         LCD_ShowNum(100, 290, calendar.w_year, 4, 24);  //年
  44.         LCD_ShowNum(160, 290, calendar.w_month, 2, 24);    //月
  45.         LCD_ShowNum(210, 290, calendar.w_date, 1, 24);   //日
  46. }

  47. int main()
  48. {
  49.         u8 i = 0;
  50.         u8 flag = 0;      //记录开锁状态
  51.        
  52.         System_Init();
  53.         FRONT_COLOR=BLACK;
  54.         LCD_ShowFontHZ(80, 10,"电子密码锁");
  55.         LCD_ShowFontHZ(20,40, "请输入密码");
  56.         LCD_ShowFontHZ(20,140, "状态");
  57.         LCD_ShowFontHZ(100, 140, "关");
  58.         LCD_ShowFontHZ(20,180, "温度");
  59.         LCD_ShowFontHZ(20,220, "时间");
  60.         while(1)
  61.         {
  62.                 DataPro();
  63.                 if(flag)
  64.                 {
  65.                         So_Lock();
  66.                         flag = 0;        //锁打开,状态置0
  67.                         LCD_Fill(20, 100,303, 130, WHITE); //清除错误提示
  68.                 }
  69.                 if(hw_jsm == 0x00FFA25D && !flag)
  70.                 {
  71.                         ECL = 0;
  72.                         flag = 1;        //锁关闭,状态置1
  73.                         hw_jsm = 0;
  74.                         LCD_ShowFontHZ(100, 140, "关");
  75.                 }
  76.                
  77.                 i++;
  78.                 if(i % 20 == 0)
  79.                 {
  80.                         LED0 = !LED0;
  81.                 }
  82.                 delay_ms(10);
  83.         }
  84. }
复制代码

所有资料51hei提供下载:
电子密码锁.zip (386.3 KB, 下载次数: 117)


作者: 计算机工程    时间: 2020-12-26 13:02
为什么运行时缺少iic.0文件




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1