/***************************************************** 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 #include typedef struct stav // definice struktury { unsigned char bitPole[25]; // celkem 200 bit unsigned char dalsiPromena; }stav; volatile stav PoleStavu; // definice globalni promenne typu "jmneoStruktury_t" void WrBit(unsigned char index, unsigned char bitVal); char IsBit(unsigned char index); void CPU_init(void); //menu ma 20 polozek v 21 je '\0' flash char *menu_table[11]={"menu1 ","menu2 ","menu3 ","menu4 ","menu5 ","menu6 ","menu7 ","menu8 ","menu9 ","menu0 "}; flash char *submenu1_table[21]={"submenu1A","submenu1B","submenu1C","submenu1D","submenu1E","submenu1F","submenu1G","submenu1H","submenu1I"}; flash char *submenu2_table[21]={"submenu2A","submenu2B","submenu2C","submenu2D","submenu2E","submenu2F","submenu2G","submenu2H","submenu2I"}; flash char *submenu3_table[21]={"submenu3A","submenu3B","submenu3C","submenu3D","submenu3E","submenu3F","submenu3G","submenu3H","submenu3I"}; flash char *submenu4_table[21]={"submenu4A","submenu4B","submenu4C","submenu4D","submenu4E","submenu4F","submenu4G","submenu4H","submenu4I"}; flash char *submenu5_table[21]={"submenu5A","submenu5B","submenu5C","submenu5D","submenu5E","submenu5F","submenu5G","submenu5H","submenu5I"}; flash char *submenu6_table[21]={"submenu6A","submenu6B","submenu6C","submenu6D","submenu6E","submenu6F","submenu6G","submenu6H","submenu6I"}; flash char *submenu7_table[21]={"submenu7A","submenu7B","submenu7C","submenu7D","submenu7E","submenu7F","submenu7G","submenu7H","submenu7I"}; flash char *submenu8_table[21]={"submenu8A","submenu8B","submenu8C","submenu8D","submenu8E","submenu8F","submenu8G","submenu8H","submenu8I"}; flash char *submenu9_table[21]={"submenu9A","submenu9B","submenu9C","submenu9D","submenu9E","submenu9F","submenu9G","submenu9H","submenu9I"}; flash char *submenu0_table[21]={"submenu0A","submenu0B","submenu0C","submenu0D","submenu0E","submenu0F","submenu0G","submenu0H","submenu0I"}; volatile int PozMenu=0; //submenu1 a polozka1 je 1 atd. volatile unsigned char CisMenu=0; volatile unsigned char CisPolozky=0; //*********************** ZACATEK PROG ************************ void main(void) { unsigned char str[]; char MaxPocetPolozek=20; char radek1[17]=(""); char radek2[17]=(""); CPU_init(); lcd_init(16); lcd_putsf("Ahoj DAEW"); delay_ms(1000); lcd_clear(); strcpy(radek1,"Menu"); while (1) // HLAVNI CYKL "nikam se z nej nevyskakuje!!!!" { //*************** VYPISY NA LCD******************** lcd_gotoxy(0,0); lcd_puts(radek1); // zatim radek1 = "Menu" lcd_gotoxy(13,0); itoa(PozMenu, str); lcd_puts(str); //VYMAZAT- jen poro kontrolu-vypisuje na disp.pozici v tabulce Stavu Bitu lcd_gotoxy(0,1); lcd_puts(radek2); //zatim radek2 = polozka menu lcd_gotoxy(14,1); if (CisMenu){itoa((IsBit(PozMenu)), str); lcd_puts(str);} else lcd_puts(" "); //stav bitoveho pole k dane polozce if (CisMenu==0)MaxPocetPolozek=9; else MaxPocetPolozek=8; //*************** TLACITKA ************************ if (!PINC.0){if (CisPolozky>0) CisPolozky--; else CisPolozky=MaxPocetPolozek;} //LEVA if (!PINC.1){if (CisPolozky0) CisPolozky=0; else //jsem v submenu a skocim v nem na nulu {CisPolozky=0; CisMenu=0;}}}; //jsem v submenu na 0 a skocim do hl. menu na 0 switch (CisMenu) //vyber polozky-textu z menu-submenu[X] do promene radek2 {case 0: strcpyf(radek2,menu_table[CisPolozky]); PozMenu=0; break; case 1: strcpyf(radek2,submenu1_table[CisPolozky]); PozMenu=CisPolozky+1; break; case 2: strcpyf(radek2,submenu2_table[CisPolozky]); PozMenu=CisPolozky+21; break; case 3: strcpyf(radek2,submenu3_table[CisPolozky]); PozMenu=CisPolozky+41; break; case 4: strcpyf(radek2,submenu4_table[CisPolozky]); PozMenu=CisPolozky+61; break; case 5: strcpyf(radek2,submenu5_table[CisPolozky]); PozMenu=CisPolozky+81; break; case 6: strcpyf(radek2,submenu6_table[CisPolozky]); PozMenu=CisPolozky+101; break; case 7: strcpyf(radek2,submenu7_table[CisPolozky]); PozMenu=CisPolozky+121; break; case 8: strcpyf(radek2,submenu8_table[CisPolozky]); PozMenu=CisPolozky+141; break; case 9: strcpyf(radek2,submenu9_table[CisPolozky]); PozMenu=CisPolozky+161; break; case 10:strcpyf(radek2,submenu0_table[CisPolozky]); PozMenu=CisPolozky+181; break; } delay_ms(300); } } //********************* KONEC PROGRAMU **************************** //********************* definice funkci *************************** void WrBit(unsigned char index, unsigned char bitVal) //yapisuje 1/0 na poyici index(0-200) { // zapis bitu do bitoveho pole ve strukture, index = index bitu (od nuly), // bitVal = zapisovana hodnota (0=0, nenulove cislo = 1) unsigned char indB = index & 7; // ulozi dolni 3 bity indexu, = index bitu v bytu if(bitVal) PoleStavu.bitPole[index >> 3] |= (unsigned char)(1<> 3] &= (unsigned char)(~(1<> 3] & (unsigned char)(1<