Пост от 21.05.2023, 05:06:00
Отредактирован 30.01.2026, 22:34:02
Время чтения: 3мин.
Так как нормального туториала для данного дисплея нет, я прикладываю хотя бы бекап поста с arduino.on.kg. Там есть код для 4-х цифрового дисплея, но не для 8. Сначала прочитайте его, потом вернитесь сюда, там хорошие объяснения.
Так что прикладываю ссылку на свой дописанный код, который работает с дисплеями 74hc595.
Но давайте по порядку, дисплей выглядит вот так:

И снизу

Код-драйвер для дисплея ниже, поставьте в Digits количество цифр.
/* * Пины для подсоединения индикатора на 7-сегментных дисплеях на 74НС595 * Display[+5V] * Display[SCLK] to PIN6 * Display[DIO] to PIN5 * Display[RCLK] to PIN4 * Display[GND] */
const int Latch = 4; //RCKconst int Clock = 6; //SCK
const int Digits = 8; // Количество цифр
const int Start = 1 << (Digits - 1);
/* * Формируем из сегментов цифру */// Цифры 0 1 2 3 4 5 6 7 8 9byte symbolsEncoded[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
/* * Точка для разряда */byte pointDigit = 0x80;
// Буфер экрана, слева направоbyte screenBuffer[8] = {1,2,3,4,5,6,7,9};
void setup(){ //Определяем все назначенные пины как выходы pinMode(Latch, OUTPUT); pinMode(Clock, OUTPUT); pinMode(Data, OUTPUT);
Serial.begin(9600);}
void loop(){ for(int i = 0; i < Digits; i++){ //Чтобы начать работу с дисплеем нужно установить пин "защелку" //в низкий уровень, пока есть низкий уровень можно записывать //в регистр значения, кодирующие включение нужных сегментов //в нужном разряде digitalWrite(Latch, LOW);
//Сначала отправляется байт кодирующий цифру в нашем буфере shiftOut(Data, Clock, MSBFIRST, symbolsEncoded[screenBuffer[i]]);
//Затем мы отправляем байт её позиции shiftOut(Data, Clock, MSBFIRST, Start >> i);
//Затем нужно "защелкнуть данные", установить пин Latch //в высокий уровень, если этого не сделать то на дисплее будет //видна непонятная "каша" из разных зажженых сегментов digitalWrite(Latch, HIGH); }}В оригинальном посте был массив позиций числа, что не работало на моей ардуинах вообще, а я пробовал аж 3, так что здесь я рассчитываю логически позицию. В строке 15 я нахожу самую левую цифру, т.е. цифр 4, значит там будет число 0b1000, 8 —> 0b1000 0000
И затем смещаю на позицию правее, при помощи побитовых сдвигов, получается, 0b0100, что процессор может выполнить быстрее обращения к массиву.
Я надеюсь что буфер помог вам выводить и анимировать экран свободнее. Также в этот код можно добавить вывод экрана по прерыванию процессора, чтобы даже в самой тяжёлой задаче экран не тормозил.
Также можно по терминалу отправлять на экран цифры. и некоторые буквы, надеюсь вы сможете это реализовать это сами!