/***************************************************** Chip type : ATmega32 Program type : Application AVR Core Clock frequency: 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 512 *****************************************************/ #include #include #include #include #include #include //************************************************************* void main(void) { typedef struct menu { char jmeno[11]; char anone:1; }MENU; struct MENU polozka_menu[5][70]= { {{"menu1",0},{"menu2",0},{"menu3",0},{"menu4",0}}, {{"submenuA1",0},{"submenuA2",0},{"submenuA3",0},{"submenuA4",0}}, {{"submenuB1",0},{"submenuB2",0},{"submenuB3",0},{"submenuB4",0},{"submenuB5",0}}, {{"submenuC1",0},{"submenuC2",0},{"submenuC3",0}} }; unsigned char a; unsigned char poz_X=0; unsigned char poz_Y=0; char radek1[17]=(""); char radek2[17]=(""); // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x00; PORTC=0x1F; DDRC=0x00; PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // USART initialization // USART disabled UCSRB=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC disabled ADCSRA=0x00; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; // Alphanumeric LCD initialization // Connections specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTA Bit 0 // RD - PORTA Bit 1 // EN - PORTA Bit 2 // D4 - PORTA Bit 4 // D5 - PORTA Bit 5 // D6 - PORTA Bit 6 // D7 - PORTA Bit 7 // Characters/line: 16 lcd_init(16); lcd_puts("Test LCD"); delay_ms(1000); strcpy(radek1,"Menu"); while (1) { lcd_gotoxy(0,0); lcd_puts(radek1); lcd_gotoxy(0,1); lcd_puts(radek2); switch (PINC) {case 1:if (poz_Y>0) poz_Y--; else poz_Y=5; break;//PINC.0 klávesa Left case 2:if (poz_Y<5) poz_Y++; else poz_Y=0; break;//PINC.1 klávesa Right case 4:if (poz_X==0){poz_X=poz_Y+1; poz_Y=0;} else //X=o tak jsem v hlavn9m menu a po Enteru skacu do sumenu, ale v submneu ji6 neguji promennou ANONE {/*polozka_menu[poz_X][poz_Y].anone=!polozka_menu[poz_X][poz_Y].anone;*/}; break; //PINC.2 klávesa ENTER case 8:if (poz_X==0){poz_X=0; poz_Y=0;} else //X=0 tak jsem v hlavnim menu a 0,0 {if (poz_Y>0) poz_Y=0; else //po escapu skoci ye submenu do X,0 a pak do 0,0 {poz_Y=poz_X-1; poz_X=0;}} break;//PINC.3 klávesa ESC //default: }; strcpy(radek2,polozka_menu[poz_X][poz_Y].jmeno); } }