Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "iodefine.h"
- #include "lcd.h"
- #include "inline.h"
- #define KEYObszar 0x20001
- #define KEY_data (*(volatile unsigned char *) (KEYObszar))
- //definicja klawiszy
- #define K1 0x7E
- #define K2 0x7D
- #define K3 0x7B
- #define K4 0x77
- unsigned char napis_KENER[] = "KENER";
- void Ekran_startowy(void);
- //definicja zmiennych globalnych
- short i = 0;
- short amplituda = 100;
- short okres = 50;
- long temp;
- void SetCounters()
- {
- AD.ADCSR.BYTE = 0x33; //ustawienie potencjometru
- ITU.TSTR.BYTE = 0x01; //wylaczenie licznikow
- ITU.TMDR.BIT.PWM3 = 1; //ustawienie kanalu 3 w faze zliczania
- ITU.TFCR.BYTE = 0xC2; //ustawienie kanalu 3 jako PWM
- ITU3.TCR.BYTE = 0xA0; //czysczenie sygnalu przez GRA
- ITU3.GRA = 4000; //wartosci poczatkowe
- ITU3.GRB = 4000; //
- ITU3.BRB = 4000; //
- ITU3.TIOR.BIT.IOB = 0;
- ITU.TSTR.BIT.STR3 = 1; //wlaczenie licznika na kanale 3
- ITU3.TIER.BIT.IMIEA = 1; //wlaczenie przerwan kanalu 3
- ITU.TSTR.BIT.STR0 = 0; //wylaczenie licznika na kanale 0
- ITU0.TCR.BYTE = 0xA3; //czyszczenie sygnalu przez GRB
- ITU0.GRA = 1000000; //wartosc poczatkowa GRA
- ITU0.TIER.BYTE = 0xF8; //wlaczenie przerwan na kanale 0
- ITU.TSTR.BIT.STR0 = 1; //wlaczenie licznika na kanale 0
- }
- //definicja fukncji do wyswietlania ciagu znakow
- void puts(unsigned char *napis)
- {
- int x = 0;
- while(napis[x] != '\0')
- {
- putchar(napis[x++]);
- }
- }
- //definicja funkcji do wyswietlania zmiennych typu short w zakresie 0-99
- void PutsINT2(short x)
- {
- short tab[2];
- char liczba[2];
- if(x < 0) x = 0;
- if(x > 99) x = 99;
- tab[1] = x%10;
- x -= tab[1];
- x /=10;
- tab[0] = x%10;
- liczba[0] = tab[0]+'0';
- liczba[1] = tab[1]+'0';
- puts(liczba);
- }
- //definicja funkcji do wyswietlania zmiennych typu short w zakresie 0-999
- void PutsINT3(short x)
- {
- short tab[3];
- char liczba[3];
- if(x < 0) x = 0;
- if(x > 999) x = 999;
- tab[2] = x%10;
- x -= tab[2];
- x /=10;
- tab[1] = x%10;
- x -= tab[1];
- x /=10;
- tab[0] = x%10;
- liczba[0] = tab[0]+'0';
- liczba[1] = tab[1]+'0';
- liczba[2] = tab[2]+'0';
- puts(liczba);
- }
- //definicja funkcji do wyswietlania zmiennych typu short w zakresie 0-9999
- void PutsINT4(short x)
- {
- short tab[4];
- char liczba[4];
- if(x < 0) x = 0;
- if(x > 9999) x = 9999;
- tab[3] = x%10;
- x -= tab[3];
- x /=10;
- tab[2] = x%10;
- x -= tab[2];
- x /=10;
- tab[1] = x%10;
- x -= tab[1];
- x /=10;
- tab[0] = x%10;
- liczba[0] = tab[0]+'0';
- liczba[1] = tab[1]+'0';
- liczba[2] = tab[2]+'0';
- liczba[3] = tab[3]+'0';
- puts(liczba);
- }
- int main (void)
- {
- IniLCD(); //zainicjowanie wyswietlacza
- SetCounters(); //ustawienia licznikow
- GotoXY(1,1);
- puts("A= %");
- GotoXY(2,1);
- puts("t= %");
- GotoXY(1,12);
- puts("start"); //wyswietlenie poczatkowego stanu wyswietlacza
- while(1)
- {
- if(ITU0.TSR.BIT.IMFA==1) //sprawdzenie, czy licznik 0 skonczyl odliczanie
- {
- if(KEY_data == K1) //sprawdzenie, czy klawisz 1 jest nacisniety
- {
- GotoXY(1,12);
- puts("start");
- ITU3.TIER.BIT.IMIEA=1; //wyswietlenie na ekranie napisu "start" i wlaczenie generatora
- }
- else if(KEY_data == K2) //sprawdzenie, czy klawisz 2 jest nacisniety
- {
- GotoXY(1,12);
- puts("stop!");
- ITU3.TIER.BIT.IMIEA=0; //wyswietlenie na ekranie napisu "stop" i wylaczenie generatora
- }
- else if(KEY_data == K3) //sprawdzenie, czy klawisz 3 jest nacisniety
- {
- amplituda++;
- if(amplituda > 100) amplituda = 100; //zwiekszenie wartosci amplitudy o 1, jesli jest wieksza od 100 to ustawienie na 100
- }
- else if(KEY_data == K4)
- {
- amplituda--;
- if(amplituda < 0) amplituda = 0; //zmniejszenie wartosci amplitudy o 1, jesli jest mniejsza od 0 to ustawienie na 0
- }
- if(AD.ADCSR.BIT.ADF==1) //sprawdzenie, czy stan potencjometru zostal zmieniony
- {
- okres = (AD.ADDRC>>6)*51/1024; //ustawienie nowej wartosci okresu sygnalu po przeliczeniu
- GotoXY(2,14);
- if(okres == 0)
- {
- puts("min");
- }
- else if(okres == 50)
- {
- puts("max");
- }
- else
- {
- puts(" ");
- } //jesli okres wynosi 0 wyswietlenie min, jesli 50 max, a jesli ma wartosc pomiedzy to nie wyswietlenie niczego
- AD.ADCSR.BIT.ADF=0; //ustawienie stanu potencjometru spowrotem na 0
- }
- GotoXY(1,3);
- PutsINT3(amplituda); //wyswietlenie aktualnej wartosci amplitudy
- GotoXY(2,3);
- PutsINT2(okres); //wyswietlenie aktualnej wartosci okresu
- ITU0.TSR.BIT.IMFA=0; //wyzerowanie licznika 0
- }
- }
- }
- void Ekran_startowy(void) //ekran startowy :)
- {
- puts("Dzien dobry Panie Hyla! :)");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement