Как подключить семисегментный индикатор к arduino: Страница не найдена » Ардуино Уроки

Содержание

Подключение семисегментного индикатора через 74hc595. Статическая индикация. — Как подключить — AVR project.ru


$regfile = «m32def.dat» ‘ тип МК
$crystal = 16000000 ‘ выбор кристала для расчета задержек

‘*****************************************[Определение переменных и констант]************************************

Dim Count As Byte ‘ переменная для работы с индикацией
Dim Ledout As Byte ‘ переменная для загрузки в регистры сдвига
Dim Number(4) As Byte ‘ значения 6-ти разрядов
Dim H_flag(4) As Byte ‘ флаги точек 6-ти разрядов
Dim Blink_count As Word ‘ счетчик времени мигания
Dim Blink_flag(4) As Byte ‘ флаги мигания разрядов

‘***********************************************[Инициализация портов]*******************************************

Ddrc = &B11111111 ‘порт В на выход ‘ вывод SH_CP регистра (тактовые импульсы)

‘*********************************************[Инициализация прерываний]*****************************************

Config Timer0 = Timer , Prescale = 64 ‘ конфигурируем таймер индикации
On Ovf0 Refresh ‘ метка на прерывание индикации

Enable Interrupts ‘ разрешаем прерывания
Enable Ovf0 ‘ и для индикации в частности

‘********************************************[Присвоение уникальных имен]****************************************

595clock Alias Portc.0 : 595data Alias Portc.1 ‘ выводы 74HC595

‘*********************************************[Начало основной программы]****************************************

Number(1) = 1 ‘ на индикацию выводим -tESt-
Number(2) = 2
Number(3) = 3
Number(4) = 4

Blink_flag(1) = 1 ‘ мигаем первым и шестым разрядом
Blink_flag(4) = 1

‘————————-

Do

Loop

‘***********************************[Процедуры обработки подпрограмм и прерываний]*******************************

Refresh: ‘ прерывание таймера Т0

If Blink_flag(count) = 1 And Blink_count > 200 Then ‘ если флаг мигания выставлен и счетчик > 200
Ledout = Lookup(0 , Rank) ‘ выключаем разряд
Else ‘ иначе (флаг не выставлен, либо счетчик < 200)
Ledout = Lookup(count , Rank) ‘ забираем в переменную номер разряда
End If

Shiftout 595data , 595clock , Ledout , 1 ‘ закидываем в регистр

Incr Count : If Count > 4 Then Count = 1 ‘ выбираем разряд для загрузки
Incr Blink_count : If Blink_count > 400 Then Blink_count = 1 ‘ длительность мигания

Ledout = Lookup(number(count) , Digits) ‘ забираем в переменную код цифры

If H_flag(count) = 1 Then ‘ управление точками индикатора
Ledout = Ledout Xor &B00100000
End If

Shiftout 595data , 595clock , Ledout , 1 ‘ закидываем в регистр

Pulseout Portc , 2 , 20 ‘ защелкиваем данные (для 8МГц импульс 5мкс)

Return

‘******************************************************[DATA]****************************************************

Digits: ‘ цифры

Data &B11000000 , &B11111100 , &B10100100 , &B10110000 , &B10011001 ‘ 0 1 2 3 4
‘————————-

Rank: ‘ разряды

‘Data &B00000000 ‘ выкл
Data &B00000001 , &B00000010 , &B00000100 ‘ 1 2 3
Data &B00001000 , &B00010000 , &B00100000 ‘ 4 5 6

Электронный кубик для настольных игр… Как⁈ Журнал для тех, кто делает

Сегодня я соберу электронный кубик для настольных игр. Это устройство, которое выбирает случайное число от 1 до 6 и выводит его на светодиодный экран. На его примере я покажу как работать с кнопками и сегментными индикаторами — то есть создавать интерактивные интерфейсы. Это обязательно пригодится в более сложных проектах.

Что понадобится

    — микроконтроллер Arduino Uno
    — семисегментный индикатор
    — восемь сопротивлений на 220 Ом
    — кнопка
    — макетная плата
    — соединительные провода «папа-папа»

За работу устройства отвечает Arduino Uno. Микроконтроллер будет следить за кнопкой, генерировать случайные числа и выводить их, зажигая нужные сегменты светодиодного индикатора.

У светодиодного индикатора десять ног, велик риск запутаться. Поэтому соберу устройство на макетной плате. Если ошибусь, поправить схему можно за считанные мгновения, не придётся ничего перепаивать.

Шаг первый. Подключаем индикатор

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

У индикатора десять ножек: по пять сверху и снизу. Центральные ножки в каждой группе — это общий минус. Достаточно подключить только одну из них. Оставшиеся восемь — плюсы отдельных сегментов индикатора. Если подать на такую ножку ток, сегмент загорится.

Установлю индикатор в самом центре макетной платы. Затем подключу одну из средних ножек к общему минусу, а плюсовые ножки к контактам платы Arduino, начав с контакта номер 2.

Проводов много, легко ошибиться. Поэтому проверю подключение индикатора с помощью простой программы. Она по очереди включит все сегменты.

Микроконтроллер включает первый сегмент на самом маленьком по номеру контакте, ждёт секунду и переходит к следующему. Я сделал это с помощью циклов, о которых рассказывал в статье о сборке электронного метронома. Не буду на этом ещё раз останавливаться, благо впереди ещё много сложных вопросов.

Обратите внимание, в цикле я только включаю сегменты, но не выключаю их. Светодиоды гаснут только после перезагрузки платы. Если нажать кнопку

RESET (в переводе с английского это означает сброс) — плата перезагрузится и светодиоды погаснут, а потом начнут зажигаться по новой. Это происходит потому, что Arduino не подаёт ток на контакты, если в программе нет прямой команды сделать это.

Шаг второй. Выводим цифры

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

Чтобы вывести на экран цифру 1, нужно зажечь два правых сегмента. Они подключены белым и синим проводами к контактам 3 и 6. Изменю тестовую программу, чтобы она выводила на экран единицу.

Это уже что-то. Аналогично подберу сегменты, чтобы вывести остальные цифры. Соберу эту информацию в массив. Массив — это переменная, которая содержит сразу несколько значений. Каждое отдельное значение называется элементом массива. Такой элемент можно вывести, если знать его номер.

Мне нужен массив из 11 элементов: десять для цифр от 0 до 9 и один для точки.

Каждый элемент моего массива начинается со служебной комбинации символов 0b, которая означает, что элемент состоит из двоичных данных. А дальше идёт комбинация из восьми нулей или единиц. Они задают сегменты, которые будут гореть: 1 включит сегмент, 0 — выключит.

Запущу простую программу, которая будет последовательно выводить все элементы массива на экран.

Элементы готовы, остаётся добавить кнопку, которая будет управлять моим устройством.

Шаг третий. Собираем счётчик нажатий

Подключу кнопку одной ножкой к общему минусу, второй — к контакту 13 на Ардуино.

Я выбрал 13 контакт не случайно, на борту платы рядом с ним расположен оранжевый светодиод. Он будет гореть, когда кнопка отпущена и гаснуть, когда нажата. Почему, так происходит — расскажу в следующем проекте. Пока же воспользуюсь этим, чтобы проверить схему.

Изменю предыдущую программу так, чтобы значение счётчика менялось только при нажатии на кнопку.

Получился простой счётчик, похожими устройствами (их иногда называют кликеры) часто пользуются стюардессы, чтобы пересчитать пассажиров на борту самолёта.

Шаг четвёртый. Добавляем генератор случайных чисел

Теперь остался последний шаг. Научиться выводить случайное число. Для этого в языке C++ есть функция random. Она выводит случайное число из заданного диапазона. Мне нужно целое число от 1 до 6. Здесь есть тонкость. Генератор создаёт числа до конца заданного диапазона, не включая максимальное значение. Чтобы выпадала шестёрка, верхней границей диапазон нужно указать 7.

Мой электронный кубик готов, можно играть в любимые настольные игры — сжульничать бросая кубик точно не получится.

P.S. Если что-то непонятно или хочется поговорить о чём-то более подробно, пишите в комментариях. Обязательно отвечу!

Arduino. Сегментный индикатор | CUSTOMELECTRONICS.RU

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

Подготовка к работе

Прежде чем начинать программировать, разберемся с тем, как работает сегментный индикатор. По сути, он представляет собой матрицу светодиодов. В семисегментных индикаторах эти сегменты расположены так, что включая эти светодиоды, можно вывести цифры от 0 до 9. На рисунке показано расположение светодиодов на дисплее и его электрическая схема. Индикаторы бывают с общим анодом и общим катодом. На рисунке с общим анодом.

Схема индикатора

Управлять сегментным индикатором можно при помощи логических уровней. Для этого достаточно подключить общий анод к плюсу, а остальные выводы через резисторы к выводам микроконтроллера. Если на выводах МК выводить 0 сегменты будут загораться, если 1 — гаснуть.
Напоминаем, что все примеры выполнены с использованием EduBoard и TutorShield.

На нашем шилде двухразрядный индикатор. Схема подключения индикатора на нем:

Этот индикатор предназначен для динамической индикации, поэтому аноды разрядов подключены через транзисторы, для того чтобы их можно было отключить. Если подать ноль на базу такого транзистора, то он откроется и на аноды требуемого разряда будет подано напряжение питания.
Теперь установите перемычки так, как показано на рисунке, подключите шилд к EduBoard и подключите платы к USB.

Перемычки для включения индикатора

Первый пример

Для примера введите код, запускающий на индикаторе последовательность цифр 0, 1, 2:

int dig1 = 4; int dig2 = 5;
int a = 6; int b = 7;
int c = 8; int d = 9;
int e = 10; int f = 11;
int g = 12;

void setup() {                
  pinMode(a, OUTPUT); pinMode(b, OUTPUT);
  pinMode(c, OUTPUT); pinMode(d, OUTPUT);
  pinMode(e, OUTPUT); pinMode(f, OUTPUT);
  pinMode(g, OUTPUT); pinMode(dig2, OUTPUT);
  digitalWrite(a,HIGH); digitalWrite(b,HIGH);
  digitalWrite(c,HIGH); digitalWrite(d,HIGH);
  digitalWrite(e,HIGH); digitalWrite(f,HIGH);
  digitalWrite(g,HIGH); digitalWrite(dig2,LOW);
}

void loop() {
  digitalWrite(a,LOW); digitalWrite(b,LOW);
  digitalWrite(c,LOW); digitalWrite(d,LOW);
  digitalWrite(e,LOW); digitalWrite(f,LOW);
  delay(500);
  digitalWrite(a,HIGH); digitalWrite(b,HIGH);
  digitalWrite(c,HIGH); digitalWrite(d,HIGH);
  digitalWrite(e,HIGH); digitalWrite(f,HIGH);
  digitalWrite(g,HIGH);
  delay(500);  
  digitalWrite(b,LOW); digitalWrite(c,LOW);
  delay(500);
  digitalWrite(a,HIGH); digitalWrite(b,HIGH);
  digitalWrite(c,HIGH); digitalWrite(d,HIGH);
  digitalWrite(e,HIGH); digitalWrite(f,HIGH);
  digitalWrite(g,HIGH);
  delay(500);  
  digitalWrite(a,LOW); digitalWrite(b,LOW);
  digitalWrite(d,LOW); digitalWrite(e,LOW);
  digitalWrite(g,LOW);
  delay(500);
  digitalWrite(a,HIGH); digitalWrite(b,HIGH);
  digitalWrite(c,HIGH); digitalWrite(d,HIGH);
  digitalWrite(e,HIGH); digitalWrite(f,HIGH);
  digitalWrite(g,HIGH);
  delay(500);
}


Приведенный пример наглядно показывает насколько просто работать с индикатором. В разделе void setup(), на вывод dig2 выводится низкое напряжение. Это подает на анод второго разряда питающее напряжение.
Сама программа заключается в том, что на требуемые сегменты подается низкое напряжение на 500мс. Затем все сегменты гасятся и программа останавливается еще на 500мс.
Попробуйте по тому же принципу дополнить код так, чтобы цифры изменялись от 0 до 9.

Второй пример

Обратите внимание, что при этом код принимает нечитаемый вид. Это плохой стиль программирования, которого стоит избегать. Помочь в этом может использование функций.

Рассмотрим работу с ними на примере:

int dig1 = 4; int dig2 = 5;
int a = 6; int b = 7;
int c = 8; int d = 9;
int e = 10; int f = 11;
int g = 12;

void setup() {                
  pinMode(a, OUTPUT); pinMode(b, OUTPUT);
  pinMode(c, OUTPUT); pinMode(d, OUTPUT);
  pinMode(e, OUTPUT); pinMode(f, OUTPUT);
  pinMode(g, OUTPUT); pinMode(dig2, OUTPUT);
  digitalWrite(a,HIGH); digitalWrite(b,HIGH);
  digitalWrite(c,HIGH); digitalWrite(d,HIGH);
  digitalWrite(e,HIGH); digitalWrite(f,HIGH);
  digitalWrite(g,HIGH); digitalWrite(dig2,LOW);
}

void loop() {
  Show(0); delay(500);
  Clean(); delay(500);
  Show(1); delay(500);
  Clean(); delay(500);
  Show(2); delay(500);
  Clean(); delay(500);
}

void Show(int digit) {
  if (digit==0) {
    digitalWrite(a,LOW); digitalWrite(b,LOW);
    digitalWrite(c,LOW); digitalWrite(d,LOW);
    digitalWrite(e,LOW); digitalWrite(f,LOW);
  }
  if (digit==1) {
    digitalWrite(b,LOW); digitalWrite(c,LOW);
  }
  if (digit==2) {
    digitalWrite(a,LOW); digitalWrite(b,LOW);
    digitalWrite(d,LOW); digitalWrite(e,LOW);
    digitalWrite(g,LOW);
  }
}

void Clean() {
    digitalWrite(a,HIGH); digitalWrite(b,HIGH);
    digitalWrite(c,HIGH); digitalWrite(d,HIGH);
    digitalWrite(e,HIGH); digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
}

Метод Show() – функция с параметром. Это значит, что при ее вызове в подпрограмму передается значение, указанное в скобках. Фактически, когда очередь выполнения программы в основном цикле программы loop() доходит до вызова этой подпрограммы выполнение основного цикла прекращается и происходит выполнение подпрограммы. Применение подпрограмм позволяет исключить из основного цикла повторяющиеся части кода.
Обратимся к самой подпрограмме. В зависимости от того, какое значение ей передано, должна загораться требуемая цифра. Для это используется оператор сравнения if. Если условие истинно, то выполняется код, следующий за этим оператором. Следует отметить, что “=” это оператор присваивания, а “==” – сравнения. В условии должно происходить именно сравнение.
Вторая функция — Clean(). В этой функции все сегменты индикатора гасятся.
На первый взгляд из-за того что объем кода не изменился, может показаться, что в такой организации нет смысла. Но обратите внимание, что содержания основного цикла loop() значительно сократилось. Логика работы с аппаратной частью вынесена за его пределы и в самом цикле уже можно сконцентрироваться на том, ЧТО нужно показать на индикаторе, а не КАК это сделать.
Однако код до сих пор далек от идеала. Продолжим его улучшение.

Третий пример

Ранее выводы микроконтроллера мы записывали в виде переменных, но есть гораздо более простой способ их определения — это применение директивы компилятора #define. Директива #define определяет идентификатор и последовательность символов, которая будет подставляться вместо идентификатора каждый раз, когда он встретится в исходном файле.
Во-вторых можно оптимизировать функцию Show(), если использовать оператор switch. Синтаксис оператора:


switch (var) {
  case label:
    // выражение1
    break;
  case label:
    // выражение2
    break;
  default: 
    // выражение3
}

Этот оператор выполняет только одно сравнение. Введите пример, перебирающий цифры от 0 до 9 с использованием этих дополнений:


#define DIG1 4
#define DIG2 5
#define A 6
#define B 7
#define C 8
#define D 9
#define E 10
#define FF 11
#define G 12
#define TAKT 1000

void setup() {                
  pinMode(A, OUTPUT); pinMode(B, OUTPUT);
  pinMode(C, OUTPUT); pinMode(D, OUTPUT);
  pinMode(E, OUTPUT); pinMode(FF, OUTPUT);
  pinMode(G, OUTPUT); pinMode(DIG2, OUTPUT);
  digitalWrite(A,HIGH); digitalWrite(B,HIGH);
  digitalWrite(C,HIGH); digitalWrite(D,HIGH);
  digitalWrite(E,HIGH); digitalWrite(FF,HIGH);
  digitalWrite(G,HIGH); digitalWrite(DIG2,LOW);
}

void loop() {
  Clean(); Show(0); delay(TAKT);
  Clean(); Show(1); delay(TAKT);
  Clean(); Show(2); delay(TAKT);
  Clean(); Show(3); delay(TAKT);
  Clean(); Show(4); delay(TAKT);
  Clean(); Show(5); delay(TAKT);
  Clean(); Show(6); delay(TAKT);
  Clean(); Show(7); delay(TAKT);
  Clean(); Show(8); delay(TAKT);
  Clean(); Show(9); delay(TAKT);
}

void Show(int digit) {
  switch(digit) {
    case 0: {
      digitalWrite(A,LOW); digitalWrite(B,LOW);
      digitalWrite(C,LOW); digitalWrite(D,LOW);
      digitalWrite(E,LOW); digitalWrite(FF,LOW);
    }
    break;
    case 1: {
      digitalWrite(B,LOW); digitalWrite(C,LOW);
    }
    break;
    case 2: {
      digitalWrite(A,LOW); digitalWrite(B,LOW);
      digitalWrite(D,LOW); digitalWrite(E,LOW);
      digitalWrite(G,LOW);
    }
    break;
    case 3: {
      digitalWrite(A,LOW); digitalWrite(B,LOW);
      digitalWrite(C,LOW); digitalWrite(D,LOW);
      digitalWrite(G,LOW);
    }
    break;
    case 4: {
      digitalWrite(B,LOW); digitalWrite(C,LOW);
      digitalWrite(FF,LOW); digitalWrite(G,LOW);
    }
    break;
    case 5: {
      digitalWrite(A,LOW); digitalWrite(C,LOW);
      digitalWrite(D,LOW); digitalWrite(FF,LOW);
      digitalWrite(G,LOW);
    }
    break;
    case 6: {
      digitalWrite(A,LOW); digitalWrite(C,LOW);
      digitalWrite(D,LOW); digitalWrite(E,LOW);
      digitalWrite(FF,LOW); digitalWrite(G,LOW);
    }
    break;
    case 7: {
      digitalWrite(A,LOW); digitalWrite(B,LOW);
      digitalWrite(C,LOW);
    }
    break;
    case 8: {
      digitalWrite(A,LOW); digitalWrite(B,LOW);
      digitalWrite(C,LOW); digitalWrite(D,LOW);
      digitalWrite(E,LOW); digitalWrite(FF,LOW);
      digitalWrite(G,LOW);
    }
    break;
    case 9: {
      digitalWrite(A,LOW); digitalWrite(B,LOW);
      digitalWrite(C,LOW); digitalWrite(D,LOW);
      digitalWrite(FF,LOW); digitalWrite(G,LOW);
    }
    break;
  }
}

void Clean() {
    digitalWrite(A,HIGH); digitalWrite(B,HIGH);
    digitalWrite(C,HIGH); digitalWrite(D,HIGH);
    digitalWrite(E,HIGH); digitalWrite(FF,HIGH);
    digitalWrite(G,HIGH);
}


Обратите внимание, что в директиве #define идентификатор везде написан большими буквами. Это необходимо для единой стилистики программирования. Здесь и далее мы будем писать идентификаторы прописными буквами, а переменные строчными.
Идентификатор F уже используется в библиотеках Arduino, поэтому нам пришлось обозначить это сегмент как FF.

Заключение

В итоге мы научились работать с сегментым индикатором и написали две очень полезные функции. Теперь при подключении индикатора вам достаточно будет поправить значения идентификаторов и вставить код для работы с индикатором.

Индивидуальные задания

Попробуйте самостоятельно выполнить следующие задания:

  1. В последнем примере цифры в цикле loop() задаются простым перебором. Попробуйте организовать перебор значений, используя цикл for.
  2. В большинстве случаев информация на дисплее отображается непрерывно. Доработайте функцию Show() таким образом, чтобы не надо было каждый раз перед ее вызовом очищать дисплей
  3. Добавьте любой дополнительный символ, который может быть отображен на индикаторе. Например H, Г, А и так далее.

Остальные статьи цикла можно найти здесь.

Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

Модуль клавиатуры и светодиодной индикации TM1638 LED&KEY

Подробности
Категория: Components
Просмотров: 14558

Устройство ввода-вывода данных для совместной работы с микроконтроллером. Обмен данных происходит по оригинальной шине из трех сигнальных линий близкой по свойствам к шине SPI. Строка семисегментных индикаторов позволяет отображать числа, некоторые буквы и простые символы.


 

 

 Регулировка яркости выполняется программным путем передачей команд по шине данных. Можно гасить отдельные разряды. Светодиоды образуют линейную шкалу, позволяющую наглядно отображать измеряемую величину. Есть возможность программно регулировать яркость свечения светодиодов. Многоразрядный индикатор позволяет выводить данные одновременно о нескольких величинах. Можно индицировать значение одного параметра и тут же показывать на линейной шкале долю величины от максимального значения, что более наглядно.

8 кнопок клавиатуры позволяют удовлетворить требования к управлению широким кругом приборов. Модуль клавиатуры и светодиодной индикации TM1638 LED&KEY определяет нажатие нескольких кнопок одновременно. Применение модуля позволяет достаточно просто решить конструкцию и электронику передней панели прибора. В отличии от ЖКИ индикаторов светодиодные нечувствительны к работе при температурах ниже +5 °C, что повышает надежность средства отображения. Светодиодные индикаторы особенно уместны при работе в плохо освещаемых помещениях и в ночное время. Использование датчика освещенности позволяет автоматически регулировать яркость свечения светодиодного индикатора.
Кроме непосредственного назначения модуль клавиатуры и светодиодной индикации TM1638 LED&KEY позволяет изучить работу микросхемы TM1638 для применения в собственных разработках. Уместно использование в качестве наглядного пособия при изучении принципов построения и работы индикаторов, клавиатур и освоении программирования МК.

Характеристики модуля TM1638 LED&KEY
 
Питание
            напряжение 5 В ± 10%
            максимальный ток 130 мА
Предельная частота сигнала синхронизации 450 КГц
Температура окружающего воздуха при работе -15…60 °C
 

 
Схема модуля TM1638LED&KEY
 

 
8 светодиодов подключены к линии SEG9 и контактам управления разрядами индикатора GRID1 – GRID8. Светодиоды LED1 – LED8 работают когда программным путем включается линия управления девятым сегментом. Управление каждым светодиодом в отдельности происходит по линиям управления разрядами индикатора GR1 – GR8. Такое подключение позволяет использовать для каждого светодиода отдельный регистр. Это позволяет записывать данные по адресам, которым соответствуют светодиоды. Все кнопки подключены к одной линии К3 и образуют матрицу 8х1.
 
Контакты соединителя TM1638LED&KEY
 
Штыревой соединитель имеет 5 контактов.
 
VCC – питание
GND – общий провод
STB – сигнал стробирования
CLK – тактовый сигнал
DIO – двунаправленная линия данных

Соединение интерфейса модуля TM1638LED&KEY с Arduino UNO. Приводим наиболее часто используемое назначение контактов в программах использующих библиотеку Ricardo Batista.
 
Arduino UNO             TM1638LED&KEY
 
            8                                 DIO
            9                                 CLK
            10                               STB
 
Подключение TM1638 к шине SPI.

Tm1638 имеет одиночный пин для ввода данных (команды, LED сегменты ) и вывода данных (ключевого состояния). Этот пин можно соединиться к mbed SPI MOSI и MISO используя «подтягивающий» резистор.

 

 

 

 

Подключение семисегментного индикатора к ATTINY13 — Изучаем AVR — Каталог статей — Микроконтроллеры

Иногда возникает необходимость увеличить количество выходов микроконтроллера. Такая ситуация может возникнуть например при работе с микроконтроллерами серии tiny, например у attiny13 всего 8 ножек и в качестве выходов работают 5(6 если RESET с помощью фьюзов сделать входом/выходом ), и подключить к нему семисигментый индикатор не получится. Так вот используя одну дополнительную микросхему можно решить эту проблему и эта микросхема 74HC595. 


74HC595 — это восьмиразрядный сдвиговый регистр с последовательным вводом и параллельным выводом информации. 

Назначение выводов: 

1-7, 15 — выходы 

10 — сброс регистра 

11 — вход для тактовых импульсов 

12 — вход «защёлкивающий» данные 

13 — вход, переводящий выходы рабочее состояние 

14 — вход данных 

Теперь коротенько, как это работает: 

наши данные подаются на вход DS одновременно с тактовыми импульсами на вход SH_CP, с каждым новым импульсом мы записываем в регистр 1 бит, сдвигая все записанные ранее. Передав 8 бит регистру, выставляем логическую 1 на вход ST_CP, и содержимое регистра выводится на выходы Qa-Qh. Все очень просто. Ну а теперь перейдем к практике: 


подключение семисигментного индикатора к attiny13 cс помощью HC595

На схеме: 

семисигментный индикатор, который подключен к выходам сдвигового регистра. Входы DS, SH_CP, ST_CP подключены к PB0-2. Получается что используя сдвиговый регистр, для подключения семисигментного индикатора нужно уже не 8 а всего 3 выхода микроконтроллера, что очень удобно. 

Ниже приведен код программы, которая выводит на семисигментный индикатор цифру 5: 

 

 #include ‹tiny13.h› 

 #include ‹delay.h› 

 #define CE PORTB.2 

 #define CL PORTB.1 

 #define DI PORTB.0 

 #define RS PORTB.3 

 #define pause delay_ms(10) 

 char data[8]={0,1,1,0,1,1,0,1}; 

 int i; 

 void main(void) 

 { 

 #pragma optsize- 

 CLKPR=0x80; 

 CLKPR=0x00; 

 #ifdef _OPTIMIZE_SIZE_ 

 #pragma optsize+ 

 #endif 

 PORTB=0x00; 

 DDRB=0xFF; 

 TCCR0A=0x00; 

 TCCR0B=0x00; 

 TCNT0=0x00; 

 OCR0A=0x00; 

 OCR0B=0x00; 

 GIMSK=0x00; 

 MCUCR=0x00; 

 TIMSK0=0x00; 

 ACSR=0x80; 

 ADCSRB=0x00; 

 

 while (1) 

 { 

 

 i=0; 

 while(i<8){ 

 DI=data[i]; 

 CL = 1; 

 RS=1; 

 pause; 

 DI=0; 

 CL = 0; 

 RS=0; 

 pause; 

 i++; 

 }; 

 CE=1; 

 

 }; 

 } 

 

Урок

Arduino — одноразрядный 7-сегментный светодиодный дисплей «osoyoo.com

Содержание
  1. Введение
  2. Препараты
  3. Об одноразрядном 7-сегментном светодиодном дисплее
  4. Подключение
  5. Загрузить эскиз
  6. Результат выполнения программы

В этом проекте мы покажем, как управлять одним 7-сегментным светодиодным дисплеем с платой Osoyoo Uno.

Оборудование

  • Плата Osoyoo UNO (полностью совместима с Arduino UNO rev.3) х 1
  • Одноразрядный 7-сегментный светодиодный дисплей x 1
  • Резистор 200 Ом x 8
  • Макетная плата x 1
  • Джемперы
  • Кабель USB x 1
  • шт. X 1

Программное обеспечение

  • Arduino IDE (версия 1.6.4+)

Одноразрядные семисегментные дисплеи используются во многих встроенных системах и промышленных приложениях, где диапазон отображаемых выходных сигналов известен заранее. Базовый 1-значный семисегментный дисплей может отображать числа от 0 до 9 и несколько символов.7-сегментные дисплеи разных типов; особенно они различаются количеством отображаемых цифр / символов. По сути, 7-сегментный дисплей представляет собой единый блок, который может отображать только 1 цифру или 1 символ. Больше цифр отображается путем мультиплексирования одного 7-сегментного дисплея вместе для формирования 2-значного дисплея, 3-значного дисплея или 4-значного 7-сегментного дисплея. Его тихий и простой интерфейс с Arduino и 7-сегментным дисплеем вместе! Начнем урок.

7-сегментный дисплей имеет множество ограничений, особенно в отношении диапазона символов, которые он может отображать.На рынке есть дисплеи, которые намного более продвинуты, чем семисегментные дисплеи, и могут отображать почти все символы алфавита. Например: — ЖК-экран 16 × 2, который может отображать почти все символы ASCII. Вы можете подумать, почему 7-сегментные дисплеи все еще существуют на рынке. Что ж, 7-сегментные дисплеи — это самый дешевый вариант, когда речь идет о устройствах отображения, доступных на рынке. Одноразрядный / символьный 7-сегментный дисплей доступен за 1/10 стоимости ЖК-модуля 16 × 2.

Каждому из светодиодов на дисплее выделен позиционный сегмент с одним из его соединительных штырей, выведенным из прямоугольного пластикового корпуса.Эти выводы светодиода обозначены буквами от «a» до «g», представляя каждый отдельный светодиод. Остальные выводы светодиода соединены вместе, образуя общий вывод. Таким образом, при прямом смещении соответствующих выводов сегментов светодиода в определенном порядке некоторые сегменты станут ярче, а другие останутся тусклыми, тем самым отображая соответствующий символ на дисплее.

Общий вывод дисплея обычно говорит о его типе. Существует два типа подключения выводов: вывод подключенных катодов и один из подключенных анодов, что указывает на общий катод (CC) и общий анод (CA).Как следует из названия, у CC-дисплея все катоды 7 светодиодов подключены, когда CA-дисплей имеет все подключенные аноды 7 сегментов.

Общий катод 7- S Дисплей egment

В обычном катодном дисплее катоды всех светодиодных сегментов подключены к логическому «0» или заземлению. Затем на отдельный сегмент (a-g) подается сигнал «ВЫСОКИЙ» или логическая «1» через токоограничивающий резистор для прямого смещения анода сегмента.

Как показано на следующем рисунке, штырьки сегментов b и c установлены в положение «ВЫСОКИЙ».

Общий Анод 7- S egment Дисплей

В обычном анодном дисплее аноды всех светодиодных сегментов подключены к логической «1». Затем на отдельный сегмент (a-g) подается питание посредством заземления, логического «0» или сигнала «LOW» через токоограничивающий резистор на катоде сегмента.

Как показано на следующем рисунке, штыри сегмента b и c установлены в положение «LOW».

Примечание:

Несмотря на то, что многие типы 7-сегментных светодиодных дисплеев соответствуют приведенным выше схемам, это не гарантируется. Лучший способ узнать соединения — получить техническое описание используемого светодиодного дисплея или отключить его, подключив питание к каждому из контактов, чтобы увидеть, какой из них загорится. Если вы не соблюдаете правильные соединения, схема не выдаст на выходе цифры 0–9. Поэтому очень важно знать, какие контакты какие.

В этом эксперименте подключите каждый из выводов A-G 7-сегментного дисплея к одному токоограничивающему резистору на 200 Ом соответственно, а затем к выводам 4–11. GND подключается к GND. Программируя, мы можем установить один или несколько контактов 4-11 на высокий уровень, чтобы загорелся соответствующий светодиод (ы).

Проводка между 7-сегментным дисплеем и платой SunFounder Uno:

7-сегментный дисплей

Доска Osoyoo Uno

А

7

B

6

С

5

D

11

E

10

F

8

G

9

DP

4

Ком

ЗЕМЛЯ

Принципиальная схема

После завершения вышеуказанных операций подключите плату Arduino к компьютеру с помощью кабеля USB.Зеленый светодиодный индикатор питания (с надписью PWR ) должен загореться. Загрузите следующий скетч на свой Arduino.

 int a = 7;
int b = 6;
int c = 5;
int d = 11;
int e = 10;
int f = 8;
int g = 9;
int dp = 4;
// отображаем число 1
void display1 (недействительно)
{
 digitalWrite (b, ВЫСОКИЙ);
 digitalWrite (c, ВЫСОКИЙ);
}
// отображаем число2
void display2 (недействительно)
{
 digitalWrite (а, ВЫСОКИЙ);
 digitalWrite (b, ВЫСОКИЙ);
 digitalWrite (г, ВЫСОКИЙ);
 digitalWrite (e, HIGH);
 digitalWrite (d, HIGH);
}
// отображаем число3
void display3 (недействительно)
{
 digitalWrite (а, ВЫСОКИЙ);
 digitalWrite (b, ВЫСОКИЙ);
 
 digitalWrite (c, ВЫСОКИЙ);
 digitalWrite (d, HIGH);
 digitalWrite (г, ВЫСОКИЙ);
}
// отображаем число4
void display4 (недействительно)
{
 digitalWrite (f, HIGH);
 digitalWrite (b, ВЫСОКИЙ);
 digitalWrite (г, ВЫСОКИЙ);
 digitalWrite (c, ВЫСОКИЙ);
 
}
// отображаем число5
void display5 (недействительно)
{
 digitalWrite (а, ВЫСОКИЙ);
 digitalWrite (f, HIGH);
 digitalWrite (г, ВЫСОКИЙ);
 digitalWrite (c, ВЫСОКИЙ);
 digitalWrite (d, HIGH);
}
// отображаем число6
void display6 (недействительно)
{
 digitalWrite (а, ВЫСОКИЙ);
 digitalWrite (f, HIGH);
 digitalWrite (г, ВЫСОКИЙ);
 digitalWrite (c, ВЫСОКИЙ);
 digitalWrite (d, HIGH);
 digitalWrite (e, HIGH);
}
// отображаем число7
void display7 (недействительно)
{
 digitalWrite (а, ВЫСОКИЙ);
 digitalWrite (b, ВЫСОКИЙ);
 digitalWrite (c, ВЫСОКИЙ);
}
// отображаем число8
void display8 (недействительно)
{
 digitalWrite (а, ВЫСОКИЙ);
 digitalWrite (b, ВЫСОКИЙ);
 digitalWrite (г, ВЫСОКИЙ);
 digitalWrite (c, ВЫСОКИЙ);
 digitalWrite (d, HIGH);
 digitalWrite (e, HIGH);
 digitalWrite (f, HIGH);
}
недействительным clearDisplay (недействительным)
{
 digitalWrite (а, НИЗКИЙ);
 digitalWrite (b, LOW);
 digitalWrite (g, LOW);
 digitalWrite (c, LOW);
 digitalWrite (d, LOW);
 digitalWrite (e, LOW);
 digitalWrite (f, LOW);
}
void display9 (недействительно)
{
 digitalWrite (а, ВЫСОКИЙ);
 digitalWrite (b, ВЫСОКИЙ);
 digitalWrite (г, ВЫСОКИЙ);
 digitalWrite (c, ВЫСОКИЙ);
 digitalWrite (d, HIGH);
 digitalWrite (f, HIGH);
}
void display0 (недействительно)
{
 digitalWrite (а, ВЫСОКИЙ);
 digitalWrite (b, ВЫСОКИЙ);
 digitalWrite (c, ВЫСОКИЙ);
 digitalWrite (d, HIGH);
 digitalWrite (e, HIGH);
 digitalWrite (f, HIGH);
}
установка void ()
{
 int i;
 для (i = 4; i11; i ++)
 pinMode (я, ВЫХОД);
}
пустой цикл ()
{
 в то время как (1)
 {ClearDisplay ();
 display0 ();
 задержка (2000);
 clearDisplay ();
 display1 ();
 задержка (2000);
 clearDisplay ();
 display2 ();
 задержка (2000);
 clearDisplay ();
 display3 ();
 задержка (2000);
 clearDisplay ();
 display4 ();
 задержка (2000);
 clearDisplay ();
 display5 ();
 задержка (2000);
 clearDisplay ();
 display6 ();
 задержка (2000);
 clearDisplay ();
 display7 ();
 задержка (2000);
 clearDisplay ();
 display8 ();
 задержка (2000);
 clearDisplay ();
 display9 ();
 задержка (2000);
 }
}
 

Через несколько секунд после завершения загрузки вы должны увидеть 7-сегментный дисплей от 0 до 9.

7-сегментные светодиодные дисплеи 101 — Как сделать одну работу

7-сегментные светодиодные дисплеи используются во всех типах устройств, от часов и других приборов до приборных панелей. Они могут показывать время, температуру, скорость, направление, емкость (наполовину полон резервуар или наполовину пуст?) И многие другие типы информации о вещах, которые мы хотим отслеживать.

Цель этого руководства — помочь вам узнать:

  • Как работают семисегментные светодиодные дисплеи
  • Как заставить один работать в вашем проекте

Это очень базовое введение в семисегментные светодиодные дисплеи, предназначенные для поможет вам взять случайный однозначный дисплей и заставить его работать, даже если у вас нет какой-либо конкретной информации.Например, дисплей, который я использую, был выбран из моей коллекции запасных частей и очень похож на этот:

Случайно выбранный 7-сегментный светодиодный дисплей

Методы сбора информации

Разница между изображением и дисплеем, который я буду использовать, заключается в том, что на моем штампе номер 5161BS, и это все, что я знаю о нем до сих пор. Возможно, у вас уже есть инструкции, руководство или часто задаваемые вопросы, в которых описывается ваш дисплей, но если у вас их нет, поиск в Google по всему, что выглядит как номер детали на дисплее, должен дать достаточно информации, чтобы начать работу.Мой самый первый результат поиска по запросу «5161BS» дал шестистраничный технический паспорт, в котором четко описано все, что мне нужно знать об использовании этого дисплея и многом другом.

Предположим, однако, что поиск не дал ничего полезного и нам придется заставить это работать без дополнительной информации. Мы можем начать с описания некоторых свойств, которые применяются к этим дисплеям в целом:

Существует два основных типа 7-сегментных светодиодных дисплеев:

  • Общий анод: В этом типе дисплея источник положительного напряжения используется совместно отображать сегменты.Сегменты подсвечиваются путем установки их отдельных выводов на землю.
  • Общий катод: общий путь к земле используется сегментами. Отдельные сегменты светятся, когда на их штырьки подается достаточное положительное напряжение.

Идея наличия общего катодного или анодного дисплея заключается в том, что при совместном использовании либо положительного напряжения, либо пути к земле требуется меньше контактов, чем если бы каждый сегмент имел свою собственную пару катодных и анодных контактов. Поскольку большинство дисплеев также содержат десятичную точку, двоеточие или апостроф, обычно имеется восемь сегментов, семь для цифры и один для знаков препинания.На одном общем штыре должно быть не менее 9 штифтов. Однако, когда я подсчитал количество выводов на своем дисплее 5161BS, их было 10 — пять в нижнем ряду и пять в верхнем. Как оказалось, на этих дисплеях обычно четное количество контактов, а «лишние» контакты связаны вместе как часть «общего» набора.

Отображение выводов дисплея

Нумерация выводов аналогична нумерации интегральных схем. Слева внизу первая булавка имеет номер 1, и нумерация продолжается последовательно против часовой стрелки, при этом булавка 5 находится внизу справа, булавка 6 — вверху справа и заканчивается булавкой 10 в верхнем левом углу.Многие одноразрядные 10-контактные дисплеи имеют общие контакты в центре каждого ряда. Давайте представим, что мы этого не знаем, и определим расположение контактов путем осмотра. Подготовьте тестовую схему в соответствии с этой схемой:

Подготовка к карте 7-сегментный светодиодный дисплей

Начните с источника питания. Я предлагаю использовать от + 3,6 В до + 5 В постоянного тока и заземление от батарей или настольного источника питания. Подключите питание и землю к соответствующим рядам горизонтальных направляющих в верхней части макета.Подключите резистор от шины питания к неиспользуемой колонке макета. Неважно, в какую сторону ориентирован резистор. В этом примере я использую резистор 220 Ом, но все в диапазоне от 180 до 1000 Ом должно работать для сопоставления выводов дисплея. Мы ограничиваем ток через резистор, чтобы защитить светодиоды в сегментах от перегорания.

Расположите 7-сегментный дисплей так, чтобы верхний ряд контактов был отделен от нижних контактов центральным желобом, разделяющим макетную плату.Затем подключите перемычку резистора к контакту 1 дисплея. Наконец, прикоснитесь перемычкой от шины заземления к контакту 2 дисплея, как показано на схеме выше.

Что случилось? Наверное, ничего — и это нормально. Это может быть вызвано несколькими причинами:

  • Каждый сегмент дисплея состоит как минимум из одного светоизлучающего диода или светодиода, который загорается только тогда, когда на анод подается положительное напряжение, и на катоде есть путь к заземлению. Если полярность вашего тестового соединения обратная, ничего не произойдет.
  • Также вероятно, особенно в начале теста, что ваши перемычки не подключены к одному и тому же сегменту, в этом случае цепи нет и ничего не загорится.
  • Обе перемычки могут быть на общих контактах. Помните, что нам нужно установить перемычку питания на анодной стороне сегмента и перемычку заземления на катоде, прежде чем этот сегмент загорится.

Если ни один из сегментов не загорается с первой попытки, оставьте перемычку питания подключенной к выводу 1 дисплея и пошагово переместите перемычку заземления против часовой стрелки с контакта 3 на контакт 10, наблюдая за дисплеем.Если ни один из сегментов не горит, перезапустите тест, подключив перемычку заземления к контакту 1, а перемычку питания — к контакту 2.

Когда загорается первый отдельный сегмент, вы, скорее всего, обнаружили общий контакт. Обратите внимание на соотношение контактов по отношению к светящемуся сегменту и оставьте перемычку, которую вы перемещали, подключенной к этому общему контакту, и начните перемещать другую перемычку на пустые контакты против часовой стрелки от контакта 1 к контакту 10, сопоставляя контакты с сегментами, обозначенными буквами. От A до G и Dp.Как только сегменты начнут светиться, вы можете столкнуться с другим общим выводом, который не будет зажигать сегмент. Используйте следующую схему для сопоставления сегментов:

Сопоставьте номера контактов на дисплее с буквенными сегментами

Вот пример завершенных карт для семи сегментных светодиодных дисплеев с общим катодом и общим анодом:

Карта для моего дисплея 5161BS находится справа.

Construction

После завершения сопоставления мы можем приступить к подключению дисплея. Дисплей 5161BS, с которым я работаю, относится к типу Common Anode, поэтому я поставил одну красную перемычку между контактом питания Arduino Uno + 5V и контактом 3 (VCC) дисплея.Нет необходимости также подключать вывод 8 VCC на дисплее к + 5В, поскольку контакты 3 и 8 связаны между собой внутри. Остальная схема подключения выглядит следующим образом:

Пример схемы подключения Arduino для 1-значного 7-сегментного светодиодного дисплея

По завершении подключение к этому руководству с использованием дисплея 5161BS должно выглядеть следующим образом:

Пример конфигурации для тестирования дисплея 5161BS

Кодирование Arduino IDE Sketch

Программа разделена на несколько разделов:

  • Глобальные объявления — значения констант и переменных, определенные здесь, доступны во всем скетче.
  • Настройка — Контакты ввода / вывода инициализируются, а затем каждый сегмент дисплея последовательно тестируется.
  • Цикл — Этот раздел повторяется непрерывно, проверяя отображение с последовательностью буквенно-цифровых цифр, символов и знаков препинания.
  • Функции, определяемые пользователем — Две функции, которые обновляют отображение и сопоставляют буквенно-цифровые символы с соответствующими сегментами.

Глобальные объявления

В этом разделе делаются три типа объявлений:

  • 8 контактов ввода-вывода Arduino последовательно связаны с восемью сегментами дисплея .Хотя эти назначения контактов могут быть изменены, логика программы зависит от номеров контактов, находящихся в непрерывном порядке, в данном случае контакты с 4 по 11.
  • Объявление дисплея как общего анода или общего катода . Соответствующая строка для константы «common» должна быть без комментариев, а другая строка должна быть закомментирована или удалена. Это должно быть единственное необходимое изменение кода, если руководство завершено так, как написано. Эскиз уже настроен для отображения общего анода.
  • Логическая переменная decPt, используемая для управления отображением десятичной точки, имеет значение «истина» .

Установка

Блок кода установки выполняется один раз после глобальных объявлений и выполняет следующие действия:

  • Восемь контактов ввода-вывода Arduino инициализируются для ВЫХОДА в последовательном порядке (с 4 по 11) внутри цикла for . . Это причина того, что контакты должны быть в непрерывном порядке. Если необходимо выполнить другое назначение контактов, эту петлю необходимо изменить в соответствии с новым расположением.
  • Когда каждый вывод ввода / вывода инициализируется, сегмент дисплея, который подключен к этому выводу ввода / вывода через резистор, загорается. Это приводит к тому, что все 8 сегментов загораются последовательно с паузой в 1/2 секунды между сегментами, пока не загорится весь дисплей.

Loop

Здесь выполняется основная работа над скетчем, и после ввода, после Setup , кодовый блок Loop повторяется бесконечно до тех пор, пока не будет отключено питание или необходимый компонент не будет удален или выйдет из строя.

В начале каждого цикла через кодовый блок Loop , переменная отображения глобальной десятичной точки, decPt , переворачивается, так что каждый раз, когда программа повторяет цикл, десятичная точка попеременно включается и выключается.

Остальная часть блока кода цикла — это еще один цикл for, который увеличивает локальную переменную i, от 0 до 15 и выполняет следующие действия:

  • Вызывает пользовательскую функцию myfnNumToBits с текущим значением локальная целочисленная переменная i в качестве аргумента.Функция возвращает байтовую инициализированную переменную, бита , которая состоит из 8-битного представления сегментов, необходимых для отображения буквенно-цифрового символа, связанного с текущим значением i .
  • Проверяется значение глобальной переменной decPt , и если истинно , крайний правый бит (LSB) локальной переменной бит устанавливается в 1, что указывает на то, что десятичная точка должна быть отображается.
  • Пользовательская функция myfnUpdateDisplay затем вызывается со значением локальной переменной, бит, в качестве аргумента.Когда дисплей обновляется, программа приостанавливается на 3/4 секунды перед продолжением.

Пользовательские функции

myfnNumToBits

Эта функция использует таблицу поиска по битовой карте для получения комбинаций сегментов дисплея, которые определяют числа и некоторые буквы. Не каждая буква может быть представлена ​​на 7-сегментном светодиодном дисплее, поэтому мы ограничим пример цифрами от 0 до 9 и буквами A, b, C, d, E и F, которые могут представлять шестнадцатеричные числа плюс сокращения для Цельсия и Температура по Фаренгейту.

Набор шестнадцатеричных символов

Это результирующая таблица поиска по растровому изображению:

Первый столбец дисплея предназначен для отображения символов. Следующие 8 столбцов помечены A-Dp и представляют отдельные сегменты. 1 и 0 в каждой строке указывают на сегменты, которые должны быть зажжены для отображения символа. 1 указывает, что сегмент должен гореть, а сегменты с 0 не горят. 1 и 0 для любой строки символов объединяются в растровое изображение, которое будет отправлено на дисплей.Последний столбец представляет собой десятичное (основание 10) значение битовой карты каждой строки. Обратите внимание, что столбец Dp всегда равен 0.

В функцию myfnNumToBits передается целое число в диапазоне от 0 до 15 при вызове из кодового блока loop () . Любое другое значение будет рассматриваться как ошибка, и на дисплее отобразятся три горизонтальные полосы. Блок кода переключателя используется для присвоения правильной комбинации из 8 бит байту, который затем возвращается из функции.

myfnUpdateDisplay

Эта определяемая пользователем функция принимает однобайтовый аргумент, 8Bits , при вызове из кодового блока Loop и деконструирует его на отдельные битовые значения с помощью встроенной функции bitRead ( ) .Биты считываются, начиная с бита 7 (MSB) и заканчивая битом 0 (LSB), путем уменьшения локальной переменной thisBit .

После считывания бита значение глобальной переменной common проверяется, и бит инвертируется для отображения общих анодов перед использованием для установки соответствующего вывода ввода-вывода в диапазоне segA (MSB) на segP. (МЗБ). Когда все восемь сегментов обновлены, на дисплее должны отображаться соответствующие буквенно-цифровые символы и десятичная точка, если это необходимо.Затем управление программой возвращается блоку кода цикла.

Сводка

Цель этого руководства — максимально четко продемонстрировать, как работают семисегментные светодиодные дисплеи, предложить некоторые методы определения того, как обнаружить свойства случайно выбранного дисплея и провести тестирование. Продемонстрированный пример подключения для простоты не будет хорошо масштабироваться для производственного приложения, поскольку в нем используется слишком много контактов ввода-вывода. Я предлагаю изучить использование регистров сдвига, что является предметом следующего руководства из этой серии, «7 сегментных светодиодных дисплеев 102 — Использование регистра сдвига ».

Как использовать 7-сегментный дисплей на Arduino

7-сегментный дисплей — это компонент Arduino для электронного дисплея, используемый для визуализации десятичных чисел, которые являются альтернативой более сложным представлениям.

Он состоит из семи светодиодов (отсюда и название) и имеет прямоугольную форму. Каждый из семи индикаторов называется сегментом. Это связано с его способностью принимать участие в отображении числовой цифры.

Семисегментный дисплей

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

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

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

Как работают 7-сегментные дисплеи

Разработчики решили интегрировать технологию отображения с электронными устройствами для вывода десятичных чисел от 0 до 9 и, в особых случаях, основных символов.Семисегментный дисплей состоит из светодиодов.

Обычно они светятся при прямом смещении. Прямой ток является решающим фактором, определяющим силу светодиода. Вам необходимо пропустить достаточный прямой ток, чтобы дисплей засветился с полной силой.

Общий катод против. Общий анод

Вы найдете два типа 7-сегментных дисплеев: с общим катодом и с общим анодом. Внутренняя структура обоих практически одинакова. Единственное различие заключается в полярности светодиодов стандартных клемм.У общего катода все отрицательные заряды светодиодов подключены. В типичном аноде все аноды 7-сегментных светодиодов выровнены вместе.

Для катодного дисплея все соединения сегментов светодиода совпадают с GND. Вы должны подать сигнал логической 1 (ВЫСОКИЙ) на отдельный анод, чтобы осветить каждый сегмент. В общем аноде соединения светодиодов объединяются в логику 1. Чтобы осветить соответствующий сегмент, подайте сигнал заземления, LOW, Logic 0 на катод определенного элемента.

Подключение — соединение 7-сегментного дисплея с Arduino

Теперь, когда вы понимаете, что такое 7-сегментный дисплей, давайте начнем подключать его к Arduino.

Начните с размещения семисегментного устройства отображения на макетной плате. Убедитесь, что каждая сторона дисплея находится на отдельной стороне макетной платы. Поскольку десятичные точки обращены вниз, контакты находятся в диапазоне от 1 до 5 на нижней стороне, начиная слева направо. Для верхней стороны ваши булавки — 10-6 слева направо.

Давайте рассмотрим следующее описание подключения проводки, чтобы понять, как использовать семисегментный дисплей на Arduino. Необходимое оборудование:

  • Arduino Uno
  • Семисегментный дисплей
  • Резисторы (два 220 Ом)
  • Перемычки

Подключение контактов:

  1. Контакт 2 Arduino к контакту 9 7-сегментного дисплея
  2. Контакт 3 Arduino к контакту 10 7-сегментного дисплея
  3. Контакт 4 Arduino к контакту 4 7-сегментного дисплея
  4. Контакт 5 Arduino к контакту 2 7-сегментного дисплея
  5. Контакт 6 Arduino к контакту 1 7-сегментного дисплея
  6. Контакт 8 Arduino к контакту 7 7-сегментного дисплея
  7. Контакт 9 Arduino к контакту 6 7-сегментного дисплея
  8. Подключите Arduino GND как к контакту 3, так и к контакту 8 семисегментного дисплея, подключенного к резисторам 220 Ом.

Примечание : хотя ваш дисплей может работать в отсутствие токоограничивающих резисторов, всегда убедитесь, что они есть в вашей цепи, чтобы ваш дисплей не сгорел.

Как только ваша проводка будет выполнена правильно, ваша схема должна выглядеть примерно так, как показано на рисунке ниже.

Conne ct компоненты! 🙂

Код Ардуино

Теперь вы собираетесь осветить свой дисплей некоторыми кодами.

Если вам нужно начать писать код для вывода на дисплей, сначала у вас будет библиотека SevSeg Arduino. Вы можете найти библиотеку на официальном сайте Arduino или посетить GitHub, чтобы найти ее респиратор и начать загрузку вручную.

Установите его, открыв Arduino IDE, найдите эскиз> включить библиотеку> Добавить, а затем выберите файл библиотеки. Теперь вы можете написать свой код и протестировать различные дисплеи для вывода.

Убедитесь, что каждая командная строка представляет собой эскиз дисплея.Если ваш код хорошо выполнен, загрузите его на печатную плату, содержащую 7 сегментов, чтобы вы могли увидеть, как он работает с Arduino. Попробуйте скорректировать свой код и посмотрите, как изменится отображение.

Примеры использования 7-сегментного дисплея на Arduino

Многие приложения используют устройство вместе с Arduino для отображения выходных данных. Этот процесс эффективен, и как любитель или разработчик оборудования вы можете изобрести следующее.

Таймер обратного отсчета: это простая программа, которая непрерывно считает от нуля до девяти, а затем возвращается к началу.Эта реализация с Arduino может применяться для разработки интеллектуальной системы подсчета для мониторинга парков и входов на стадион.

Отображение данных датчика. 7-сегментный дисплей может использовать Arduino для отображения данных вашего датчика. Датчики, такие как датчики температуры и датчики движения, могут использовать технологию отображения для отображения информации. Если вы хотите изменить показания других интеллектуальных систем с помощью датчиков, вы можете следовать этой концепции.

Заключение

Большинство цифровых устройств интегрированы с 7-сегментным дисплеем для преобразования цифровых сигналов в форму, которую пользователь может видеть и понимать.Записываемая информация представляет собой числовые данные, отображаемые в виде чисел, символов и некоторых основных символов.

Общий катод и общий анод сегментов загораются для получения значения после получения сигнала от микроконтроллера Arduino. Любители электроники и разработчики используют семисегментные дисплеи для вывода информации из своих интеллектуальных систем Arduino.

Взаимодействие с 7-сегментным дисплеем с Arduino

В этом уроке мы будем взаимодействовать с 7-сегментным дисплеем с Arduino и научимся отображать цифры от одного до девяти.Кроме того, отобразите обратный отсчет на 7-сегментном дисплее.

7-сегментный светодиодный дисплей — это форма электронного устройства отображения, которое используется для отображения десятичных чисел. Это альтернатива ранее использовавшимся более сложным матричным дисплеям.

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

7-сегментный светодиодный дисплей состоит из семи светодиодов, расположенных в прямоугольной форме, как показано на рисунке.Каждый из семи светодиодов называется сегментом, потому что при включении сегмент является частью отображаемой числовой цифры (как десятичной, так и шестнадцатеричной).


Список компонентов


Распиновка 7-сегментного дисплея


Семисегментный дисплей работает

7-сегментные дисплеи состоят из 7 светодиодов, называемых сегментами, расположенных в форме «восьмерки». 8 сегментов с точкой справа от цифры, которая служит десятичной точкой.Каждый сегмент назван буквой от A до G и десятичной точкой DP.


Контактное соединение 7-сегментного дисплея с Arduino

15
7 сегментов контактов контактов Arduino
COM1 GND
A 2
B 3
D 5
E 6
F 7
G 8
DP 9

15

15

15 Ардуино

Код 1


Выход 1


Код для подсчета


Выход 2


Код для обратного счета

Вот еще несколько уроков для вас:


Предыдущая статьяУльтразвуковой датчик с ArduinoСледующая статьяКак установить WordPress на Localhost

Как использовать семисегментный дисплей »PIJA Education

Преимущество 7-сегментного дисплея в том, что он может легко работать / взаимодействовать без микроконтроллера или микропроцессора, в то время как другим модулям дисплея для работы требуется микроконтроллер или микропроцессор.Теперь давайте посмотрим, как использовать семисегментный дисплей.

Обычно семисегментный дисплей используется вместе с микропроцессором / микроконтроллером, в этом случае восемь сегментных выводов будут подключены к выводам ввода / вывода микроконтроллера, а вывод com будет подключен к земле или Vcc в зависимости от его типа. CC / CA.

Затем эти контакты ввода-вывода можно запитать в определенной последовательности для отображения нужного символа или цифр. Это конкретное расположение поясняется в таблице ниже.Соответствующая последовательность отображения каждого числа на семисегментном дисплее приведена в таблице, приведенной ниже.

КАК ИСПОЛЬЗОВАТЬ СЕМЬ СЕГМЕНТНЫЙ ДИСПЛЕЙ ДЛЯ CC И CA

1) ДЛЯ ТИПА ОБЩЕГО КАТОДА

Если мы хотим отобразить число «9», нам нужно зажечь все светодиоды, кроме светодиода, который принадлежит линии «e» (см. Схему выводов из 7 сегментов выше), поэтому нам нужен битовый шаблон 01101111 для отображения CC.

Аналогично отображению «1» нам нужно зажечь светодиоды, связанные с b и c, поэтому битовая комбинация для этого будет 00000110 для отображения CC.Если вы хотите, чтобы загорелся светодиодный индикатор десятичной точки, присвойте ему логическую «1», а если нет, то «0».

ЦИФРА ДЛЯ ДИСПЛЕЯ DP г f e d c б a
0 0 0 1 1 1 1 1 1
1 0 0 0 0 0 1 1 0
2 0 0 1 1 1 0 1 1
3 0 1 0 0 1 1 1 1
4 0 1 1 0 0 1 1 0
5 0 1 1 0 1 1 0 1
6 0 1 1 1 1 1 0 1
7 0 0 0 0 0 1 1 1
8 0 1 1 1 1 1 1 1
9 0 1 1 0 1 1 1 1

2) ДЛЯ ОБЩЕГО АНОДА ТИПА

Если мы хотим отобразить цифру «7», то нам нужно зажечь три светодиода в сегменте c, b, a (см. Схему 7-сегментных выводов выше), поэтому нам нужен битовый шаблон 11111000 для отображения CA.Аналогично отображению «1» нам нужно зажечь светодиоды, связанные с b и c, поэтому битовая комбинация для этого будет 11111001 для отображения CA.

ЦИФРА ДЛЯ ДИСПЛЕЯ DP г f e d c б A
0 1 1 0 0 0 0 0 0
1 1 1 1 1 1 0 0 1
2 1 0 1 0 0 1 0 0
3 1 0 1 1 0 0 0 0
4 1 0 0 1 1 0 0 1
5 1 0 0 1 0 0 1 0
6 1 0 0 0 0 0 1 0
7 1 1 1 1 1 0 0 0
8 1 0 0 0 0 0 0 0
9 1 0 0 1 0 0 0 0

ФУНКЦИИ

Прежде чем мы начнем, давайте обсудим функцию.Так же, как мы используем функцию в языке программирования C, мы можем использовать функцию в программировании Arduino. Функции — очень полезный инструмент в программировании, потому что они позволяют нам писать код один раз и использовать его снова и снова вместо того, чтобы писать снова и снова.

Функции бывают двух типов: встроенные / предопределенные и определяемые пользователем. Мы уже использовали встроенные функции, например pinMode (), digitalWrite () и т. Д. Теперь мы собираемся использовать пользовательскую функцию. Каждая функция имеет тип возврата .Если функция не возвращает ни одного значения , то в качестве типа возврата используется void.

Теперь, как использовать функцию, определите функцию вне тела void setup () и void loop () с ее типом возврата, именем функции и параметром, который должен быть передан во время вызова функции. См. Ниже

Тип функции — void, int и многие другие, type означает, что функция будет возвращать во время вызова, если это тип void, тогда он ничего не вернет, но если это int, это означает, что функция вернет целочисленное значение.

 пустая функция1 ()
пустая функция2 ()
int function3 ()
int function4 ()
 

Мы можем передавать параметры функции, чтобы функция работала в соответствии с нашими входными значениями, например, см. В первой функции void мы передаем один параметр, во второй функции void мы передаем два параметра. Так же, как и в типе int, мы передаем один и два параметра.

 void function1 (int a)
пустая функция2 (int a, int b)
int function3 (int a)
int function4 (интервал a, интервал b)
 

СИНТАКСИС

 void function1 () {
 заявление 1;
 заявление 2;
 .......
}
 

Семь сегментов можно использовать двумя способами

  1. Непосредственно без сдвигового регистра
  2. Использование сдвигового регистра (рекомендуется)

ПРОЧИТАТЬ СЛЕДУЮЩИЙ
ДИСПЛЕЙ 1 НА СЕМЬ СЕГМЕНТНОМ ДИСПЛЕЕ


Учебное пособие по графическому программированию

для Arduino — однозначный 7-сегментный светодиодный дисплей — kookye.com

Бьямбер

Учебное пособие по графическому программированию для Arduino — 7-сегментный светодиодный дисплей с одной цифрой

В этом проекте мы покажем, как управлять одним 7-сегментным светодиодным дисплеем с платой Osoyoo Uno.

АППАРАТНОЕ ОБЕСПЕЧЕНИЕ

  • Плата Osoyoo UNO (полностью совместима с Arduino UNO rev.3) x 1
  • Одноразрядный 7-сегментный светодиодный дисплей x 1
  • Резистор 200 Ом x 8
  • Макетная плата x 1
  • Джемперы
  • Кабель USB x 1
  • шт. X 1

Одноразрядные семисегментные дисплеи используются во многих встроенных системах и промышленных приложениях, где диапазон отображаемых выходных сигналов известен заранее.Базовый 1-значный семисегментный дисплей может отображать числа от 0 до 9 и несколько символов. 7-сегментные дисплеи разных типов; особенно они различаются количеством отображаемых цифр / символов. По сути, 7-сегментный дисплей представляет собой единый блок, который может отображать только 1 цифру или 1 символ. Больше цифр отображается путем мультиплексирования одного 7-сегментного дисплея вместе для формирования 2-значного дисплея, 3-значного дисплея или 4-значного 7-сегментного дисплея. Его тихий и простой интерфейс с Arduino и 7-сегментным дисплеем вместе! Начнем урок.

7-сегментный дисплей имеет множество ограничений, особенно в отношении диапазона символов, которые он может отображать. На рынке существуют дисплеи, которые намного более продвинуты, чем семисегментные дисплеи, и могут отображать почти все символы алфавита. Например: — ЖК-экран 16 × 2, который может отображать почти все символы ASCII. Вы можете подумать, почему 7-сегментные дисплеи все еще существуют на рынке. Что ж, 7-сегментные дисплеи — это самый дешевый вариант, когда речь идет о устройствах отображения, доступных на рынке. Одноразрядный / символьный 7-сегментный дисплей доступен за 1/10 стоимости ЖК-модуля 16 × 2.

Каждому из светодиодов на дисплее выделен позиционный сегмент с одним из его соединительных штырей, выведенным из прямоугольного пластикового корпуса. Эти выводы светодиода обозначены буквами от «a» до «g», представляя каждый отдельный светодиод. Остальные выводы светодиода соединены вместе, образуя общий вывод. Таким образом, при прямом смещении соответствующих выводов сегментов светодиода в определенном порядке некоторые сегменты станут ярче, а другие останутся тусклыми, тем самым отображая соответствующий символ на дисплее.

Общий вывод дисплея обычно говорит о его типе. Существует два типа подключения выводов: вывод подключенных катодов и один из подключенных анодов, что указывает на общий катод (CC) и общий анод (CA). Как следует из названия, у CC-дисплея все катоды 7 светодиодов подключены, когда CA-дисплей имеет все подключенные аноды 7 сегментов.

Общий катод 7- S Дисплей egment

В обычном катодном дисплее катоды всех светодиодных сегментов подключены к логическому «0» или заземлению.Затем на отдельный сегмент (a-g) подается сигнал «ВЫСОКИЙ» или логическая «1» через токоограничивающий резистор для прямого смещения анода сегмента.

Как показано на следующем рисунке, штырьки сегментов b и c установлены в положение «ВЫСОКИЙ».

Общий Анод 7- S egment Дисплей

В обычном анодном дисплее аноды всех светодиодных сегментов подключены к логической «1». Затем на отдельный сегмент (a-g) подается питание посредством заземления, логического «0» или сигнала «LOW» через токоограничивающий резистор на катоде сегмента.

Как показано на следующем рисунке, штыри сегмента b и c установлены в положение «LOW».

Примечание:

Несмотря на то, что многие типы 7-сегментных светодиодных дисплеев соответствуют приведенным выше схемам, это не гарантируется. Лучший способ узнать соединения — получить техническое описание используемого светодиодного дисплея или отключить его, подключив питание к каждому из контактов, чтобы увидеть, какой из них загорится. Если вы не соблюдаете правильные соединения, схема не выдаст на выходе цифры 0–9.Поэтому очень важно знать, какие контакты какие.


В этом эксперименте подключите каждый из выводов A-G 7-сегментного дисплея к одному токоограничивающему резистору на 200 Ом соответственно, а затем к выводам 4–11. GND подключается к GND. Программируя, мы можем установить один или несколько контактов 4-11 на высокий уровень, чтобы загорелся соответствующий светодиод (ы).

Проводка между 7-сегментным дисплеем и платой SunFounder Uno:

7-сегментный дисплей

Доска Osoyoo Uno

А

7

B

6

С

5

D

11

E

10

F

8

G

9

DP

4

Ком

ЗЕМЛЯ

Принципиальная схема

После завершения вышеуказанных операций подключите плату Arduino к компьютеру с помощью кабеля USB.Зеленый светодиодный индикатор питания (с надписью PWR ) должен загореться. Откройте программу графического программирования Mixly и выполните следующие операции:

Примечание: Код будет немного длинным. Рекомендуется открыть файл образца кода для проверки.

Подключите каждый вывод 7-сегментного дисплея к контактам 4-11 и установите их как ВЫХОД. Нет необходимости загорать DP, если дисплей используется только для отображения числа или строки, поэтому здесь установите контакт 4 LOW.

Вытяните функцию и назовите ее DIGITAL 0 , чтобы отобразить номер 0 , то есть, чтобы подсвечивать соответствующие сегменты числа 0 и затемнять другие.

Сначала нам нужно знать, как это выглядит при отображении числа 0 на 7-сегментном дисплее. На самом деле это сегменты A , B , C , D , E и F включены, что генерирует отображение 0 . При программировании контакты, подключенные к этим сегментам, устанавливаются на высокий уровень, когда G имеет низкий уровень. Мы можем знать, что контакт G подключен к контакту 9, как показано ниже, поэтому мы устанавливаем контакт 9 на Low , а другие контакты с на High .Нет необходимости загорать DP, поэтому dp (pin4) был установлен на LOW в настройке.

После запуска этой части будет отображаться 7-сегментный.

Примечание:

Собственно отображение остальных символов такое же. Поскольку буквы b и d в верхнем регистре, а именно B и D, будут выглядеть на дисплее одинаково с 8 и 0, вместо этого они отображаются в нижнем регистре.

Вы можете увидеть код от цифрового 1 до цифрового 9, как показано ниже:

Код немного длинный, Collapse Block выглядит следующим образом:

Затем установите функцию цикла для этих чисел и каждый раз установите задержку на 1000 мс.

Нажмите «Сохранить», после чего программирование завершено. Перед загрузкой выберите тип платы и последовательный порт. Для установки платы Uno просто выберите Arduino / Genuino Uno: если вы используете Mega2560, выберите Arduino / Genuino Mega или Mega2560.

Выберите последовательное устройство платы Arduino из меню COM . Скорее всего, это COM3 или выше ( COM1 и COM2 обычно зарезервированы для аппаратных последовательных портов).Чтобы узнать это, вы можете отключить плату Arduino и снова открыть меню; пропадающая запись должна быть платой Arduino. Снова подключите плату и выберите этот последовательный порт.

Затем загрузите код. Если загрузка не удалась, проверьте и исправьте код в соответствии с подсказками

Наконец, статус изменится на «Загрузка успешна!».

Через несколько секунд после завершения загрузки вы должны увидеть 7-сегментный дисплей от 0 до 9.

Взаимодействие Arduino с 7-сегментным дисплеем

/ *

* Взаимодействие Arduino с 7-сегментным дисплеем с общим анодом

* Пример 4-значного счетчика.

* Это бесплатное программное обеспечение БЕЗ ГАРАНТИЙ.

* https://simple-circuit.com/

* /

// определение кнопки счетчика

#define button A0

// определение выводов сегмента

#define SegA 12

# define SegB 11

#define SegC 10

#define SegD 9

#define SegE 8

#define SegF 7

#define SegG 6

// общие выводы четырехзначных определений

#define Dig1 5

#define Dig2 4

#define Dig3 3

#define Dig4 2

// объявления переменных

byte current_digit;

int count = 0;

void setup ()

{

pinMode (кнопка, INPUT_PULLUP);

pinMode (SegA, ВЫХОД);

pinMode (SegB, ВЫХОД);

pinMode (SegC, ВЫХОД);

pinMode (SegD, ВЫХОД);

pinMode (SegE, ВЫХОД);

pinMode (SegF, ВЫХОД);

pinMode (SegG, ВЫХОД);

pinMode (Dig1, ВЫХОД);

pinMode (Dig2, ВЫХОД);

pinMode (Dig3, ВЫХОД);

pinMode (Dig4, ВЫХОД);

disp_off (); // выключение дисплея

// Конфигурация прерывания переполнения модуля Timer1

TCCR1A = 0;

TCCR1B = 1; // включаем Timer1 с предварительным делителем = 1 (16 тиков каждая по 1 мкс)

TCNT1 = 0; // установить значение предварительной нагрузки Timer1 на 0 (сброс)

TIMSK1 = 1; // разрешить прерывание переполнения таймера 1

}

ISR (TIMER1_OVF_vect) // подпрограмма обслуживания прерывания таймера 1 (ISR)

{

disp_off (); // выключить дисплей

switch (current_digit)

{

case 1:

disp (count / 1000); // готовимся к отображению цифры 1 (крайняя левая)

digitalWrite (Dig1, LOW); // включаем цифру 1

break;

case 2:

disp ((count / 100)% 10); // готовимся к отображению цифры 2

digitalWrite (Dig2, LOW); // включаем цифру 2

break;

case 3:

disp ((count / 10)% 10); // готовимся к отображению цифры 3

digitalWrite (Dig3, LOW); // включаем цифру 3

break;

case 4:

disp (count% 10); // готовимся к отображению цифры 4 (крайняя правая)

digitalWrite (Dig4, LOW); // включаем цифру 4

}

current_digit = (current_digit% 4) + 1;

}

// основной цикл

void loop ()

{

if (digitalRead (button) == 0)

{

count ++; // увеличиваем «count» на 1

if (count & gt: 9999)

count = 0;

задержка (200); // ждать 200 миллисекунд

}

}

void disp (номер байта)

{

переключатель (номер)

{

case 0: // print 0

digitalWrite (SegA, LOW) ;

digitalWrite (SegB, LOW);

digitalWrite (SegC, LOW);

digitalWrite (SegD, LOW);

digitalWrite (SegE, LOW);

digitalWrite (SegF, LOW);

digitalWrite (SegG, HIGH);

перерыв;

case 1: // печать 1

digitalWrite (SegA, HIGH);

digitalWrite (SegB, LOW);

digitalWrite (SegC, LOW);

digitalWrite (SegD, HIGH);

digitalWrite (SegE, HIGH);

digitalWrite (SegF, HIGH);

digitalWrite (SegG, HIGH);

перерыв;

case 2: // напечатать 2

digitalWrite (SegA, LOW);

digitalWrite (SegB, LOW);

digitalWrite (SegC, HIGH);

digitalWrite (SegD, LOW);

digitalWrite (SegE, LOW);

digitalWrite (SegF, HIGH);

digitalWrite (SegG, LOW);

перерыв;

case 3: // print 3

digitalWrite (SegA, LOW);

digitalWrite (SegB, LOW);

digitalWrite (SegC, LOW);

digitalWrite (SegD, LOW);

digitalWrite (SegE, HIGH);

digitalWrite (SegF, HIGH);

digitalWrite (SegG, LOW);

перерыв;

case 4: // print 4

digitalWrite (SegA, HIGH);

digitalWrite (SegB, LOW);

digitalWrite (SegC, LOW);

digitalWrite (SegD, HIGH);

digitalWrite (SegE, HIGH);

digitalWrite (SegF, LOW);

digitalWrite (SegG, LOW);

перерыв;

case 5: // print 5

digitalWrite (SegA, LOW);

digitalWrite (SegB, HIGH);

digitalWrite (SegC, LOW);

digitalWrite (SegD, LOW);

digitalWrite (SegE, HIGH);

digitalWrite (SegF, LOW);

digitalWrite (SegG, LOW);

перерыв;

case 6: // печать 6

digitalWrite (SegA, LOW);

digitalWrite (SegB, HIGH);

digitalWrite (SegC, LOW);

digitalWrite (SegD, LOW);

digitalWrite (SegE, LOW);

digitalWrite (SegF, LOW);

digitalWrite (SegG, LOW);

перерыв;

case 7: // печать 7

digitalWrite (SegA, LOW);

digitalWrite (SegB, LOW);

digitalWrite (SegC, LOW);

digitalWrite (SegD, HIGH);

digitalWrite (SegE, HIGH);

digitalWrite (SegF, HIGH);

digitalWrite (SegG, HIGH);

перерыв;

case 8: // print 8

digitalWrite (SegA, LOW);

digitalWrite (SegB, LOW);

digitalWrite (SegC, LOW);

digitalWrite (SegD, LOW);

digitalWrite (SegE, LOW);

digitalWrite (SegF, LOW);

digitalWrite (SegG, LOW);

перерыв;

case 9: // печать 9

digitalWrite (SegA, LOW);

digitalWrite (SegB, LOW);

digitalWrite (SegC, LOW);

digitalWrite (SegD, LOW);

digitalWrite (SegE, HIGH);

digitalWrite (SegF, LOW);

digitalWrite (SegG, LOW);

}

}

void disp_off ()

{

digitalWrite (Dig1, HIGH);

digitalWrite (Dig2, HIGH);

digitalWrite (Dig3, HIGH);

digitalWrite (Dig4, HIGH);

}

// конец кода.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *