счетчик нажатии на кнопку не работает!!!

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Вс авг 11, 2013 18:03:18

Сообщение brodar »

добрый день ,у меня появилась проблема я хочу сделать счетчик нажатий на кнопку но не получается можете посмотреть на код и сказать что не правильно делаю!!!


#include <mega8.h>
#include <io.h>
#include <delay.h>


void main(void)
{
int a=0;

DDRC=0b0000000;
DDRB=0b11111111;

while (1)
{

if(PINC.0 == 1)
{
delay_ms(20);
a++;
}


if(PINC.1 == 1)
{
if(a==2)
{
delay_ms(100);
PORTB=0b00000001;
}
}

}
}
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

А что у вас собственно не получается? Как проверяли программу?
Изображение only pure true norwegian blackx Изображение
Реклама
Родился
Сообщения: 3
Зарегистрирован: Вс авг 11, 2013 18:03:18

Сообщение brodar »

проверял в proteus ,не получается записать значение при нажатие кнопки в a++!
например когда на порт PINC.0 логическая единица записываю в a=1 когда второи раз нажимаю a=2 и так далее
и потом проверяю if(a=2){PORTB=0b00000001} ;но проблема в том что при нажатие на кнопку не срабатавает a++!!!
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Выложите картинкой схему подключения. Убедитесь для начала, что вот такой вариант работает:

Код: Выделить всё

#include <mega8.h>
#include <io.h>
#include <delay.h>


void main(void)
{
int a=0;

DDRC=0b0000000;
DDRB=0b11111111;

while (1)
{ 

if(/*PINC.0 == 1*/ PINC & 0x1)
{ 
delay_ms(20); 
a++;
PORTB = (char)a;
}

}
}
Вы должны увидеть, как с каждым нажатием на порт B выводится новое значение.
Изображение only pure true norwegian blackx Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

судя по коду кнопки подключены к PORTC, внутренняя подтяжка отключена. если кнопка тактовая (два контакта), то нужна внешняя подтяжка.
Как вы кнопки подключили? выложите картинку здесь. Вот родной хостинг РадиоКота.
Ставим плюсы: )
Реклама
Родился
Сообщения: 3
Зарегистрирован: Вс авг 11, 2013 18:03:18

Сообщение brodar »

наконец то заработало ,проблема состояла в том что не поставил правильную частоту тактирование я ставил на 1000000 Мгц а надо было на 8000000 и код чуток модифицировал,
записал значение а++ в b=a и как не странно заработало!!!!
и в PROTEUS пример не работал как не старался,всё идеально заработала на реальном контроллере!!!!

Всем огромное спасибо кто пытался помочь!!!!

#include <io.h>
#include <delay.h>

void main(void)
{
int a=0,b=0;
DDRD=0b11111111;
DDRC=0b0000000;

inceput:
while (1)
{

if(PINC.0 == 1)
{
delay_ms(20);
a++;
b=a;


}

if(PINC.1 == 1)
{
if(b==7)
{
delay_ms(20);
PORTD=0b00000001;
}

}


if(PINC.2 == 1)
{
PORTD=0b00000000;
a=0;
b=0;
goto inceput;

}

}
}


Изображение
Реклама
Ответить

Вернуться в «AVR»