Advertisement
Guest User

Untitled

a guest
Aug 29th, 2012
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.21 KB | None | 0 0
  1. byte seg = 0;
  2. byte segA = 11;
  3. byte segB = 7;
  4. byte segC = 4;
  5. byte segD = 2;
  6. byte segE = 1;
  7. byte segF = 10;
  8. byte segG = 5;
  9. byte segDP = 3;
  10.  
  11. byte digit1 = 12;
  12. byte digit2 = 9;
  13. byte digit3 = 8;
  14. byte digit4 = 6;
  15. byte digits_available = 4; // Amount of available digits on display
  16.  
  17. //                    1,    2,    3,    4,    5,    6,    7,    8,    9,    10,   11,   12
  18. byte pin_map[] = {-1, P2_4, P2_5, P1_6, P1_7, P1_4, P1_3, P1_5, P2_0, P2_1, P2_2, 19, P2_3};
  19. byte char_map[128]; // Fragmented set of first 128 characters of ASCII table.
  20. byte seg_map[] = {segA, segB, segC, segD, segE, segF, segG, segDP};
  21. byte digits_map[4] = {digit1, digit2, digit3, digit4};
  22.  
  23.  
  24. void setup() {
  25.   P2SEL &= ~(BIT6|BIT7);
  26.   P2DIR |= (BIT6|BIT7);
  27.   P2OUT |= BIT7;
  28.   P2OUT |= BIT6;
  29.  
  30.   char_map['0'] = B11111100;
  31.   char_map['1'] = B01100000;
  32.   char_map['2'] = B11011010;
  33.   char_map['3'] = B11110010;
  34.   char_map['4'] = B01100110;
  35.   char_map['5'] = B10110110;
  36.   char_map['6'] = B10111110;
  37.   char_map['7'] = B11100000;
  38.   char_map['8'] = B11111110;
  39.   char_map['9'] = B11110110;
  40.  
  41.   char_map['H'] = B01101110;
  42.   char_map['L'] = B00011100;
  43.   char_map['E'] = B10011110;
  44.   char_map['R'] = B11101110;
  45.  
  46.  
  47.   Serial.begin(9600);
  48.   int i;
  49.  
  50.   for (i = 1; i < sizeof(pin_map); i++) {
  51.     pinMode(pin_map[i], OUTPUT);
  52.   }
  53. }
  54.  
  55.  
  56. void turnSegOff(int seg) {
  57.   digitalWrite(pin_map[seg], HIGH);
  58. }
  59.  
  60. void turnDisplayOff() {
  61.   int i;
  62.  
  63.  
  64.   for (i = 1; i < sizeof(pin_map); i++) {
  65.     digitalWrite(pin_map[i], LOW);
  66.   }
  67. }
  68.  
  69. void turnSegOn(int seg) {
  70.   digitalWrite(pin_map[seg], LOW);
  71. }
  72.  
  73. void turnAllOff() {
  74.   byte i;
  75.  
  76.   for (i = 0; i < 8; i++) {
  77.       turnSegOff(seg_map[i]);
  78.   }
  79. }
  80.  
  81. //String floatToString(float f) {
  82. //  char temp[10];
  83. //
  84. //  dtostrf(f, 1, 2, temp);
  85. //  return String(temp);
  86. //}
  87.  
  88. void displayChar(char c, byte digit, boolean with_dot = false) {
  89.   byte i;
  90.   char mask = char_map[c];
  91.  
  92.   turnDisplayOff();
  93.   digitalWrite(pin_map[digits_map[digit]], LOW);
  94.  
  95.   if (mask) {
  96.     if (with_dot) {
  97.       mask = mask | 1;
  98.     }
  99.    
  100.     for (i = 0; i < 8; i++) {
  101.       if ((mask & (1 << i)) == (1 << i)) {
  102.         turnSegOn(seg_map[7 - i]);
  103.       }
  104.       else {
  105.         turnSegOff(seg_map[7 - i]);
  106.       }
  107.     }
  108.     digitalWrite(pin_map[digits_map[digit]], HIGH);
  109.     delay(3);
  110.   } else {
  111.     turnAllOff();
  112.   }
  113. }
  114.  
  115. void displayString(String s) {
  116.   String stripped = s;
  117.  
  118.   stripped.replace(".", "");
  119.  
  120.   int i,
  121.     len = s.length(),
  122.     slen = stripped.length(),
  123.     correction = 0;
  124.  
  125.   len = min(len, digits_available + len - slen);
  126.   slen = min(slen, digits_available);
  127.  
  128.   for (i = 0; i < len; i++) {
  129.     if (s[i] == '.') {
  130.       correction++;
  131.     } else {
  132.       displayChar(s[i],  // Character to display
  133.                   digits_available - (slen - i) - correction, // Position
  134.                   i + 1 < len && s[i + 1] == '.'); // Should we show the dot?
  135.     }
  136.   }
  137. }
  138.  
  139. char buffer[5];
  140. byte pos = 0;
  141. String message = " L0H";
  142.  
  143. void loop() {
  144.   displayString(message);
  145.  
  146.   if (Serial.available()) {
  147.     buffer[pos] = Serial.read();
  148.     pos++;
  149.    
  150.     if (pos == 4) {
  151.       buffer[4] = 0;
  152.       Serial.println(buffer);
  153.       message = buffer;
  154.       pos = 0;
  155.     }
  156.   }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement