Sor-oszlop szkennelés egy 8x8-as LED-mátrix vezérléséhez.
Utolsó felülvizsgálat: 2022.02.04 16:50
A LED-kijelzőket gyakran LED-mátrixokba csomagolják, amelyek közös anódok soraiban és közös katódok oszlopaiban vannak elrendezve, vagy fordítva. Íme egy tipikus példa, és annak vázlata:
Ezek nagyon hasznos kijelzők lehetnek. A mátrix vezérléséhez a sorait és az oszlopait is a mikrokontrollerhez kell csatlakoztatnia. Az oszlopok a LED-ek katódjaihoz vannak csatlakoztatva (lásd az 1. ábrát), ezért az oszlopnak LOW-nak kell lennie ahhoz, hogy az oszlopban lévő LED-ek bármelyike bekapcsoljon. A sorok a LED-ek anódjaihoz vannak csatlakoztatva, így a sornak MAGASnak kell lennie ahhoz, hogy az egyes LED-ek bekapcsoljanak. Ha a sor és az oszlop egyaránt magas vagy mindkettő alacsony, a LED-en nem folyik át áram, és nem kapcsol be.
Az egyes LED-ek vezérléséhez az oszlopát LOW-ra, a sorát pedig HIGH-ra kell állítani. Ha egy sorban több LED-et szeretne vezérelni, állítsa be a sort HIGH, majd emelje az oszlopot magasra, majd állítsa be az oszlopokat LOW vagy HIGH megfelelően; a LOW oszlop bekapcsolja a megfelelő LED-et, a HIGH oszlop pedig kikapcsolja.
Tipp – A PinMode paranccsal OUTPUT értékre beállított tűk LOW értékre vannak állítva, ha nincs másképp megadva.
Bár léteznek előre elkészített LED-mátrixok, 64 LED-ből is elkészítheti saját mátrixát a fenti kapcsolási rajz segítségével.
Nem mindegy, hogy a mikrokontroller melyik kivezetésére kötöd a sorokat, oszlopokat, mert szoftveresen lehet hozzárendelni a dolgokat. A csapokat úgy csatlakoztassa, hogy a vezetékezés a legegyszerűbb legyen. Az alábbiakban egy tipikus elrendezés látható.
Íme a kivezetések csatlakozásainak mátrixa a fenti diagram alapján:
Mátrix kivezetés száma | Sor | Oszlop | Arduino kivezetés száma |
1 | 5 | - | 13 |
2 | 7 | - | 12 |
3 | - | 2 | 11 |
4 | - | 3 | 10 |
5 | 8 | - | 16 (analóg 2) |
6 | - | 5 | 17 (analóg 3) |
7 | 6 | - | 18 (analóg 4) |
8 | 3 | - | 19 (analóg 5) |
9 | 1 | - | 2 |
10 | - | 4 | 3 |
11 | - | 6 | 4 |
12 | 4 | - | 5 |
13 | - | 1 | 6 |
14 | 2 | - | 7 |
15 | - | 7 | 8 |
16 | - | 8 | 9 |
Hardver szükséglet
Arduino kártya
8 x 8 LED mátrix
2 10kohm-os potenciométer
összekötő vezetékek
dugdosós próbapanel (breadboard)
Az áramkör
A mátrix 16 kivezetése az Arduino tábla 16 kivezetéséhez van csatlakoztatva. Az analóg érintkezők közül négy digitális bemenetként szolgál a 16-19. A kivezetések sorrendje két tömbben van hozzárendelve a kódban.
Két, a 0 és 1 analóg kivezetéshez csatlakoztatott potenciométer szabályozza a világító LED mozgását a mátrixban.

Vázlat

A kód
/*
Row-Column Scanning an 8x8 LED matrix with X-Y input
Ez a példa egy 8x8 LED-es mátrixot vezérel két analóg bemenet használatával.
Ez a példa a Lumex LDM-24488NI mátrixra vonatkozik. Lásd
https://sigma.octopart.com/140413/datasheet/Lumex-LDM-24488NI.pdf
a kivezetések csatlakoztatásához.
Más LED-katódos oszlopmátrixok esetén csak a row[] és column[] tömbök kivezetés-számait kell megváltoztatnia.
sorok az anódok
oszlopok a katódok
---------
Kivezetés-számok:
Matrix:
- digitális kivezetések 2 - 13,
- analóg kivezetések 2 - 5 digitálisként használhatók, 16 - 19
Potenciométerek:
- a középső csatlakozó az analóg 0 és 1-re csatlakoztatva
- a szélső csatlakozók a +5V-ra és a földre csatlakoztatva
created 27 May 2009
modified 30 Aug 2011
by Tom Igoe
Ez a kód nyilvános.
https://docs.arduino.cc/built-in-examples/display/RowColumnScanning
*/
// A sorok kivezetés-számainak kétdimenziós tömbje:
const int row[8] = {
2, 7, 19, 5, 13, 18, 12, 16
};
// Az oszlopok kivezetés-számainak kétdimenziós tömbje:
const int col[8] = {
6, 11, 10, 3, 17, 4, 8, 9
};
// a pixelek kétdimenziós tömbje:
int pixels[8][8];
// kurzor pozíciója:
int x = 5;
int y = 5;
void setup() {
// inicializálja az I/O kivetetéseket, ahogy a kimenetek a kivezetések között ismétlődnek:
for (int thisPin = 0; thisPin < 8; thisPin++) {
// inicializálja a kimeneti kivezetéseket:
pinMode(col[thisPin], OUTPUT);
pinMode(row[thisPin], OUTPUT);
// emelje magasra a col kivezetéseket (azaz a katódokat), hogy biztosítsa a LED-ek kikapcsolását:
digitalWrite(col[thisPin], HIGH);
}
// inicializálja a pixel mátrixot:
for (int x = 0; x < 8; x++) {
for (int y = 0; y < 8; y++) {
pixels[x][y] = HIGH;
}
}
}
void loop() {
// bemenet olvasása:
readSensors();
// rajzold meg a képernyőt:
refreshScreen();
}
void readSensors() {
// az utolsó pozíció kikapcsolása:
pixels[x][y] = HIGH;
// olvassa le az X és Y értékek érzékelőit:
x = 7 - map(analogRead(A0), 0, 1023, 0, 7);
y = map(analogRead(A1), 0, 1023, 0, 7);
// állítsa az új pixelpozíciót alacsonyra, hogy a LED a következő
// képernyőfrissítéskor bekapcsoljon:
pixels[x][y] = LOW;
}
void refreshScreen() {
// iteráld a sorokat (anódok):
for (int thisRow = 0; thisRow < 8; thisRow++) {
// vedd magasra a sor kivezetéseket (anódot):
digitalWrite(row[thisRow], HIGH);
// iteráld az oszlopokat (katódok):
for (int thisCol = 0; thisCol < 8; thisCol++) {
// lekérni az aktuális pixel állapotát;
int thisPixel = pixels[thisRow][thisCol];
// Ha a sor HIGH és a col LOW, a LED, ahol találkoznak,
// felgyullad:
digitalWrite(col[thisCol], thisPixel);
// kapcsold ki a pixelt:
if (thisPixel == LOW) {
digitalWrite(col[thisCol], HIGH);
}
}
// húzza le a sor kivezetéseket az egész sor kikapcsolásához:
digitalWrite(row[thisRow], LOW);
}
}
Tudj meg többet
További alapvető oktatóanyagokat a beépített példák részben talál.
Felfedezheti a nyelvi referenciát is, az Arduino programozási nyelv részletes gyűjteményét.