//#use math.lib #class auto #define RSADDR 3 // Rs B-3 #define ENADDR 2 // En B-2 #define CSMC33 2 // MC33972 chip select pf2 #define CSAD 4 //ad cs pf4 #define OUTAD 3 //ad out pc3 #define CLKAD 1 //ad clk pf1 int i,kdal,MenuID,MenuEn,ID0, IDlim,f,be, ADAct; // promenne MenuID,MenuEn,ID0, IDlim slouzi k ovladani menu //float test,test2; // int bit[8]; char klav,klavp; char* menu[100]; int MC[24],AD[10]; MenuInit() {////////"0123456789ABCDEF" nulty a 15cty znak vyhrazen, nutno zadat mezery.. zapisuje se 14 znaku.. //posledni dvojcisli: prvni cislice vzdy prvni cislo indexu(pro 35 = 3) druha cislice udava pocet policek menu urcenych k prochazeni. menu[0]="-----Menu-------08"; menu[1]=" 1:Vystupy "; menu[2]=" 2:Vstupy "; menu[3]=" 3:Klavesnice "; menu[4]=" 4:Zdroj "; menu[5]=" 5:MENU 5 "; menu[6]=" 6:MENU 6 "; menu[7]=" 7:MENU 7 "; menu[8]=" 8:MENU 8 "; menu[9]="-----Menu-------"; menu[10]=" Vystupy 18"; menu[11]=" 11:Vystup 1 "; menu[12]=" 12:Vystup 2 "; menu[13]=" 13:Vystup 3 "; menu[14]=" 14:Vystup 4 "; menu[15]=" 15:Vystup 5 "; menu[16]=" 16:Vystup 6 "; menu[17]=" 17:Vystup 7 "; menu[18]=" 18:Vystup 8 "; menu[19]=" -Menu end- "; menu[20]=" Vstupy 28"; menu[21]=" 21:Vstup 1 "; menu[22]=" 22:Vstup 2 "; menu[23]=" 23:Vstup 3 "; menu[24]=" 24:Vstup 4 "; menu[25]=" 25:Vstup 5 "; menu[26]=" 26:Vstup 6 "; menu[27]=" 27:Vstup 7 "; menu[28]=" 28:Vstup 8 "; menu[29]=" -Menu end- "; menu[30]=" Klavesnice 32"; menu[31]=" 31:Podsviceni "; menu[32]=" 32:-Menu end- "; menu[33]=" 33:Vystup 3 "; menu[34]=" 34:Vystup 4 "; menu[35]=" 35:Vystup 5 "; menu[36]=" 36:Vystup 6 "; menu[37]=" 37:Vystup 7 "; menu[38]=" 38:Vystup 8 "; menu[39]=" -Menu end- "; menu[40]=" Zdroj 43"; menu[41]=" 41:Nabijeni "; menu[42]=" 42:Stav "; menu[43]=" 43:-Menu end- "; menu[44]=" 44:Vystup 4 "; menu[45]=" 45:Vystup 5 "; menu[46]=" 46:Vystup 6 "; menu[47]=" 47:Vystup 7 "; menu[48]=" 48:Vystup 8 "; menu[49]=" -Menu end- "; menu[50]=" Menu5 58"; menu[51]=" 51:Menu5 "; menu[52]=" 52:Menu5 "; menu[53]=" 53:Menu5 "; menu[54]=" 54:Menu5 "; menu[55]=" 55:Menu5 "; menu[56]=" 56:Menu5 "; menu[57]=" 57:Menu5 "; menu[58]=" 58:Menu5 "; menu[59]=" -Menu end- "; menu[60]=" Menu6 68"; menu[61]=" 61:Menu6 "; menu[62]=" 62:Menu6 "; menu[63]=" 63:Menu6 "; menu[64]=" 64:Menu6 "; menu[65]=" 65:Menu6 "; menu[66]=" 66:Menu6 "; menu[67]=" 67:Menu6 "; menu[68]=" 68:Menu6 "; menu[69]=" -Menu end- "; menu[70]=" Menu7 78"; menu[71]=" 71:Menu7 "; menu[72]=" 72:Menu7 "; menu[73]=" 73:Menu7 "; menu[74]=" 74:Menu7 "; menu[75]=" 75:Menu7 "; menu[76]=" 76:Menu7 "; menu[77]=" 77:Menu7 "; menu[78]=" 78:Menu7 "; menu[79]=" -Menu end- "; menu[80]=" Menu8 88"; menu[81]=" 81:Menu8 "; menu[82]=" 82:Menu8 "; menu[83]=" 83:Menu8 "; menu[84]=" 84:Menu8 "; menu[85]=" 85:Menu8 "; menu[86]=" 86:Menu8 "; menu[87]=" 87:Menu8 "; menu[88]=" 88:Menu8 "; menu[89]=" -Menu end- "; /* menu[90]=" Vystupy 98"; menu[91]=" 91:Vystup 1 "; menu[92]=" 92:Vystup 2 "; menu[93]=" 93:Vystup 3 "; menu[94]=" 94:Vystup 4 "; menu[95]=" 95:Vystup 5 "; menu[96]=" 96:Vystup 6 "; menu[97]=" 97:Vystup 7 "; menu[98]=" 98:Vystup 8 "; menu[99]=" -Menu end- ";*/ } ///////////////////////////////////////// void Delay(int del) {int d; for (d=0; d<1*del; d++) i=i; } ///////////////////////////////// void Beep(int t) { BitWrPortI(PEDR, &PEDRShadow, 0, 7); for (f=0; f<(400/t); f++) // kvuli chybe v hw navrhu probiha rizeni vystupu nastavovanim portu jako vstup a vystup v PEDDR.. vstup pak odpovida log1 a vystup log. 0 { //WrPortI(PEDDR,&PEDDRShadow, 0x40); BitWrPortI(PEDDR, &PEDDRShadow, 1, 7); Delay(10*t); BitWrPortI(PEDDR, &PEDDRShadow, 0, 7); Delay(10*t); } } void Beep2(int t,int d) { BitWrPortI(PEDR, &PEDRShadow, 0, 7); for (f=0; f<(10*d/t); f++) // ((int)((1/t)*400)) { BitWrPortI(PEDDR, &PEDDRShadow, 1, 7); Delay(10*t); BitWrPortI(PEDDR, &PEDDRShadow, 0, 7); Delay(10*t); } } ///////////////////////////////////////// prodleva void MsDelay(unsigned long milliSeconds) { unsigned long ul0; ul0 = MS_TIMER; // get the current timer value while(MS_TIMER < ul0 + milliSeconds); } ///////////////////////////////////////////rozdeleni bytu na bity void ByteToBit(char byte, int bit[8]) { int a, b; b=0; for(a=128;a>0;a=a/2) { if ((byte&a)!=0) bit[b]=1; if ((byte&a)==0) bit[b]=0; if (b==7) break; else b++; } } /////////////////////////////////////////////////////// zapise jeden znak (vola ByteToBit) void LcdWrite(int rs, char data) { int bit[8]; ByteToBit(data, bit); BitWrPortI(PBDR, &PBDRShadow, rs, RSADDR); BitWrPortI(PADR, &PADRShadow, bit[3], 4); BitWrPortI(PADR, &PADRShadow, bit[2], 5); BitWrPortI(PADR, &PADRShadow, bit[1], 6); BitWrPortI(PADR, &PADRShadow, bit[0], 7); // MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 1, ENADDR); Delay(200); BitWrPortI(PBDR, &PBDRShadow, 0, ENADDR); Delay(200); //MsDelay(1); BitWrPortI(PADR, &PADRShadow, bit[7], 4); BitWrPortI(PADR, &PADRShadow, bit[6], 5); BitWrPortI(PADR, &PADRShadow, bit[5], 6); BitWrPortI(PADR, &PADRShadow, bit[4], 7); //MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 1, ENADDR); Delay(200); BitWrPortI(PBDR, &PBDRShadow, 0, ENADDR); MsDelay(2); } ////////////////////////////////// inicializace displeje void LcdInit() { BitWrPortI(PBDR, &PBDRShadow, 0, RSADDR); BitWrPortI(PADR, &PADRShadow, 1, 4); BitWrPortI(PADR, &PADRShadow, 1, 5); BitWrPortI(PADR, &PADRShadow, 0, 6); BitWrPortI(PADR, &PADRShadow, 0, 7); MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 1, ENADDR); MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 0, ENADDR); MsDelay(5); BitWrPortI(PADR, &PADRShadow, 1, 4); BitWrPortI(PADR, &PADRShadow, 1, 5); BitWrPortI(PADR, &PADRShadow, 0, 6); BitWrPortI(PADR, &PADRShadow, 0, 7); MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 1, ENADDR); MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 0, ENADDR); MsDelay(1); BitWrPortI(PADR, &PADRShadow, 1, 4); BitWrPortI(PADR, &PADRShadow, 1, 5); BitWrPortI(PADR, &PADRShadow, 0, 6); BitWrPortI(PADR, &PADRShadow, 0, 7); MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 1, ENADDR); MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 0, ENADDR); MsDelay(1); BitWrPortI(PADR, &PADRShadow, 0, 4); BitWrPortI(PADR, &PADRShadow, 1, 5); BitWrPortI(PADR, &PADRShadow, 0, 6); BitWrPortI(PADR, &PADRShadow, 0, 7); MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 1, ENADDR); MsDelay(1); BitWrPortI(PBDR, &PBDRShadow, 0, ENADDR); MsDelay(1); // LcdWrite(0, 0xc4); // MsDelay(5); LcdWrite(0, 0x28); LcdWrite(0, 0x06); LcdWrite(0, 0x10); LcdWrite(0, 0x0c); LcdWrite(0, 0x01); MsDelay(2); } /////////////////////////////////////////////////// zapise jeden radek (vola LcdWrite) void LcdwriteRow(char s[15]) {int znak; for (znak=0; znak<16; znak++) { LcdWrite(1, s[znak]); } LcdWrite(0, 0xc0); }; /////////////////////////////////////////////////// zapise jeden radek vcetne krajnich sipek - pro menu. (vola LcdWrite) void LcdwriteRowSel(char s[15]) {int znak; LcdWrite(1, 0x7e); for (znak=1; znak<15; znak++) { LcdWrite(1, s[znak]); } LcdWrite(1, 0x7f); LcdWrite(0, 0xc0); }; //////////////////////// provede akci pri stisku klavesy ***************************************************** void KeyPress(char KP) {//prochazeni menu char* s; int ; Beep(20); switch (KP) { case 'M': { // MenuID=ceil(MenuID/10); MenuID=0; s=menu[MenuID]; MenuEn=1; //MenuID=0; // LcdWrite(1, s[16]); // LcdWrite(1, s[17]); ID0=s[16]-48; IDlim=s[17]-49; // ID0=0; // IDlim=7; break; } case 'A':{if (ADAct==0) ADAct=1; else ADAct=0; break;} case 'd':{MenuID++; break;} case 'n':{MenuID--; break;} case 'e':{ //dopsat druhy mod ovladani - pohyb kurzoru if(MenuEn==1&MenuID>=0&MenuID<10) {MenuID++; s=menu[MenuID*10]; ID0=(s[16]-48)*10; IDlim=s[17]-48-1+ID0; }else if(MenuEn==1&MenuID>9) { MenuID++ ; MenuEn=2; //LcdWrite(0, 0x80); //LcdwriteRow(menu[MenuID]); //LcdwriteRow(" "); //LcdwriteRow(" je to OK "); } break;} } if (MenuEn>0){ if (MenuID>IDlim) MenuID=IDlim; if (MenuID1) hilow=1; BitWrPortI(PDDR, &PDDRShadow, hilow, 4); } ///////////////////////////////////////// void SetOut(char inter,char exter) { int bit[8]; BitWrPortI(PFDR, &PFDRShadow, 1, CSAD); //cs AD 0 Delay(100); // BitWrPortI(PEDR, &PEDRShadow, 1, 6); ByteToBit(exter,bit); for (i=0; i<8; i++) { BitWrPortI(PCDR, &PCDRShadow, bit[i], 2); Delay(5); BitWrPortI(PFDR, &PFDRShadow, 1, 1); Delay(50); BitWrPortI(PFDR, &PFDRShadow, 0, 1); // MsDelay(1); } ByteToBit(inter,bit); for (i=0; i<8; i++) { BitWrPortI(PCDR, &PCDRShadow, bit[i], 2); Delay(5); BitWrPortI(PFDR, &PFDRShadow, 1, 1); Delay(50); BitWrPortI(PFDR, &PFDRShadow, 0, 1); //MsDelay(1); } BitWrPortI(PEDR, &PEDRShadow, 0, 6); Delay(1000); BitWrPortI(PEDR, &PEDRShadow, 1, 6); Delay(10); } //////////////////////////////////////////////////////////////// // ------------------ hlavni prgram --------------------------// // ***********************************************************// ///////////////////////////////////////////////////////////////. void main() { MenuID=0; MenuInit(); MenuEn=0; ADAct=0; klav='x';klavp='y'; kdal=0; WrPortI(SPCR, &SPCRShadow, 0x84); // Nastaveni portu A, vše vystup WrPortI(PBDDR,&PBDDRShadow, 0x0c); // Nastaveni portu B, WrPortI(PCFR,&PCFRShadow, 0xf0); // Nastaveni portu C, co jde, tak výstupy WrPortI(PDDDR,&PDDDRShadow, 0x10); // Nastaveni portu D, 0x10, PD4 - vystup,regulace zdroje WrPortI(PEDDR,&PEDDRShadow, 0x40); // Nastaveni portu E, 0xc0, PE6-rck, PE7 vystupy WrPortI(PFDDR,&PFDDRShadow, 0xff); // Nastaveni portu F, //WrPortI(PBDR, &PBDRShadow, 0x0); BitWrPortI(PFDR, &PFDRShadow, 1, 0); SetOut(0xb0,0x00); LcdInit(); //menu[0][0]=0x7e; LcdwriteRow(" EZS ustredna "); //LcdWrite(1, 0x7f); LcdwriteRow(" Bc. Jiri Vlach "); LcdWrite(0, 0x80); // LcdWrite(1, 0x7e); //sipka /////// uvodni znelka /////////////////// Beep2(30,200); Delay(20000); Beep2(28,200); Delay(20000); Beep2(25,200); Delay(20000); Beep2(22,200); Beep2(22,200); Delay(20000); Beep2(25,200); Delay(20000); Beep2(28,200); Delay(20000); Beep2(25,200); Beep2(25,200); Delay(20000); Beep2(20,200); //////////////////////////////// SetCharge(0); MCAnalogMux(1); while(1) { TestKey() ; if (ADAct==1) { ADtoLCD(ADRead()); LcdWrite(0, 0x80); } //SetOut(0xb0,0x00); //MsDelay(1000); //SetOut(0x7f,0x00); //MsDelay(1000); } }