这个单片机代码实现了一个实验室管理系统,该系统的主要功能包括记录和管理ID信息、日期和时间、以及显示这些信息到OLED屏幕上。以下是对代码主要功能的分析:
全局变量定义
- 定义了多个全局变量来存储系统状态、页面、密码、ID列表等信息。
time
结构体用于存储DS1302时间。page
和state
分别表示当前界面和选择状态。xianshi
和tmpcal
用于OLED显示和临时计算。
主要功能函数
-
时间计算函数:
cal_total_min
计算给定日期和时间到2000年1月1日的总分钟数。cal_two_time_diff
和cal_two_time_diff_str10
计算两个日期之间的分钟差。
-
EEPROM读写函数:
read_2402_to_ram
从AT24CXX EEPROM读取数据到RAM。write_ram_to_2402
将RAM中的数据写回到EEPROM。
-
显示函数:
display_main_page
根据当前页面和状态在OLED屏幕上显示相应的内容。
主程序
main
函数初始化各种硬件模块和系统状态,包括时钟、UART、LED、按键、OLED、EEPROM、DS1302等。- 主循环中,通过扫描按键,处理不同页面和状态下的用户输入,更新显示内容,并执行相应的操作,如查看信息、修改时间、管理ID等。
中断处理
TIM4_IRQHandler
处理定时器中断,用于计时和数据接收处理。USART1_IRQHandler
处理串口接收中断,用于接收并处理二维码数据。
页面和功能
- 主页面 (page 0): 显示当前日期和时间。
- 次级页面 (page 1): 提供查看信息、修改时间、用户管理等选项。
- 查看信息页面 (page 2): 显示所有ID和相应时间。
- 修改时间页面 (page 3): 允许用户调整当前时间。
- 添加、修改和删除ID页面 (page 4, 7, 8, 9): 允许用户管理ID信息。
- 密码输入页面 (page 5, 6): 验证用户身份。
数据处理
- 从二维码接收数据,验证数据有效性,并处理ID和时间信息。
- 根据接收到的ID和时间,计算时间差并更新记录。
详细说明
- OLED显示:通过
OLED_Show16x16
和OLED_P8x16Str
函数在OLED屏幕上显示字符和图标。 - 密码验证:用户需要输入正确的密码才能查看或管理信息。
- 数据持久化:将ID和时间信息存储在EEPROM中,确保掉电后数据不丢失。
功能总结
该系统主要用于管理实验室的ID和时间记录,提供了通过OLED屏幕显示信息的功能,并通过按键操作进行用户交互。通过二维码扫描,系统能够记录用户的进入时间,并计算两次进入的时间差。