| Ваш IP: 3.226.243.130 | Online(24) - гости: 15, боты: 9 | Загрузка сервера: 1.3 ::::::::::::


Модуль индикации на 74НС595 (Arduino)

Модуль индикации представляет собой 4-х разрядный 7-и сегментный дисплей на сдвиговых регистрах 74НС595.

Микросхема 74HC595 содержит 8 битный регистр хранения и 8 битный сдвиговый регистр. Данные последовательно передаются в сдвиговый регистр, затем фиксируются в регистре хранения. К регистру хранения подключены 8 выходных линий.

На основе двух микросхем 74HC595 образована динамическая индикация, первый сдвиговый регистр управляет разрядами, а второй сегментами. В данном варианте рассмотрен 4-х разрядный индикатор, но индикация на двух ИМС 74HC595 может достигать 8-и разрядов.

Модуль на сдвиговых регистрах содержит пять выводов:

  • DIO — пин данных
  • SCLK — пин тактирования
  • RCLK — пин «защелка»
  • GND — подключение к земле
  • VCC  — подключение питания +5 В

Скетч показанный ниже позволяет выводить значение переменной int k, значение которой увеличивается на единицу каждые 100 мс. Значение переменной может находится в пределах от 0 до 9999.

#include <MsTimer2.h>
 
byte razr[5] = {0x08, 0x04, 0x02, 0x01, 0x00};// 0123         
byte digit[12] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF}; // 0123456789
byte pointDigit = 0x80; //точка
int k;
byte a[4];
 
void setup(){
  MsTimer2::set(15, to_Timer);// задаем период 10...20 мс
  MsTimer2::start();// старт индикации
  pinMode(3, OUTPUT);  // RCLK
  pinMode(4, OUTPUT);  // SCLK
  pinMode(2, OUTPUT);  // DIO
}
 
void to_Timer(){
  a[0]=k/1000;
  a[1]=k/100%10;
  a[2]=k/10%10;
  a[3]=k%10%10;
  for(int i=0;i<5;i++){
  digitalWrite(3, LOW);
  shiftOut(2, 4, MSBFIRST, digit[a[i]]);
  shiftOut(2, 4, MSBFIRST, razr[i]);
  digitalWrite(3, HIGH);
  } 
}
 
void loop(){
k++;delay(100);
}

Следующий скетч позволяет выводить значение переменной float k которое может находиться в пределах от 0,001 до 9999. Значение переменной увеличивается на 0,001 каждые 10 мс.

#include <MsTimer2.h>
 
byte razr[5] = {0x08, 0x04, 0x02, 0x01, 0x00};// 0123         
byte digit[12] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF}; // 0123456789 
byte point = 0x80; //точка
float k=0.000;
int k1,t;
byte a[4];
 
void setup(){
  MsTimer2::set(15, to_Timer);// задаем период 10...20 мс
  MsTimer2::start();// старт индикации
  pinMode(3, OUTPUT);  // RCLK
  pinMode(4, OUTPUT);  // SCLK
  pinMode(2, OUTPUT);  // DIO
}
 
void to_Timer(){
  if(k<10){k1=round(k*1000);t=0;}
  else if(k<100){k1=round(k*100);t=1;}
  else if(k<1000){k1=round(k*10);t=2;}
  else {k1=k;t=4;}
  a[0]=k1/1000;
  a[1]=k1/100%10;
  a[2]=k1/10%10;
  a[3]=k1%10%10;
  for(int i=0;i<5;i++){
  digitalWrite(3, LOW);
  if(i==t){shiftOut(2, 4, MSBFIRST, digit[a[i]] ^ point);}
  else{shiftOut(2, 4, MSBFIRST, digit[a[i]]);}
  shiftOut(2, 4, MSBFIRST, razr[i]);
  digitalWrite(3, HIGH);
  } 
}
 
void loop(){
k+=0.001;delay(10);
}

Следующий скетч позволяет выводить значение переменной float k которое может находиться в пределах от ±0,01 до ±999. Значение переменной (по умолчанию float k = 999) уменьшается на 0,01 каждые 10 мс.

#include <MsTimer2.h>
 
byte razr[5] = {0x08, 0x04, 0x02, 0x01, 0x00};// 0123         
byte digit[12] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF, 0xBF}; // 0123456789 минус
byte point = 0x80; //точка
float k=999;
float k2;
int k1,t;
byte a[4];
 
void setup(){Serial.begin(9600);
  MsTimer2::set(15, to_Timer);// задаем период 10...20 мс
  MsTimer2::start();// старт индикации
  pinMode(3, OUTPUT);  // RCLK
  pinMode(4, OUTPUT);  // SCLK
  pinMode(2, OUTPUT);  // DIO
}
 
void to_Timer(){
  if(k<0){k2 = abs(k);a[0]=11;}else{k2=k;a[0]=10;}
  Serial.println(k2);
  if(k2<10){k1=round(k2*100);t=1;}
  else if(k2<100){k1=round(k2*10);t=2;}
  else {k1=k2;t=4;}
  a[1]=k1/100%10;
  a[2]=k1/10%10;
  a[3]=k1%10%10;
  for(int i=0;i<5;i++){
  digitalWrite(3, LOW);
  if(i==t){shiftOut(2, 4, MSBFIRST, digit[a[i]] ^ point);}
  else{shiftOut(2, 4, MSBFIRST, digit[a[i]]);}
  shiftOut(2, 4, MSBFIRST, razr[i]);
  digitalWrite(3, HIGH);
  } 
}

void loop(){
k-=0.1;delay(100);
}

Так же можно на индикаторе выводить не только цифры но и любые символы состоящие из семи сегментов:

.GFEDCBA = 0b1111111 — все сегменты включая точку отключены

.GFEDCBA = 0b00000000 — все сегменты включены включая точку

.GFEDCBA = 0b0111111 — горит точка

.GFEDCBA = 0b10111111 — горит минус, точка выключена

.GFEDCBA = 0b10000111 — горит t, точка выключена

Для удобства новые символы можно внести в массив:

byte digit[12] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF, 0xBF,}; // 0123456789 пусто минус

Использование в скетче:

if(k<0){k2 = abs(k);a[0]=11;}else{k2=k;a[0]=10;}

Например: если переменная k<0 , то есть отрицательное число, то выводить число 11 из массива 0xBF (минус), если положительное то число 10 0xFF (все сегменты погашены).

Если например нужно чтобы постоянно горел символ то можно использовать код:

добавим новый символ t в массив 0x87 или 0b10000111, а переменной k зададим значение например 23.2

byte digit[13] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF, 0xBF, 0x87}; // 0123456789 пусто минус символ:t

a[0]=12;

Будет всегда гореть символ t  .

Библиотека MsTimer2.h - MsTimer2.zip

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Расчёт стабилизатора напряжения (источника опорного напряжения)

    Расчёт стабилизатора напряжения (источника опорного напряжения)

    Для расчёта стабилизатора, как правило, используются только два  параметра — Uст (напряжение стабилизации) , Iст (ток стабилизации), при условии что ток нагрузки равен или меньше тока стабилизации. Для простого расчета стабилизатора на примере будем использовать следующие параметры: Входное напряжение 10 В Выходное напряжение 6,8 В Ток нагрузки 10 мА Из …Подробнее...
  • УМЗЧ мощностью 200Вт

    УМЗЧ мощностью 200Вт

    В данной статье предложен УМЗЧ на 2-х микросхемах TDA7294.  Применение 2-х микросхем в мостовом включении  позволяет собрать УМЗЧ с удвоением мощности. Основные технические характеристики: Максимальная мощность — 200Вт Номинальная мощность при Кгарм 0,5% — 170Вт Номинальное вх. напряжение — 0,5В Сопротивление нагрузки — 8 Ом Диапазон воспроизводимых частот 0,02…20 кГц …Подробнее...
  • TDA7317 – стереофонический 5-полосный эквалайзер (Arduino)

    TDA7317 – стереофонический 5-полосный эквалайзер (Arduino)

    TDA7317 – стереофонический 5-полосный эквалайзер с цифровым управлением, позволяющий осуществлять регулировку уровня звука и тембра в пяти полосах 60 Гц, 260 Гц, 1 кГц, 3 кГц, 10 кГц. В связке с Arduino TDA7317 можно сделать функциональный предварительный усилитель с регулировкой тембра по пяти полосам, а если добавить аудиопроцессор например TDA7313 …Подробнее...
  • Онлайн — калькулятор цветовой маркировки резисторов

    Онлайн — калькулятор цветовой маркировки резисторов

    Для резисторов с точностью 20 % используют маркировку с тремя полосками, для резисторов с точностью 10 % и 5 % маркировку с четырьмя полосками, для более точных резисторов с пятью или шестью полосками. Первые две полоски всегда означают первые два знака номинала. Если полосок 3 или 4, третья полоска означает …Подробнее...
  • Пиковый индикатор

    Пиковый индикатор

    Простой пиковый индикатор индицирует пик музыкального сигнала. Каждый раз, когда уровень сигнала превышает уровень + 4 дБ, это приводит к свечению светодиода D1. Данное уст-во полезно в каждом из каналов звука, в конечном усилителей, и в других случаях.  Уровень напряжения при индикации уровня выше + 4 дБ равен — 1,25В. …Подробнее...