Advertisement
paryz17

Binary to 7 Segment

Jan 25th, 2020
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Arduino.h>
  2.  
  3. //Transcoder bin-> 7seg
  4. //An 8-bit binary number (corresponding to 8 buttons) should be converted to a decimal number in the range 0-255, and then displayed on the LED display.
  5.  
  6. #define SEGMENT_A   0
  7. #define SEGMENT_B   1
  8. #define SEGMENT_C   2
  9. #define SEGMENT_D   3
  10. #define SEGMENT_E   4
  11. #define SEGMENT_F   5
  12. #define SEGMENT_G   6
  13. #define SEGMENT_DP  7
  14. #define SIGN_0      8
  15. #define SIGN_1      9
  16. #define SIGN_2      10
  17.  
  18. #define BUTTON_BIT_1        11
  19. #define BUTTON_BIT_2        12
  20. #define BUTTON_BIT_4        13
  21. #define BUTTON_BIT_8        A5
  22. #define BUTTON_BIT_16       A4
  23. #define BUTTON_BIT_32       A3
  24. #define BUTTON_BIT_64       A2
  25. #define BUTTON_BIT_128      A1
  26.  
  27. enum state {
  28.     STATE__GETTING_INPUT,
  29.     STATE__SHOWING_DISPLAY
  30. };
  31.  
  32. uint8_t current_state = STATE__GETTING_INPUT;
  33. uint8_t number = 0;
  34. bool    button_state[8];
  35.  
  36. bool checkButton(uint8_t ButtonID){
  37.     if(digitalRead(ButtonID) == LOW){
  38.           do{
  39.               delay(1);
  40.               if(digitalRead(ButtonID) == HIGH){
  41.                   break;
  42.               }
  43.           }while(true);
  44.           return true;
  45.     };
  46.     return false;
  47. }
  48.  
  49. void gettingInput(void) {
  50.     if(checkButton(BUTTON_BIT_1) == true){
  51.         button_state[0] = !button_state[0];
  52.     }
  53.     if(checkButton(BUTTON_BIT_2) == true){
  54.         button_state[1] = !button_state[1];
  55.     }
  56.     if(checkButton(BUTTON_BIT_4) == true){
  57.         button_state[2] = !button_state[2];
  58.     }
  59.     if(checkButton(BUTTON_BIT_8) == true){
  60.         button_state[3] = !button_state[3];
  61.     }
  62.     if(checkButton(BUTTON_BIT_16) == true){
  63.         button_state[4] = !button_state[4];
  64.     }
  65.     if(checkButton(BUTTON_BIT_32) == true){
  66.         button_state[5] = !button_state[5];
  67.     }
  68.     if(checkButton(BUTTON_BIT_64) == true){
  69.         button_state[6] = !button_state[6];
  70.     }
  71.     if(checkButton(BUTTON_BIT_128) == true){
  72.         button_state[7] = !button_state[7];
  73.     }
  74. }
  75.  
  76. void transferButtonsToNumber(void) {
  77.     number = 0;
  78.     for(uint8_t i = 0; i<8; i++){
  79.         if(button_state[i] == true){
  80.               number += 1<<i;
  81.         }
  82.     }
  83. }
  84.  
  85. void ledsOff(void) {
  86.     digitalWrite(SEGMENT_DP, HIGH);
  87.     digitalWrite(SEGMENT_A, HIGH);
  88.     digitalWrite(SEGMENT_B, HIGH);
  89.     digitalWrite(SEGMENT_C, HIGH);
  90.     digitalWrite(SEGMENT_D, HIGH);
  91.     digitalWrite(SEGMENT_E, HIGH);
  92.     digitalWrite(SEGMENT_F, HIGH);
  93.     digitalWrite(SEGMENT_G, HIGH);
  94. }
  95.  
  96. void choosePanel(uint8_t panel) {
  97.     switch(panel){
  98.         case 1:
  99.             digitalWrite(SIGN_0, HIGH);
  100.             digitalWrite(SIGN_1, LOW);
  101.             digitalWrite(SIGN_2, LOW);
  102.         break;
  103.         case 2:
  104.             digitalWrite(SIGN_0, LOW);
  105.             digitalWrite(SIGN_1, HIGH);
  106.             digitalWrite(SIGN_2, LOW);
  107.         break;
  108.         case 3:
  109.             digitalWrite(SIGN_0, LOW);
  110.             digitalWrite(SIGN_1, LOW);
  111.             digitalWrite(SIGN_2, HIGH);
  112.         break;
  113.         default:
  114.             digitalWrite(SIGN_0, LOW);
  115.             digitalWrite(SIGN_1, LOW);
  116.             digitalWrite(SIGN_2, LOW);
  117.         break;
  118.     }
  119. }
  120.  
  121. void displayDigit(uint8_t digit) {
  122.     if(digit  == 1 || digit == 4){
  123.         digitalWrite(SEGMENT_A, HIGH);
  124.     } else {
  125.         digitalWrite(SEGMENT_A, LOW);
  126.     }
  127.    
  128.     if(digit  == 5 || digit == 6){
  129.         digitalWrite(SEGMENT_B, HIGH);
  130.     } else {
  131.         digitalWrite(SEGMENT_B, LOW);
  132.     }
  133.    
  134.     if(digit  == 2){
  135.         digitalWrite(SEGMENT_C, HIGH);
  136.     } else {
  137.         digitalWrite(SEGMENT_C, LOW);
  138.     }
  139.    
  140.     if(digit  == 1 || digit  == 4 || digit == 7){
  141.         digitalWrite(SEGMENT_D, HIGH);
  142.     } else {
  143.         digitalWrite(SEGMENT_D, LOW);
  144.     }
  145.  
  146.     if(digit  == 1 || digit  == 3 || digit == 4 || digit  == 5 || digit == 7 || digit  == 9){
  147.         digitalWrite(SEGMENT_E, HIGH);
  148.     } else {
  149.         digitalWrite(SEGMENT_E, LOW);
  150.     }
  151.  
  152.     if(digit  == 1 || digit  == 2 || digit == 3 || digit == 7){
  153.         digitalWrite(SEGMENT_F, HIGH);
  154.     } else {
  155.         digitalWrite(SEGMENT_F, LOW);
  156.     }
  157.  
  158.     if(digit  == 1 || digit  == 7 || digit == 0){
  159.         digitalWrite(SEGMENT_G, HIGH);
  160.     } else {
  161.         digitalWrite(SEGMENT_G, LOW);
  162.     }
  163. }
  164.  
  165. void displayNumber(void) {
  166.     uint8_t digit;
  167.     for(uint8_t i = 1; i <= 3; i++){
  168.         digit = number % 10;
  169.         choosePanel(i);
  170.         displayDigit(digit);
  171.         number = (number-digit)/10;
  172.         delay(1);
  173.         ledsOff();
  174.         if(number == 0){
  175.             break;
  176.         }
  177.     }
  178. }
  179.  
  180. void setup(void) {
  181.     current_state = STATE__GETTING_INPUT;
  182.     number = 0;
  183.  
  184.     pinMode(SEGMENT_A, OUTPUT);
  185.     pinMode(SEGMENT_B, OUTPUT);
  186.     pinMode(SEGMENT_C, OUTPUT);
  187.     pinMode(SEGMENT_D, OUTPUT);
  188.     pinMode(SEGMENT_E, OUTPUT);
  189.     pinMode(SEGMENT_F, OUTPUT);
  190.     pinMode(SEGMENT_G, OUTPUT);
  191.     pinMode(SEGMENT_DP, OUTPUT);
  192.     pinMode(SIGN_0, OUTPUT);
  193.     pinMode(SIGN_1, OUTPUT);
  194.     pinMode(SIGN_2, OUTPUT);
  195.    
  196.     pinMode(BUTTON_BIT_1,   INPUT_PULLUP);
  197.     pinMode(BUTTON_BIT_2,   INPUT_PULLUP);
  198.     pinMode(BUTTON_BIT_4,   INPUT_PULLUP);
  199.     pinMode(BUTTON_BIT_8,   INPUT_PULLUP);
  200.     pinMode(BUTTON_BIT_16,  INPUT_PULLUP);
  201.     pinMode(BUTTON_BIT_32,  INPUT_PULLUP);
  202.     pinMode(BUTTON_BIT_64,  INPUT_PULLUP);
  203.     pinMode(BUTTON_BIT_128, INPUT_PULLUP);
  204. }
  205.  
  206. void loop(void) {
  207.     switch (current_state) {
  208.         case STATE__GETTING_INPUT:
  209.             gettingInput();
  210.             transferButtonsToNumber();
  211.             current_state = STATE__SHOWING_DISPLAY;
  212.             break;
  213.         case STATE__SHOWING_DISPLAY:
  214.             displayNumber();
  215.             current_state = STATE__GETTING_INPUT;
  216.             break;
  217.         default:
  218.             break;
  219.     }
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement