我试图为嵌入式板(RX63N)编写代码,我想在其中使用LCD和车载开关来实现以下功能:在按下开关时,程序应该根据先前的状态“暂停”或“取消暂停”,而液晶显示应该在暂停时显示“暂停”。在取消暂停时,液晶显示器应该在x和y定义的位置显示自定义图形。它使用函数Set_LCD_Char(N)显示,其中N被定义为来自位图图像的自定义图形。但我需要清理液晶显示器,然后再做任何改变,这是我正在努力的地方。在使用lcd_clear()函数时,在任何地方保持液晶显示为空白(或几乎为空白,即文本和图形非常微弱以致于没有),有人能帮助我吗?这是代码:
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 ");
}
}发布于 2015-10-13 22:45:11
首先,像您正在做的那样做一个繁忙的轮询循环通常不是一个好主意。但我不能推荐任何具体的替代方案,因为平台和操作系统(如果有的话)没有提供(也许您的平台没有对事件的支持)。
不管怎么说,不知道这是不是你需要的答案。但是,由于您要求一个示例,而我无法有效地将代码放入注释中,下面是我的意思。问题是你一直在写和清除液晶显示器。因此,实际上,这两个行动是相互竞争的。因此,解决这个问题的一个方法是只在状态发生变化时更新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 ");
}
}https://stackoverflow.com/questions/33113378
复制相似问题