c - 嵌入式C编程: Clearing LCD properly

标签 c embedded

我正在尝试为嵌入式板(RX63N)编写代码,我想在其中使用 LCD 以及板载开关来实现以下功能: 按下开关后,程序应根据之前的状态“暂停”或“取消暂停”,并且暂停时 LCD 应显示“已暂停”。取消暂停时,LCD 应在 x 和 y 定义的位置显示自定义图形。它使用函数 Set_LCD_Char(N) 显示,其中 N 定义为来自位图图像的自定义图形。但在进行任何更改之前我需要清除液晶显示屏,这就是我正在努力的地方。在任何地方使用 lcd_clear() 函数时,LCD 都会保持空白(或几乎空白,即文本和图形非常微弱,几乎不存在)有人可以帮助我吗?代码如下:

while (1)
{
//  lcd_clear();
if(g_sw3_press == true){         //detect switch press
        pause_flag = !pause_flag;
        g_sw3_press = false;    //reset switch

    }

    if (pause_flag){
        RESET_ALL_LEDS();
        jet_x = 0;
        jet_y = 0;
         Set_Font_Bitmap();   //changes from text mode to bitmap
         Set_LCD_Pos(jet_x,jet_y);
         Set_LCD_Char(3);

    }
    else if(!(pause_flag)){ 
        ALL_RED_LEDS_ON();
         Set_Font_8_by_8();         
        lcd_display(LCD_LINE1, "    PAUSED   ");
    }   

}

最佳答案

首先,像您所做的那样进行繁忙的轮询循环通常不是一个好主意。但我不能推荐任何具体的替代方案,因为尚未提供平台和操作系统(如果有)(也许您的平台不支持事件)。

无论如何,不​​确定这是否是您需要的答案。但既然你要求一个例子,而我无法有效地将代码放入注释中,下面就是我的意思。问题在于您不断地写入和清除 LCD。因此,实际上这两个操作是相互竞争的。因此解决这个问题的一种方法是仅在状态改变时更新 LCD。

while (1)
{
    if(g_sw3_press == true){         //detect switch press
        pause_flag = !pause_flag;
        g_sw3_press = false;    //reset switch
    } else {
        /* No state change - nothing to do. Poll again. */
        continue;
    }

    lcd_clear(); 
    if (pause_flag){
        RESET_ALL_LEDS();
        jet_x = 0;
        jet_y = 0;
         Set_Font_Bitmap();   //changes from text mode to bitmap
         Set_LCD_Pos(jet_x,jet_y);
         Set_LCD_Char(3);

    } else { 
        ALL_RED_LEDS_ON();
         Set_Font_8_by_8();         
        lcd_display(LCD_LINE1, "    PAUSED   ");
    }   
}

关于c - 嵌入式C编程: Clearing LCD properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33113378/

相关文章:

c - c中的结构问题

c - 对象指针指向的sizeof

嵌入式应用

c - STM8中断串行接收

graphics - 寻找快速多边形渲染算法

c - 在ARM嵌入式C编程中使用定时器

c++ - 如何以微秒精度计算操作时间

c - 定义返回不兼容类型但无法访问的函数

c - 反汇编、修改和重新汇编可执行文件

c - Lua 在 PPC Micro 上的足迹