Advertisement
Mary_99

Counter 1-9 and 1-99

Nov 21st, 2020 (edited)
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.14 KB | None | 0 0
  1. #include <stdint.h>
  2. #include <stdbool.h>
  3.  
  4. #define PIOB_PER (volatile unsigned int * const) 0xFFFFF400 ///setting IO port in IO mode//PIO ENABLE REGISTER
  5. #define PIOB_OER (volatile unsigned int * const) 0xFFFFF410 //setting the direction of IO port
  6. #define PIOB_CODR (volatile unsigned int * const) 0xFFFFF434 //clean output data register
  7. #define PIOB_SODR (volatile unsigned int * const) 0xFFFFF430 // forcing the required state on port output // Controller Set Output Data Register//write only
  8.  
  9. #define A (1<<25)  //processor pin PB25
  10. #define B (1<<24) //processor pin  PB24
  11. #define C (1<<22) //processor pin PB22
  12. #define D (1<<21) //processor pin PB21
  13. #define E (1<<20) //processor pin PB20
  14. #define F (1<<27) //processor pin  PB27
  15. #define G (1<<26) //processor pin PB26
  16.  
  17. #define LEFT_DISPLAY (1<<28) //turn on left led
  18. #define RIGHT_DISPLAY (1<<30) // turn on right led
  19. #define BRIGHTNESS (1<<29) // third transistor
  20.  
  21. #define DELAY 1000
  22. #define DELAY_NUMBER 100
  23. #define POSITION_LEFT 0
  24. #define POSITION_RIGHT 1
  25.  
  26.  
  27. uint32_t ledDecode (uint8_t digit)
  28. {
  29.     int number[10] = {};
  30.     number[0] = A|B|C|D|E|F;
  31.     number[1] = B|C;
  32.     number[2] = A|B|D|E|G;
  33.     number[3] = A|B|C|G|G|D;
  34.     number[4] = F|B|G|C;
  35.     number[5] = A|F|G|C|D;
  36.     number[6] = A|F|G|E|D|C;
  37.     number[7] = A|B|C;
  38.     number[8] = A|B|C|D|E|F|G;
  39.     number[9] = A|B|F|G|C|D;
  40.     return number[digit];
  41. }
  42.  
  43. void delayMs (volatile unsigned int delay)
  44. {
  45.   volatile int time;
  46.   for(time = 0; time < 80000*delay; time++);
  47. }
  48.  
  49. void ledInit(void)
  50. {
  51.     *PIOB_PER = (BRIGHTNESS|LEFT_DISPLAY|RIGHT_DISPLAY|A|B|C|D|E|F|G);
  52.     *PIOB_OER = (BRIGHTNESS|LEFT_DISPLAY|RIGHT_DISPLAY|A|B|C|D|E|F|G);
  53.     *PIOB_CODR =(A|B|C|D|E|F|G);//to clear segments
  54.     *PIOB_SODR = (BRIGHTNESS|LEFT_DISPLAY|RIGHT_DISPLAY);// transistors
  55. }
  56.  
  57. void clearLeds()
  58. {
  59.     *PIOB_CODR =(A|B|C|D|E|F|G);//clear LEDS
  60. }
  61.  
  62. void leftDisplay()
  63. {
  64.     *PIOB_CODR = LEFT_DISPLAY;
  65.     *PIOB_SODR = RIGHT_DISPLAY;
  66. }
  67.  
  68. void rightDisplay()
  69. {
  70.     *PIOB_CODR = RIGHT_DISPLAY;
  71.     *PIOB_SODR = LEFT_DISPLAY;
  72. }
  73.  
  74. void ledDisplayDigit(uint8_t digit,  uint8_t position)
  75. {
  76.     clearLeds();
  77.     *PIOB_SODR =ledDecode(digit);
  78.     if(position == POSITION_LEFT)
  79.     {
  80.         leftDisplay();
  81.     }
  82.     else if(position == POSITION_RIGHT)
  83.     {
  84.         rightDisplay();
  85.     }
  86. }
  87.  
  88. void ledDisplayNumber(uint8_t number)
  89. {
  90.     int fps = 60;
  91.     int step = (1000/fps);//* 0.8;
  92.  
  93.     uint32_t leftValue = ledDecode(number/10);
  94.     uint32_t rightValue = ledDecode(number%10);
  95.  
  96.     int iterator;
  97.    
  98.     for(iterator = 0; iterator < fps; iterator +=1)
  99.     {
  100.         clearLeds();
  101.         *PIOB_SODR = leftValue;
  102.         leftDisplay();
  103.         delayMs(step);
  104.  
  105.         clearLeds();
  106.         *PIOB_SODR = rightValue;
  107.         rightDisplay();
  108.         delayMs(step);
  109.     }
  110. }
  111.  
  112. int main(void)
  113. {
  114.     int iterrator;
  115.     iterrator = 0;
  116.   ledInit();
  117. //-----------1-9 counter---------------------
  118. /*while(true)
  119.   {
  120.         ledDisplayDigit(iterrator , POSITION_LEFT);
  121.         iterrator++;
  122.         delayMs(DELAY);
  123.         if(iterrator == 10)
  124.         {
  125.             iterrator= 0;
  126.         }
  127.   }*/
  128. //--------------------1-99 counter---------------------
  129.  while(true)
  130. {
  131.         ledDisplayNumber(iterrator);
  132.         iterrator++;
  133.         if(iterrator == 100)
  134.         {
  135.                 iterrator = 0;
  136.         }
  137.  
  138. }
  139.   return 0;
  140. }
  141.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement