Advertisement
losmi93

das

Dec 18th, 2015
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4.  
  5. void ispis_7SEG (unsigned char karakter, unsigned char pozicija){
  6. PORTB = ~(0x01 << (4-pozicija)); //ukljucenje displeja na zeljenoj
  7. //poziciji
  8. PORTD = karakter; //prikaz karaktera
  9. _delay_ms(5); //pauza 2ms
  10. }
  11.  
  12. //makroi za kontrolu pinova preko kojih je kontroler povezan sa 74HC165:
  13. #define SCL_HI (PORTC |= (1<<5))
  14. #define SCL_LO (PORTC &= ~(1<<5))
  15. #define SDA (PINC & (1 << 4))
  16. #define SHLD_HI (PORTB |= (1<<5))
  17. #define SHLD_LO (PORTB &= ~(1<<5))
  18.  
  19.  
  20. unsigned char ocitaj_prekidace()
  21. {
  22. unsigned char i, tmp = 0, mask = 0x80;
  23. SHLD_HI;
  24. SHLD_LO;
  25. SHLD_HI; //impuls za upis stanja prekidaca u registar
  26. for (i=0; i<8; i++)
  27. {
  28. SCL_LO;
  29. SCL_HI; //generisanje aktivne ivice takta
  30. if (SDA) //provera stanja ulaznog pina
  31. tmp |= mask;
  32. mask >>= 1;
  33. }
  34. return tmp;
  35. }
  36.  
  37. #define DISP_P ~0b11110001
  38. #define DISP_R ~0b11010000
  39. #define DISP_A ~0b11110011
  40. #define DISP_G ~0b11101011
  41. #define DISP_O ~0b11111010
  42.  
  43. #define DISP_S ~0b11001011
  44. #define DISP_L ~0b01011000
  45. #define DISP_M ~0b11100000
  46. #define DISP_I ~0b01010000
  47.  
  48.  
  49. int main()
  50. {
  51.  
  52. int i;
  53. int pauza= 128;
  54.  
  55.  
  56. DDRD = 0xFF; //PB5 je izlaz
  57. DDRB = 0x2F;
  58. DDRC = 0x20;
  59.  
  60. while (1)
  61. {
  62. //ispis_7SEG((ocitaj_prekidace()>>4) & 0b00000011,1);
  63. switch((ocitaj_prekidace()>>4) & 0b00000011){
  64. case 0:pauza = 0;
  65. break;
  66. case 1:pauza = 128;
  67. break;
  68. case 2:pauza = 256;
  69. break;
  70. case 3:pauza = 512;
  71. break;
  72. default:pauza = 0;
  73. }
  74.  
  75. for(i = 0; i < pauza;i++){
  76. switch(ocitaj_prekidace()>>6){
  77. case 0:
  78. ispis_7SEG(DISP_P,1);
  79. ispis_7SEG(DISP_R,2);
  80. ispis_7SEG(DISP_A, 3);
  81. ispis_7SEG(DISP_G, 4);
  82.  
  83. break;
  84. case 1:
  85. ispis_7SEG(DISP_O,1);
  86. ispis_7SEG(DISP_S,2);
  87. ispis_7SEG(DISP_L, 3);
  88. ispis_7SEG(DISP_O, 4);
  89. break;
  90. case 2:
  91. ispis_7SEG(DISP_R,1);
  92. ispis_7SEG(DISP_I,2);
  93. ispis_7SEG(DISP_M, 3);
  94. ispis_7SEG(0xFF, 4);
  95. break;
  96. case 3:
  97. ispis_7SEG(DISP_R,1);
  98. ispis_7SEG(DISP_I,2);
  99. ispis_7SEG(DISP_G, 3);
  100. ispis_7SEG(DISP_A, 4);
  101. break;
  102. default:
  103. PORTD = 0xff;
  104. }
  105. }
  106. PORTD = 0xff;
  107. for(i = 0; i < pauza;i++)_delay_ms(8);
  108. }
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement