Кнопки & светодиоды
Приветствую Вас, Гость · RSS Среда, 13.11.2024, 09:48












Вернуться в начало страницы.


Небольшие примеры, как помигать светодиодом с помощью кнопки, вот тут  несколько вариантов.....

Смотрим в протеусе, нажимаем на кнопку (можно кое-где и придержать её), смотрим как реагирует светодиод, ..... если интересно как это заработало, смотрим в код, вносим изменения, редактируем, комплимируем. .....

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.


Вернутся к оглавлению страницы.

Конструктор сайтов - uCoz
Copyright MyCorp © 2024