|
Вернуться в начало страницы.
Небольшие примеры, как помигать светодиодом с помощью кнопки, вот тут несколько вариантов.....
Смотрим в протеусе, нажимаем на кнопку (можно кое-где и придержать её), смотрим как реагирует светодиод, ..... если интересно как это заработало, смотрим в код, вносим изменения, редактируем, комплимируем. .....
|
Code /***************************************************** Version : Кнопки и светодиоды Company : http://c2.at.ua Chip type : ATmega8 Clock frequency : 4,000000 MHz *****************************************************/ #include <mega8.h> // библиотека ввода\вывода микроконтроллера #include <delay.h> // библиотека задержки unsigned char kR, temp; // обьявляем переменные void main(void) // Declare your global variables here { PORTB=0b11111111; // Port B initialization DDRB=0b00000000; PORTC=0b01000000; // Port C initialization DDRC=0b00111111; PORTD=0b00000000; // Port D initialization DDRD=0b111111111; while(1) // бесконечный цикл { PORTD.0=~PINB.0; // =======№1 Упр. 1 порт 1 кнопка if (PINB.1==0) // ==== №2 кнопка { PORTD.1=1; delay_ms(600); PORTD.1=0; delay_ms(300); } if (PINB.2==0) // ==== №3 кнопка { PORTD ^= 1<<2; delay_ms(500); }
if (PINB.3==0) // ==== №4 кнопка { PORTD.3= 1; delay_ms(5000); PORTD.3= 0; } if (PINB.4==0 && kR!=1) // === №5 кнопка { delay_ms(10); // 10мс для "анти-дребезга" PORTD.4 = ~PORTD.4; kR = 1; // } if (PINB.5==0 && kR!=1) { delay_ms(10); // 10мс для "анти-дребезга" PORTD.5 = ~PORTD.5; kR = 1; } if (PINB.4==1 && PINB.5==1) { kR = 0; } //========== №6 МИГАЛКА while (PINB.6==0) // проверяем если кнопка нажата (замкнута), то выполняем цикл мигалки { PORTD.6=1; // зажигаем красный светодиод delay_ms(200); //ждем 100 миллисекунд PORTD.6=0; //гасим его delay_ms(200); //ждем 100 миллисекунд PORTD.6=1; //зажигаем delay_ms(200); //ждем PORTD.6=0; //гасим PORTD.7=1; //зажигаем синий светодиод delay_ms(200); //ждем PORTD.7=0; //гасим delay_ms(200); //ждем PORTD.7=1; //зажигаем delay_ms(200); //ждем PORTD.7=0; //гасим } // как только отпустим кнопку программа дойдет до конца цикла // и будет ждать пока не нажмем заново
//========== №-7 Переключаем по кольцу if (PINB.7==0){ //если кнопка нажата выполнить следующее delay_ms(100); if (PINB.7==0){ temp++; if(temp==6) { temp=0; } while (PINB.7==0); // ждем пока кнопка будет отжата } }
if (temp==0) { // если темп равен 0 вывести в порт следующее PORTC=0b00000001; delay_ms(10); } if (temp==1) { PORTC=0b00000010; delay_ms(10); } if (temp==2) { PORTC=0b00000100; delay_ms(10); } if (temp==3) { PORTC=0b00001000; delay_ms(10); } if (temp==4) { PORTC=0b00010000; delay_ms(10); } if (temp==5) { PORTC=0b00100000; delay_ms(10); } }; // закрываем бесконечный цикл
} |
|
Скачать архив проекта; исходный код, прошивка, proteus.
Остается только добавить что в железе реакция светодиодов на кнопки 100% соответствует работе схемы в
proteus'е.
Небольшая программа с управлением кнопками, результат
управления кнопок можно сохранять в eeprom.
Code /***************************************************** Version : Кнопки и led знак, .. пишем в flash-память. Company : http://c2.at.ua Chip type : ATmega8 Clock frequency : 4,000000 MHz *****************************************************/ #include <mega8.h> #include <delay.h>
flash unsigned char led[11]={ 0b10000000, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111, 0b00111111}; // Массив "led" во flash-памяти, eeprom unsigned char eep; unsigned char i,a; // переменная void main(void) { PORTB=0b11111111; // Port B initialization DDRB=0b00000000; PORTC=0b01000000; // Port C initialization DDRC=0b00111111; PORTD=0b00000000; // Port D initialization DDRD=0b011111111; a=eep; start: while (1) { if (a==11) a=1; if (a==0) a=10; i=a; PORTD=led[i]; delay_ms(400); if (PINB.0==0) {a++; goto start;} if (PINB.1==0) {a--; goto start;} if (PINB.2==0) goto zap; }; zap: eep=a; PORTD=0; delay_ms(400); goto start; } |
|
Скачать архив проекта; исходный код, прошивка, proteus.
Вернутся к оглавлению страницы.
|