Не могу заставить 4 значный 7 сегментный дисплей показывать разные значения
У меня, новичка в Arduino, возникли проблемы с тем, чтобы заставить работать 4-значный 7-сегментный дисплей. Дисплей подключен к 74HC595, а настройка взята из учебника elegoo tutorial 28 (я думаю, что это только для скачивания).
Я понял, как управлять тем, какое число отображать, но все 4 цифры всегда имеют одно и то же число, так что оно всегда похоже на 1111, 5555, 9999 и т. Д.
Я слышал о чем-то, называемом мультиплексированием, которое может помочь, но пока не могу адаптировать его к своему проекту, так как не хватает слишком большого опыта.
Это код, который переключается между 2222 и 8888. Я хочу иметь возможность отображать любое число, например 1234.
Любая помощь очень ценится.
int latch=9; //74HC595 pin 9 STCP
int clock=10; //74HC595 pin 10 SHCP
int data=8; //74HC595 pin 8 DS
void setup()
{
pinMode(latch,OUTPUT);
pinMode(clock,OUTPUT);
pinMode(data,OUTPUT);
}
void Display(unsigned int num)
{
digitalWrite(latch,LOW);
shiftOut(data,clock,MSBFIRST,num);
digitalWrite(latch,HIGH);
}
void loop()
{
Display(91);
delay(1000);
Display(127);
delay(1000);
}
@Esshahn, 👍2
Обсуждение4 ответа
Лучший ответ:
У вас есть общий катодный дисплей, и все ваши катоды подключены к земле через резисторы. У вас вообще нет возможности разделить разные цифры.
Вы не можете напрямую управлять таким дисплеем с помощью такого сдвигового регистра - вам нужно более прямое подключение к Arduino (оно должно быть высокоскоростным) и быстро последовательно включать и выключать каждый катод, чтобы отображать каждое из четырех чисел одно за другим.
Кроме того, резисторы должны находиться в 8 анодах, а не в 4 катодах.
Спасибо вам, Майенко, за то, что нашли время. Я предполагаю, что это означает, что эта учебная настройка не рекомендуется и нецелесообразна для использования для раздельного ввода всех цифр. Тогда мне придется искать другую настройку, которую я мог бы взять за основу., @Esshahn
Можно использовать регистр сдвига, если вы также подключите катоды к Arduino и выберите каждый из них по очереди. С регистром сдвига, хотя он может быть мерцающим. Код также намного сложнее, чем просто перенос числа., @Majenko
https://playground.arduino.cc/Main/SevenSegmentLibrary, @Majenko
но все 4 цифры всегда имеют один и тот же номер, так что это всегда похоже на 1111, 5555, 9999 и т. Д.
потому что именно для этого и предназначена эта конкретная схема.
Я слышал о чем-то под названием мультиплексирование, которое может помочь, но я пока не могу адаптировать его к своему проекту, так как не хватает слишком большого опыта.
мультиплексирование ничем не отличается от быстрого отображения каждой цифры (как вы делаете сейчас), а затем быстрого отображения следующей цифры ....
то, что вы делаете сейчас, будет способствовать вашему мультиплексированию обучения.
Проблема с этой настройкой заключается в схеме.
Вывод 10 главного сброса на 595 является плавающим.
Используйте резистор 10 К, чтобы поднять его до VCC (+5 В), и он будет работать.
Я получал всевозможные странные символы, пока не проверил технический паспорт на 595.
Для последовательной работы этой цепи требуется колпачок на 0,1 мкФ от 595 VCC до Gnd. В идеале резистор между каждым выходом 595 и анодным выводом, а также транзистор или другое устройство с более высоким током, способное пропускать ток от 8 анодов, приводимых в действие одновременно (т. е. ULN2003). Как только катоды могут управляться отдельно, чтобы можно было выбирать каждую цифру индивидуально, можно использовать массив для сопоставления отображаемой цифры с сегментами на дисплее:
// добавить перед setup()
byte fontArray[] = {
0b00111111, // 0 где биты представляют dp-g-f-e-d-c-b-a
0b00000110, // 1 и 1 = сегмент включен
0b01011011, // 2
// и т.д.
};
// и измените эту строку в функции display() для отображения числа
shiftOut(data,clock,MSBFIRST,fontArray[num); // ищет отображение сверху
// затем включите катод, чтобы отобразить его на 2-3 мс, затем выключите и отправьте
// выведите информацию для следующей цифры
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отобразить символ º на ЖК-дисплее?
- Путаница между SPI и I2C для SSD1306 OLED
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
- Запуск 7-контактного OLED-дисплея с 4 контактами (I2C)
- Как отобразить переменные с плавающей запятой на OLED-дисплее (0,96 дюйма)
- Пользовательская функция сна для Nextion
Мы понятия не имеем, что такое элегу. Покажите нам вашу схему., @Majenko
Либо вам нужно мультиплексирование, либо вам понадобится последовательная передача 4 74HC595, по одному на цифру. В противном случае вы не получите ничего другого, чем сейчас. Для мультиплексирования, я думаю, уже было много вопросов по этой теме. И поиск в Google покажет вам, что вам нужно., @jfpoilpret
Здравствуйте, у моего семисегмента есть 14-контактный код, можете ли вы отправить схематическую карту????, @hdihd9162