showShape.ino 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. segments3 = d;
  47. segments4 = d;
  48. segments5 = d;
  49. segments6 = d;
  50. break;
  51. // Double 88
  52. case 3:
  53. segments1 = a | f | b | e | c | d | g;
  54. segments2 = a | f | b | e | c | d | g;
  55. break;
  56. // - -
  57. case 4:
  58. segments1 = g;
  59. segments2 = g;
  60. segments3 = g;
  61. segments4 = g;
  62. segments5 = g;
  63. segments6 = g;
  64. break;
  65. // NOTHING
  66. case 5:
  67. segments1 = 0;
  68. segments2 = 0;
  69. break;
  70. }
  71. //Clock these bits out to the drivers
  72. // Segment1
  73. for (byte x = 0 ; x < 8 ; x++)
  74. {
  75. digitalWrite(segmentClock, LOW);
  76. digitalWrite(segmentData, segments1 & 1 << (7 - x));
  77. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  78. }
  79. digitalWrite(segmentLatch, LOW);
  80. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  81. // Segment2
  82. for (byte x = 0 ; x < 8 ; x++)
  83. {
  84. digitalWrite(segmentClock, LOW);
  85. digitalWrite(segmentData, segments2 & 1 << (7 - x));
  86. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  87. }
  88. digitalWrite(segmentLatch, LOW);
  89. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  90. // Segment3
  91. for (byte x = 0 ; x < 8 ; x++)
  92. {
  93. digitalWrite(segmentClock, LOW);
  94. digitalWrite(segmentData, segments3 & 1 << (7 - x));
  95. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  96. }
  97. digitalWrite(segmentLatch, LOW);
  98. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  99. // Segment4
  100. for (byte x = 0 ; x < 8 ; x++)
  101. {
  102. digitalWrite(segmentClock, LOW);
  103. digitalWrite(segmentData, segments4 & 1 << (7 - x));
  104. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  105. }
  106. digitalWrite(segmentLatch, LOW);
  107. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  108. // Segment5
  109. for (byte x = 0 ; x < 8 ; x++)
  110. {
  111. digitalWrite(segmentClock, LOW);
  112. digitalWrite(segmentData, segments5 & 1 << (7 - x));
  113. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  114. }
  115. digitalWrite(segmentLatch, LOW);
  116. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  117. // Segment6
  118. for (byte x = 0 ; x < 8 ; x++)
  119. {
  120. digitalWrite(segmentClock, LOW);
  121. digitalWrite(segmentData, segments6 & 1 << (7 - x));
  122. digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
  123. }
  124. digitalWrite(segmentLatch, LOW);
  125. digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
  126. }