Решил добавить в основную программу на ATMEGA16 и отображением информации на LCD еще и управление 4-х разрядным индикатором через 2 регистра сдвига 74HC595 (Есть у меня заводская плата). Для проверки нашел в интернете небольшую тестовую програмку:
PHP код:
|
#define SH_CP PORTC.5
#define ST_CP PORTC.6
#define DS PORTC.7
unsigned char led_table[10]={0b00000011,0b10011111,0b00100101,0b00001101,0b10 011001,0b01001001,0b01000001,0b00011111,0b00000001 ,0b00001001};
unsigned long show_data=1234; //Отображаемая цифра
unsigned long dig_data=0;
unsigned char dig_number=0; //Отображаемый разряд
void show_dig() {
unsigned char data[2];
unsigned char i;
ST_CP=0;
if (dig_number==0) dig_data=show_data; //Если показываем первую цифру обнавляем переменную
data[0]=dig_data%10; //Получаем разряд
dig_data/=10;
data[0]=led_table[data[0]]; //Получаем данные для сигментов
data[1]=1‹‹dig_number;
for (i=0;i‹8;i++) {
DS=data[1]&1;
SH_CP=1;
SH_CP=0;
data[1]››=1;
}
for (i=0;i‹8;i++) {
DS=data[0]&1;
SH_CP=1;
SH_CP=0;
data[0]››=1;
}
dig_number++;
if (dig_number›3) dig_number=0;
ST_CP=1;
}
|
и добавил ее в основную программу.
Запускаю функцию в непрерывном цикле. Все работает, только цифры отображаются не одновременно, а поочередно. Ставил максимальную частоту (16MHz), тогда все цифры мигают. Можно ли сделать, что бы цифры на LED высвечивались постоянно, и изменялись только со сменой информации? Если да, то как? В программировании я не очень силен.