Background
I work with an 8052-based microcontroller. I have an LCD and an encoder wheel. The user can navigate the menu displayed on the LCD display by rotating and pressing the encoder wheel.
Encoder wheel rotation is based on interruption.
The direction of rotation of the encoder wheel ( encoder_turn) is set inside the encoder interrupt.
I call update_lcd()inside the loop.
New revocation code
void update_lcd()
{
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;
}
}
Old refractory code
void update_lcd()
{
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++;
}
}
Question
Why is one responsive and the other completely useless?
When I say responsive, I mean the fact that when you turn the encoder, the screen change responds. Both methods "work", but one of them is unacceptable in terms of use.