AVR УРОК 37. Модуль LCD 16×2. МЕНЮ. Часть 3



    Урок 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 с адаптером

 

 

Смотреть ВИДЕОУРОК

 

AVR Модуль LCD 16x2. МЕНЮ

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*