我正在尝试编写嵌入式板卡(RX63N)的代码,在其中我要使用LCD和板载开关来实现以下功能:
按下开关时,程序应根据先前的状态“暂停”或“取消暂停”,并且液晶屏在暂停时应显示“已暂停”。取消暂停时,LCD应该在x和y定义的位置显示自定义图形。使用函数Set_LCD_Char(N)可以显示它,其中N被定义为位图图像中的自定义图形。但是,在进行任何更改之前,我需要清除LCD显示屏,这就是我要努力的地方。在同时使用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编程:正确清除LCD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33113378/

10-11 16:08