Advertisement
Guest User

Untitled

a guest
May 29th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. #include "AT91SAM9263.h"
  2.  
  3. //wyświetlacz segmentowy
  4. #define LEFT 1<< 30
  5. #define RIGHT 1<<28
  6.  
  7. #define A 1<<25
  8. #define B 1<<24
  9. #define C 1<<22
  10. #define D 1<<21
  11. #define E 1<<20
  12. #define F 1<<27
  13. #define G 1<<26
  14. #define DP 1<<23
  15.  
  16. #define button_left 1<<4
  17. #define button_right 1<<5
  18.  
  19. #define timer 1 << 24
  20.  
  21. unsigned int number[10];
  22.  
  23. void timer_start()
  24. {
  25. AT91C_BASE_PITC->PITC_PIMR = 6249;
  26. AT91C_BASE_PITC->PITC_PIMR |= 1 <<24;
  27. }
  28.  
  29. void leftON()
  30. {
  31. AT91C_BASE_PIOB->PIO_SODR = LEFT;
  32. }
  33.  
  34. void leftOFF()
  35. {
  36. AT91C_BASE_PIOB->PIO_CODR = LEFT;
  37. }
  38.  
  39. void rightON()
  40. {
  41. AT91C_BASE_PIOB->PIO_SODR = RIGHT;
  42. }
  43.  
  44. void rightOFF()
  45. {
  46. AT91C_BASE_PIOB->PIO_CODR = RIGHT;
  47. }
  48.  
  49. void show(int x)
  50. {
  51. AT91C_BASE_PIOB->PIO_SODR |= number[x];
  52. AT91C_BASE_PIOB->PIO_PER |= number[x];
  53. AT91C_BASE_PIOB->PIO_OER |= number[x];
  54. }
  55.  
  56. void clear()
  57. {
  58. AT91C_BASE_PIOB->PIO_CODR = number[8];
  59. }
  60.  
  61. void delay(int m)
  62. {
  63. AT91C_BASE_PITC->PITC_PIVR;
  64. while(m >= (AT91C_BASE_PITC->PITC_PIIR) >> 20){};
  65. }
  66.  
  67. /*void delay ()
  68. {
  69. int i=0;
  70. for (i = 0; i < 200000; i++);
  71. }*/
  72.  
  73.  
  74. void number_init()
  75. {
  76. number[0] = A|B|C|D|E|F;
  77. number[1] = B|C;
  78. number[2] = A|B|G|E|D;
  79. number[3] = A|B|G|C|D;
  80. number[4] = B|F|G|C;
  81. number[5] = A|F|G|C|D;
  82. number[6] = A|F|G|C|D|E;
  83. number[7] = A|B|C;
  84. number[8] = A|B|C|D|E|F|G;
  85. number[9] = A|B|G|F|C|D;
  86. }
  87.  
  88. void left_init()
  89. {
  90. AT91C_BASE_PIOB->PIO_PER = LEFT;
  91. AT91C_BASE_PIOB->PIO_OER = LEFT;
  92. }
  93.  
  94. void right_init()
  95. {
  96. AT91C_BASE_PIOB->PIO_PER = RIGHT;
  97. AT91C_BASE_PIOB->PIO_OER = RIGHT;
  98. }
  99.  
  100. void left_button_init()
  101. {
  102. AT91C_BASE_PIOC->PIO_PPUER = button_left;
  103. AT91C_BASE_PIOC->PIO_IER = button_left;
  104. }
  105.  
  106. void setup()
  107. {
  108. number_init();
  109. left_init();
  110. right_init();
  111. left_button_init();
  112. timer_start();
  113. }
  114.  
  115. void refresh()
  116. {
  117. int i;
  118. for(i = 0; i < 5000; i++);
  119. }
  120.  
  121. void screen_switch(int left, int right)
  122. {
  123. int j;
  124. for(j = 0; j < 50; j++)
  125. {
  126. //RIGHT
  127. rightON();
  128. show(right);
  129. delay(5);
  130. //refresh();
  131. clear();
  132. rightOFF();
  133.  
  134. //LEFT
  135. leftON();
  136. show(left);
  137. delay(5);
  138. //refresh();
  139. clear();
  140. leftOFF();
  141. }
  142. }
  143.  
  144. void count()
  145. {
  146. int i;
  147. int left = 0;
  148. int right = 0;
  149.  
  150. for(i = 0; i <= 99; i++)
  151. {
  152. if(right >= 10)
  153. {
  154. right = 0;
  155. left++;
  156. }
  157. screen_switch(left, right);
  158. right++;
  159.  
  160. }
  161. }
  162.  
  163. void test()
  164. {
  165. volatile int tmp = 0;
  166. delay(5000);
  167. if(AT91C_BASE_PIOC->PIO_PDSR == 0xfdffffef) tmp = 1;
  168. if(AT91C_BASE_PIOC->PIO_PDSR == 0xfdffffdf) tmp = 0;
  169. if ( tmp )
  170. {
  171. show(8);
  172. }
  173. else
  174. {
  175. show(7);
  176. }
  177. delay(5000);
  178. clear();
  179. }
  180.  
  181. void loop()
  182. {
  183. while(1)
  184. {
  185. //test();
  186. count();
  187. }
  188. }
  189.  
  190. int main(void)
  191. {
  192. setup();
  193. loop();
  194. }
  195.  
  196. void dbgu_print_ascii(const char* string){}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement