背景
我正在使用基于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++;
}
}
问题
为什么一个是响应灵敏的,而另一个则完全无用?
当我说响应灵敏时,我是指旋转编码器时屏幕变化的响应速度。这两种方法都“可行”,但其中一种从使用的角度来看是不能接受的。
encoder_turn
的定义。此外,它是从哪里调用的? - Dark Falcon