Advertisement
Guest User

Untitled

a guest
Apr 10th, 2016
142
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. * dyn_displ_C.c
  3. *
  4. * Created: 14.3.2016 11:55:01
  5. * Author: V1-S104
  6. */
  7.  
  8.  
  9. #define F_CPU 16000000
  10. #include <avr/io.h>
  11. #include <util/delay.h>
  12. #include <avr/interrupt.h>
  13.  
  14. volatile unsigned int i = 0; //konstanta
  15. volatile unsigned char video[6];
  16. volatile unsigned int rizeni = 0b11011111;
  17. unsigned int znak;
  18. unsigned char tab_segmenty[16] = {0x40, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  19. 0x00, 0x10, 0x88, 0x03, 0x46, 0xA1, 0x06, 0x0E};
  20.  
  21. //ppop
  22. ISR (TIMER0_OVF_vect) //přerušení při přetečení
  23. {
  24. PORTB=video[i];
  25. PORTD=rizeni;
  26. i++;
  27. rizeni=(rizeni<<7)|(rizeni>>1); //rotace doprava
  28. if (i==6)
  29. {
  30. i=0;
  31. rizeni=0b11011111;
  32. }
  33. }
  34.  
  35. int klav()
  36. {
  37. unsigned int vystup[16]={1,2,3,10, 4,5,6,11, 7,8,9,12, 14,0,15,13};
  38. unsigned int pozice=0;
  39. for (int radek=3; radek>=0; radek--)
  40. {
  41. PORTE =~(1<<radek);
  42. _delay_ms(1);
  43. for (int sloupec=4; sloupec<8; sloupec++)
  44. {
  45. if (~PINE&(1<<sloupec))
  46. {
  47. return(vystup[pozice]);
  48. }
  49. else pozice+=1;
  50. }
  51. }
  52. return 255;
  53. }
  54.  
  55. int main(void)
  56. {
  57. DDRE=0x0F;
  58. DDRB=0xFF;
  59. DDRD=0xFF;
  60. TCCR0B|=(1<<CS01)|(1<<CS00); //předdělička
  61. TIMSK0|=(1<<TOIE0); //
  62. sei(); //globální povolení přerušení
  63. while(1)
  64. {
  65. do
  66. {
  67. znak=klav();
  68. } while (znak==255); //dokud znak=255 bude stále cyklit
  69. for (int posun=4;posun>=0;posun--)
  70. {
  71. video[posun+1]=video[posun]; //posun ve video paměti
  72. }
  73. video[0]=(tab_segmenty[znak]);
  74. while (znak==klav())
  75. {
  76. _delay_ms(1);
  77. }
  78. }
  79. }
Advertisement
RAW Paste Data Copied
Advertisement