Показать сообщение отдельно
Старый 19.05.2013, 17:04   #3 (permalink)
mish_k98
Member
 
Аватар для mish_k98
 
Регистрация: 28.11.2010
Сообщений: 728
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 45
По умолчанию

там не дали такой информации.вот схема и прошивка.
------------------------------------------------------
SB1 будет для переключения режима мигания, а кнопка SB2 для изменения частоты мигания. Исходный код приведен ниже:


int main(void)
{
DDRD = 0xff; /* все выводы порта D сконфигурировать как выходы */
DDRC = 0x00; //выводы порта С сконфигурировать как входы

PORTC = 0xff; // установить "1" на всех выводах порта C,
// включаем подтягивающие резисторы

int i=0; //для задержек
int j=0; //для смены битов порта D
int d=20; //для изменения периода миганий
int sw=0; //для изменения режимов миганий

while (1) // Бесконечный цикл
{
if (!(PINC & (1<<PINC4))) //если логический ноль на 4 бите порта С
{
sw++; //преключить режим миганий
if(sw>4)sw=0;
}
if (!(PINC & (1<<PINC3))) //если логический ноль на 3 бите порта С
{
d+=20; //увеличить период миганий
if(d>260)d=20;
}

switch(sw)
{
case 0:
DDRD |= 1<<j;
for(i=0;i<d;i++)_delay_us(50);
DDRD &= ~(1<<j);
for(i=0;i<d;i++)_delay_us(50);
j++;
if(j>3)j=0;
break;
case 1:
DDRD |= 1<<j;
for(i=0;i<d;i++)_delay_us(50);
DDRD &= ~(1<<j);
for(i=0;i<d;i++)_delay_us(50);
j--;
if(j<0)j=3;
break;
case 2:
DDRD &= ~(1<<j);
for(i=0;i<d;i++)_delay_us(50);
DDRD |= 1<<j;
for(i=0;i<d;i++)_delay_us(50);
j++;
if(j>3)j=0;
break;
case 3:
DDRD &= ~(1<<j);
for(i=0;i<d;i++)_delay_us(50);
DDRD |= 1<<j;
for(i=0;i<d;i++)_delay_us(50);
j--;
if(j<0)j=3;
break;
case 4:
DDRD=0xff;
for(i=0;i<d;i++)_delay_us(50);
DDRD=0x00;
for(i=0;i<d;i++)_delay_us(50);
break;
}
}

}
Изображения
 
mish_k98 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070