我正在和基於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'的定義。另外,這是從哪裏來的? –
向我們展示您的主循環。 –
@EdS。 (true){update_lcd();}因爲基本上它是 – hfitzwater