7-сегментный дисплей на многофункциональном шилде — Arduino Uno
Я купил этот щит . Я ищу способ отображения десятичной точки без использования какой-либо специальной библиотеки. Большинство примеров, таких как этот, показывают только 0–9.< /p>
EDIT1 обновить ссылку Ссылка
@Guy . D, 👍0
Обсуждение1 ответ
Поэтому, если вы нажмете на вторую ссылку, она будет включать образцы кода для различных разделов многофункционального экрана.
Один из них называется "сегментное отображение".
Если вы посмотрите на этот код, строка 7 определяет битовые шаблоны для каждой из цифр от 0 до 9:
const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
Если вы сопоставите их в двоичном формате, вы получите:
0xC0, 1100 0000 0
0xF9, 1111 1001 1
0xA4, 1010 0100 2
0xB0, 1011 0000 3
0x99, 1001 1001 4
0x92, 1001 0010 5
0x82, 1000 0010 6
0xF8, 1111 1000 7
0X80, 1000 0000 8
0X90 1001 0000 9
У символа 0 подсвечиваются все сегменты, кроме средней "перекладины". У символа 8 горят ВСЕ сегменты. Но битовая комбинация для 8 — 1000 0000
. Это говорит о том, что бит 0 означает, что сегмент горит, а бит 1 означает, что он выключен. Поскольку бит старшего порядка всех этих символов равен 1 (выкл.), это предполагает, что бит старшего разряда является битом десятичного разряда. (Это единственный бит, который никогда не меняется.)
Итак, если вы замените
const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
с
const byte SEGMENT_MAP[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0X00,0X10};
Вы должны получить все нарисованные цифры со светящимися соответствующими десятичными разрядами.
Я бы попробовал сначала, чтобы убедиться, что я прав.
Затем я бы предложил написать код, который считывает значение сегментов для каждой цифры, решает, хотите ли вы десятичный знак в этой позиции, и если да, выполняет побитовое И (&
в C /C++) для значения с 0X7F, чтобы очистить десятичный бит для этого символа. (Помните, что 0 означает, что данный светодиодный сегмент должен гореть.
Вы можете изменить функцию WriteNumberToSegment(), чтобы она принимала "lightDot" параметр, и он изменит бит, если вы передадите TRUE (1):
void WriteNumberToSegment(byte Segment, byte Value, bool lightDot)
{
digitalWrite(LATCH_DIO,LOW);
bool bits = SEGMENT_MAP[Value]);
if (lightDot) {
bits &= 0x7F; //Чтобы подсветить десятичную запятую для этой цифры, очистите бит 0x80
}
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, bits);
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
digitalWrite(LATCH_DIO,HIGH);
}
(Я точно не помню, является ли bool
допустимым типом в Arduino C/C++. Если нет, просто замените bool
на uint8
выше.)
- SD-карта не инициализируется
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как отправить данные из Arduino Uno с SIM900 GPRS в Firebase
- Отправка текстового сообщения через Wi-Fi-shield Arduino
- Отправить SMS Arduino Uno + плата SIM900A
- PCA9685 сервоэкран не работает
- Сборка Arduino uno AVR со светодиодами
- Как сохранить данные на SD-карту с помощью модуля защиты памяти SPI
этот дисплей требует частого обновления, иначе он выглядит так, как будто он показывает только одно число, @Juraj
Отвечает ли это на ваш вопрос? проблема [delay() для 74HC595 и 7-сегмента, @Juraj
Ссылка на пример мертва. Десятичная точка такая же, как и любой другой сегмент на дисплее. Установите соответствующий выходной контакт сдвигового регистра 75HC595 на высокий или низкий уровень (в зависимости от того, как подключен дисплей)., @chrisl