好的,我们来让数字不仅闪烁,同时也能灵敏地响应触摸事件。为了实现这个需求,我们可以在每个循环中动态地更新显示内容,并在一定的时间间隔内切换显示状态。
下面是一个改进的示例代码,其中我们使用一个变量来控制数字的显示与隐藏,从而实现闪烁效果:
#include <stdbool.h>
bool showNumber = true; // 控制数字显示的布尔变量
while (1)
{
LCD_SetFont(&Font24x32);
// 清除之前的矩形区域
LCD_SetColors(CL_WHITE, CL_WHITE);
ILI9341_DrawRectangle(0, 67, 96, 32, 1);
// 每200毫秒切换一次数字的显示状态
if (showNumber)
{
LCD_SetColors(CL_RED, CL_WHITE);
sprintf((char *)str, "%d", tm.tm_year);
ILI9341_DispString_EN_CH(0, 67, (char *)str);
}
else
{
LCD_SetColors(CL_WHITE, CL_WHITE);
ILI9341_DispString_EN_CH(0, 67, " "); // 清空显示
}
// 检查触摸屏幕是否被按下
if (XPT2046_PENIRQ_Read() == XPT2046_PENIRQ_ActiveLevel)
{
break; // 如果有触摸事件,退出循环
}
// 切换数字显示状态
showNumber = !showNumber;
// 使用更短的延迟,例如 200 毫秒
delay_ms(200);
}
### 代码解析:
1. **控制变量 `showNumber`**:这是一个布尔值,用于决定当前是否显示数字。
2. **闪烁逻辑**:在每次循环中,我们检查 `showNumber`。如果为 `true`,就显示年份;如果为 `false`,则清空显示区域,实现闪烁效果。
3. **触摸检查**:在绘制数字前检查触摸事件,如果触摸到了屏幕,就立即退出循环。
4. **延迟与状态切换**:使用 `delay_ms(200)` 控制循环频率,并每次循环结束时反转 `showNumber` 的值,使得数字每 200 毫秒闪烁一次。
这样,你的数字应该能够闪烁着,同时还能灵敏地响应触摸。这就像是让你的 LCD 屏幕举办一场“闪光派对”,又能随时接待“宾客”!希望这能帮助到你,如果还有其他问题或者想法,随时向我提问哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |