#include "sys.h" // 包含系统头文件
#include "usart.h" // 包含串口通信头文件
#include "delay.h" // 包含延时函数头文件
#include "led.h" // 包含LED控制头文件
#include "beep.h" // 包含蜂鸣器控制头文件
#include "lcd.h" // 包含LCD显示头文件
#include "usmart.h" // 包含USMART调试头文件
#include "rtc.h" // 包含RTC实时时钟头文件
、
int main(void)
{
u8 t = 0; // 计时变量t,用于定时器
u8 cnt = 0; // 计数变量cnt,用于蜂鸣器控制
char tbuf[40]; // 字符数组,用于存储时间和日期字符串
RTC_TimeTypeDef RTC_TimeStruct; // RTC时间结构体变量
RTC_DateTypeDef RTC_DateStruct; // RTC日期结构体变量
HAL_Init(); // 初始化硬件抽象层HAL
SystemClock_Config(); // 配置系统时钟
delay_init(80); // 初始化延时函数,时钟频率为80MHz
uart_init(115200); // 初始化串口通信,波特率115200
usmart_dev.init(80); // 初始化USMART调试功能,时钟频率80MHz
LED_Init(); // 初始化LED
BEEP_Init(); // 初始化蜂鸣器
LCD_Init(); // 初始化LCD
RTC_Init(); // 初始化RTC实时时钟
RTC_Set_WakeUp(RTC_WAKEUPCLOCK_CK_SPRE_16BITS, 0);
// 设置RTC唤醒功能,时钟周期16位定时器
POINT_COLOR = RED; // 设置画笔颜色为红色
Display_ALIENTEK_LOGO(0, 0);
// 显示ALIENTEK的LOGO图案在LCD上
LCD_ShowString(30, 95, 200, 16, 16, "Pandora STM32L4 IOT");
// 在LCD上显示字符串
LCD_ShowString(30, 115, 200, 16, 16, "RTC TEST");
// 在LCD上显示字符串
LCD_ShowString(30, 135, 200, 16, 16, "ATOM@ALIENTEK");
// 在LCD上显示字符串
LCD_ShowString(30, 155, 200, 16, 16, "2018/10/27");
// 在LCD上显示字符串
POINT_COLOR = BLUE; // 设置画笔颜色为蓝色
while(1)
{
t++; // 计时器递增
if((t % 10) == 0) // 每10个计时单位执行一次
{
HAL_RTC_GetTime(&RTC_Handler, &RTC_TimeStruct, RTC_FORMAT_BIN); // 获取当前RTC时间
sprintf((char*)tbuf, "Time:%02d:%02d:%02d", RTC_TimeStruct.Hours, RTC_TimeStruct.Minutes, RTC_TimeStruct.Seconds);
// 格式化时间字符串
LCD_ShowString(30, 175, 210, 16, 16, tbuf);
// 在LCD上显示时间字符串
HAL_RTC_GetDate(&RTC_Handler, &RTC_DateStruct, RTC_FORMAT_BIN);
// 获取当前RTC日期
sprintf((char*)tbuf, "Date:20%02d-%02d-%02d", RTC_DateStruct.Year, RTC_DateStruct.Month, RTC_DateStruct.Date);
// 格式化日期字符串
LCD_ShowString(30, 195, 210, 16, 16, tbuf);
// 在LCD上显示日期字符串
sprintf((char*)tbuf, "Week:%d", RTC_DateStruct.WeekDay);
// 格式化星期字符串
LCD_ShowString(30, 215, 210, 16, 16, tbuf);
// 在LCD上显示星期字符串
}
if( BEEP_Read ) // 如果蜂鸣器处于开启状态
{
cnt++; // 计数器递增
if(cnt >= 100) { // 如果计数超过或等于100
BEEP(0); // 关闭蜂鸣器
cnt = 0; // 计数器清零
}
}
if((t % 20) == 0) // 每20个计时单位执行一次
LED_R_TogglePin; // 红色LED翻转状态
delay_ms(10); // 延时10毫秒
}
}
请加入一段代码使其能通过按键修改时间