Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <p24fj128ga010.h>
- _CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF)
- _CONFIG2(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRI)
- #define SCALE 308L
- /* numer ktĂłrym dostajemy siÄ? do potencjometru */
- #define TVOLT 5
- #define AINPUTS 0xffcf
- void ADCinit(int amask)
- {
- AD1PCFG = amask;
- AD1CON1 = 0x00e0;
- AD1CSSL = 0;
- AD1CON2 = 0;
- AD1CON3 = 0x1f02;
- AD1CON1bits.ADON = 1;
- }
- int readADC(int ch)
- {
- AD1CHS = ch;
- AD1CON1bits.SAMP = 1;
- while (!AD1CON1bits.DONE);
- return ADC1BUF0;
- }
- int main(void)
- {
- unsigned long i;
- unsigned char display = 0;
- int volt;
- int speed;
- //maksymalna wartoĹ?Ä? jakÄ? moĹźna odczytaÄ? to ok 1123. na jej
- //podstawie przeskalujemy wynik
- int maxOdczyt = 1123;
- int scale = maxOdczyt / 5;
- int program = 1, start = 1, stan = 0, lewa, prawa, pileczka, zmianaprogramu = 10, zatrzymajprogram = 1;
- int licznik = 0;
- //inicjalizacja
- PORTA = 0x0000;
- TRISA=0xFF00;
- TRISD=0xFFFF;
- ADCinit(AINPUTS); //inicjalizacja konwertera AD
- while (1) {
- PORTA=(unsigned int) display;
- Nop();
- for (i = 500 * SCALE; i > 0; i--) Nop();
- volt = readADC(TVOLT); //Odczytanie potencjometru
- if(volt < scale)
- speed = 0.01;
- if(volt >= scale && (volt < scale * 2))
- speed = 10;
- if((volt >= scale * 2) && (volt < scale * 3))
- speed = 300;
- if((volt >= scale * 3) && (volt < scale * 4))
- speed = 1000;
- if((volt >= scale * 4) && (volt <= maxOdczyt))
- speed = 5000;
- for (i = SCALE * speed; i > 0; i--) Nop();
- if(zmianaprogramu == 0){
- program++;
- start = 1;
- zmianaprogramu = 10;
- }
- else if(zatrzymajprogram == 0) zmianaprogramu = 10;
- else zmianaprogramu--;
- if (PORTDbits.RD13 == 0){
- program++;
- start = 1;
- zatrzymajprogram = 1;
- }
- else if(PORTDbits.RD6 == 0) {
- program--;
- start = 1;
- zatrzymajprogram = 1;
- }
- else if(PORTDbits.RD7 == 0) {
- if(zatrzymajprogram == 1) zatrzymajprogram = 0;
- else zatrzymajprogram = 1;
- }
- if(program == 1)
- {
- if(start == 1)
- {
- display = 0;
- start = 0;
- }
- else
- {
- if(display != 85)
- {
- display = 85;
- stan = 1;
- }
- else
- {
- display = display << 1;
- }
- }
- }
- if(program == 2)
- {
- if(start == 1)
- {
- display = 24;
- licznik = 0;
- start = 0;
- lewa = 8;
- prawa = 16;
- }
- else
- {
- if(licznik == 0)
- {
- if(display != 129)
- {
- lewa = lewa >> 1;
- prawa = prawa << 1;
- display = lewa | prawa;
- }
- else licznik = 1;
- }
- else
- {
- if(display != 24)
- {
- lewa = lewa << 1;
- prawa = prawa >> 1;
- display = lewa | prawa;
- }
- else
- {
- licznik = 0;
- display = 24;
- }
- }
- }
- }
- if(program == 3)
- {
- if(start == 1)
- {
- display = 24;
- licznik = 0;
- start = 0;
- }
- else
- {
- if(licznik == 0)
- {
- if(display < 255)
- {
- display = ((display << 1) | (display >> 1));
- }
- else licznik = 1;
- }
- else
- {
- if(display != 60)
- display = (display << 1) & (display >> 1);
- else
- {
- licznik = 0;
- display = 24;
- }
- }
- }
- }
- if(program == 4)
- {
- if(start == 1)
- {
- display = 129;
- start = 0;
- prawa = 1;
- lewa = 128;
- licznik = 0;
- pileczka = 1;
- }
- else
- {
- if(licznik == 0)
- {
- if(pileczka < 64)
- {
- pileczka = pileczka << 1;
- display = prawa | lewa | pileczka;
- }
- else licznik = 1;
- }
- else
- {
- if(pileczka > 2)
- {
- pileczka = pileczka >> 1;
- display = prawa | lewa | pileczka;
- }
- else
- {
- licznik = 0;
- }
- }
- }
- }
- if(program == 5)
- {
- if(start == 1)
- {
- display = 21;
- start = 0;
- }
- else
- {
- if(stan == 0)
- if(display < 84)
- {
- display = display << 1;
- }
- else
- {
- display = 168;
- stan = 1;
- }
- else
- if(display > 42)
- {
- display = display >> 1;
- }
- else
- {
- display = 21;
- stan = 0;
- }
- }
- }
- if(program == 6)
- {
- if(start == 1)
- {
- stan = 0;
- pileczka = 165;
- lewa = 8;
- prawa = 16;
- display = 0;
- start = 0;
- }
- else
- {
- if(stan == 0)
- {
- display = pileczka | prawa | lewa;
- prawa = prawa << 2;
- lewa = lewa >> 2;
- stan = 1;
- }
- else
- {
- display = pileczka | prawa | lewa;
- prawa = prawa >> 2;
- lewa = lewa << 2;
- stan = 0;
- }
- }
- }
- if (program > 6) {
- program = 1;
- }
- if (program < 1) {
- program = 6;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement