Как определить распиновку дисплея

Обновлено: 08.07.2024

Почему из них? Потому-что имеются. Если есть способ "накидать проводов и всё будет ок", то буду рад узнать его. В крайнем случае, может быть, закажу контроллер под эту матрицу, хоть пока и не знаю где.

На крышке устройства, из которого был изъят данный орган, было написано "Full HD 1080", но чуйка подсказывает, что это не так, но да пофиг.

З.Ы. Подсвеску можно или преобразователем запитать, если аккуратно спаять схему с планшета или переколхозить на 3 вольта питания, но в этом случае дело будет рисковое :skull: .
З.З.Ы. " Мёртвый планшет " на самом деле является мёртвой электронной книжкой TB-771A , ибо там система уже не раз слетала и, как итог, "прилетать" больше не хотела.

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение


Наверное потому что не получится от слова вообще? VGA это аналоговые сигналы, вам тут AVR-ки пригодятся только в качестве декоративного украшения.
с DVI чуть лучше, но все равно, авр не утянут. FPGA еще возможно.

Azathtot,
та получится, правда хрень, но получится. и fpga не надо и avr. 3 ацп и всех дел. матрица 24 bit digital rgb, вопрос как винду уговорить на 800х480. контроллер-скалер под такое разрешение из доступных только rtd2660|2662 и опять переходник 50-60 пин скорее всего самодельный делать(слава богу хоть гамма не вытащена). проще уж serial over usb замутить. но опять же 800х480. а на винде даже 1024х600 дикое гуано.

кста строенные ad вроде до сих пор выпускает.

luckylamer,
Главное, чтобы это гуано работало, большего не требуется.

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

Эта статья охватит все, что необходимо знать, чтобы начать работу с LCD 1602 . Да и не только с 1602 (16×2), но и любыми другими символьными ЖК-дисплеями (например, 16×4, 16×1, 20×4 и т. д.), основанными на контроллере параллельного интерфейса HD44780 от Hitachi.

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

Обзор LCD 1602


Если вы посмотрите внимательно, вы можете увидеть маленькие прямоугольники для каждого символа на дисплее и пиксели, которые составляют символ. Каждый из этих прямоугольников представляет собой сетку 5 × 8 пикселей.

Хотя такие дисплеи отображают только текст, они бывают разных размеров и цветов: например, 16×1, 16×4, 20×4, с белым текстом на синем фоне, с черным текстом на зеленом и другие.

Распиновка 16х02 символов

Перед тем, приступить к сборке и написанию кода, давайте сначала взглянем на распиновку LCD 1602.

Распиновка 16х02 символов


Многофункциональный прибор для проверки транзисторов, диодов, тиристоров.

Практика

Теперь мы переходим к интересным вещам. Давайте проверим ЖК-дисплей. Сначала подключим контакты 5В и GND от Arduino Uno к шинам электропитания макетной платы. Затем подключим LCD 1602. Данный LCD имеет две отдельные линии питания:

  1. Контакт 1 и контакт 2 для питания самого LCD 1602
  2. Контакт 15 и контакт 16 для подсветки LCD 1602

Подсоедините контакты 1 и 16 LCD на минус питания, а контакты 2 и 15 к + 5В.

Далее необходимо подключить контакт 3, который отвечает за контрастность и яркость дисплея. Для точной настройки контрастности необходимо подключить крайние выводы потенциометра сопротивлением 10 кОм к 5В и GND, а центральный контакт (бегунок) потенциометра к контакту 3 на LCD дисплея.

Регулировка контрастности ЖК-дисплея с помощью потенциометра

Теперь включите Arduino и вы увидите подсветку. Поворачивая ручку потенциометра, вы должны заметить появление первой линии прямоугольников. Если это произойдет, поздравляем! Ваш ЖК-дисплей работает правильно.

Подключение LCD 1602 к Arduino

Прежде чем мы приступим к загрузке скетча и отправке данных на дисплей, давайте подключим LCD 1602 к Arduino.

LCD дисплей имеет много контактов (16 контактов). Но, хорошая новость заключается в том, что не все эти контакты необходимы для нас, чтобы подключиться к Arduino.

Итак, что мы будем работать с LCD дисплеем, используя 4-битный режим, и, следовательно, нам нужно только 6 контактов: RS, EN, D7, D6, D5 и D4.

Подключение 16-символьного ЖК-дисплея к Arduino UNO

Подключение 16-символьного ЖК-дисплея к Arduino UNO

Скетч

Объяснение кода:

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

Далее мы должны создать объект LiquidCrystal. Этот объект использует 6 параметров и указывает, какие выводы Arduino подключены к выводам RS, EN и выводам данных: d4, d5, d6 и d7.

Теперь, когда мы объявили объект LiquidCrystal, мы можем получить доступ к специальным методам (или функциям), специфичным для ЖК-дисплея.

В функции setup() мы будем использовать две функции: первая функция begin(). В ней указываются размер дисплея, т.е. количества столбцов и строк. Если вы используете 16 × 2 символьный ЖК-дисплей, укажите параметры 16 и 2, если вы используете ЖК-дисплей 20 × 4, укажите параметры 20 и 4.

Вторая функция clear() очищает экран и перемещает курсор в верхний левый угол.

После этого мы переводим курсор на вторую строку, вызвав функцию setCursor(). Позиция курсора указывает место, где вам нужно отобразить новый текст на дисплее. Верхний левый угол считается col = 0, row = 0.

Другие полезные функции библиотеки LiquidCrystal

Есть несколько полезных функций, которые вы можете использовать с объектом LiquidCrystal. Немногие из них перечислены ниже:

  • Если вы просто хотите расположить курсор в верхнем левом углу дисплея без очистки дисплея, используйте home().
  • Существует много приложений, таких как turbo C++ или notepad ++, в которых нажатие клавиши «insert» на клавиатуре меняет курсор. Точно так же вы можете изменить курсор на ЖК-дисплее с помощью blink() или lcd.Cursor().
  • Функция blink() отображает мигающий блок размером 5 × 8 пикселей, а lcd.Cursor() подчеркивание (линия) на позиции, в которую будет записан следующий символ.
  • Вы можете использовать функцию noblink(), чтобы отключить мигающий курсор на дисплее и lcd.noCursor() чтобы скрыть курсор.
  • Вы можете прокрутить содержимое дисплея на один пробел вправо, используя lcd.scrollDisplayRight() или один пробел влево используя lcd.scrollDisplayLeft(). Если вы хотите непрерывно прокручивать текст, вам нужно использовать эти функции внутри цикла for.

Генерация пользовательских символов для LCD

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

Как мы уже обсуждали ранее в этом руководстве, символ на дисплее формируется в матрице 5×8 пикселей, поэтому вам нужно определить свой пользовательский символ в этой матрице. Для определения символа необходимо использовать функцию createChar() библиотеки LiquidCrystal.

Для использования createChar() сначала необходимо назначить массив из 8 байт. Каждый байт (учитывается только 5 бит) в массиве определяет одну строку символа в матрице 5×8. В то время как нули и единицы в байте указывают, какие пиксели в строке должны быть включены, а какие-выключены.

Генератор символов LCD

Создание собственного символа до сих пор было непросто! Поэтому было создано небольшое приложение под названием «Генератор пользовательских символов» для LCD.

Вы видите синюю сетку ниже? Вы можете нажать на любой из 5 × 8 пикселей, чтобы установить/очистить этот конкретный пиксель. И когда вы нажимаете на пиксели, код для символа генерируется рядом с сеткой. Этот код может быть непосредственно использован в вашем скетче Arduino.

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

Следующий скриншот демонстрирует, как вы можете использовать эти пользовательские символы на дисплее.

После включения библиотеки нам нужно инициализировать пользовательский массив из восьми байтов.

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



Нарисовал схему подключения. Для питания дисплея нужно напряжение 3,3V. Если запитывать микроконтроллер от 5V, то ставим резисторные делители и микросхему 78L33. В случае питания всей схемы от 3,3V резисторные делители не нужны. Вроде Atmega8A может работать от 3,3V при условие, что частота не выше 8 МГц. Лично я не пробовал. У меня все собрано на отладочной плате с питанием от 5V. Перед самим дисплеем ставить по питанию электролит большой емкости ни в коем случае не надо. В самом начале работы контроллер подает на дисплей команды инициализации. Для заряда конденсатора нужно время. Пока он зарядится и дисплей начнет работать пройдет некоторое время, и команды инициализации он не получит. Конечно это миллисекунды, но в даном случае эффект ощутим.

Схема распиновки дисплея нокиа

Схема распиновки дисплея

У дисплея Nokia 1202 9-ти битный SPI интерфейс. У выбранного нами микроконтроллера такой роскоши нет. По этому для связи с дисплеем мы используем не аппаратный, а программный SPI, так сказать "ногодрыг”. Как создавать новые проекты в CodeVision рассказывать не буду - думайте сами. Скажу только, что все выводы PORTB надо настроить на выход. В настройках проекта нужно поставить галочку на "Store Global Constants in FLASH Memory”. Данное действие нужно для того, чтоб массивы шрифтов и наших картинок хранились во флеше.



назначение пинов микроконтроллера можно изменять

Еще хочу сказать, что назначение пинов микроконтроллера можно изменять в файле 1100.h. Тогда и схема подключения изменится. Начинаем кодить. Просто выведем какую-то надпись на дисплей основным шрифтом 5*8. В самом начале добавим библиотеки.

В самом низу до основного цикла while(1)<> делаем инициализацию дисплея и его очистку.

lcd_init(); // инициализация дисплея
lcd_clear(); // очистка дисплея

Нашу надпись поставим так же до основного цикла. Пусть сперва контролер выведет послание на дисплей, а после крутится в основном цикле. Пишем вот это:

print_string("Выводим надпись",5,0);
print_string("Какую сами хотим",0,1);
print_string("БУХАРЬ",10,2);

Думаю здесь все понятно. Первая цифра – координата по оси x на дисплее. Она может принимать значение от 0 до 96. Вторая – строка. Она от 0 до 7. В принципе там помещается 8 с половиной строк, но на пол строки мы читать не будем. Компилируем и прошиваем. Смотрим результат. Можно так же установить Proteus, и протестировать в нем. Контроллер можно настроить для работы от внутреннего генератора на частоту заданную в проекте с задержкой при старте 64 мсек. Добавляю архив с скомпилированным проектом. Частота 8 Мгц.

Но как уже писал в начале, в библиотеке есть еще и другие символы. Правда там нет букв, а только цифры. Теперь немного усложним задачу. Пусть надпись не будет инертной, а изменяется. Допустим считает от 0 до 9 с интервалом в 1 секунду. Когда дойдет до 9, после обнулится и снова наново. Возьмем цифры большие размером 24*32. Ну чтож приступим. Можно взять предыдущий проект и удалить три строки "print_string”. Сразу после добавления библиотек объявим некую глобальную переменную m.

Можно и просто написать:

В даном случае ей автоматически присвоится значение 0. В основном цикле пишем вот это:

char_24_32(m,35,2); //функция вывода символа 24*32
delay_ms(1000); // ждем 1 секунду
m++; // добавляем 1 к переменной m
if(m>9)m=0; // Условие. Если переменная m больше 9, то m равняется 0.

Снял небольшое видео работы программы

Форум по обсуждению материала ПОДКЛЮЧЕНИЕ ДИСПЛЕЯ К МИКРОКОНТРОЛЛЕРУ


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


Ещё один самодельный стереоусилитель на TDA2030, TDA2050, TDA2040 или LM1875T, с возможностью мостового включения.

Как подключить 7-сегментные дисплеи на Arduino


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

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

Arduino-7-Segment-Display-Single-Digit-a

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

ОСНОВЫ СВЕТОДИОДОВ
Один светодиод состоит из двух клемм, анода и катода. Анод является положительным выводом, а катод - отрицательным выводом:


Для питания светодиода вы подключаете катод к земле, а анод - к источнику напряжения. Светодиод может быть включен или выключен путем переключения питания на аноде или катоде.

АНОД К GPIO
Когда анод светодиода подключен к цифровому выводу, катод заземлен:


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

Чтобы зажечь светодиод с анодом, подключенным к цифровому контакту, подаем на цифровой контакт ВЫСОКИЙ (HIGH) уровень:

void setup() <
pinMode(7, OUTPUT);
digitalWrite(7, HIGH);
>

В блоке void setup () мы настраиваем вывод GPIO 7 как выход pinMode (7, OUTPUT); и подаем на него высокий уровень с помощью digitalWrite (7, HIGH);

КАТОД К GPIO
С катодом светодиода, подключенным к цифровому выводу, анод подключен к Vcc. Для включения светодиода цифровой вывод переключается на НИЗКИЙ уровень, что замыкает цепь на землю:


В этом случае мы подаем на контакт GPIO 7 НИЗКИЙ уровень с помощью digitalWrite (7, LOW); Это замыкает цепь и позволяет току течь от Vcc к земле:

void setup() <
pinMode(7, OUTPUT);
digitalWrite(7, LOW);
>

КАК РАБОТАЮТ 7-СЕГМЕНТНЫЕ ДИСПЛЕИ
Семисегментные дисплеи состоят из 7 светодиодов, называемых сегментами, расположенных в форме «8». Большинство 7-сегментных дисплеев на самом деле имеют 8 сегментов, с точкой справа от цифры, которая служит десятичной точкой. Каждый сегмент именуется буквой от A до G и DP для десятичной точки:


Каждый сегмент на дисплее может управляться индивидуально, как обычный светодиод.
Существует два типа 7-сегментных дисплеев - с общим катодом и с общим анодом .

ДИСПЛЕИ С ОБЩИМ КАТОДОМ
В обычных катодных дисплеях все катоды подключены к земле, а отдельные сегменты включаются и выключаются путем переключения питания на аноды:


ДИСПЛЕИ С ОБЩИМ АНОДОМ
В обычных анодных дисплеях все аноды подключены к Vcc, а отдельные сегменты включаются и выключаются путем переключения питания на катоды:

Arduino-7-Segment-Tutorial-Common-Anode-

ПОДКЛЮЧЕНИЕ 7-СЕГМЕНТНЫХ ДИСПЛЕЕВ К ARDUINO
Одноразрядные семисегментные дисплеи обычно имеют 10 контактов. Два контакта подключаются к земле, а остальные 8 подключаются к каждому из сегментов. Вот схема контактов популярного катодного дисплея 5161AS :


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

КАК ОПРЕДЕЛИТЬ, КАКОЙ У ВАС ДИСПЛЕЙ С ОБЩИМ АНОДОМ ИЛИ С ОБЩИМ КАТОДОМ
Это можно проверить с помощью тестовой схемы, сконструированной следующим образом:


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

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

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

КАК ОПРЕДЕЛИТЬ РАСПИНОВКУ ДЛЯ ВАШЕГО ДИСПЛЕЯ
Теперь нарисуйте схему, показывающую контакты на вашем дисплее. Когда общий контакт подключен к заземляющему проводу (общий катод) или положительному проводу (общий анод), проверьте каждый контакт другим проводом. Когда сегмент загорается, запишите имя сегмента (AG или DP) рядом с соответствующим выводом на диаграмме.

ПОДКЛЮЧЕНИЕ ОДНОРАЗРЯДНЫХ ДИСПЛЕЕВ К ARDUINO
Как только вы разобрались с расположением выводов, подключить дисплей к Arduino уже будет довольно просто. На этой схеме показано, как подключить одноразрядный дисплей 5161AS (обратите внимание на ограничивающий ток резистор 1 кОм, подключенный последовательно с общими контактами):


В приведенных ниже примерах программ контакты сегментов подключаются к Arduino в соответствии с этой таблицей:


ПРОГРАММИРОВАНИЕ ОДНОРАЗРЯДНЫХ ДИСПЛЕЕВ
УСТАНОВИТЬ БИБЛИОТЕКУ
Мы будем использовать библиотеку SevSeg для управления дисплеем. Библиотека SevSeg работает с одноразрядными и многоразрядными семисегментными дисплеями. Вы можете скачать ZIP-файл библиотеки с GitHub :

Чтобы установить его, откройте Arduino IDE, перейдите в «Sketch»> «Включить библиотеку»> «Добавить .ZIP библиотеку» и выберите загруженный ZIP-файл SevSeg.

ВЫВОД ЧИСЕЛ НА ДИСПЛЕЕ
Эта программа напечатает число «4» на одноразрядном 7-сегментном дисплее:

void setup() <
byte numDigits = 1;
byte digitPins[] = <>;
byte segmentPins[] = ;
bool resistorsOnSegments = true;

byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
>

void loop() <
sevseg.setNumber(4);
sevseg.refreshDisplay();
>

В этой программе мы создаем объект sevseg в строке 2. Чтобы использовать дополнительные дисплеи, вы можете создать другой объект и вызвать соответствующие функции для этого объекта. Отображение инициализируется с помощью функции sevseg.begin () в строке 11. Другие функции описаны ниже:

hardwareConfig = COMMON_CATHODE; Этот параметр устанавливает тип дисплея. Я использую общий катод, но если вы используете общий анод, тогда используйте COMMON_ANODE.

byte numDigits = 1; Этот параметр устанавливает количество цифр на вашем дисплее. Я использую одноразрядный дисплей, поэтому я установил его на 1. Если вы используете 4-разрядный дисплей, установите это на 4.

byte digitPins [] = <>; Создает массив, который определяет заземляющие контакты при использовании 4-разрядного или многоразрядного дисплея. Оставьте его пустым, если у вас есть одноразрядный дисплей. Например, если у вас 4-разрядный дисплей и вы хотите использовать выводы Arduino 10, 11, 12 и 13 в качестве заземляющих выводов цифр, вы должны использовать это так: byte digitPins [] = ; , См. ниже пример ипользования 4-разрядного дисплея для получения дополнительной информации.

byte segmentPins[] = ; Это объявляет массив, который определяет, какие выводы Arduino подключены к каждому сегменту дисплея. Порядок в алфавитном порядке (A, B, C, D, E, F, G, DP, где DP - десятичная точка). Таким образом, в этом случае контакт 6 Arduino подключается к сегменту A, контакт 5 подключается к сегменту B, контакт 2 подключается к сегменту C и так далее.

resistorsOnSegments = true; Это должно быть установлено в true, если ваши текущие ограничивающие резисторы соединены последовательно с сегментными выводами. Если резисторы соединены последовательно с цифровыми выводами, установите для этого параметра значение false. Установите это значение true при использовании многозначных дисплеев.

sevseg.setBrightness (90); Эта функция устанавливает яркость дисплея. Его можно настроить от 0 до 100.

sevseg.setNumber (); Эта функция выводит номер на дисплей. Например, sevseg.setNumber (4); напечатает число «4» на дисплее. Вы также можете печатать числа с десятичными точками. Например, чтобы напечатать число «4.999», вы должны использовать sevseg.setNumber (4999, 3); , Второй параметр (3) определяет, где находится десятичная точка. В этом случае это 3 цифры от самой правой цифры. На одноразрядном дисплее установка второго параметра на «0» включает десятичную точку, а установка на «1» отключает его.

sevseg.refreshDisplay (); Эта функция требуется в конце секции цикла, чтобы продолжить отображение номера.

ТАЙМЕР ОБРАТНОГО ОТСЧЕТА
Эта простая программа будет отсчитывать от нуля до 9 и затем возвращаться к началу:

void setup() <
byte numDigits = 1;
byte digitPins[] = <>;
byte segmentPins[] = ;
bool resistorsOnSegments = true;

byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
>

void loop() <
for(int i = 0; i < 10; i++) <
sevseg.setNumber(i, i%2);
delay(1000);
sevseg.refreshDisplay();
>
>

Код похож на предыдущий скетч. Единственное отличие состоит в том, что мы создаем переменную count «i» в операторе for в строке 16 и увеличиваем ее по одному числу за раз.

Sevseg.setNumber (I, I% 2); функция печатает значение i. Аргумент i% 2 делит i на 2 и возвращает остаток, в результате чего десятичная точка включает все остальные числа.

Таймер обратного отсчета - хороший способ продемонстрировать основы программирования дисплея, но теперь давайте попробуем сделать что-то более интересное.

ИГРАЛЬНЫЕ КОСТИ
Этот пример состоит из кнопки и одного 7-сегментного дисплея. Каждый раз, когда нажимается и удерживается кнопка, на дисплее быстро появляются цифры 0-9. Как только кнопка отпущена, дисплей продолжает цикл в течение того периода времени, почти равного времени нажатия кнопки, а затем отображает число вместе с десятичной точкой, чтобы указать новый номер.
Чтобы построить схему (с дисплеем 5161AS), подключите его следующим образом:


Затем загрузите эту программу в Arduino:

const int buttonPin = 10; // the pin that the pushbutton is attached to
int buttonState = 0; // current state of the button
int lastButtonState = LOW; // previous state of the button
int buttonPushCounter = 0; // counter for the number of button presses
long counter = 0;
long max_long_val = 2147483647L;

void setup() <
byte numDigits = 1;
byte digitPins[] = <>;
byte segmentPins[] = ;
bool resistorsOnSegments = true;

byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);

pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
lastButtonState = LOW;
>

void loop() <
buttonState = digitalRead(buttonPin);
if(buttonState == HIGH) <
buttonState = LOW;
>

else
buttonState = HIGH;

if(buttonState == HIGH) <
Serial.println("on");
lastButtonState = HIGH;
buttonPushCounter++;
if(counter < max_long_val)
counter++;
buttonPushCounter %= 9;
sevseg.setNumber(buttonPushCounter, 1);
sevseg.refreshDisplay();
delay(100 - (counter%99));
>

else <
Serial.println("off");
if(lastButtonState == HIGH) <
Serial.println("in");
buttonPushCounter++;
buttonPushCounter %= 7;
if(buttonPushCounter == 0)
buttonPushCounter = 1;
counter--;
sevseg.setNumber(buttonPushCounter, 1);
sevseg.refreshDisplay();
delay(100 - (counter%99));
if(counter == 0) <
lastButtonState = LOW;
sevseg.setNumber(buttonPushCounter, 0);
sevseg.refreshDisplay();
>
>
>
>

4-РАЗРЯДНЫЙ 7-СЕГМЕНТНЫЙ ДИСПЛЕЙ
До сих пор мы работали только с одноразрядными 7-сегментными дисплеями. Для отображения такой информации, как время или температура, нам нужно использовать 2- или 4-разрядный дисплей или подключать несколько одноразрядных дисплеев рядом.


В многоразрядных дисплеях один сегментный вывод (A, B, C, D, E, F, G и DP) контролирует один и тот же сегмент на всех цифрах. Многоразрядные дисплеи также имеют отдельные общие выводы для каждой цифры. Это цифровые контакты. Вы можете включить или выключить цифру, переключив цифровой pin.


Я использую 4-разрядный 7-сегментный дисплей марки 5641AH, но приведенные ниже схемы подключения также будут работать с 5461AS.
Вот схема, показывающая распиновку этих дисплеев:


Цифровые контакты D1, D2, D3 и D4 должны быть подключены к токоограничивающим резисторам, поскольку они являются общими клеммами цифр. Соединения показаны ниже:


Эта простая программа выведет число «4.999» на дисплей:

void setup() <
byte numDigits = 4;
byte digitPins[] = ;
byte segmentPins[] = ;

bool resistorsOnSegments = true;
bool updateWithDelaysIn = true;
byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
>

void loop() <
sevseg.setNumber(4999, 3);
sevseg.refreshDisplay();
>

В приведенном выше коде мы устанавливаем количество цифр в строке 5 с помощью byte numDigits = 4; ,

Поскольку в многоразрядных дисплеях используются цифровые контакты, нам также необходимо определить, какие контакты Arduino будут подключаться к цифровым контактам. Использование byte digitPins [] = ; в строке 6 вывод Arduino 10 в качестве первого разряда, Arduino 11 в качестве второго разряда и так далее.

Чтобы напечатать числа с десятичной точкой, мы устанавливаем второй параметр в sevseg.setNumber (4999, 3); до трех, что ставит его на три знака после запятой справа от цифры.

ДИСПЛЕЙ ТЕМПЕРАТУРЫ
Этот пример считывает температуру с термистора и отображает ее на четырехзначном дисплее.
Подключите схему следующим образом:


!Если у вас есть вопросы по использованию термистора или вы просто хотите узнать о них больше, ознакомьтесь с нашим другим руководством по использованию термистора с Arduino.

Как только все подключится, загрузите этот код в Arduino:

int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

void setup() <
byte numDigits = 4;
byte digitPins[] = ;
byte segmentPins[] = ;
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_CATHODE;

sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
>

void loop() <
Vo = analogRead(ThermistorPin);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2));
T = T - 273.15;
T = (T * 9.0) / 5.0 + 32.0; //Comment out for Celsius

static unsigned long timer = millis();

if (millis() >= timer) <
timer += 300;
sevseg.setNumber(T, 2);
>

Это выведет температуру в градусах Фаренгейта. Чтобы отобразить температуру в градусах Цельсия, закомментируйте строку //Comment out for Celsius.

Переменная температуры «T» выводится на дисплей в строке 35 с sevseg.setNumber (T, 2, false); ,

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

Читайте также: