Advertisement
xerpi

Arduino segment display

Sep 16th, 2012
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. /* by xerpi */
  2.  
  3. byte numbers[11] =
  4. {
  5.    
  6. /*
  7. PORTD - digital 0-7
  8. PORTB - digital 8-13
  9. PORTC - analog  0-5
  10.  
  11.       a
  12.      ---
  13.       f | g | b
  14.      ---
  15.       e |   | c
  16.      --- .
  17.       d   DOT
  18.  
  19.       7
  20.      ---
  21.       6 | 5 | 8
  22.      ---
  23.       1 |   | 3
  24.      --- .
  25.       2   4
  26.  
  27. */ 
  28.     0b11100111, // 0
  29.     0b10000100, // 1
  30.     0b11010011, // 2
  31.     0b11010110, // 3
  32.     0b10110100, // 4
  33.     0b01110110, // 5
  34.     0b01110111, // 6
  35.     0b11000100, // 7
  36.     0b11110111, // 8
  37.     0b11110100, // 9
  38.     0b00001000, // DOT
  39. };
  40.  
  41. #define DOT     10
  42. #define COMMON_CATHODE  1
  43. #define COMMON_ANODE    0
  44.  
  45. void configOutputs(int initial_pin);
  46. void showNum(int initial_pin, int common, int num, bool showDot);
  47.  
  48. int initPin = 2;
  49.  
  50. void setup()
  51. {
  52.     Serial.begin(9600);
  53.     configOutputs(initPin);
  54. }
  55.  
  56. void loop()
  57. {
  58.     for(int i = 0; i < 10; i++)
  59.     {
  60.         Serial.println(i);
  61.         showNum(initPin, COMMON_ANODE, i, true);
  62.         delay(1000);
  63.     }
  64. }
  65.  
  66.  
  67. void configOutputs(int initial_pin)
  68. {
  69.     if(initial_pin > 0)
  70.     {
  71.         DDRD = 0xFF<<initial_pin;
  72.         DDRB = (0xFF<<initial_pin) ^ 0xFF;
  73.     }
  74.     else
  75.     {
  76.         DDRD = 0xFF;
  77.     }
  78. }
  79.  
  80. void showNum(int initial_pin, int common, int num, bool showDot)
  81. {
  82.     if(num < 0 || num > 10)
  83.     {
  84.         return;
  85.     }
  86.     byte pins = showDot ? numbers[num] | 0b1000 : numbers[num];
  87.    
  88.     if(common == COMMON_ANODE)
  89.     {
  90.         pins ^= 0xFF;
  91.     }
  92.    
  93.     if(initial_pin > 0)
  94.     {
  95.         PORTD = pins<<initial_pin;
  96.         PORTB = (pins>>(8 - initial_pin));
  97.     }
  98.     else
  99.     {
  100.         PORTD = pins;
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement