Проект 18: четырёхразрядные сегментные светодиодные индикаторы


В данном эксперименте мы используем Arduino для работы с четырёхразрядными семисегментными светодиодными индикаторами с общим анодом. Для светодиодных индикаторов необходимы резисторы, ограничивающие ток. Существует два способа подключения таких токоограничивающих резисторов. Первый заключается в подсоединении одного резистора к каждому аноду d1 – d4. В таком случае будет применяться меньшее число резисторов (всего 4 штуки), но добиться одинаковой яркости индикаторов не получится: первый будет самым ярким, а последний – самым тусклым. Другой способ состоит в подключении одного резистора к каждому входу. Этот метод гарантирует одинаковую и достаточную яркость всех индикаторов, но требует больше резисторов. В данном эксперименте используется восемь 220 Ω резисторов. Авторы оригинальной статьи применяли именно 220 Ω-резисторы из-за того, что 100Ω резисторов не было в наличии, и отметили, что использование 100Ω резисторов позволит добиться большей яркости индикаторов.

Проект 18: четырёхразрядные сегментные светодиодные индикаторы

Подключение компонентов

Для подключения четырёхразрядных индикаторов требуется 12 входов. Нумерация ведётся, начиная с нижнего левого угла той части дисплея, где расположена точка-разделитель разрядов. Левый нижний вход имеет номер 1, левый верхний – 12.

Проект 18: четырёхразрядные сегментные светодиодные индикаторы

Проект 18: четырёхразрядные сегментные светодиодные индикаторы

Подключение компонентов при использовании платы UNO R3:

(картинка сломана)

Подключение компонентов при использовании платы 2560 R3:

Проект 18: четырёхразрядные сегментные светодиодные индикаторы

Программа-пример

// display 1234

// выбор входов/выходов для катода

int a = 1;

int b = 2;

int c = 3;

int d = 4;

int e = 5;

int f = 6;

int g = 7;

int dp = 8;

// выбор входов/выходов для анода

int d4 = 9;

int d3 = 10;

int d2 = 11;

int d1 = 12;

// объявление переменных

long n = 1230;

int x = 100;

int del = 55; // Далее – настройка отображения чисел на индикаторах

void setup()

{

pinMode(d1, OUTPUT);

pinMode(d2, OUTPUT);

pinMode(d3, OUTPUT);

pinMode(d4, OUTPUT);

pinMode(a, OUTPUT);

pinMode(b, OUTPUT);

pinMode(c, OUTPUT);

pinMode(d, OUTPUT);

pinMode(e, OUTPUT);

pinMode(f, OUTPUT);

pinMode(g, OUTPUT);

pinMode(dp, OUTPUT);

}

/////////////////////////////////////////////////////////////

void loop()

{

Display(1, 1);

Display(2, 2);

Display(3, 3);

Display(4, 4);

void WeiXuan(unsigned char n)//

{

switch(n)

{

case 1:

digitalWrite(d1,LOW);

digitalWrite(d2, HIGH);

digitalWrite(d3, HIGH);

digitalWrite(d4, HIGH);

break;

case 2:

digitalWrite(d1, HIGH);

digitalWrite(d2, LOW);

digitalWrite(d3, HIGH);

digitalWrite(d4, HIGH);

break;

case 3:

digitalWrite(d1,HIGH);

digitalWrite(d2, HIGH);

digitalWrite(d3, LOW);

digitalWrite(d4, HIGH);

break;

case 4:

digitalWrite(d1, HIGH);

digitalWrite(d2, HIGH);

digitalWrite(d3, HIGH);

digitalWrite(d4, LOW);

break;

default :

digitalWrite(d1, HIGH);

digitalWrite(d2, HIGH);

digitalWrite(d3, HIGH);

digitalWrite(d4, HIGH);

break;

}

}

void Num_0()

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, HIGH);

digitalWrite(f, HIGH);

digitalWrite(g, LOW);

digitalWrite(dp,LOW);

}

void Num_1()

{

digitalWrite(a, LOW);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, LOW);

digitalWrite(e, LOW);

digitalWrite(f, LOW);

digitalWrite(g, LOW);

digitalWrite(dp,LOW);

}

void Num_2()

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, LOW);

digitalWrite(d, HIGH);

digitalWrite(e, HIGH);

digitalWrite(f, LOW);

digitalWrite(g, HIGH);

digitalWrite(dp,LOW);

}

void Num_3()

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, LOW);

digitalWrite(f, LOW);

digitalWrite(g, HIGH);

digitalWrite(dp,LOW);

}

void Num_4()

{

digitalWrite(a, LOW);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, LOW);

digitalWrite(e, LOW);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

digitalWrite(dp,LOW);

}

void Num_5()

{

digitalWrite(a, HIGH);

digitalWrite(b, LOW);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, LOW);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

digitalWrite(dp,LOW);

}

void Num_6()

{

digitalWrite(a, HIGH);

digitalWrite(b, LOW);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, HIGH);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

digitalWrite(dp,LOW);

}

void Num_7()

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, LOW);

digitalWrite(e, LOW);

digitalWrite(f, LOW);

digitalWrite(g, LOW);

digitalWrite(dp,LOW);

}

void Num_8()

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, HIGH);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

digitalWrite(dp,LOW);

}

void Num_9()

{

digitalWrite(a, HIGH);

digitalWrite(b, HIGH);

digitalWrite(c, HIGH);

digitalWrite(d, HIGH);

digitalWrite(e, LOW);

digitalWrite(f, HIGH);

digitalWrite(g, HIGH);

digitalWrite(dp,LOW);

}

void Clear() // Удаление отображённого числа с индикатора

{

digitalWrite(a, LOW);

digitalWrite(b, LOW);

digitalWrite(c, LOW);

digitalWrite(d, LOW);

digitalWrite(e, LOW);

digitalWrite(f, LOW);

digitalWrite(g, LOW);

digitalWrite(dp,LOW);

}

void pickNumber(unsigned char n)// выбор числа

{

switch(n)

{

case 0:Num_0();

break;

case 1:Num_1();

break;

case 2:Num_2();

break;

case 3:Num_3();

break;

case 4:Num_4();

break;

case 5:Num_5();

break;

case 6:Num_6();

break;

case 7:Num_7();

break;

case 8:Num_8();

break;

case 9:Num_9();

break;

default:Clear();

break;

}

}

void Display(unsigned char x, unsigned char Number) // задание x в качестве

// координаты и отображение числа

{

WeiXuan(x);

pickNumber(Number);

delay(1);

Clear() ; // Удаление отображённого числа с индикатора

}

//////////////////////////////////////////////////////////

Результат выполнения

            После загрузки приведённого выше кода в плату контроллера на индикаторах должны отобразиться числа 1 2 3 4. Если какая-либо часть отображается неверно, проверьте правильность подключения компонентов.