Материал просмотрен 807 раз(а)

Может возникнуть необходимость отображать определенную информацию на цифровом дисплее. Для этого с головой хватит 8-секционного дисплея, циферный арсенал которого напоминает символы карманного калькулятора или написание почтовых индексов.

Одна цифра

Одна цифра

Теперь будем программировать каждую цифру отдельно. Например, чтобы отобразить восьмёрку, нужно зажечь все диоды, кроме h (точки). Для двойки – кроме f, c, h и так далее.

Дисплей имеет 10 выводов, 5 сверху и 5 снизу. Средний в каждой пятёрке является общим, остальные выводы сигнальные. К слову сказать, такие дисплеи бывают разные, с общим катодом или общим анодом. Разница в подключении. С общим катодом, на общие выводы подаётся “-“, а на сигнальные “+”, с общим анодом – наоборот.

7led

А вот общая схема. Но нужно быть внимательным и проверять. У меня похоже, попался бракованный дисплей и некоторые контакты перепутаны. Но я составил верную матрицу (см.далее).

7seg

 

Что нам потребуется

  1. 7-секционный дисплей;
  2. Arduino UNO;
  3. 2 резистора на 10 кОм;
  4. 2 резистора на 220 Ом;
  5. 2 кнопки;
  6. Соединительные провода;
  7. Макетная плата;

(эти и многие другие компоненты можно получив заказав один раз набор Arduino, в который входит огромное количество различных датчиков и элементов)

Что куда подключается

  • Со стороны питания +5 В идёт на общий плюс;
  • Со стороны цифровых GND на общий минус;
  • Пин 11 на 5 вывод дисплея;
  • Пин 10 на 10 вывод дисплея;
  • Пин 9 на 9 вывод дисплея;
  • Пин 8 на 2 вывод дисплея;
  • Пин 7 на 1 вывод дисплея;
  • Пин 6 на 4 вывод дисплея;
  • Пин 5 на 6 вывод дисплея;
  • Пин 4 на 7 вывод дисплея;
  • 3 и 8 выводы дисплея идут через резисторы 220 Ом на общий плюс;
  • Установлены две кнопки, на вход каждой подаётся общий плюс;
  • Выход первой кнопки идёт на Пин 3 (вход);
  • Выход второй кнопки идёт на Пин 2 (вход);
  • Так же выходы каждой кнопки через резисторы 10 кОм подключены к общему минусу;

Общий вид

PLAn1

И ещё один вид:

PLAN2

Исходный код

const int e=4;
const int d=5;
const int f=6;
const int g=7;
const int b=8;
const int a=9;
const int c=10;
const int h=11;
const int arr[10][7] = { { 0,0,0,0,0,0,1 },
{ 1,0,0,1,1,1,1 },
{ 0,0,1,0,0,1,0 },
{ 0,0,0,0,1,1,0 },
{ 1,0,0,1,1,0,0 },
{ 0,1,0,0,1,0,0 },
{ 0,1,0,0,0,0,0 },
{ 0,0,0,1,1,1,1 },
{ 0,0,0,0,0,0,0 },
{ 0,0,0,1,1,0,0 }};
const int startPin=4;
const int endPin=11;
int curNum = 0;
int decNum = 0;
int incNum = 0;
void setup()
{
int i;//define variable
for(i=4;i<=11;i++){
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);}
pinMode(2,INPUT);
pinMode(3,INPUT);
Serial.begin(9600);
}
void dig(int number)
{
int i=startPin;
for (int j=0; j<7; j++)
{
digitalWrite(i,arr[number][j]);
i++;
}
}
void loop()
{
Serial.print("CurNum: ");
Serial.println(curNum);
Serial.print("DecNum: ");
Serial.println(decNum);
Serial.print("IncNum: ");
Serial.println(incNum);
Serial.println();
decNum=digitalRead(3);
incNum=digitalRead(2);
if (decNum==HIGH)
{
curNum--;
if (curNum < 0) curNum = 9;
} else
if (incNum==HIGH)
{
curNum++;
if (curNum > 9) curNum = 0;
}
dig(curNum);
delay(200);
}

Принцип действия

В массив констант мы забили какие леды зажигать для каждой цифры. Обратите внимание, что так как у меня дисплей с общим анодом, то инициализируются все пины высоким (HIGH) напряжением, а зажигаются низким (LOW). В этом отличие от классической схемы с общим катодом.

Имеется функция (dig), которая в зависимости от числового параметра, передаваемого в неё, зажигает определённые леды таким образом, чтобы отобразить цифру, значение которой передаётся в параметре.

Например dig(3) зажжёт последовательно леды 0,0,0,0,1,1,0, то есть все, кроме f и e. И так далее.

У нас так же имеется глобальная переменная curNum, которая хранит текущее отображаемое значение.

Имеются две кнопки, которые замыкают цепь на цифровые входы. Первая кнопка замыкает цепь на вход 3, вторая – на вход 2. В цикле мы проверяем, замкнута ли какая-либо цепь. Если на цифровой вход подаётся высокое напряжение, значит нажата соответствующая кнопка и мы либо увеличиваем либо уменьшаем curNum, соответственно меняется и отображаемая цифра.

Код, разумеется, неоптимальный, есть отладочный вывод в Serial-порт. Но принцип действия дисплея и кнопки понять можно!

Видео того, что получилось

Смотрите также

Температурный датчик на Arduino