Схема подключения четырехразрядного семисегментного дисплея к Arduino (ATMega168/328)
Особенность данной схемы - семисегментый дисплей подключен напрямую к микроконтроллеру
Комментарии к программе:
Если нужно выести более чем один символ, например число 1429, на дисплей то надо:
- выводим сначала число 1 в разряд 0, потом гасим разряд 0
- выодим число 4 в разряд 1, потом гасим разряд 1
- выодим число 2 в разряд 2, потом гасим разряд 2
- выодим число 9 в разряд 9, потом гасим разряд 3
И все по новой.
Разряд 0 - самый левый
разряд 3 - самый правый
Функции в программе
void HiDude() //Выводит на дисплей надпись HI dUdE
void digit9()...void digit0() выводит цифру на дисплей, НО, что бы цифру зажечь надо выбрать номер
сегмента, для этого есть функция segment(int seg).
Пример: segment(2);digit9(); //Выводим цифру 9 в сегмент 2
Также есть функция void disp(int seg0, int seg1, int seg2, int seg3)//вывод на дисплей в
опрелеленный сегмент целых чисел
Тоесть, надо вывести число 2010, вызываем disp(2,0,1,0)
Отдельно, рассмотрим функцию void digit8()
Обратите внимание, что все порты вывода в положение LOW, при этом горят ВСЕ светодиоды и у нас
получается восьмерка (ПРИ ЭТОМ ВЫВОД, ОТВЕЧАЮЩИЙ ЗА НУЖНЫЙ СЕГМЕНТ ДОЛЖЕН БЫТЬ HIGH, в
программе об этом заботиться функция segment)
void digit8()
{
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
}
Т.е. что бы потушить всё, должно быть так:
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
Переводом из HIGH в LOW зажигаем нужный сегмент. Что бы не использовать метод научного тыка,
я нарисовал картинку соответствия сегмента выводу DIGITAL Arduino:
Не забываеме при этом зажигать нужный РАЗРЯД (например 0-ой)
digitalWrite(6, HIGH);
Естественно это актуально, если Вы пишите с 0 сами. Если нет, то используйте просто
соответствующие функции:
digit8()...digit0() и segment(Целое число от 0 до 3);
void HiDude() //Вывод надписи HiDude и мигание диодами
for (int i=0; i<100; i++)
{
digitH();segment(0);
digit1();segment(1);
}
delay(100);
for (int i=0; i<100; i++)
{
digitD();segment(0);
digitU();segment(1);
digitD();segment(2);
digitE();segment(3);
}
delay(100);
}
//---------------------------------------------------------------------------------------------------
void setup() {
// initialize the digital pin as an output:
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
}
void digit9()
{
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
}
void digit8()
{
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
}
void digit7()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, HIGH); // set the LED OFF
digitalWrite(9, HIGH); // set the LED OFF
digitalWrite(8, HIGH); // set the LED OFF
digitalWrite(7, HIGH); // set the LED OFF
}
void digit6()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, HIGH); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digit5()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, HIGH); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, HIGH); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digit4()
{
digitalWrite(13, HIGH); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, HIGH); // set the LED on
digitalWrite(9, HIGH); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digit3()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, HIGH); // set the LED on
digitalWrite(8, HIGH); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digit2()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, HIGH); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, HIGH); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digit1()
{
digitalWrite(13, HIGH); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, HIGH); // set the LED on
digitalWrite(9, HIGH); // set the LED on
digitalWrite(8, HIGH); // set the LED on
digitalWrite(7, HIGH); // set the LED on
}
void digit0()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, HIGH); // set the LED on
}
void digitF()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, HIGH); // set the LED on
digitalWrite(11, HIGH); // set the LED on
digitalWrite(10, HIGH); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digitA()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, HIGH); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digitU()
{
digitalWrite(13, HIGH); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, HIGH); // set the LED on
}
void digitC()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, HIGH); // set the LED on
digitalWrite(11, HIGH); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, HIGH); // set the LED on
}
void digitB()
{
digitalWrite(13, HIGH); // set the LED on
digitalWrite(12, HIGH); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digitD()
{
digitalWrite(13, HIGH); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, HIGH); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digitE()
{
digitalWrite(13, LOW); // set the LED on
digitalWrite(12, HIGH); // set the LED on
digitalWrite(11, HIGH); // set the LED on
digitalWrite(10, LOW); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void digitH()
{
digitalWrite(13, HIGH); // set the LED on
digitalWrite(12, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on
digitalWrite(10, HIGH); // set the LED on
digitalWrite(9, LOW); // set the LED on
digitalWrite(8, LOW); // set the LED on
digitalWrite(7, LOW); // set the LED on
}
void segment (int seg) //Выбор сегмента 0 - это крайний левый 3 - крайний правый
{
if (seg==0) { digitalWrite(6, HIGH); delay (4);} // set the LED on
if (seg==1) { digitalWrite(5, HIGH); delay (3);} // set the LED on
if (seg==2) { digitalWrite(4, HIGH); delay (2);} // set the LED on
if (seg==3) { digitalWrite(3, HIGH); delay (2);} // set the LED on
digitalWrite(6, LOW); // set the LED off
digitalWrite(5, LOW); // set the LED off
digitalWrite(4, LOW); // set the LED off
digitalWrite(3, LOW); // set the LED off
}
void disp(int seg0, int seg1, int seg2, int seg3)//вывод на дисплей в опрелеленный сегмент целых чисел
//0 - сегмент это самый левый сегмент
// |----------это сегмент 0
// | |---это сегмент 3
// V V
// 8 8 8 8
{
switch (seg0)
{
case 1: digit1(); break;
case 2: digit2(); break;
case 3: digit3(); break;
case 4: digit4(); break;
case 5: digit5(); break;
case 6: digit6(); break;
case 7: digit7(); break;
case 8: digit8(); break;
case 9: digit9(); break;
case 0: digit0(); break;
} segment (0);
switch (seg1)
{
case 1: digit1(); break;
case 2: digit2(); break;
case 3: digit3(); break;
case 4: digit4(); break;
case 5: digit5(); break;
case 6: digit6(); break;
case 7: digit7(); break;
case 8: digit8(); break;
case 9: digit9(); break;
case 0: digit0(); break;
} segment (1);
switch (seg2)
{
case 1: digit1(); break;
case 2: digit2(); break;
case 3: digit3(); break;
case 4: digit4(); break;
case 5: digit5(); break;
case 6: digit6(); break;
case 7: digit7(); break;
case 8: digit8(); break;
case 9: digit9(); break;
case 0: digit0(); break;
} segment (2);
switch (seg3)
{
case 1: digit1(); break;
case 2: digit2(); break;
case 3: digit3(); break;
case 4: digit4(); break;
case 5: digit5(); break;
case 6: digit6(); break;
case 7: digit7(); break;
case 8: digit8(); break;
case 9: digit9(); break;
case 0: digit0(); break;
} segment (3);
}
//-------------------------------------------------------------------------------------------------------------------------------------
void loop()
{
HiDude();
}