Пожалуйста, примите этот вопрос в качестве примера к (моему) ответу ниже.
У меня 7-сегментный 4-значный светодиодный дисплей, но я не знаю, как его подключить.
Я не понимаю разницы между общим анодом/катодом, и у меня нет двух контактов на светодиод, что странно. Совсем недавно вопрос об «7-сегментном 4-разрядном общем аноде» был удален. В тот самый момент я набрал ответ.
Хотя, я все еще хочу поделиться с вами своим ответом или человеком, который его просил. Пожалуйста, уточните/обновите мой ответ с дополнительной информацией. В частности, может кто-то добавить рабочий код, я не могу сейчас.
Как дополнение к ответу Павла, я написал короткую программу для показа как управлять 7-сегментным 4-значным дисплеем его фигуры:
Это фактически общий дисплей катода, поэтому программа предполагает, что,
а также конкретную проводку рисунка. Интересная часть
функцию refresh_display ()
, которая должна вызываться периодически.
Алгоритм выглядит следующим образом:
HIGH
вывод, который управляет катодом этой цифры через
NPN-транзистор Следует отметить, что ожидание выполняется без блокировки CPU, используя метод, описанный в Blink Without Задержка Ардуино руководство. Вот программа:
const int NB_DIGITS = 4; //4-digit display
const int FIRST_ANODE = 2; //anodes a..g on pins 2..8
const int FIRST_CATHODE = 9; //cathodes, right to left, on pins 9..12
// Digits to display, from right to left.
uint8_t digits[NB_DIGITS];
// Set all the used pins as outputs.
void init_display()
{
for (int i = 0; i < 7; i++)
pinMode(FIRST_ANODE + i, OUTPUT);
for (int i = 0; i < NB_DIGITS; i++)
pinMode(FIRST_CATHODE + i, OUTPUT);
}
// This should be called periodically.
void refresh_display()
{
//Our 7-segment "font".
static const uint8_t font[10] = {
//abcdefg
0b1111110,//0
0b0110000,//1
0b1101101,//2
0b1111001,//3
0b0110011,//4
0b1011011,//5
0b1011111,//6
0b1110000,//7
0b1111111,//8
0b1111011 //9
};
//Wait for 2.5 ms before switching digits.
static uint32_t last_switch;
uint32_t now = micros();
if (now - last_switch < 2500) return;
last_switch = now;
//Switch off the current digit.
static uint8_t pos;
digitalWrite(FIRST_CATHODE + pos, LOW);
//Set the anodes for the next digit.
pos = (pos + 1) % NB_DIGITS;
uint8_t glyph = font[digits[pos]];
for (int i = 0; i < 7; i++)
digitalWrite(FIRST_ANODE + i, glyph & 1 << (6-i));
//Switch digit on.
digitalWrite(FIRST_CATHODE + pos, HIGH);
}
/***********************************************************************
* Example usage.
*/
void setup()
{
init_display();
}
void loop()
{
uint32_t now = millis();
//Change the number displayed every second.
static uint32_t last_change;
if (now - last_change >= 1000) {
digits[3] = digits[2];
digits[2] = digits[1];
digits[1] = digits[0];
digits[0] = (digits[0] + 1) % 10;
last_change = now;
}
refresh_display();
}
Павел предоставил ссылку на учебник по Parallax что предполагает использование Multiplex7Seg Библиотека Ардуино. Эта библиотека более общая, чем пример кода выше, поскольку он не делает предположений о используемых штифтах. Но большой разница между библиотекой и этим кодом в том, как тайминги управляются:
refresh_display ()
часто
достаточно. Он не требует выделенных аппаратных ресурсов, но он
не очень хорошо работает с программами, которые занимают слишком много времени для loop ()
: it
вам не понравится вызывать delay ()
. Я попробую и проведу вас через полные основы светодиодов и т. Д. Поскольку 4-значные 7-сегментные дисплеи представляют собой комбинацию нескольких «светодиодных технологий».
Светодиодные индикаторы
Светодиоды или светодиоды - одна из самых интересных вещей в Arduino.
По сути, они просты в использовании, активируют их, и они загорятся.
Они могут быть раздражающими, потому что у них есть какая-то полярность, а это значит, что они будут работать только тогда, когда вы подключите их правильно. Если вы отмените положительное и отрицательное напряжение, они вообще не загорятся.
Раздражающе, это так же полезно.
Катод против анода
На традиционном светодиоде длинным выводом является (+), анод. Другой вывод - (-) катод.
«Или, если кто-то обрезает ноги, попробуйте найти плоский край на внешнем корпусе светодиода. Пинц, ближайший к плоскому краю, будет отрицательным, катодный штырь». - Sparkfun
Source: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity
Основная проводка
Я не уверен, правильно ли это, так как я разорвал изображение из Интернета.
Проводка светодиода довольно проста, анод (+) подключается к положительному напряжению, предпочтительно через резистор ограничения тока. Катод (-) соединяется с землей (с резистором ограничения тока, если у вас его нет на положительной стороне).
Токоограничивающий резистор предотвратит замыкание светодиода, повреждая светодиод или микроконтроллер/Arduino.
Несколько светодиодов, матриц, светодиодов RGB
С несколькими светодиодами вы часто используете их с положительной стороной, подключенной (+), «общим анодом» или все, подключенными к (-) «общему катоду».
В принципе, это сведено к этому.
Для общего катода вы подаете ток на контакты, которые вы хотите включить.
Для общего анода вы пропускаете ток через светодиод.
Мультиплексирование (несколько цифр, 7 сегментов)
You should check out the tutorial of parallax: http://learn.parallax.com/4-digit-7-segment-led-display-arduino-demo
Когда у вас много светодиодов, часто разумно «мультиплексировать» их. Обычно вы быстро проходите «группы» светодиодов, так что похоже, что все они одновременно включены.
Обычно вы опускаетесь от колонки светодиодов и тока питания к отдельным светодиодам ряда.
Или вы подаете ток в столбец светодиодов и ток стока от отдельных светодиодов ряда.
Чтобы вы могли выбрать, какой столбец активироваться, и какие светодиоды этой колонки загорятся. Быстрое изменение этих столбцов/строк позволит вам управлять несколькими светодиодами с гораздо меньшим количеством контактов.
Для этого даже есть контроллеры дисплея, если вы не хотите заботиться о переключении в вашем программном обеспечении.
Поэтому, когда у вас есть 4-значный мультиплексированный сегмент 7, общий анод
Диаграмма будет примерно такой:
http://www.mytutorialcafe.com/Microcontroller%20Application%20C%207segmen.htm