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


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

Используя сдвиговый регистр 74НС595 усовершенствуем проект счетчика нажатий на кнопку.

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

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

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

Как и в предыдущем эксперименте контроллер передает последовательный сигнал на вывод DS микросхемы, который преобразуется в параллельный сигнал на выводах Q0…Q7. К этим выводам через токоограничительные резисторы подключаем LED - индикатор.

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

Exp19
  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 h = 10;
  9. int keyPin = 3;
  10. int data [11][8] = {{1,1,1,1,1,1,0,1}, //"Ноль"
  11. {0,1,1,0,0,0,0,1}, //"Один"
  12. {1,1,0,1,1,0,1,1}, //"Два"
  13. {1,1,1,1,0,0,1,1}, //"Три"
  14. {0,1,1,0,0,1,1,1}, //"Четыре"
  15. {1,0,1,1,0,1,1,1}, //"Пять"
  16. {1,0,1,1,1,1,1,1}, //"Шесть"
  17. {1,1,1,0,0,0,0,1}, //"Семь"
  18. {1,1,1,1,1,1,1,1}, //"Восемь"
  19. {1,1,1,1,0,1,1,1}, //"Девять"
  20. {0,0,0,0,0,0,0,0}}; // Исходное состояние
  21.  
  22. void displ (int);
  23.  
  24. void setup() {
  25. for(int i=4;i<=11;i++)
  26. pinMode(i,OUTPUT);
  27. pinMode(keyPin,INPUT);
  28. displ(11);
  29. }
  30.  
  31. int x = -1;
  32. int button_old = 1;
  33. void loop() {
  34. if((digitalRead(keyPin) == LOW)&&(button_old == 1)) {
  35. x = x + 1;
  36. }
  37. displ(11);
  38. displ(x);
  39. if (x > 9) {x = 0;}
  40.  
  41. button_old = digitalRead(keyPin);
  42. delay(20);
  43. }
  44.  
  45. void displ (int num) {
  46. int j = 0;
  47. digitalWrite(a, data[num][j]); j = j + 1;
  48. digitalWrite(b, data[num][j]); j = j + 1;
  49. digitalWrite(c, data[num][j]); j = j + 1;
  50. digitalWrite(d, data[num][j]); j = j + 1;
  51. digitalWrite(e, data[num][j]); j = j + 1;
  52. digitalWrite(f, data[num][j]); j = j + 1;
  53. digitalWrite(g, data[num][j]); j = j + 1;
  54. digitalWrite(dp, data[num][j]); j = j + 1;
  55. }

В программе эксперимента используем двухмерный массив, в котором зашифровываем выводимые символы. Для вывода всех символов напишем универсальную функцию в которую будем передавать порядковый номер символа зашифрованного в массиве.

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

  • добавьте дополнительно еще буквы A, b, C, d, E, F
  • усовершенствуйте функцию displ(),(подсказка - для этого вам понадобится изменить монтажную схему подключения