Это старая версия документа!


Эксперимент 17. Счетчик (Версия 3.0)

Программное решение устранения эффекта «дребезга» при нажатии кнопки.

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp15
  1. int a = 8;
  2. int b = 9;
  3. int c = 11;
  4. int d = 5;
  5. int e = 4;
  6. int f = 7;
  7. int g = 6;
  8. int dp = 10;
  9. int keyPin = 12;
  10.  
  11. // Цифра "Один"
  12. void display1(void) {
  13. digitalWrite(b,HIGH);
  14. digitalWrite(c,HIGH);
  15. }
  16. // Цифра "Два"
  17. void display2(void) {
  18. digitalWrite(a,HIGH);
  19. digitalWrite(b,HIGH);
  20. digitalWrite(g,HIGH);
  21. digitalWrite(e,HIGH);
  22. digitalWrite(d,HIGH);
  23. }
  24. // Цифра "Три"
  25. void display3(void) {
  26. digitalWrite(a,HIGH);
  27. digitalWrite(b,HIGH);
  28. digitalWrite(c,HIGH);
  29. digitalWrite(d,HIGH);
  30. digitalWrite(g,HIGH);
  31. }
  32. // Цифра "Четыре"
  33. void display4(void) {
  34. digitalWrite(f,HIGH);
  35. digitalWrite(b,HIGH);
  36. digitalWrite(g,HIGH);
  37. digitalWrite(c,HIGH);
  38. }
  39. // Цифра "Пять"
  40. void display5(void) {
  41. digitalWrite(a,HIGH);
  42. digitalWrite(f,HIGH);
  43. digitalWrite(g,HIGH);
  44. digitalWrite(c,HIGH);
  45. digitalWrite(d,HIGH);
  46. }
  47. // Цифра "Шесть"
  48. void display6(void) {
  49. digitalWrite(a,HIGH);
  50. digitalWrite(f,HIGH);
  51. digitalWrite(g,HIGH);
  52. digitalWrite(c,HIGH);
  53. digitalWrite(d,HIGH);
  54. digitalWrite(e,HIGH);
  55. }
  56. // Цифра "Семь"
  57. void display7(void) {
  58. digitalWrite(a,HIGH);
  59. digitalWrite(b,HIGH);
  60. digitalWrite(c,HIGH);
  61. }
  62. // Цифра "Восемь"
  63. void display8(void) {
  64. digitalWrite(a,HIGH);
  65. digitalWrite(b,HIGH);
  66. digitalWrite(g,HIGH);
  67. digitalWrite(c,HIGH);
  68. digitalWrite(d,HIGH);
  69. digitalWrite(e,HIGH);
  70. digitalWrite(f,HIGH);
  71. }
  72. // Цифра "Девять"
  73. void display9(void) {
  74. digitalWrite(a,HIGH);
  75. digitalWrite(b,HIGH);
  76. digitalWrite(g,HIGH);
  77. digitalWrite(c,HIGH);
  78. digitalWrite(d,HIGH);
  79. digitalWrite(f,HIGH);
  80. }
  81. // Цифра "Нуль"
  82. void display0(void) {
  83. digitalWrite(a,HIGH);
  84. digitalWrite(b,HIGH);
  85. digitalWrite(c,HIGH);
  86. digitalWrite(d,HIGH);
  87. digitalWrite(e,HIGH);
  88. digitalWrite(f,HIGH);
  89. }
  90. //Очистка дисплея
  91. void clearDisplay(void) {
  92. digitalWrite(a,LOW);
  93. digitalWrite(b,LOW);
  94. digitalWrite(g,LOW);
  95. digitalWrite(c,LOW);
  96. digitalWrite(d,LOW);
  97. digitalWrite(e,LOW);
  98. digitalWrite(f,LOW);
  99. }
  100.  
  101. void setup() {
  102. int i;
  103. for(i=4;i<=11;i++)
  104. pinMode(i,OUTPUT);
  105. pinMode(keyPin,INPUT);
  106. display0();
  107. }
  108.  
  109. int x = -1;
  110. int button_old = 1;
  111. void loop() {
  112. if((digitalRead(keyPin) == LOW)&&(button_old == 1)) {
  113. x = x + 1;
  114. }
  115. if (x == 0) {clearDisplay(); display0();}
  116. if (x == 1) {clearDisplay(); display1();}
  117. if (x == 2) {clearDisplay(); display2();}
  118. if (x == 3) {clearDisplay(); display3();}
  119. if (x == 4) {clearDisplay(); display4();}
  120. if (x == 5) {clearDisplay(); display5();}
  121. if (x == 6) {clearDisplay(); display6();}
  122. if (x == 7) {clearDisplay(); display7();}
  123. if (x == 8) {clearDisplay(); display8();}
  124. if (x == 9) {clearDisplay(); display9();}
  125. if (x > 9) {x = 0;}
  126. button_old = digitalRead(keyPin);
  127. delay(10);
  128. }

Дополнительное задание

Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы секундомер переключал символы от 0 до F