您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

221 行
4.4KB

  1. /*
  2. *@author James McKenzie
  3. *@lang C89 Based
  4. *@contact lunarised@outlook.com
  5. */
  6. void setup() {
  7. pinMode(0, OUTPUT);
  8. pinMode(1, OUTPUT);
  9. pinMode(2, OUTPUT);
  10. pinMode(3, OUTPUT);
  11. pinMode(4, OUTPUT);
  12. pinMode(5, OUTPUT);
  13. pinMode(6, OUTPUT);
  14. pinMode(7, OUTPUT);
  15. pinMode (11, INPUT_PULLUP);
  16. pinMode (8, INPUT_PULLUP);
  17. pinMode (9, INPUT_PULLUP);
  18. pinMode (10, INPUT_PULLUP);
  19. int i = 0;
  20. int j = 0;
  21. int sum = 0;
  22. resetDisplay();
  23. }
  24. int i;
  25. int j;
  26. int sum;
  27. int result;
  28. int error;
  29. void loop() {
  30. int error = 0;
  31. i = stateA(i);
  32. delay (250);
  33. j = stateA(j);
  34. delay(250);
  35. int operand = stateB();
  36. stateC(operand);
  37. delay(250);
  38. stateD();
  39. digitalWrite(1, LOW);
  40. delay(1000);
  41. digitalWrite(1, HIGH);
  42. }
  43. int stateA(int val){
  44. while (digitalRead(11)==HIGH){
  45. if (digitalRead(8)==LOW){
  46. val = (val + 1)%10;
  47. displayDigit(val, 100);
  48. }
  49. if (digitalRead(9)==LOW){
  50. val = (val + 9)%10;
  51. displayDigit(val, 100);
  52. }
  53. displayDigit(val, 100);
  54. }
  55. return val;
  56. }
  57. int stateB(){
  58. int operand = 0;
  59. digitalWrite(1, LOW);
  60. while (operand == 0){
  61. if (digitalRead(11) == LOW){
  62. operand = 1;
  63. }
  64. if (digitalRead(10) == LOW){
  65. operand = 2;
  66. }
  67. if (digitalRead(9) == LOW){
  68. operand = 3;
  69. }
  70. if (digitalRead(8) == LOW){
  71. operand = 4;
  72. }
  73. }
  74. digitalWrite(1, HIGH);
  75. return operand;
  76. }
  77. void stateC(int operand){
  78. if (operand == 1){
  79. sum = i + j;
  80. }
  81. if (operand == 2){
  82. sum = i - j;
  83. }
  84. if (operand == 3){
  85. sum = i * j;
  86. }
  87. if (operand == 4){
  88. if (j == 0){
  89. error = 1;
  90. }
  91. else{
  92. sum = i / j;
  93. }
  94. }
  95. }
  96. void stateD(){
  97. if (error == 1){
  98. digitalWrite(0, LOW);
  99. digitalWrite(1, LOW);
  100. digitalWrite(2, LOW);
  101. digitalWrite(3, LOW);
  102. digitalWrite(4, LOW);
  103. delay (5000);
  104. error = 0;
  105. }
  106. else{
  107. while (digitalRead(11)==HIGH){
  108. int splitSum = sum;
  109. while(splitSum >= 9){
  110. displayDigit(splitSum%10, 250);
  111. splitSum /= 10;
  112. }
  113. displayDigit(splitSum, 250);
  114. }
  115. }
  116. }
  117. void displayDigit(int inp, int fTime){
  118. switch (inp){
  119. case 1:
  120. digitalWrite(5, LOW);
  121. digitalWrite(6, LOW);
  122. delay(fTime);
  123. resetDisplay();
  124. break;
  125. case 2:
  126. digitalWrite(0, LOW);
  127. digitalWrite(1, LOW);
  128. digitalWrite(2, LOW);
  129. digitalWrite(4, LOW);
  130. digitalWrite(5, LOW);
  131. delay(fTime);
  132. resetDisplay();
  133. break;
  134. case 3:
  135. digitalWrite(0, LOW);
  136. digitalWrite(1, LOW);
  137. digitalWrite(2, LOW);
  138. digitalWrite(5, LOW);
  139. digitalWrite(6, LOW);
  140. delay(fTime);
  141. resetDisplay();
  142. break;
  143. case 4:
  144. digitalWrite(1, LOW);
  145. digitalWrite(3, LOW);
  146. digitalWrite(5, LOW);
  147. digitalWrite(6, LOW);
  148. delay(fTime);
  149. resetDisplay();
  150. break;
  151. case 5:
  152. digitalWrite(1, LOW);
  153. digitalWrite(0, LOW);
  154. digitalWrite(2, LOW);
  155. digitalWrite(3, LOW);
  156. digitalWrite(6, LOW);
  157. delay(fTime);
  158. resetDisplay();
  159. break;
  160. case 6:
  161. digitalWrite(1, LOW);
  162. digitalWrite(0, LOW);
  163. digitalWrite(2, LOW);
  164. digitalWrite(4, LOW);
  165. digitalWrite(3, LOW);
  166. digitalWrite(6, LOW);
  167. delay(fTime);
  168. resetDisplay();
  169. break;
  170. case 7:
  171. digitalWrite(2, LOW);
  172. digitalWrite(5, LOW);
  173. digitalWrite(6, LOW);
  174. delay(fTime);
  175. resetDisplay();
  176. break;
  177. case 8:
  178. digitalWrite(2, LOW);
  179. digitalWrite(1, LOW);
  180. digitalWrite(0, LOW);
  181. digitalWrite(4, LOW);
  182. digitalWrite(3, LOW);
  183. digitalWrite(5, LOW);
  184. digitalWrite(6, LOW);
  185. delay(fTime);
  186. resetDisplay();
  187. break;
  188. case 9:
  189. digitalWrite(2, LOW);
  190. digitalWrite(1, LOW);
  191. digitalWrite(0, LOW);
  192. digitalWrite(3, LOW);
  193. digitalWrite(5, LOW);
  194. digitalWrite(6, LOW);
  195. delay(fTime);
  196. resetDisplay();
  197. break;
  198. case 0:
  199. digitalWrite(2, LOW);
  200. digitalWrite(0, LOW);
  201. digitalWrite(3, LOW);
  202. digitalWrite(4, LOW);
  203. digitalWrite(5, LOW);
  204. digitalWrite(6, LOW);
  205. delay(fTime);
  206. resetDisplay();
  207. break;
  208. }
  209. };
  210. void resetDisplay(){
  211. digitalWrite(0, HIGH);
  212. digitalWrite(1, HIGH);
  213. digitalWrite(2, HIGH);
  214. digitalWrite(3, HIGH);
  215. digitalWrite(4, HIGH);
  216. digitalWrite(5, HIGH);
  217. digitalWrite(6, HIGH);
  218. digitalWrite(7, HIGH);
  219. }