Проект 16: 8x8 LED матрица

Описание

8*8 LED точечная матрица состоит из 8 строк и 8 столбцов светодиодов, всего 64 светодиода. Каждый из них можно независимо управлять, включая или выключая, тем самым формируя различные узоры и символы.

В этом проекте вы научитесь программировать на плате разработки UNO R3 (ch340) для управления 8×8 LED матрицей, отображая узоры большого и маленького сердца.

Аппаратное обеспечение

1. Плата разработки UNO R3 (ch340) x 1

2. 8*8 LED матрица x 1

3. Макетная плата x 1

4. Соединительные провода

Принцип работы

Внешний вид точечной матрицы показан ниже

IMG_256

8*8 точечная матрица состоит из шестидесяти четырех светодиодов, каждый из которых расположен на пересечении строки и столбца.

Когда электрический уровень определенной строки равен 1, а электрический уровень определенного столбца равен 0, соответствующий светодиод загорается. Если вы хотите включить светодиод в первой точке, нужно установить пин 9 в высокий уровень, а пин 13 в низкий уровень.

Если вы хотите включить светодиоды в первой строке, установите пин 9 в высокий уровень, а пины 13, 3, 4, 10, 6, 11, 15 и 16 — в низкий уровень.

Если вы хотите включить светодиоды в первом столбце, установите пин 13 в низкий уровень, а пины 9, 14, 8, 12, 1, 7, 2 и 5 — в высокий уровень.

Внутренний вид точечной матрицы показан ниже

Если у нас есть 8x8 точечная матрица, как определить, где пин 1? В микросхемах возле пина 1 обычно есть точка, обозначающая этот пин. Но здесь, как узнать?

IMG_256

Пины начинаются со стороны ручки

На модуле LED матрицы производитель указывает метку или отметку со стороны пина 1, как показано на рисунке. Мы обязательно её найдём. Также возле пина 1 есть выемка.

IMG_257

Подключение батареи

Строка = + положительное питание

Столбец = - отрицательное питание

Для тестирования требуется источник питания 1.5 В постоянного тока. Достаточно одной батарейки или можно использовать резистор 130 Ом последовательно с положительной или отрицательной стороной.

IMG_258

Тестирование LED матрицы с батарейкой

После подключения светодиода к источнику питания мы видим, что светодиод в 8-м столбце и 5-й строке загорается, как показано на рисунке. Как подключить батарейку к матрице.

IMG_259

Подключение пинов столбцов и строк

Тест пинов LED точечной матрицы

Как показано на рисунке, пины 1 и 16 подают питание, и светодиод в 8-м столбце и 5-й строке загорается. Перед использованием матрицу следует проверить, так как если какой-либо светодиод неисправен, его можно заменить.

IMG_260

Светодиодная матрица загорается

Если вы хотите отобразить улыбающееся лицо, вот что нужно сделать:

IMG_256

Схема подключения

IMG_256

Строки 1–8 > цифровые пины D2–D9

Столбцы 1–8 > цифровые пины D10–D17

Img

Пример кода

/*

Electronics Learning Starter Kit for Arduino

Project 16

8x8 LED Matrix

Edit By Keyes

*/

// 2-dimensional array of row pin numbers:

int R[] = {2,7,A5,5,13,A4,12,A2};

// 2-dimensional array of column pin numbers:

int C[] = {6,11,10,3,A3,4,8,9};

unsigned char biglove[8][8] = //the big "heart"

{

0,0,0,0,0,0,0,0,

0,1,1,0,0,1,1,0,

1,1,1,1,1,1,1,1,

1,1,1,1,1,1,1,1,

1,1,1,1,1,1,1,1,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0,

0,0,0,1,1,0,0,0,

};

unsigned char smalllove[8][8] = //the small "heart"

{

0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,

0,0,1,0,0,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0,

0,0,0,1,1,0,0,0,

0,0,0,0,0,0,0,0,

};

void setup()

{

// iterate over the pins:

for(int i = 0;i<8;i++)

// initialize the output pins:

{

pinMode(R[i],OUTPUT);

pinMode(C[i],OUTPUT);

}

}

void loop()

{

for(int i = 0 ; i < 100 ; i++) //Loop display 100 times

{

Display(biglove); //Display the "Big Heart"

}

for(int i = 0 ; i < 50 ; i++) //Loop display 50 times

{

Display(smalllove); //Display the "small Heart"

}

}

void Display(unsigned char dat[8][8])

{

for(int c = 0; c<8;c++)

{

digitalWrite(C[c],LOW);//use thr column

//loop

for(int r = 0;r<8;r++)

{

digitalWrite(R[r],dat[r][c]);

}

delay(1);

Clear(); //Remove empty display light

}

}

void Clear() //clear the display

{

for(int i = 0;i<8;i++)

{

digitalWrite(R[i],LOW);

digitalWrite(C[i],HIGH);

}

}

Объяснение кода

1. Конфигурация пинов

Сначала нужно настроить пины строк и столбцов:

// 2-dimensional array of row pin numbers:

int R[] = {2, 7, A5, 5, 13, A4, 12, A2};

// 2-dimensional array of column pin numbers:

int C[] = {6, 11, 10, 3, A3, 4, 8, 9};

В коде определены два массива R[] и C[], которые представляют номера пинов для строк и столбцов LED матрицы соответственно. Каждый из массивов содержит 8 пинов, используемых для управления 8x8 LED матрицей.

2. Определение узоров

Далее определены два двумерных массива biglove и smalllove, которые представляют узоры большого и маленького сердца:

unsigned char biglove[8][8] = {

0,0,0,0,0,0,0,0,

0,1,1,0,0,1,1,0,

1,1,1,1,1,1,1,1,

1,1,1,1,1,1,1,1,

1,1,1,1,1,1,1,1,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0,

0,0,0,1,1,0,0,0,

};

unsigned char smalllove[8][8] = {

0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,

0,0,1,0,0,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0,

0,0,0,1,1,0,0,0,

0,0,0,0,0,0,0,0,

};

В этих массивах 1 означает, что светодиод включен, а 0 — что светодиод выключен. С помощью этих массивов можно управлять светодиодами на матрице для формирования узоров в виде сердца.

3. Настройка инициализации

В функции setup() все пины инициализируются как выходы:

void setup() {

for (int i = 0; i < 8; i++) {

pinMode(R[i], OUTPUT);

pinMode(C[i], OUTPUT);

}

}

4. Основной цикл

В функции loop() происходит последовательное отображение узоров большого и маленького сердца:

void loop() {

for (int i = 0; i < 100; i++) {

Display(biglove);

}

for (int i = 0; i < 50; i++) {

Display(smalllove);

}

}

С помощью циклов for узор большого сердца отображается 100 раз, а маленького — 50 раз.

5. Функция отображения

Функция Display(unsigned char dat[8][8]) отвечает за конкретные операции отображения:

void Display(unsigned char dat[8][8]) {

for (int c = 0; c < 8; c++) {

digitalWrite(C[c], LOW);

for (int r = 0; r < 8; r++) {

digitalWrite(R[r], dat[r][c]);

}

delay(1);

Clear();

}

}

Эта функция последовательно сканирует каждый столбец, используя dat[r][c] для определения, должен ли светодиод быть включен или выключен. Затем вызывается функция Clear(), чтобы очистить дисплей и предотвратить эффект “призрака”.

6. Функция очистки дисплея

Функция Clear() используется для очистки текущего содержимого дисплея:

void Clear() {

for (int i = 0; i < 8; i++) {

digitalWrite(R[i], LOW);

digitalWrite(C[i], HIGH);

}

}

Все пины строк устанавливаются в низкий уровень, а пины столбцов — в высокий, что выключает все светодиоды.

Результат проекта

После загрузки кода на плату Arduino LED матрица чётко отображает узоры большого и маленького сердца. При переключении узоров заметно изменение свечения, что делает эффект очень наглядным.

P16