Урок 37
Часть 3
Модуль LCD 16×2 .МЕНЮ
В предыдущей части написали немало кода по навигации, мы заполнили кейсы вариантов главного меню.
Продолжим дальше писать наш исходный код.
Напишем код в следующий кейс — для ожидания нажатия на кнопку выхода из главного меню
case MAIN_MENU_STATE_EXIT_WAIT: //ожидание выбора пункта EXIT
BlinkItem(5);
//правая клавиша
if(button_state[Button_Right]&ST_UNPRESSURE)
{
SetButtonState(Button_Right,ST_LOCKED);
ResetButtonState(Button_Right,ST_UNPRESSURE);
SetButtonState(Button_Right,ST_PRESSURE);
//обработка нажатия кнопки
_delay_ms(50);
ResetButtonState(Button_Right,ST_LOCKED);
main_menu_state = MAIN_MENU_STATE_MM1_WAIT;
setpos(10,1);
str_lcd(str1[5]); //зажжем пункт EXIT, а то вдруг он в потухшем состоянии
}
//левая клавиша
if(button_state[Button_Left]&ST_UNPRESSURE)
{
SetButtonState(Button_Left,ST_LOCKED);
ResetButtonState(Button_Left,ST_UNPRESSURE);
SetButtonState(Button_Left,ST_PRESSURE);
//обработка нажатия кнопки
_delay_ms(50);
ResetButtonState(Button_Left,ST_LOCKED);
main_menu_state = MAIN_MENU_STATE_MM5_WAIT;
setpos(10,1);
str_lcd(str1[5]); //зажжем пункт EXIT, а то вдруг он в потухшем состоянии
}
//клавиша вверх
if(button_state[Button_Up]&ST_UNPRESSURE)
{
SetButtonState(Button_Up,ST_LOCKED);
ResetButtonState(Button_Up,ST_UNPRESSURE);
SetButtonState(Button_Up,ST_PRESSURE);
//обработка нажатия кнопки
_delay_ms(50);
ResetButtonState(Button_Up,ST_LOCKED);
main_menu_state = MAIN_MENU_STATE_MM3_WAIT;
setpos(10,1);
str_lcd(str1[5]); //зажжем пункт EXIT, а то вдруг он в потухшем состоянии
}
//клавиша SELECT
if(button_state[Button_Select]&ST_UNPRESSURE)
{
SetButtonState(Button_Select,ST_LOCKED);
ResetButtonState(Button_Select,ST_UNPRESSURE);
SetButtonState(Button_Select,ST_PRESSURE);
//обработка нажатия кнопки
_delay_ms(50);
ResetButtonState(Button_Select,ST_LOCKED);
main_menu_state = MAIN_MENU_STATE_EXIT;
setpos(10,1);
str_lcd(str1[5]); //зажжем пункт EXIT, а то вдруг он в потухшем состоянии
}
break;
Добавим глобальную переменную в файл menu.c
unsigned char i=0;
char str2[6];
Напишем ещё одну функцию
//——————————————————
//вход в любой пункт главного меню
void MainMenuItemProcess(unsigned char ind)
{
clearlcd();
setpos(0,0);
str_lcd(«ITEM «);
sprintf(str2,«%d»,ind);
str_lcd(str2);
str_lcd(» Press»);
setpos(0,1);
str_lcd(«SELECT from exit»);
//здесь будут функции, вызываемые пунктами меню
switch (ind)
{
case 1:
//функция-обработчик 1 пункта меню
break;
case 2:
//функция-обработчик 2 пункта меню
break;
case 3:
//функция-обработчик 3 пункта меню
break;
case 4:
//функция-обработчик 4 пункта меню
break;
case 5:
//функция-обработчик 5 пункта меню
break;
}
while (1)
{
if(button_state[Button_Select]&ST_UNPRESSURE)
{
clearlcd();
SetButtonState(Button_Select,ST_LOCKED);
ResetButtonState(Button_Select,ST_UNPRESSURE);
SetButtonState(Button_Select,ST_PRESSURE);
//обработка нажатия кнопки
_delay_ms(50);
ResetButtonState(Button_Select,ST_LOCKED);
return;
}
_delay_ms(50);
}
}
//——————————————————
Добавим на неё прототип вверху файла, а также строчный массив
void BlinkItem(unsigned char ind);
void MainMenuItemProcess(unsigned char ind);
char str2[5];
Реакцию на выбор пунктов меню мы уже будем писать в следующей части нашего урока.
Предыдущая часть Программирование МК AVR Следующая часть
Приобрести программатор USBASP USBISP с адаптером можно здесь USBASP USBISP 3.3 с адаптером
Смотреть ВИДЕОУРОК
Добавить комментарий