void ShowMessageLBJ(POCSAG_RESULT* POCSAG_Msg,float rssi,uint8_t lqi) { char LBJ_Info[3][7] = {{0},{0},{0}};//存储车次、速度、公里标信息,每条预留6字符 for(uint8_t i = 0;i < 3;i++) { strncpy(LBJ_Info[i],POCSAG_Msg->txtMsg+i5,5);//txtMsg每5个字符一组分别存储 } OLED_ShowString(68,0,LBJ_Info[0],16); //1.1显示车次 OLED_ShowString(7*8,4,LBJ_Info[2],16); //3.显示公里标 } 这个是STM32和ssd1306的显示函数,现在是收到消息直接显示,不会息屏,能不能帮我把它修改为收到消息后常亮6秒,如果有新消息就替换显示,POCSAG_Msg是消息来源
时间: 2024-03-01 13:49:42 浏览: 87
poc.rar_ pocsag_pocsag_pocsag解码
可以使用定时器来实现收到消息后常亮6秒的功能。具体实现方法如下:
1. 定义一个变量 timer,用来记录当前已经显示的时间,初始值为 0。
2. 在收到新消息时,更新消息显示,并将 timer 置为 0。
3. 在定时器中断中,每秒钟将 timer 加 1,检查 timer 是否超过了 6 秒,如果超过了,则将显示内容清空。
修改后的代码如下:
```
static uint8_t timer = 0; // 计时器,用来记录当前已经显示的时间
void ShowMessageLBJ(POCSAG_RESULT* POCSAG_Msg,float rssi,uint8_t lqi) {
char LBJ_Info[3][7] = {{0},{0},{0}}; // 存储车次、速度、公里标信息,每条预留6字符
for(uint8_t i = 0;i < 3;i++) {
strncpy(LBJ_Info[i],POCSAG_Msg->txtMsg+i*5,5); // txtMsg每5个字符一组分别存储
}
OLED_ShowString(68,0,LBJ_Info[0],16); // 1.1显示车次
OLED_ShowString(7*8,4,LBJ_Info[2],16); // 3.显示公里标
timer = 0; // 收到新消息时,将计时器置为 0
}
void TIM2_IRQHandler(void) {
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
timer++; // 每秒钟将计时器加 1
if(timer > 6) { // 如果超过了6秒
OLED_Clear(); // 清空显示内容
timer = 0; // 将计时器置为 0
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志位
}
}
```
注意:上述代码中的定时器中断处理函数 TIM2_IRQHandler 需要根据实际情况进行修改,具体实现方法请参考 STM32 定时器相关的资料。
阅读全文