Advertisement
Mary_99

counter 1-99 to corretct

Nov 21st, 2020 (edited)
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.71 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 POSITION_LEFT 0
  23. #define POSITION_RIGHT 1
  24.  
  25.  
  26. uint32_t ledDecode (uint8_t digit)
  27. {
  28.     int number[10] = {};
  29.     number[0] = A|B|C|D|E|F;
  30.     number[1] = B|C;
  31.     number[2] = A|B|D|E|G;
  32.     number[3] = A|B|C|G|G|D;
  33.     number[4] = F|B|G|C;
  34.     number[5] = A|F|G|C|D;
  35.     number[6] = A|F|G|E|D|C;
  36.     number[7] = A|B|C;
  37.     number[8] = A|B|C|D|E|F|G;
  38.     number[9] = A|B|F|G|C|D;
  39.     return number[digit];
  40. }
  41.  
  42. void delayMs (volatile unsigned int delay)
  43. {
  44.   volatile int time;
  45.   for(time = 0; time < 80000*delay; time++);
  46. }
  47.  
  48. void ledInit(void)
  49. {
  50.     *PIOB_PER = (BRIGHTNESS|LEFT_DISPLAY|RIGHT_DISPLAY|A|B|C|D|E|F|G);
  51.     *PIOB_OER = (BRIGHTNESS|LEFT_DISPLAY|RIGHT_DISPLAY|A|B|C|D|E|F|G);
  52.     *PIOB_CODR =(A|B|C|D|E|F|G);//to clear segments
  53.     *PIOB_SODR = (BRIGHTNESS|LEFT_DISPLAY|RIGHT_DISPLAY);// to set transistors
  54. }
  55.  
  56. void clearLeds()
  57. {
  58.         *PIOB_CODR =(A|B|C|D|E|F|G);//clear LEDS
  59. }
  60. void leftDisplay()
  61. {
  62.     *PIOB_CODR = LEFT_DISPLAY;
  63.     *PIOB_SODR = RIGHT_DISPLAY;
  64. }
  65.  
  66. void rightDisplay()
  67. {
  68.     *PIOB_CODR = RIGHT_DISPLAY;
  69.     *PIOB_SODR = LEFT_DISPLAY;
  70. }
  71.  
  72. void ledDisplayDigit(uint8_t digit,  uint8_t position)
  73. {
  74.     clearLeds();
  75.     *PIOB_SODR =ledDecode(digit);
  76.     if(position == POSITION_LEFT)
  77.     {
  78.         leftDisplay();
  79.     }
  80.     else if(position == POSITION_RIGHT)
  81.     {
  82.         rightDisplay();
  83.     }
  84. }
  85.  
  86. void ledDisplayNumber(uint8_t number)
  87. {
  88.     int iterrator;
  89.     iterrator = 0;
  90.     for(iterrator = 0; iterrator < DELAY; iterrator+=800)
  91.   {
  92.         clearLeds();
  93.         *PIOB_SODR=ledDecode(number/10);
  94.         leftDisplay();
  95.         delayMs(100);
  96.  
  97.         clearLeds();
  98.         *PIOB_SODR=ledDecode(number%10);
  99.         rightDisplay();
  100.         delayMs(100);
  101.     }
  102. }
  103.  
  104. int main(void)
  105. {
  106.     int iterrator;
  107.     iterrator = 0;
  108.   ledInit();
  109.   while(true)
  110.   {
  111.         ledDisplayNumber(iterrator);
  112.         iterrator++;
  113.         if(iterrator == 100)
  114.         {
  115.             iterrator= 0;
  116.         }
  117.   }
  118.   return 0;
  119. }
  120.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement