субота, 3 січня 2015 р.

Матричний індикатор


Конструкція матричного індикатора
   Матричний індикатор служить для відображення цифр, символів і спеціальних знаків, графічних зображень в різних пристроях. Виготовляються матричні індикатори різних кольорів (червоні, сині, RGB ..), бувають із загальним анодом (катодом), формою корпусу і розмірів. У матричному дисплеї, кілька світлодіодів з'єднані разом в рядках і стовпцях утворюють матрицю (рисунок 1).
Рисунок 1 - Матричний світлодіодний індикатор 8х8
     Це зроблено, щоб звести до мінімуму кількість виводів, необхідних для керування світлодіодами. Наприклад, світлодіодна матриця розмірністю 8×8  світлодіодів містить 64 світлодіоди, для керування якими потрібно 64 порта вводу/виводу, по одному для кожного пікселя індикатора. Якщо  підключити всі аноди разом в рядах (R1-R8), і катоди в стовпчиках (C1-C8), необхідна кількість портів вводу/виводу зменшується до 16. Кожен світлодіод, адресується номером рядка і стовпчика. Це як в грі "морський бій", наприклад, для того щоб засвітився світлодіод обведений на рисунку 1 необхідно подати "+" на рядок R6 та "-" на стовпчик С3.   На малюнку нижче, якщо R4 витягнув високим і С3 на низький рівень, LED в четвертому ряду і третьому стовпці буде включений. Довільне зображення, що формується пікселями індикатора може бути отримане методом швидкого сканування рядків або стовпців. Розглянемо для прикладу формування зображення методом сканування рядків на матриці 5х5. В цьому випадку сканування здійснюється по рядкам R1-R5 (номери стрічок) на які почергово подається логічна одиниця з високою частотою (>100 Гц). Код для кожної стрічки подається на стовпчики C1-C5, зверніть увагу, що код інверсний бо в стовпчики матриці з'єднанні катоди світлодіодів. На рисунку 2 зображено формування зображення цифри "3" на індикаторі, це зображення можна умовно поділити на стрічки в яким відповідає певний код чергування цих стрічок на високій частоті утворює суцільне зображення на індикаторі.
Рисунок 2 - Формування зображення на індикаторі 5х5
   В динаміці зміну станів індикатора наведено на діаграмах на рисунку нижче, як бачимо використовуючи динамічну індикацію на матричний дисплей можна вивести будь-яку конфігурацію пікселів та відображати різноманітні символи.

Рисунок 3 - Формування зображення цифри "3" на світлодіодній матриці 5х5 в динаміці
   Приступимо до написання програми, використаємо для нашої цілі мікроконтролер Atmega8 та компылятор CodeVisionAVR, спочатку як завжди підключимо необхідні бібліотеки та об'явимо змінні.     

#include <mega8.h>
#include <delay.h>

// Declare your global variables here
unsigned int v = 5;          //змінна яка виводиться на дисплей 
unsigned short k[]  = {0b00001,0b00010,0b00100,0b01000,0b10000};// номери стрічок
unsigned short i3[10][5] = {                                    // стрічки
        {0b1110000,0b1110110,0b1110110,0b1110110,0b1110000}, //0
        {0b1111101,0b1111001,0b1110101,0b1111101,0b1111101}, //1
        {0b1110000,0b1111110,0b1110000,0b1110111,0b1110000}, //2
        {0b1110000,0b1111110,0b1111000,0b1111110,0b1110000}, //3
        {0b1110110,0b1110110,0b1110000,0b1111110,0b1111110}, //4
        {0b1110000,0b1110111,0b1110000,0b1111110,0b1110000}  //5
};






void b(void)
{
        int c=0;
        while(c<5)                      
        {       PORTB=0xff;          //погасимо стрічку
                PORTD=k[c];          //вибір стовбця (правильніше номера стрічки)                PORTB=i3[v][c];      // вибір числа з масиву
                c++;                            
                delay_ms(3);          //затримка
        }
}





void main(void)
{     // Ініціалізація
// Port B initialization
DDRB=0x1F;

// Port C initialization
PORTC=0x00;
DDRC=0x00;

// Port D initialization
PORTD=0x00;
DDRD=0x1F;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
    // Основна програма
while (1)
      {
       b();
      }
}













Немає коментарів :

Дописати коментар