Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.40 KB | None | 0 0
  1. /**********************************************************************************/
  2. /*     Program symulatora SP-841/AVR w wersji do zadań z przebiegów czestotliwoscowych     */
  3. /**********************************************************************************/
  4. #include "WorkPrzebieg.h"           // Definicje zmiennych i prototypy funkcji SP
  5. #include "Zadania.h"                // Zadania użytkownika
  6. #include <Windows.h>
  7. #include <process.h>
  8.  
  9. enum GLOWNY_GRAF
  10. {
  11.     G1, G2, G3, G4, G5, G6, G7, G8, G9, G10
  12. };
  13.  
  14. enum GRAF_WEWNETRZNY
  15. {
  16.     A0, A1, A2, A3,
  17.     B0, B1, B2, B3,
  18.     C0, C1, C2, C3, C4, C5,
  19.     D0, D1, D2, D3,
  20.     AL0, AL1, AL2,
  21.     AO0, AO1, AO2,
  22.     IW0, IW1, IW2, IW3,
  23.     OK0, OK1, OK2
  24. };
  25.  
  26. enum GRAF_SWIATLA
  27. {
  28.    
  29. };
  30.  
  31.  
  32. char drzwi, swiatla, okna, klakson, dioda_wlaman;
  33. char OZDrzwi,  prevOZDrzwi, OtwOkien, ZamOkien, CzujnikWlamania, AwaryjneOtwDrzwi, WylaczAlarm, SprawdzIleWlaman;
  34. char W_swiatla, W_klakson, W4_swiatla, W4_klakson, W5_swiatla, W5_klakson, W9_klakson, W10_dioda, W6_okna;
  35. GLOWNY_GRAF glowny_graf;
  36. GRAF_WEWNETRZNY graf_wewnetrzny, graf_wewnetrzny2, stan_swiatla_G4, stan_klakson_G4, stan_alarmu_G5, stan_alarmu_G9, stan_wlaman_G10, stan_okien_G6;
  37. GRAF_SWIATLA stan_swiatla;
  38. int tim, tim2, czestotliwosc, odchylenie;
  39. char licz, licz_wlaman;
  40. unsigned int flaga ,flaga1, flaga2, G2_start, G4_start, G5_start, G9_start, G10_start, G6_start, flaga_okna;
  41.  
  42. void inicjuj(void)                  // Inicjowanie programu (jednorazowo przy starcie)
  43. {
  44.     glowny_graf = G1;
  45.     graf_wewnetrzny = A0;
  46.     graf_wewnetrzny2 = B0;
  47.     stan_swiatla_G4 = D0;
  48.     stan_klakson_G4 = C0;
  49.     stan_alarmu_G5 = AL0;
  50.     stan_alarmu_G9 = AO0;
  51.     stan_wlaman_G10 = IW0;
  52.     stan_okien_G6 = OK0;
  53.     odchylenie = 0;
  54.     flaga = 0;
  55. }
  56.  
  57.  
  58.  
  59. void oblicz(void)                   // Kod użytkownika - wykonywany co wCykl [ms]
  60. {
  61.     //L1 = aK1;                     // Zaświeć L1 jeśli naciśnięty K1
  62.     //L2 = aK2;                     // Zaświeć L2 jeśli naciśnięty K2
  63.     //L3 = aK3;                     // Zaświeć L3 jeśli naciśnięty K3
  64.     //L4 = aK4;                     // Zaświeć L4 jeśli naciśnięty K4
  65.    
  66.     //zadanie1();                       // Funkcja z pliku "Zadania.h"
  67.  
  68.     //sprintf(buf,"a=%db=%dc=%dd=%d ",(int)aK1,(int)aK2,(int)aK3,(int)aK4);
  69.     //LCD_xy(1,1); LCD_puts(buf);
  70.     //sprintf(buf,"G1=%dG2=%dG3=%dW=%d ",(int)L1,(int)L2,(int)L3,(int)L4);
  71.     //LCD_xy(1,2); LCD_puts(buf);
  72.  
  73.     OZDrzwi = aK1;
  74.     OtwOkien = aK2;
  75.     ZamOkien = aK3;
  76.     CzujnikWlamania = aK4;
  77.     AwaryjneOtwDrzwi = aK5;
  78.     WylaczAlarm = aK6;
  79.     SprawdzIleWlaman = aK7;
  80.  
  81.     prevOZDrzwi = pK1;
  82.  
  83.     switch (glowny_graf){
  84.         case G1:
  85.             drzwi = 0;
  86.             swiatla = 0;
  87.             klakson = 0;
  88.             dioda_wlaman = 0;
  89.             okna = 0;
  90.             if (OZDrzwi && !prevOZDrzwi) {glowny_graf = G2; G2_start = 1;}
  91.             else
  92.             if (CzujnikWlamania) {glowny_graf = G5; tim = 5000; G5_start = 1;}
  93.             else
  94.             if (AwaryjneOtwDrzwi) {glowny_graf = G9; czestotliwosc = 200; G9_start = 1;}
  95.             break;
  96.  
  97.         case G2:
  98.             drzwi = 1;
  99.             swiatla = W_swiatla;
  100.             klakson = W_klakson;
  101.             dioda_wlaman = 0;
  102.             okna = 0;
  103.  
  104.             if (flaga1 && flaga2) {glowny_graf = G3; G2_start = 0;}
  105.             else
  106.             if (OZDrzwi && !prevOZDrzwi) {glowny_graf = G4; G4_start = 1;}
  107.             break;
  108.  
  109.         case G3:
  110.             drzwi = 1;
  111.             swiatla = 0;
  112.             klakson = 0;
  113.             dioda_wlaman = 0;
  114.             okna = 0;
  115.             if (OtwOkien) {glowny_graf = G6; G6_start = 1;}
  116.             else
  117.             if (OZDrzwi && !prevOZDrzwi) {glowny_graf = G4; G4_start = 1;}
  118.             else
  119.             if (SprawdzIleWlaman) {glowny_graf = G10; G10_start = 1;}
  120.             break;
  121.  
  122.         case G4:
  123.             drzwi = 0;
  124.             swiatla = W4_swiatla;
  125.             klakson = W4_klakson;
  126.             dioda_wlaman = 0;
  127.             okna = 0;
  128.             if (OZDrzwi && !prevOZDrzwi) {glowny_graf = G2; G2_start = 1;}
  129.             else
  130.             if (flaga1 && flaga2) {glowny_graf = G1; G4_start = 0;}
  131.             break;
  132.  
  133.         case G5:
  134.             //alarm
  135.             drzwi = 0;
  136.             swiatla = W5_swiatla;
  137.             klakson = W5_klakson;
  138.             dioda_wlaman = 0;
  139.             okna = 0;
  140.             if (!tim) {licz_wlaman++; glowny_graf = G1; G5_start = 0;}
  141.             else
  142.             if (OZDrzwi && !prevOZDrzwi) {glowny_graf = G1; G5_start = 0; tim = 0;}
  143.  
  144.             break;
  145.  
  146.         case G6:
  147.             drzwi = 1;
  148.             swiatla = 0;
  149.             klakson = 0;
  150.             dioda_wlaman = 0;
  151.             okna = W6_okna;
  152.  
  153.  
  154.             if (OtwOkien || (odchylenie == 200)) {glowny_graf = G7;}
  155.             else
  156.             if (ZamOkien) {glowny_graf = G8;}
  157.             else
  158.             if (OZDrzwi) {glowny_graf = G8, flaga_okna = 1;}
  159.  
  160.             break;
  161.         case G7:
  162.             drzwi = 1;
  163.             swiatla = 0;
  164.             klakson = 0;
  165.             dioda_wlaman = 0;
  166.             okna = W6_okna;
  167.  
  168.             if (OtwOkien && (odchylenie != 200)) {glowny_graf = G6;}
  169.             else
  170.             if (ZamOkien) {glowny_graf = G8;}
  171.             else
  172.             if (OZDrzwi) {glowny_graf = G8, flaga_okna = 1;}
  173.             else
  174.             if (SprawdzIleWlaman) {glowny_graf = G10; G10_start = 1; flaga = 1;}
  175.  
  176.             break;
  177.         case G8:
  178.             drzwi = 1;
  179.             swiatla = 0;
  180.             klakson = 0;
  181.             dioda_wlaman = 0;
  182.             okna = W6_okna;
  183.  
  184.             if (!odchylenie && !flaga_okna) {glowny_graf = G3; flaga_okna = 0; G6_start = 0;}
  185.             else
  186.             if (OtwOkien) {glowny_graf = G6;}
  187.             else
  188.             if (ZamOkien) {glowny_graf = G7;}
  189.             else
  190.             if (!odchylenie && flaga_okna) {glowny_graf = G4, flaga_okna = 0; G4_start = 1; G6_start = 0;}
  191.  
  192.             break;
  193.         case G9:
  194.             drzwi = 0;
  195.             swiatla = 0;
  196.             klakson = W9_klakson;
  197.             dioda_wlaman = 0;
  198.             okna = 0;
  199.             if (!czestotliwosc) {glowny_graf = G5; tim = 5000; G5_start = 1;}
  200.             else
  201.             if (WylaczAlarm) {glowny_graf = G2; G2_start = 1;}
  202.             break;
  203.         case G10:
  204.             drzwi = 1;
  205.             swiatla = 0;
  206.             klakson = 0;
  207.             dioda_wlaman = W10_dioda;
  208.             okna = W6_okna;
  209.             if (flaga1 && !flaga) {glowny_graf = G3; G10_start = 0;}
  210.             else
  211.             if (flaga1 && flaga) {glowny_graf = G7; G10_start = 0; flaga = 0;}
  212.             break;
  213.            
  214.     }
  215.  
  216.     //sterowanie otwarciem swiatla i klakson
  217.     switch (graf_wewnetrzny){
  218.                 case A0:
  219.                     W_swiatla = 0;
  220.                     if(G2_start && glowny_graf == G2) {graf_wewnetrzny = A1; tim = 200; flaga1 = 0; licz = 1;}
  221.                     else
  222.                     if(glowny_graf != G2) {graf_wewnetrzny = A0;}
  223.                     break;
  224.                 case A1:
  225.                     W_swiatla = 1;
  226.                     if(!tim && glowny_graf == G2) {tim = 200; graf_wewnetrzny = A2;}
  227.                     else
  228.                     if(glowny_graf != G2) {graf_wewnetrzny = A0;}
  229.                     break;
  230.                 case A2:
  231.                     if(licz == 3 && glowny_graf == G2) {graf_wewnetrzny = A3; flaga1 = 1;}
  232.                     else
  233.                     if(!tim && glowny_graf == G2) {tim = 200; graf_wewnetrzny = A1; licz++;}
  234.                     else
  235.                     if(glowny_graf != G2) {graf_wewnetrzny = A0;}
  236.                     W_swiatla = 0;
  237.                     break;
  238.                 case A3:
  239.                     W_swiatla = 0;
  240.                     if(!G2_start)graf_wewnetrzny = A0;
  241.                     break;
  242.             }
  243.  
  244.     switch (graf_wewnetrzny2){
  245.                 case B0:
  246.                     W_klakson = 0;
  247.                     if(G2_start && glowny_graf == G2) {graf_wewnetrzny2 = B1; tim2 = 200; flaga2 = 0;}
  248.                     else
  249.                     if(glowny_graf != G2) {graf_wewnetrzny2 = B0;}
  250.                     break;
  251.                 case B1:
  252.                     W_klakson = 0;
  253.                     if(!tim2 && glowny_graf == G2) {tim2 = 200; graf_wewnetrzny2 = B2;}
  254.                     else
  255.                     if(glowny_graf != G2) {graf_wewnetrzny2 = B0;}
  256.                     break;
  257.                 case B2:
  258.                     W_klakson = 1;
  259.                     if(!tim2 && glowny_graf == G2) {graf_wewnetrzny2 = B3; flaga2 = 1;}
  260.                     else
  261.                     if(glowny_graf != G2) {graf_wewnetrzny2 = B0;}
  262.                     break;
  263.                 case B3:
  264.                     W_klakson = 0;
  265.                     if(!G2_start)graf_wewnetrzny2 = B0;
  266.                     break;
  267.             }
  268.  
  269.     // sterowanie swiatla i klakson dla zamkniecia drzwi
  270.  
  271.     switch (stan_swiatla_G4){
  272.                 case D0:
  273.                     W4_swiatla = 0;
  274.                     if(G4_start && glowny_graf == G4) {stan_swiatla_G4 = D1; tim = 200; flaga1 = 0; licz = 1;}
  275.                     else
  276.                     if(glowny_graf != G4) {stan_swiatla_G4 = D0;}
  277.                     break;
  278.                 case D1:
  279.                     W4_swiatla = 1;
  280.                     if(!tim && glowny_graf == G4) {tim = 200; stan_swiatla_G4 = D2;}
  281.                     else
  282.                     if(glowny_graf != G4) {stan_swiatla_G4 = D0;}
  283.                     break;
  284.                 case D2:
  285.                     if(licz == 3 && glowny_graf == G4) {stan_swiatla_G4 = D3; flaga1 = 1;}
  286.                     else
  287.                     if(!tim && glowny_graf == G4) {tim = 200; stan_swiatla_G4 = D1; licz++;}
  288.                     else
  289.                     if(glowny_graf != G4) {stan_swiatla_G4 = D0;}
  290.                     W4_swiatla = 0;
  291.                     break;
  292.                 case D3:
  293.                     W4_swiatla = 0;
  294.                     if(!G4_start)stan_swiatla_G4 = D0;
  295.                     break;
  296.             }
  297.  
  298.     switch (stan_klakson_G4){
  299.                 case C0:
  300.                     W4_klakson = 0;
  301.                     if(G4_start && glowny_graf == G4) {stan_klakson_G4 = C1; tim2 = 200; flaga2 = 0;}
  302.                     else
  303.                     if(glowny_graf != G4) {stan_klakson_G4 = C0;}
  304.                     break;
  305.                 case C1:
  306.                     W4_klakson = 0;
  307.                     if(!tim2 && glowny_graf == G4) {tim2 = 200; stan_klakson_G4 = C2;}
  308.                     else
  309.                     if(glowny_graf != G4) {stan_klakson_G4 = C0;}
  310.                     break;
  311.                 case C2:
  312.                     W4_klakson = 1;
  313.                     if(!tim2 && glowny_graf == G4) {tim2 = 200; stan_klakson_G4 = C3;}
  314.                     else
  315.                     if(glowny_graf != G4) {stan_klakson_G4 = C0;}
  316.                     break;
  317.                 case C3:
  318.                     W4_klakson = 0;
  319.                     if(!tim2 && glowny_graf == G4) {tim2 = 200; stan_klakson_G4 = C4;}
  320.                     else
  321.                     if(glowny_graf != G4) {stan_klakson_G4 = C0;}
  322.                     break;
  323.                 case C4:
  324.                     W4_klakson = 1;
  325.                     if(!tim2 && glowny_graf == G4) {stan_klakson_G4 = C5; flaga2 = 1;}
  326.                     else
  327.                     if(glowny_graf != G4) {stan_klakson_G4 = C0;}
  328.                     break;
  329.                 case C5:
  330.                     W4_klakson = 0;
  331.                     if(!G4_start)stan_klakson_G4 = C0;
  332.                     break;
  333.             }
  334.  
  335.     //graf odpowiedzialny za sterowanie alarmem
  336.             switch (stan_alarmu_G5)
  337.             {
  338.                 case AL0:
  339.                     W5_swiatla = 0;
  340.                     W5_klakson = 0;
  341.                     if(G5_start && glowny_graf == G5) {stan_alarmu_G5 = AL1; tim2 = 300;}
  342.                     break;
  343.                 case AL1:
  344.                     W5_swiatla = 1;
  345.                     W5_klakson = 1;
  346.                     if (!tim2 && glowny_graf == G5) {tim2 = 200; stan_alarmu_G5 = AL2;}
  347.                     else
  348.                     if (glowny_graf != G5) {stan_alarmu_G5 = AL0;}
  349.                     break;
  350.                 case AL2:
  351.                     W5_swiatla = 0;
  352.                     W5_klakson = 0;
  353.                     if (!tim2 && glowny_graf == G5) {tim2 = 300; stan_alarmu_G5 = AL1;}
  354.                     else
  355.                     if (glowny_graf != G5) {stan_alarmu_G5 = AL0;}
  356.                     break;
  357.             }
  358.  
  359.     //graf do sterowania alarmem przy otwieraniu awaryjnym
  360.             switch (stan_alarmu_G9)
  361.             {
  362.                 case AO0:
  363.                     W9_klakson = 0;
  364.                     if(G9_start && glowny_graf == G9) {stan_alarmu_G9 = AO1; tim = czestotliwosc;}
  365.                     break;
  366.                 case AO1:
  367.                     W9_klakson = 1;
  368.                     if (!tim && glowny_graf == G9) {tim = czestotliwosc; stan_alarmu_G9 = AO2;}
  369.                     else
  370.                     if (glowny_graf != G9) {stan_alarmu_G9 = AO0;}
  371.                     else
  372.                     if (!czestotliwosc) {stan_alarmu_G9 = AO0;}
  373.                     break;
  374.                 case AO2:
  375.                     W9_klakson = 0;
  376.                     if (!tim && glowny_graf == G9) {tim = czestotliwosc; stan_alarmu_G9 = AO1; czestotliwosc -= 10;}
  377.                     else
  378.                     if (glowny_graf != G9) {stan_alarmu_G9 = AO0;}
  379.                     break;
  380.             }
  381.     //sprawdzenie ile jest wlaman
  382.             switch (stan_wlaman_G10)
  383.             {
  384.                 case IW0:
  385.                     W10_dioda = 0;
  386.                     if(G10_start && licz_wlaman) {stan_wlaman_G10 = IW1; tim = 100; flaga1 = 0;}
  387.                     break;
  388.                 case IW1:
  389.                     W10_dioda = 1;
  390.                     if (!tim) {tim = 100; stan_wlaman_G10 = IW2; licz_wlaman --;}
  391.                     break;
  392.                 case IW2:
  393.                     W10_dioda = 0;
  394.                     if (!licz_wlaman) {stan_wlaman_G10 = IW3; flaga1 = 1;}
  395.                     else
  396.                     if (!tim && licz_wlaman) {tim = 100; stan_wlaman_G10 = IW1;}
  397.                     break;
  398.                 case IW3:
  399.                     W10_dioda = 0;
  400.                     if(!G10_start) stan_wlaman_G10 = IW0;
  401.                     break;
  402.             }
  403.  
  404.  
  405.     //sterowanie oknami
  406.     //otwieranie okien
  407.             switch (stan_okien_G6)
  408.             {
  409.                 case OK0:
  410.                     W6_okna = 0;
  411.                     if(G6_start) {stan_okien_G6 = OK1; tim = odchylenie;}
  412.                     break;
  413.                 case OK1:
  414.                     W6_okna = 1;
  415.                     if ((odchylenie == 200) && (glowny_graf == G7)) {stan_okien_G6 = OK1;}
  416.                     else
  417.                     if (!tim) {tim = odchylenie; stan_okien_G6 = OK2;}
  418.                     break;
  419.                 case OK2:
  420.                     W6_okna = 0;
  421.                     if (!tim && glowny_graf == G6) {tim = odchylenie; stan_okien_G6 = OK1; odchylenie += 10;}
  422.                     else
  423.                     if (!tim && glowny_graf == G7) {tim = odchylenie; stan_okien_G6 = OK1;}
  424.                     else
  425.                     if (!tim && glowny_graf == G8) {tim = odchylenie; stan_okien_G6 = OK1; odchylenie -= 10;}
  426.                     break;
  427.            
  428.             }
  429.  
  430.  
  431.     L1 = drzwi;
  432.     L2 = swiatla;
  433.     L3 = okna;
  434.     L4 = klakson;
  435.     L5 = dioda_wlaman;
  436.  
  437. }
  438.  
  439. void int_T0(void)                   // Przerwanie od T0/T1/T2 wywoływane tIntr [ms]
  440. {
  441.     if(tim) --tim;
  442.     if(tim1) --tim1;
  443.     if(tim2) --tim2;
  444. }
  445.  
  446. void WykresyPC()                    // Opisy/wartości wykresów i zmiennych pomocniczych
  447. {
  448.     //aNazwa[0]="licz1";  aWykres[0]= (float)licz1;
  449.     //bNazwa[8]="tim1!=0"; bWykres[8]= tim1!=0;
  450.    
  451.     bNazwa[0]="DRZWI";  bWykres[0] = drzwi;
  452.     bNazwa[1]="ŚWIATŁA"; bWykres[1] = swiatla;
  453.     bNazwa[2]="OKNA"; bWykres[2] = okna;
  454.     bNazwa[3]="KLAKSON"; bWykres[3] = klakson;
  455.     bNazwa[4]="DIODA WLAMAŃ"; bWykres[4] = dioda_wlaman;
  456.  
  457.  
  458.     //iNazwa[0]="Moja zmienna"; iZmienna[0]=licz;
  459.     iNazwa[2]="tim";  iZmienna[2]= tim;
  460.     iNazwa[3]="czestotliwosc";  iZmienna[3]= czestotliwosc;
  461.     iNazwa[4]="odchylenie"; iZmienna[4]= odchylenie;
  462.     iNazwa[5]="W9_klakson"; iZmienna[5]= W9_klakson;
  463.     iNazwa[6]="stan"; iZmienna[6]= glowny_graf +1;
  464.     iNazwa[7]="wlamania"; iZmienna[7]= licz_wlaman;
  465.    
  466. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement