|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
while(1)
{
LCD_SetFont(&Font24x32);
LCD_SetColors(CL_WHITE,CL_WHITE);
ILI9341_DrawRectangle(0,67,96,32,1);
delay_ms(1000);
LCD_SetColors(CL_RED,CL_WHITE);
sprintf((char *)str,"%d",tm.tm_year);
ILI9341_DispString_EN_CH( 0,67,(char*)str);
if(XPT2046_PENIRQ_Read() == XPT2046_PENIRQ_ActiveLevel)
{
break;
}
delay_ms(1000);
}
这个代码是让一串数字在LCD屏幕上显示并不断闪烁,然后通过检测是否触摸屏幕来退出循环,但是需要触摸一秒左右才能退出,不灵敏,求助有没有更好的方法来设置数字显示不断闪烁并通过触摸屏幕来退出循环。
好的,我们来让数字不仅闪烁,同时也能灵敏地响应触摸事件。为了实现这个需求,我们可以在每个循环中动态地更新显示内容,并在一定的时间间隔内切换显示状态。
下面是一个改进的示例代码,其中我们使用一个变量来控制数字的显示与隐藏,从而实现闪烁效果:
- #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 小助理,如未能正确解答您的问题,请继续追问。
|
|