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


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

В 12 эксперименте мы собирали устройство Люксметр. Это устройство также можно собрать используя сдвиговый регистр 74НС595.
Сразу возникает вопрос: «Зачем переделывать устройство, если оно и так работает?».
Все дело в том, что пока мы делаем простые проекты, нам вполне хватает количества цифровых вводов\выводов, но со временем может наступить ситуация когда пинов станет не хватать. Вот здесь и может пригодиться сдвиговый регистр 74НС595, поскольку используя всего три пина контроллера и одну микросхему можно получить 8 выходов. А подключая микросхемы одну за другой можно используя все те же 3 пина контроллера получать 16,24,32 и тд. цифровых выходов.

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

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

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

В соответствии с распиновкой, подключаем выводы микросхемы в следующем порядке:

  • выводы 8 и 13 микросхемы на GND контроллера
  • выводы 10 и 16 микросхемы на 5v котроллера
  • выводы 11(SH_CP), 12(ST_CP) и 14(DS) микросхемы на цифровые входы\выходы контроллера (в нашем эксперементе это пины 6,5 и 4 соответственно)
  • выводы 15(Q0), 1(Q1), 2(Q2), 3(Q3), 4(Q4), 5(Q5), 6(Q6), 7(Q7) микросхемы подключаем к светодиодам

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

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. }

В программе эксперимента

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