Advertisement
Cieslin

PM#1

Oct 10th, 2018
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.75 KB | None | 0 0
  1. #include "iodefine.h"
  2. #include "lcd.h"
  3. #include "inline.h"
  4.  
  5. #define KEYObszar 0x20001                                                      
  6. #define KEY_data (*(volatile unsigned char *) (KEYObszar))                     
  7.  
  8. //definicja klawiszy
  9. #define K1 0x7E
  10. #define K2 0x7D
  11. #define K3 0x7B
  12. #define K4 0x77
  13.  
  14. unsigned char napis_KENER[] = "KENER";
  15.  
  16. void Ekran_startowy(void);
  17.  
  18. //definicja zmiennych globalnych
  19. short i = 0;
  20. short amplituda = 100;
  21. short okres = 50;
  22. long temp;
  23.  
  24. void SetCounters()
  25. {
  26.     AD.ADCSR.BYTE = 0x33;           //ustawienie potencjometru
  27.    
  28.     ITU.TSTR.BYTE = 0x01;           //wylaczenie licznikow
  29.     ITU.TMDR.BIT.PWM3 = 1;          //ustawienie kanalu 3 w faze zliczania
  30.     ITU.TFCR.BYTE = 0xC2;           //ustawienie kanalu 3 jako PWM
  31.  
  32.     ITU3.TCR.BYTE = 0xA0;           //czysczenie sygnalu przez GRA
  33.     ITU3.GRA = 4000;                //wartosci poczatkowe
  34.     ITU3.GRB = 4000;                //
  35.     ITU3.BRB = 4000;                //
  36.     ITU3.TIOR.BIT.IOB = 0;         
  37.     ITU.TSTR.BIT.STR3 = 1;          //wlaczenie licznika na kanale 3
  38.     ITU3.TIER.BIT.IMIEA = 1;        //wlaczenie przerwan kanalu 3
  39.    
  40.     ITU.TSTR.BIT.STR0 = 0;          //wylaczenie licznika na kanale 0
  41.     ITU0.TCR.BYTE = 0xA3;           //czyszczenie sygnalu przez GRB
  42.     ITU0.GRA = 1000000;             //wartosc poczatkowa GRA
  43.     ITU0.TIER.BYTE = 0xF8;          //wlaczenie przerwan na kanale 0
  44.     ITU.TSTR.BIT.STR0 = 1;          //wlaczenie licznika na kanale 0
  45. }
  46.  
  47. //definicja fukncji do wyswietlania ciagu znakow
  48. void puts(unsigned char *napis)
  49. {
  50.     int x = 0;
  51.     while(napis[x] != '\0')
  52.     {
  53.         putchar(napis[x++]);
  54.     }
  55. }
  56.  
  57. //definicja funkcji do wyswietlania zmiennych typu short w zakresie 0-99
  58. void PutsINT2(short x)
  59. {
  60.     short tab[2];
  61.     char liczba[2];
  62.     if(x < 0) x = 0;
  63.     if(x > 99) x = 99;
  64.    
  65.     tab[1] = x%10;
  66.     x -= tab[1];
  67.     x /=10;
  68.     tab[0] = x%10;
  69.    
  70.     liczba[0] = tab[0]+'0';
  71.     liczba[1] = tab[1]+'0';
  72.  
  73.     puts(liczba);
  74. }
  75.  
  76. //definicja funkcji do wyswietlania zmiennych typu short w zakresie 0-999
  77. void PutsINT3(short x)
  78. {
  79.     short tab[3];
  80.     char liczba[3];
  81.     if(x < 0) x = 0;
  82.     if(x > 999) x = 999;
  83.    
  84.     tab[2] = x%10;
  85.     x -= tab[2];
  86.     x /=10;
  87.     tab[1] = x%10;
  88.     x -= tab[1];
  89.     x /=10;
  90.     tab[0] = x%10;
  91.    
  92.     liczba[0] = tab[0]+'0';
  93.     liczba[1] = tab[1]+'0';
  94.     liczba[2] = tab[2]+'0';
  95.  
  96.     puts(liczba);
  97. }
  98.  
  99. //definicja funkcji do wyswietlania zmiennych typu short w zakresie 0-9999
  100. void PutsINT4(short x)
  101. {
  102.     short tab[4];
  103.     char liczba[4];
  104.     if(x < 0) x = 0;
  105.     if(x > 9999) x = 9999;
  106.    
  107.     tab[3] = x%10;
  108.     x -= tab[3];
  109.     x /=10;
  110.     tab[2] = x%10;
  111.     x -= tab[2];
  112.     x /=10;
  113.     tab[1] = x%10;
  114.     x -= tab[1];
  115.     x /=10;
  116.     tab[0] = x%10;
  117.    
  118.     liczba[0] = tab[0]+'0';
  119.     liczba[1] = tab[1]+'0';
  120.     liczba[2] = tab[2]+'0';
  121.     liczba[3] = tab[3]+'0';
  122.    
  123.     puts(liczba);
  124. }
  125.  
  126. int main (void)
  127. {
  128.     IniLCD();                   //zainicjowanie wyswietlacza
  129.     SetCounters();              //ustawienia licznikow
  130.    
  131.     GotoXY(1,1);   
  132.     puts("A=   %");
  133.     GotoXY(2,1);
  134.     puts("t=  %");
  135.     GotoXY(1,12);
  136.     puts("start");              //wyswietlenie poczatkowego stanu wyswietlacza
  137.    
  138.     while(1)                       
  139.     {  
  140.         if(ITU0.TSR.BIT.IMFA==1)        //sprawdzenie, czy licznik 0 skonczyl odliczanie
  141.         {
  142.             if(KEY_data == K1)          //sprawdzenie, czy klawisz 1 jest nacisniety
  143.             {
  144.                 GotoXY(1,12);
  145.                 puts("start");
  146.                 ITU3.TIER.BIT.IMIEA=1;  //wyswietlenie na ekranie napisu "start" i wlaczenie generatora
  147.             }
  148.             else if(KEY_data == K2)     //sprawdzenie, czy klawisz 2 jest nacisniety
  149.             {
  150.                 GotoXY(1,12);
  151.                 puts("stop!");
  152.                 ITU3.TIER.BIT.IMIEA=0;  //wyswietlenie na ekranie napisu "stop" i wylaczenie generatora
  153.             }
  154.             else if(KEY_data == K3)     //sprawdzenie, czy klawisz 3 jest nacisniety
  155.             {
  156.                 amplituda++;
  157.                 if(amplituda > 100) amplituda = 100;    //zwiekszenie wartosci amplitudy o 1, jesli jest wieksza od 100 to ustawienie na 100
  158.             }
  159.             else if(KEY_data == K4)
  160.             {
  161.                 amplituda--;
  162.                 if(amplituda < 0) amplituda = 0;        //zmniejszenie wartosci amplitudy o 1, jesli jest mniejsza od 0 to ustawienie na 0
  163.             }
  164.             if(AD.ADCSR.BIT.ADF==1)                     //sprawdzenie, czy stan potencjometru zostal zmieniony
  165.             {
  166.                 okres = (AD.ADDRC>>6)*51/1024;          //ustawienie nowej wartosci okresu sygnalu po przeliczeniu
  167.                 GotoXY(2,14);
  168.                 if(okres == 0)
  169.                 {
  170.                     puts("min");
  171.                 }
  172.                 else if(okres == 50)
  173.                 {
  174.                     puts("max");
  175.                 }
  176.                 else
  177.                 {
  178.                     puts("   ");
  179.                 }                                       //jesli okres wynosi 0 wyswietlenie min, jesli 50 max, a jesli ma wartosc pomiedzy to nie wyswietlenie niczego
  180.                 AD.ADCSR.BIT.ADF=0;                     //ustawienie stanu potencjometru spowrotem na 0
  181.             }
  182.             GotoXY(1,3);
  183.             PutsINT3(amplituda);                        //wyswietlenie aktualnej wartosci amplitudy
  184.            
  185.             GotoXY(2,3);
  186.             PutsINT2(okres);                            //wyswietlenie aktualnej wartosci okresu
  187.            
  188.             ITU0.TSR.BIT.IMFA=0;                        //wyzerowanie licznika 0
  189.         }  
  190.     }
  191. }
  192.  
  193. void Ekran_startowy(void)       //ekran startowy :)
  194. {
  195.     puts("Dzien dobry Panie Hyla! :)");
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement