Вот написал таки я программу для вывода символа на индикатор... Но ! Когда я перебираю строки матрицы, выставляя данные на столбцы, то все нормально, а когда наоборот... То получается такая ерунда: Когда выставлена минимальная задержка, то на индикаторе скажим так ничего не отображается, а когда большая, то отображается таже буква, только медленно соответственно. Как решить данную проблему ? Вразумите, чем эти переборы строк отличаются от перебора столбцов ?
Ниже текст программы, во вложенияи исходник и модель в Протеусе, а также проект целиком на ATMEL STUDIO 6.2.
CODE
#include <avr/io.h>
#include <util/delay.h>
unsigned char k;
//unsigned char arr[7]={0x07, 0x09, 0x11, 0x1F, 0x11, 0x11, 0x11}; //A перебераем строки, выставля данные на столбцы.
//unsigned char arr[5]={0x60, 0x5F, 0x3F, 0x3F, 0x00};//A перебераем столбцы, выставля данные на строки.
unsigned char arr[5]={0x60, 0x57, 0x37, 0x37, 0x00};//A перебераем столбцы, выставля данные на строки.
int main(void)
{
PORTA=0xFF;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0xFF;
while (1)
{
/*for(k=0;k<=6;k++) //Перебераем строки Данные выставляем на столбцы.
{ //PORTB=0x00;
PORTA=arr[k];
//PORTB=0xFF;
PORTB&=~(1<<k);
_delay_ms(1);
PORTB=0xFF;
}*/
for(k=0;k<=4;k++) //Перебераем столбцы Данные выставляем на строки.
{ //PORTB=0x00;
PORTB=0xFF;
PORTA=arr[k];
PORTB&=~(1<<k);
PORTB=~PORTB;
//_delay_ms(100);
//PORTB=0xFF;
_delay_ms(1000); //При такой задержке более или менее адекватно выводится символ.
}
}
}
#include <util/delay.h>
unsigned char k;
//unsigned char arr[7]={0x07, 0x09, 0x11, 0x1F, 0x11, 0x11, 0x11}; //A перебераем строки, выставля данные на столбцы.
//unsigned char arr[5]={0x60, 0x5F, 0x3F, 0x3F, 0x00};//A перебераем столбцы, выставля данные на строки.
unsigned char arr[5]={0x60, 0x57, 0x37, 0x37, 0x00};//A перебераем столбцы, выставля данные на строки.
int main(void)
{
PORTA=0xFF;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0xFF;
while (1)
{
/*for(k=0;k<=6;k++) //Перебераем строки Данные выставляем на столбцы.
{ //PORTB=0x00;
PORTA=arr[k];
//PORTB=0xFF;
PORTB&=~(1<<k);
_delay_ms(1);
PORTB=0xFF;
}*/
for(k=0;k<=4;k++) //Перебераем столбцы Данные выставляем на строки.
{ //PORTB=0x00;
PORTB=0xFF;
PORTA=arr[k];
PORTB&=~(1<<k);
PORTB=~PORTB;
//_delay_ms(100);
//PORTB=0xFF;
_delay_ms(1000); //При такой задержке более или менее адекватно выводится символ.
}
}
}