背景
我正在使用基于 8052 的微控制器。我连接了 LCD 和编码器轮。用户可以通过旋转并按下编码轮来浏览 LCD 上显示的菜单。
编码器轮的旋转是基于中断的。
编码器轮的旋转方向 ( encoder_turn
) 在编码器中断内设置。
我update_lcd()
在循环内部调用。
新的响应代码
void update_lcd()
{
//ENCODER TURN
switch(encoder_turn)
{
case RIGHT:
lcd_clear();
next_screen();
break;
case LEFT:
lcd_clear();
previous_screen();
break;
default:
break;
}
}
void next_screen()
{
if(current_test_screen < screen5)
{
current_test_screen++;
}
draw_current_test_screen();
}
void draw_current_test_screen()
{
switch(current_test_screen)
{
case screen1:
draw_screen1();
break;
case screen2:
draw_screen2();
break;
case screen3:
draw_screen3();
break;
case screen4:
draw_screen4();
break;
case screen5:
draw_screen5();
break;
default:
break;
}
}
旧的无响应代码
void update_lcd()
{
//ENCODER TURN
switch(encoder_turn)
{
case RIGHT:
lcd_clear();
next_screen();
break;
case LEFT:
lcd_clear();
previous_screen();
break;
default:
break;
}
switch(current_test_screen)
{
case screen1:
draw_screen1();
break;
case screen2:
draw_screen2();
break;
case screen3:
draw_screen3();
break;
case screen4:
draw_screen4();
break;
case screen5:
draw_screen5();
break;
default:
break;
}
}
void next_screen()
{
if(current_test_screen < screen5)
{
current_test_screen++;
}
}
问题
为什么一个反应灵敏而另一个完全没用?
当我说响应时,我指的是当我旋转编码器时屏幕变化是响应的。两种方法都“有效”,但从使用的角度来看,一种方法是不可接受的。