Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #define F_CPU 16000000UL
  4. #include <util/delay.h>
  5.  
  6.  
  7. volatile char IT_szamlalo=0; // globális változó, hogy az IT rutin lássa
  8. int eredmeny_globalis=0; // globális változó, hogy az IT rutin lássa
  9.  
  10. void fv1 ();
  11. void fv2 ();
  12. void fv3();
  13. void seg7(int szam);
  14. void kettosp();
  15.  
  16.  
  17. int main()
  18. {
  19. DDRB=0xF0;
  20. DDRD=0xF0;
  21. DDRG=0; //gombok bemenet
  22. DDRA=0xff; //7 szegmenses kijelzõ kimenet
  23. DDRC=0b11111000; //Keyboar ki és be + piros led
  24. TCCR0 = 0b00000011; // T0 interrupt 1024-es elõosztás beállítása
  25. TIMSK = 0b00000001;
  26. unsigned char gomb;
  27. int x1;
  28.  
  29. while(1)
  30. {
  31. gomb = PING; //Gomb beolvasasa
  32.  
  33. switch (gomb)
  34. {
  35. case 0b00000001: fv1(); break; //3 digites szam
  36. case 0b00000010: fv2(); break;
  37. case 0b00000100: fv3(); break;
  38.  
  39. default: kettosp(); break;
  40.  
  41. }
  42.  
  43. }
  44. }
  45. //---------------függvények---------------------------------
  46.  
  47. void fv1 ()
  48. {
  49. int db=0;
  50. int i=0, a=1;
  51. for (a=0237, i=0; i<=44; a++)
  52. {
  53. if ((((a/100%10)&0b1111)!=0b1001) && (((a/100%10)&0b1111)!=0b1111))
  54. {
  55. db=db+a;
  56. i++;
  57. }
  58. }
  59. eredmeny_globalis=db;
  60. sei();
  61. // seg7(db);
  62.  
  63. return 0;
  64. }
  65.  
  66. void fv2 ()
  67. {
  68. int db=0, prim=2;
  69. unsigned int a=57344;
  70. while (a>1)
  71. {
  72. if (!(a%prim))
  73. {
  74. if (prim==2) {db++;}
  75. a=a/prim;
  76. }
  77. else prim++;
  78. }
  79. eredmeny_globalis=db;
  80. sei();
  81. //seg7(db);
  82.  
  83. return 0;
  84. }
  85.  
  86. void seg7(int szam)
  87. {
  88. unsigned char x[4]={0},i;
  89.  
  90. for(i=0; i<4;i++)
  91. {
  92. x[i]=szam%10;
  93. szam=szam/10;
  94. }
  95.  
  96. while(!PING)
  97. {
  98. for(i=0;i<4;i++)
  99. {
  100. PORTA=128+(i<<4)+x[i];
  101. _delay_ms(2);
  102. }
  103. }
  104.  
  105. }
  106.  
  107. void fv3()
  108. {
  109. int a=0, b=1,c=0;
  110. while(b<10000)
  111. {
  112. if(a+b>10000)
  113. {
  114. break;
  115. }
  116. c=b;
  117. b=a+b;
  118. a=c;
  119. }
  120. eredmeny_globalis=b;
  121. sei(); // Proci fogadja az interrup-ot
  122. //seg7(b);
  123. }
  124.  
  125. ISR(TIMER0_OVF_vect) // IT0-ás OVF interrupt megjövetele (ISR : Interrupt Service Rutine)
  126. { // (IT0-ás OVF interrupt most csak a kiíratást csinálja)
  127.  
  128. IT_szamlalo++; // ciklikusan, egymás után választja ki a számjegyeket (1,2,3,4,(0))
  129.  
  130. switch (IT_szamlalo)
  131. {
  132. case 1: PORTA = 0b10110000+(eredmeny_globalis/1000%10); break; // legfelsõ helyértékû 3. szám (valaki szerint 4. szám)
  133. case 2: PORTA = 0b10100000+(eredmeny_globalis/100%10); break; // 2. szám (valaki szerint 3. szám)
  134. case 3: PORTA = 0b10010000+(eredmeny_globalis/10%10); break; // 1. szám (valaki szerint 2. szám)
  135. case 4: PORTA = 0b10000000+(eredmeny_globalis/1%10); IT_szamlalo=0; break; // legalsó helyértékû 0. szám (valaki szerint 1. szám)
  136. };
  137.  
  138.  
  139. };
  140.  
  141. void kettosp()
  142. {
  143. while(!PING)
  144. {
  145. PORTA=0b11000000;
  146. }
  147.  
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement