Files
DTU-LCD/Users/main.c

96 lines
3.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
******************************************************************************
* @文件 main.c
* @作者 阜阳师范大学物电学院
* @版本 V0.1
* @日期 2026-01-15
* @简介 DTU 屏幕按键部分的驱动程序
******************************************************************************
**/
#include "main.h"
#define TIMER 5 /* 定时器定时时间 */
#define LED_TOGGLE_TIME 1000 /* 系统运行指示灯闪烁时间,也就是亮的时间*/
volatile static uint32_t sysRunTime = 0; /* 系统运行时间计数器 */
volatile static uint8_t LED_ToggleFlag = 0; /* LED闪烁定时标志位 */
static KEY_TYPE keyStatus = KEY_NONE; /* 按键状态指示 */
static uint8_t ConnectFlg = 0; /**< 连接标志0x01=已连接0x00=未连接 */
/**
* @brief 按键业务逻辑回调函数
* @param key_type 按键类型
*/
static void Key_ProcessCallback(KEY_TYPE key_type)
{
// IntValue_Printf(2, 32, key_type, RESET);
BackLight_ON(); /* 任意按键按下,都打开背光 */
keyStatus = key_type; /* 更新按键状态 */
}
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
delay_init(72); /* 延时初始化 */
LED_Init(); /* LED灯初始化 */
Key_Init(); /* 初始化按键驱动 */
WDog_Init(); /* 看门狗初始化 */
RS485_DMA_init(); /* Rs485初始化 */
LcdInit();
Process_Init(); /* 通信任务初始化 */
NL_LOGO_Printf(); /* 显示存储的LOGO */
gtim_timx_int_init(50-1, 7200-1); /* 定时5毫秒 */
// 注册按键业务逻辑回调函数
Key_RegisterCallback(Key_ProcessCallback); /* 注册按键回调函数 */
while(1)
{
if(ConnectFlg == 1)
{
/* 指示灯闪烁 */
if(LED_ToggleFlag == 1)
{
LED_ToggleFlag = 0;
LED_Toggle(LED_RUN);
}
}
ConnectFlg = RS485_Process(keyStatus, ConnectFlg);
keyStatus = KEY_NONE;
/*系统运行超过一定时间立即复位重启*/
if(sysRunTime > 1000000)
{
HAL_NVIC_SystemReset(); /* 系统立即复位 */
sysRunTime = 0;
}
}
}
/**
* @brief 定时器中断服务函数
* @param 无
* @retval 无
*/
void GTIM_TIMX_INT_IRQHandler(void)
{
/*直接通过判断中断标志位来处理中断 */
if(__HAL_TIM_GET_FLAG(&g_timx_handle, TIM_FLAG_UPDATE) != RESET)
{
sysRunTime++;
if(sysRunTime % (LED_TOGGLE_TIME / 5) == 0)
{
LED_ToggleFlag = 1;
}
Button_Ticks(); /* 按键检测 */
Clear_Watchdog(); /* 看门狗喂狗 */
BackLight_Close(); /* 背光关闭检测 */
Process_Count(); /* 通信任务处理计数器 */
}
__HAL_TIM_CLEAR_IT(&g_timx_handle, TIM_IT_UPDATE); /* 清楚定时器溢出中断 */
}