Суть программы такова меню на ЖКИ HD44780. Навигация в меню 4 кнопками вни, вверх, назад(esc), ок, меню состоит из 2х основных строк меню и по 2 подменю у каждого меню, для определения текущего состояния меню используется переменная "menu" значение 10 соответствует первому пункту меню значение 1,1 и 1,2 подпунктам первого меню, так же значение 20 соответствует второму пункту меню, 2,1 и 2,2 его подпунктам.
Код: Выделить всё
//******************************************************************************
//
// Author(s)...:
//
// Target(s)...: atmega8
//
// Compiler....: CodeVision 2.05
//
// Description.:
//
// Data........: 12.10.2011
//
//******************************************************************************
#include <MEGA8.H>
#include <io.h>
#include <delay.h>
//#include "lcd_lib.h"
#include <lcd.h>
#asm
.equ __lcd_port=0x18 ; //PORTB
#endasm
unsigned char keys = 0;
unsigned char menu = 10;
void main (void)
{
lcd_init(16);
PORTD = 0b1111111;
DDRD = 0b00000000;
while(1) {
if(PIND.0 == 0){
while(PIND.0 == 0)
keys = 1;
}
if(PIND.1 == 0){
while(PIND.1 == 0)
keys = 2;
}
if(PIND.2 == 0){
while(PIND.2 == 0)
keys = 3;
}
if(PIND.3 == 0){
while(PIND.3 == 0)
keys = 4;
}
delay_ms(60);
if(keys){
if ((keys == 1) && (menu == 20)) { // кнопка вверх
menu -= 10;
}
else {
menu--;
}
if ((keys == 2) && (menu == 10)){ // вниз
menu += 10;
}
else {
menu++;
}
if (keys == 3){ // ESC
menu -= 10;
}
if (keys == 4){ //ОК
menu += 1;
}
keys = 0;
}
switch (menu)
{
case 10:
lcd_gotoxy(0,0);
lcd_putsf("> menu 1");
lcd_gotoxy(0,1);
lcd_putsf(" menu 2");
break;
case 20:
lcd_gotoxy(0,0);
lcd_putsf(" menu 1");
lcd_gotoxy(0,1);
lcd_putsf("> menu 2");
break;
case 11:
lcd_gotoxy(0,0);
lcd_putsf("> menu 1.1");
lcd_gotoxy(0,1);
lcd_putsf(" menu 1.2");
break;
case 12:
lcd_gotoxy(0,0);
lcd_putsf(" menu 1.1");
lcd_gotoxy(0,1);
lcd_putsf("> menu 1.2");
break;
case 21:
lcd_gotoxy(0,0);
lcd_putsf("> menu 2.1");
lcd_gotoxy(0,1);
lcd_putsf(" menu 2.2");
break;
case 22:
lcd_gotoxy(0,0);
lcd_putsf(" menu 2.1");
lcd_gotoxy(0,1);
lcd_putsf("> menu 2.2");
}
}
}
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)