Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:aruno:exp19 [2020/06/20 13:13] alexnikproducts:aruno:exp19 [2020/06/26 13:19] (текущий) alexnik
Строка 1: Строка 1:
 ===== Эксперимент 19. Счетчик (Версия 4.0) ===== ===== Эксперимент 19. Счетчик (Версия 4.0) =====
  
-В 12 эксперименте мы собирали устройство Люксметр. Это устройство также можно собрать используя [[theory:74HC595|сдвиговый регистр 74НС595.]]\\ +Используя сдвиговый регистр 74НС595 усовершенствуем проект счетчика нажатий на кнопку.
-Сразу возникает вопрос: "Зачем переделывать устройство, если оно и так работает?".\\ +
-Все дело в том, что пока мы делаем простые проекты, нам вполне хватает количества цифровых вводов\выводов, но со временем может наступить ситуация когда пинов станет не хватать. Вот здесь и может пригодиться сдвиговый регистр 74НС595, поскольку используя всего три пина контроллера и одну микросхему можно получить 8 выходов. А подключая микросхемы одну за другой можно используя все те же 3 пина контроллера получать 16,24,32 и тд. цифровых выходов.+
  
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
Строка 13: Строка 11:
 //Рисунок 2. Монтажная схема эксперимента// //Рисунок 2. Монтажная схема эксперимента//
  
-В соответствии с [[theory:74HC595|распиновкой]], подключаем выводы микросхемы в следующем порядке: +Как и в предыдущем эксперименте контроллер передает последовательный сигнал на вывод DS микросхемыкоторый преобразуется в параллельный сигнал на выводах Q0...Q7. К этим выводам через токоограничительные резисторы подключаем LED - индикатор.
-  * выводы 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микросхемы подключаем к светодиодам +
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
 <file cpp Exp19[enable_line_numbers="2", start_line_numbers_at="1"]> <file cpp Exp19[enable_line_numbers="2", start_line_numbers_at="1"]>
-int a = 8;  +const int latchPin = 5; 
-int b = 9; +const int clockPin = 6; 
-int c = 11; +const int dataPin 4;  
-int d = 5; +int keyPin = 13
-int e = 4; +int data[16] = {254176237249179219223240255243247159206189199}; 
-int f = 7; +void Displ(int num);
-int g = 6; +
-int dp 10+
-int keyPin = 3+
-int data [11][8] = {{1,1,1,1,1,1,0,1}//"Ноль" +
-                    {0,1,1,0,0,0,0,1}, //"Один" +
-                    {1,1,0,1,1,0,1,1}, //"Два" +
-                    {1,1,1,1,0,0,1,1}, //"Три" +
-                    {0,1,1,0,0,1,1,1}, //"Четыре" +
-                    {1,0,1,1,0,1,1,1}, //"Пять" +
-                    {1,0,1,1,1,1,1,1}, //"Шесть" +
-                    {1,1,1,0,0,0,0,1}, //"Семь" +
-                    {1,1,1,1,1,1,1,1}, //"Восемь" +
-                    {1,1,1,1,0,1,1,1}, //"Девять" +
-                    {0,0,0,0,0,0,0,0}}// Исходное состояние+
  
-void displ (int); +void setup () { 
- +  pinMode(latchPin,OUTPUT)
-void setup() {  +  pinMode(clockPin,OUTPUT); 
-    for(int i=4;i<=11;i++)  +  pinMode(dataPin,OUTPUT); 
-        pinMode(i,OUTPUT); +  Displ(0); 
-    pinMode(keyPin,INPUT); + }
-    displ(11); +
- +
  
 int x = -1;   int x = -1;  
 int button_old = 1; int button_old = 1;
-void loop() { +void loop() {
    if((digitalRead(keyPin) == LOW)&&(button_old == 1)) {    if((digitalRead(keyPin) == LOW)&&(button_old == 1)) {
       x = x + 1;       x = x + 1;
     }     }
-   displ(11); +   Displ(0); 
-   displ(x); +   Displ(x); 
-   if (x > 9) {x = 0;} +   if (x > 15) {x = 0;} 
-   + 
    button_old = digitalRead(keyPin);    button_old = digitalRead(keyPin);
    delay(20);    delay(20);
  }  }
  
-void displ (int num) { +void Displ(int num) { 
-  int j = 0; +    digitalWrite(latchPin,LOW); 
-  digitalWrite(adata[num][j]); j = j + 1+    shiftOut(dataPin,clockPin,LSBFIRST,data[num]); 
-  digitalWrite(bdata[num][j]); j = j + 1;  +    digitalWrite(latchPin,HIGH); 
-  digitalWrite(cdata[num][j]); j = j + 1;  + }
-  digitalWrite(d, data[num][j]); j = j + 1;  +
-  digitalWrite(edata[num][j]); j = j + 1;  +
-  digitalWrite(f, data[num][j]); j = j + 1;  +
-  digitalWrite(g, data[num][j]); j = j + 1;  +
-  digitalWrite(dp, data[num][j]); j = j + 1;  +
-}+
 </file> </file>
  
-В программе эксперимента +В отличие от предыдущей версии "Счетчика" у нас изменилась схема подключения LED -индикатора к контроллеру, теперь для передачи сигналов достаточно только трех пинов, более того, используя соединение микросхем 74HC595 каскадомможно используя все те же три пина подключать дополнительные LED - индикаторы для создания более сложных и интересных проектов.\\ 
 +В программе мы обрабатываем нажатие кнопки и передаем в функцию ''Displ()'' номер закодированного символа в массиве ''data[]''. Для краткости записи кодировку символов записываем не в двоичной системе а в десятичной. 
  
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
 +Попробуйте добавить еще одну кнопку в проект.
 </WRAP> </WRAP>