硬汉嵌入式论坛

 找回密码
 立即注册
查看: 623|回复: 5
收起左侧

[有问必答] 有什么方法能检测LCD是否活动从而关闭显示?

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2023-6-20 00:44:45 | 显示全部楼层 |阅读模式
本帖最后由 phy1335 于 2023-6-20 00:47 编辑


LCD为ILI9341,SPI模式。想在LCD没有新的数据传输20秒后,关闭显示,按下按键后重新开启。现在的方法是在写LCD的函数里添加一些代码如下。但是测试不是很对,如图。LCD turn on后才10秒就关闭了。请指教。

[C] 纯文本查看 复制代码
    LCD_Busy = 1;
    /* 一些操作 */
    LCD_Busy = 0;

关闭代码如下

[C] 纯文本查看 复制代码
    switch (mode)
    {
    case 0: // 全部关闭
        LCD_BK_CLR;
        __LCD_DisplayOff; // 0x28
        __LCD_SleepIn;    // 0x10
        break;

开启代码
[C] 纯文本查看 复制代码
    case 1:             // 全部开启
        __LCD_SleepOut; // 0x11
        LCD_Delay(120);
        __LCD_DisplayOn; // 0x29
        LCD_BK_SET;
        break;
这是中断函数

[C] 纯文本查看 复制代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  static uint16_t LCD_FreeTime = 0;
  if (htim->Instance == TIM11) // 20ms
  {
    Button_Module_Handle(); // 按键检测

    /* LCD 20S 关闭显示 */
    if (LCD_Busy == 1)
    {
      LCD_FreeTime = 0;
      LCD_SetPowerMode(3); // 关闭背光
    }
    else
    { /* 20S 到关闭SPI,进入睡眠 */
      if (++LCD_FreeTime == LCD_FREE_TIME)
      {
        __HAL_SPI_DISABLE(LCD_SPI_DEV);
        LCD_FreeTime = 0;
        LCD_SetPowerMode(0);
        printf("LCD turn off\n");
      }
    }
  }
}

屏幕截图 2023-06-20 004254.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106769
QQ
发表于 2023-6-20 10:20:49 | 显示全部楼层
没有数据传输怎么理解,比如界面上周期更新的时间,算不算数据传输。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2023-6-20 20:26:55 | 显示全部楼层
eric2013 发表于 2023-6-20 10:20
没有数据传输怎么理解,比如界面上周期更新的时间,算不算数据传输。

就是LCD上的图形完全不变化,不更新,也没有对寄存器进行操作。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106769
QQ
发表于 2023-6-21 09:09:36 | 显示全部楼层
phy1335 发表于 2023-6-20 20:26
就是LCD上的图形完全不变化,不更新,也没有对寄存器进行操作。

变量LCD_Busy的定义前加上__IO,防止编译器优化。

然后就是你的这种判断存在一些漏洞,比如操作显示屏期间,这个定期判断恰巧每次进入都是判断的LCD_Busy  =1或者=0。
回复

使用道具 举报

8

主题

135

回帖

159

积分

初级会员

积分
159
发表于 2023-6-23 23:41:59 | 显示全部楼层
做一个软件定时器就可以了, 更新了数据就把定时器重新赋值, 然后定时倒计时, 计数到0就关闭背光
回复

使用道具 举报

8

主题

157

回帖

181

积分

初级会员

积分
181
发表于 2023-7-19 09:48:15 | 显示全部楼层
写图形没有锁吗?监控锁的值在某个状态的持续时间,这个持续时间和休眠阈值作比较,来执行休眠策略
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 10:58 , Processed in 0.205022 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表