#include <tiny2313.h>
#include <delay.h>
#include <font.h>

void led(unsigned char bt) // функция для выбора и зажигания светодиодов
{
    switch(bt)
    {
        case 1:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x03; // сделать В0 и В1 выходами
            PORTB = 0x02; // сделать В0=0, а В1=1 (зажечь лед1)
            
            break;
            
        case 2:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x03; // сделать В0 и В1 выходами
            PORTB = 0x01; // сделать В0=1, а В1=0 (зажечь лед2)
            
            break;
            
        case 3:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x06; // сделать В1 и В2 выходами
            PORTB = 0x04; // сделать В1=0, а В2=1 (зажечь лед3)
            
            break;
            
        case 4:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x06; // сделать В1 и В2 выходами
            PORTB = 0x02; // сделать В1=1, а В2=0 (зажечь лед4)        
            
            break;
            
        case 5:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x0C; // сделать В2 и В3 выходами
            PORTB = 0x08; // сделать В2=0, а В3=1 (зажечь лед5)
            
            break;
            
        case 6:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x0C; // сделать В2 и В3 выходами
            PORTB = 0x04; // сделать В2=1, а В3=0 (зажечь лед6)
            
            break;
            
        case 7:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x05; // сделать В0 и В2 выходами
            PORTB = 0x04; // сделать В0=0, а В2=1 (зажечь лед7)
            
            break;
            
        case 8:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x05; // сделать В0 и В2 выходами
            PORTB = 0x01; // сделать В0=1, а В1=0 (зажечь лед8)
            
            break;
            
        case 9:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x0A; // сделать В1 и В3 выходами
            PORTB = 0x08; // сделать В1=0, а В3=1 (зажечь лед9)
            
            break;
            
        case 10:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x0A; // сделать В1 и В3 выходами
            PORTB = 0x02; // сделать В1=1, а В3=0 (зажечь лед10)
            
            break;
            
        case 11:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x09; // сделать В0 и В3 выходами
            PORTB = 0x08; // сделать В0=0, а В3=1 (зажечь лед11)
            
            break;
            
        case 12:
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            DDRB = 0x09; // сделать В0 и В3 выходами
            PORTB = 0x01; // сделать В0=1, а В3=0 (зажечь лед12)
            
            break;
            
    } // закрывающая скобка свитча
} // закрывающая скобка функции ЛЕД


unsigned char s, i, nn, bt, p; // объявляем переменные маленькие
//unsigned int tm; // объявляем переменные большие

unsigned char st [13] = {0,0,0,1,0,2,0,3,0,4,0,5,0}; // массив для вывода строки
                     //        К   Е   У   Л   Ь
void main(void) 
{
    DDRD = 0x00; // сделать все выводы порта Д входами. это для датчика Холла
    PORTD = 0xFF; // подтянуть все выводы порта Д к + 

while(!0) // Бесконечный цикл
{
            // ********  делаем эффект "слово"  ********
            
    // for (tm=1; tm<60000; tm++) // задержка для слова    
    // {
        if (PIND & (1<<PIND0)) // сихнр. по датчику Холла
        {
            for (nn=12; nn>=0; nn--) // выбор строки массива, т.е. буквы. 
            {
                for (i=6; i>=0; i--) // берем поочередно с 7 по 1 элемент строки массива из библиотеки (столбцы букв)(рисуем букву)
                {    
                    for (p=1; p<5; p++) // это чтобы буквы были шире в 4 раза... =)
                    {
                        s = 0; // для задвигания единицы в нулевую позицию, см. ниже
                     
                        for (bt=12; bt>=1; bt--) // Преребор 12 бит числа для столбца светодиода.... типа того... =)
                        {
                            if (sym[st[nn]][i] & (1 << s)) // првоеряем каждый бит числа из массива, начиная с 0-ого (справа)
                            {
                                led(bt); // если бит равен "1", то включаем светодиод с битом проверки...
                            }     
                             
                            s++; // сдвигаем единицу на один бит в лево   
                                 
                        } // все 12 светодиодов в столбце проверили и зажгли нужные поочереди (все очень быстро)
                           
                        DDRB = 0x00; // сделать все входами (погасить светодиоды все)
                        PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
                        
                    } // конец выравнивания ширины букв...   
                } // все 7 элементов в строке массива проверили (букву отрисовали)   
            } // все строки массива проверили
            
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
        }




      







/*            // ********  делаем эффект "большое кольцо"  ********
    
    for (tm=1; tm<60000; tm++) // задержка для первого эффекта
    {
        if (PIND & (1<<PIND0)) // сихнр. по датчику Холла
        {
            for (x=1; x<13; x++) // зажигаем с 1 по 12 светодиод
            {
                led(x);
            }
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
        }
        
            // ******** закончили эффект "большое кольцо"  ********
        
    } // конец задержки для первого эффекта
    
            // ********  делаем эффект "шашечки"  ********
    
    for (tm=1; tm<30000; tm++) // задержка для второго эффекта
    {
        if (PIND & (1<<PIND0)) // сихнр. по датчику Холла
        {
            for (i=1; i<400; i++) // типа паузы для первой половины светодиодов
            {
                for (x=1; x<7; x++) // зажигаем с 1 по 6 светодиод
                {
                    led(x);
                }
            }
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
        
            for (i=1; i<400; i++) // типа паузы для второй половины светодиодов
            {
                for (x=7; x<13; x++) // зажигаем с 7 по 12 светодиод
                {
                    led(x);
                }
            }
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
        }
        
            // ******** закончили эффект "шашечки"  ********
        
    } // конец задержки для второго эффекта
    
            // ********  делаем эффект "палочки"  ********
    
    for (tm=1; tm<30000; tm++) // задержка для третьего эффекта
    {
        if (PIND & (1<<PIND0)) // сихнр. по датчику Холла
        {
            for (i=1; i<100; i++) // типа паузы рисования одной палочки
            {
                for (x=1; x<13; x++) // зажигаем с 1 по 12 светодиод
                {
                    led(x);
                }
            }
            DDRB = 0x00; // сделать все входами (погасить светодиоды все)
            PORTB = 0xF0; // сделать 4 первых пина входами Z, остальные подтянуты к +
            
            for (i=1; i<20000; i++) // типа паузы между палочками
            {
            }
        }
        
            // ******** закончили эффект "палочки"  ********
        
    } // конец задержки для третьего эффекта
    
        

    
 
 // delay_ms(500);      // Пауза 600 милиСек.
 */  

 
} // скобка для while(!0) 
} // скобка для main(void)











































