Пт дек 17, 2010 12:58:14
х++: if(x== ) x=0;
switch (x)
{
case __: тут зажигаешь первый режим светофора
break;
.
. тут по очереди зажигаешь остальные режимы светофора
.
.
case __: тут зажигаешь последний режим светофора
break;
}
Пт дек 17, 2010 13:23:53
if (PIND.3==1) {
delay_ms(10);
if (PIND.3==1) {
while(PIND.3==1) {}; // ожидание отпускания кнопки
sw2=sw2+1;
delay_ms(15);
}
}
Пт дек 17, 2010 16:45:29
Пт дек 17, 2010 18:11:25
Пт дек 17, 2010 18:27:07
Да мне как раз высокий надо... Так уже схема спаяна.leowka писал(а):Внешний резистор не нужен, используйте внутренний. Соответственно вам считать нужно не высокий уровень и низкий if (PIND.3==0)
Пт дек 17, 2010 18:47:22
Пт дек 17, 2010 18:59:46
Сб дек 18, 2010 01:43:13
int a, b, per=0;
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
a++; // Увеличиваем а на 1 при каждом прерывании
}
void main(void)
{
PORTA=0x00; DDRA=0x07;
PORTB=0x00; DDRB=0x00;
PORTC=0x00; DDRC=0x07;
PORTD=0x00; DDRD=0x07;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Используем таймер 1, т.к таймера 0 не хватает, коэффициет больше 256
TCCR1A=0x00; //
TCCR1B=0x0C; // Режим СТС, делитель 256
TCNT1H=0x00; //
TCNT1L=0x00; //
ICR1H=0x00; //
ICR1L=0x00; //
OCR1AH=0x7A; // Ждем пока наберется 31250
OCR1AL=0x12; //
OCR1BH=0x00; //
OCR1BL=0x00; //
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x10;
ACSR=0x80;
SFIOR=0x00;
#asm("sei") // Разрешаем прерывания
while (1)
{
if (PINA.3==1){ // Включаем программу
delay_ms(100); // Антидребезг
TCNT1H=0; //
TCNT1L=0; // Обнуляем таймер
a=0; // Обнуляем комбинацию включенных светодиодов
per=1; //
}
if (PINA.4==1){ // Выключаем программу
delay_ms(100); // Антидребезг
PORTA=0b00000000; //
PORTD=0b00000000; // Гасим все светодиоды
PORTC=0b00000000; //
per=0; //
}
if (per==1){ // Проверяем, можно-ли запуститься
if (a==0){ // (0 секунда)
PORTA=0b00000100; // Зеленый
PORTD=0b00000100; // Зеленый
PORTC=0b00000001; // Красный
}
if (a==5){ // Ждем 5 секунд (5 секунда)
for(b=0; b<=4; b++){ // Мигаем зеленым
delay_ms(500); //
PORTA=0b00000100; // Зеленый вкл.
PORTD=0b00000100; // Зеленый вкл.
delay_ms(500); //
PORTA=0; // Зеленый выкл.
PORTD=0; // Зеленый выкл.
}
}
if (a==10 || a==25){ // Ждем 5 секунд (10 секунда, 25 секунда)
PORTA=0b00000010; // Желтый
PORTD=0b00000010; // Желтый
PORTC=0b00000010; // Желтый
}
if (a==15){ // Ждем 5 секунд (15 секунда)
PORTA=0b00000001; // Красный
PORTD=0b00000001; // Красный
PORTC=0b00000100; // Зеленый
}
if (a==20){ // Ждем 5 секунд (20 секунда)
for(b=0; b<=4; b++){ // Мигаем зеленым 5 секунд
delay_ms(500); //
PORTC=0b00000100; // Зеленый вкл
delay_ms(500); //
PORTC=0; // Зеленый выкл.
}
}
if (a>=30){ // Ждем 5 секунд (30 секунда)
a=0; // Обнуляем комбинацию включенных светодиодов
}
}
}
};
Сб дек 18, 2010 03:07:22
switch (a)
{
case 0: PORTA=0b00000xxx; break;
case __: PORTA=0b00000xxx; break;
case __: PORTA=0b00000xxx; break;
case (__ || __): PORTA=0b00000xxx; break;
case (__ || __ || __ || __.....): PORTA=0b00000xxx; break;
case __: а=0;
}
Сб дек 18, 2010 03:14:11
Сб дек 18, 2010 03:28:58
Сб дек 18, 2010 03:41:59
while (1)
{
if (PINA.3==1){ // Включаем программу
delay_ms(100); // Антидребезг
TCNT1H=0; //
TCNT1L=0; // Обнуляем таймер
a=0; // Обнуляем комбинацию включенных светодиодов
per=1; //
}
if (PINA.4==1){ // Выключаем программу
delay_ms(100); // Антидребезг
PORTA=0b00000000; //
PORTD=0b00000000; // Гасим все светодиоды
PORTC=0b00000000; //
per=0; //
}
if(per==1){
switch (a)
{
case 0: PORTA=0b00000100; PORTC=0b00000001; PORTD=0b00000100; break;
case 5:
for(b=0; b<=4; b++){ // Мигаем зеленым
delay_ms(500); //
PORTA=0b00000100; // Зеленый вкл.
PORTD=0b00000100; // Зеленый вкл.
delay_ms(500); //
PORTA=0; // Зеленый выкл.
PORTD=0; // Зеленый выкл.
} break;
case 10:
case 25: PORTA=0b00000010; PORTC=0b00000010; PORTD=0b00000010; break;
case 15: PORTA=0b00000001; PORTC=0b00000100; PORTD=0b00000001; break;
case 20:
for(b=0; b<=4; b++){ // Мигаем зеленым
delay_ms(500); //
PORTC=0b00000100; // Зеленый вкл.
delay_ms(500); //
PORTC=0; // Зеленый выкл.
} break;
case 30: a=0;
}
}
}
};
Сб дек 18, 2010 12:09:06
Сб дек 18, 2010 16:04:08
PORTA=0b00000100; PORTC=0b00000001; PORTD=0b00000100;
PORTA=0b00000010; PORTC=0b00000010; PORTD=0b00000010;
PORTA=0b00000001; PORTC=0b00000100; PORTD=0b00000001;
PORTA=0b00000010; PORTC=0b00000010; PORTD=0b00000010;
a=0;
Сб дек 18, 2010 17:52:06
switch (a)
{
case 0: 2 зелёных и один красный вкл; break;
case (10||12||14||16||18): Зелёные вкл, красный вкл; break;
case (11||13||15||17||19): Зелёные выкл; break;
case 20: Красный и зелёный выкл, 3 жёлтых вкл; break;
case 30: Жёлтые выкл, 2 красных и один зелёный вкл. break;
case (40||42||44||46||48): Зелёный , 2 красных вкл. break;
case (41||43||45||47||49): Зелёный выкл break;
case 50: Красный и зелёный выкл, 3 жёлтых вкл; break;
case 60: а=0; break;
}
Сб дек 18, 2010 17:58:33
case (40||42||44||46||48):
Сб дек 18, 2010 18:57:34
Сб дек 18, 2010 19:23:32
switch (a)
{ // PORTA=0b0ygrgrgr
case 0: PORTA=0b00101001; break;
case 10: case 14: case 18: PORTA=0b00000001; break;
case 12: case 16: PORTA=0b00101001; break;
case 20: PORTA=0b01000000; break;
case 30: PORTA=0b00100101; break;
case 40: case 44: case 48: PORTA=0b00000101; break;
case 42: case 46: PORTA=0b00100100; break;
case 50: PORTA=0b01000000; break;
case 60: a=0;
}
Вс дек 19, 2010 01:59:48
if (PINA.3==1) TCNT1H=0; TCNT1L=0; a=0; #asm("sei")
if (PINA.4==1) #asm("cli")
case 10: case 14: case 18:
Вс дек 19, 2010 02:04:22