postNumberLap.ino 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. //Given a number, or '-', shifts it out to the display
  2. void postNumberLAP(int number, boolean decimal)
  3. {
  4. // - A
  5. // / / F/B
  6. // - G
  7. // / / E/C
  8. // -. D/DP
  9. #define a 1<<0
  10. #define b 1<<6
  11. #define c 1<<5
  12. #define d 1<<4
  13. #define e 1<<3
  14. #define f 1<<1
  15. #define g 1<<2
  16. #define dp 1<<7
  17. byte segmentsLAP;
  18. switch (number)
  19. {
  20. case 1: segmentsLAP = b | c; break;
  21. case 2: segmentsLAP = a | b | d | e | g; break;
  22. case 3: segmentsLAP = a | b | c | d | g; break;
  23. case 4: segmentsLAP = f | g | b | c; break;
  24. case 5: segmentsLAP = a | f | g | c | d; break;
  25. case 6: segmentsLAP = a | f | g | e | c | d; break;
  26. case 7: segmentsLAP = a | b | c; break;
  27. case 8: segmentsLAP = a | b | c | d | e | f | g; break;
  28. case 9: segmentsLAP = a | b | c | d | f | g; break;
  29. // case 0:
  30. // if (number > 9) {
  31. // segments = a | b | c | d | e | f; break;
  32. // } else segments = 0; break;
  33. case 0: segmentsLAP = a | b | c | d | e | f; break;
  34. case ' ': segmentsLAP = 0; break;
  35. case 'c': segmentsLAP = g | e | d; break;
  36. case '-': segmentsLAP = g; break;
  37. }
  38. if (decimal) segmentsLAP |= dp;
  39. //Clock these bits out to the drivers
  40. for (byte x = 0 ; x < 8 ; x++)
  41. {
  42. digitalWrite(segmentClockLAP, LOW);
  43. digitalWrite(segmentDataLAP, segmentsLAP & 1 << (7 - x));
  44. digitalWrite(segmentClockLAP, HIGH); //Data transfers to the register on the rising edge of SRCK
  45. }
  46. }