Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #define F_CPU 16000000UL
- #include <util/delay.h>
- volatile char IT_szamlalo=0; // globális változó, hogy az IT rutin lássa
- int eredmeny_globalis=0; // globális változó, hogy az IT rutin lássa
- void fv1 ();
- void fv2 ();
- void fv3();
- void seg7(int szam);
- void kettosp();
- int main()
- {
- DDRB=0xF0;
- DDRD=0xF0;
- DDRG=0; //gombok bemenet
- DDRA=0xff; //7 szegmenses kijelzõ kimenet
- DDRC=0b11111000; //Keyboar ki és be + piros led
- TCCR0 = 0b00000011; // T0 interrupt 1024-es elõosztás beállítása
- TIMSK = 0b00000001;
- unsigned char gomb;
- int x1;
- while(1)
- {
- gomb = PING; //Gomb beolvasasa
- switch (gomb)
- {
- case 0b00000001: fv1(); break; //3 digites szam
- case 0b00000010: fv2(); break;
- case 0b00000100: fv3(); break;
- default: kettosp(); break;
- }
- }
- }
- //---------------függvények---------------------------------
- void fv1 ()
- {
- int db=0;
- int i=0, a=1;
- for (a=0237, i=0; i<=44; a++)
- {
- if ((((a/100%10)&0b1111)!=0b1001) && (((a/100%10)&0b1111)!=0b1111))
- {
- db=db+a;
- i++;
- }
- }
- eredmeny_globalis=db;
- sei();
- // seg7(db);
- return 0;
- }
- void fv2 ()
- {
- int db=0, prim=2;
- unsigned int a=57344;
- while (a>1)
- {
- if (!(a%prim))
- {
- if (prim==2) {db++;}
- a=a/prim;
- }
- else prim++;
- }
- eredmeny_globalis=db;
- sei();
- //seg7(db);
- return 0;
- }
- void seg7(int szam)
- {
- unsigned char x[4]={0},i;
- for(i=0; i<4;i++)
- {
- x[i]=szam%10;
- szam=szam/10;
- }
- while(!PING)
- {
- for(i=0;i<4;i++)
- {
- PORTA=128+(i<<4)+x[i];
- _delay_ms(2);
- }
- }
- }
- void fv3()
- {
- int a=0, b=1,c=0;
- while(b<10000)
- {
- if(a+b>10000)
- {
- break;
- }
- c=b;
- b=a+b;
- a=c;
- }
- eredmeny_globalis=b;
- sei(); // Proci fogadja az interrup-ot
- //seg7(b);
- }
- ISR(TIMER0_OVF_vect) // IT0-ás OVF interrupt megjövetele (ISR : Interrupt Service Rutine)
- { // (IT0-ás OVF interrupt most csak a kiíratást csinálja)
- IT_szamlalo++; // ciklikusan, egymás után választja ki a számjegyeket (1,2,3,4,(0))
- switch (IT_szamlalo)
- {
- case 1: PORTA = 0b10110000+(eredmeny_globalis/1000%10); break; // legfelsõ helyértékû 3. szám (valaki szerint 4. szám)
- case 2: PORTA = 0b10100000+(eredmeny_globalis/100%10); break; // 2. szám (valaki szerint 3. szám)
- case 3: PORTA = 0b10010000+(eredmeny_globalis/10%10); break; // 1. szám (valaki szerint 2. szám)
- case 4: PORTA = 0b10000000+(eredmeny_globalis/1%10); IT_szamlalo=0; break; // legalsó helyértékû 0. szám (valaki szerint 1. szám)
- };
- };
- void kettosp()
- {
- while(!PING)
- {
- PORTA=0b11000000;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement