По инструкции (http://domko.ru/pdf/DFROBOT/DFR0029.pdf) всё просто...
Под WinAVR написал проверочный код - две кнопки + 2 светодиода - по нажатию определённой кнопки зажигается определённый светодиод:
- Код: Выделить всё • Развернуть
#define F_CPU 12000000UL // указываем частоту в герцах
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char StatusKey=0;
int main(void) // начало основной программы
{
// к порту B подключена кнопка, а к порту D - светодиод
DDRB = 0x00; // все выводы порта B сконфигурировать как входы
DDRD = 0xFF; // все выводы порта D сконфигурировать как выходы
PORTB &= ~_BV(PB0); // установить "0" (низкий уровень) на выводе PB0
PORTB &= ~_BV(PB1); // установить "0" (низкий уровень) на выводе PB1
PORTD &= ~_BV(PD5); // установить "0" (низкий уровень) на выводе PD5 // светодиод не горит
PORTD &= ~_BV(PD6); // установить "0" (низкий уровень) на выводе PD6 // светодиод не горит
while (1) // Начало бесконечного цикла
{
// Обработка нажатия кнопки
_delay_ms(1000); // Пауза на 0.01 сек
// Кнопка подключена к PB0. Светодиод подключен к PD5.
if((PINB = 0b11111110) && (StatusKey==0))
{
PORTD |= _BV(PD5); // установить "1" (высокий уровень) на выводе PD5
StatusKey=1;
}
else // Кнопка подключена к PB1. Светодиод подключен к PD6.
{
if((PINB = 0b11111101) && ((StatusKey==0) || (StatusKey==1)))
{
PORTD |= _BV(PD6); // установить "1" (высокий уровень) на выводе PD6
StatusKey=2;
}
else //Если ни одна кнопка не нажата
{
StatusKey=0;
return 0;
}
};
} // Конец бесконечного цикла
} // закрывающая скобка основной программы
И... в результате ничего!
Подскажите, пожалуйста, в чём ошибка?
И ещё вопрос вдогонку... "Возясь" с кнопками заметил, что на некоторых пинах МК светодиод не светится ярко, а еле-еле "тлеет"...
Попробовал с другими светодиодами - тоже самое.
А на других портах всё ок!
Что это? Сгоревшие ножки МК?
Добавлено спустя 2 часа 38 минут 7 секунд:
Упростил до одной кнопки и одного светодиода
- Код: Выделить всё • Развернуть
#define F_CPU 12000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void) // начало основной программы
{
// к порту A0 подключена кнопка, а к порту B0 - светодиод
DDRA = 0x00; // все выводы порта A сконфигурировать как входы
DDRB = 0xFF; // все выводы порта B сконфигурировать как выходы
PORTA = 0X00;
PORTB = 0X00;
while (1) // Начало цикла
{
_delay_ms(500);
if(PINA == 0x01) {PORTB = 0X01;};
}; // Конец цикла
} // Конец программы
Но, светодиод загорается не по нажанию кнопки, а после задержки...
Подскажите, пожалуйста, где ошибка в коде?