showShape.ino 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. void showShape(int shape)
  2. {
  3. // - A
  4. // / / F/B
  5. // - G
  6. // / / E/C
  7. // -. D/DP
  8. #define a 1<<0
  9. #define b 1<<6
  10. #define c 1<<5
  11. #define d 1<<4
  12. #define e 1<<3
  13. #define f 1<<1
  14. #define g 1<<2
  15. #define dp 1<<7
  16. byte segments1;
  17. byte segments2;
  18. byte segments3;
  19. byte segments4;
  20. byte segments5;
  21. byte segments6;
  22. switch (shape)
  23. {
  24. //
  25. case 0:
  26. segments1 = a | f | b | e | c | d;
  27. segments2 = a | f | b | e | c | d;
  28. segments3 = a | f | b | e | c | d;
  29. segments4 = a | f | b | e | c | d;
  30. segments5 = a | f | b | e | c | d;
  31. segments6 = a | f | b | e | c | d;
  32. break;
  33. // . .
  34. case 1:
  35. segments1 = dp;
  36. segments2 = dp;
  37. segments3 = dp;
  38. segments4 = dp;
  39. segments5 = dp;
  40. segments6 = dp;
  41. break;
  42. // _ _
  43. case 2:
  44. segments1 = d;
  45. segments2 = d;
  46. break;
  47. // Double 88
  48. case 3:
  49. segments1 = a | f | b | e | c | d | g;
  50. segments2 = a | f | b | e | c | d | g;
  51. break;
  52. // - -
  53. case 4:
  54. segments1 = g;
  55. segments2 = g;
  56. segments3 = g;
  57. segments4 = g;
  58. segments5 = g;
  59. segments6 = g;
  60. break;
  61. // NOTHING
  62. case 5:
  63. segments1 = 0;
  64. segments2 = 0;
  65. break;
  66. }
  67. //Clock these bits out to the drivers
  68. // Segment1
  69. for (byte x = 0 ; x < 8 ; x++)
  70. {
  71. digitalWrite(segmentClock, LOW);
  72. digitalWrite(segmentData, segments1 & 1 << (7 - x));
  73. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  74. }
  75. digitalWrite(segmentLatch, LOW);
  76. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  77. // Segment2
  78. for (byte x = 0 ; x < 8 ; x++)
  79. {
  80. digitalWrite(segmentClock, LOW);
  81. digitalWrite(segmentData, segments2 & 1 << (7 - x));
  82. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  83. }
  84. digitalWrite(segmentLatch, LOW);
  85. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  86. // Segment3
  87. for (byte x = 0 ; x < 8 ; x++)
  88. {
  89. digitalWrite(segmentClock, LOW);
  90. digitalWrite(segmentData, segments3 & 1 << (7 - x));
  91. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  92. }
  93. digitalWrite(segmentLatch, LOW);
  94. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  95. // Segment4
  96. for (byte x = 0 ; x < 8 ; x++)
  97. {
  98. digitalWrite(segmentClock, LOW);
  99. digitalWrite(segmentData, segments4 & 1 << (7 - x));
  100. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  101. }
  102. digitalWrite(segmentLatch, LOW);
  103. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  104. // Segment5
  105. for (byte x = 0 ; x < 8 ; x++)
  106. {
  107. digitalWrite(segmentClock, LOW);
  108. digitalWrite(segmentData, segments5 & 1 << (7 - x));
  109. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  110. }
  111. digitalWrite(segmentLatch, LOW);
  112. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  113. // Segment6
  114. for (byte x = 0 ; x < 8 ; x++)
  115. {
  116. digitalWrite(segmentClock, LOW);
  117. digitalWrite(segmentData, segments6 & 1 << (7 - x));
  118. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  119. }
  120. digitalWrite(segmentLatch, LOW);
  121. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  122. }