Страница 1 из 1
счетчик нажатии на кнопку не работает!!!
Добавлено: Вс авг 11, 2013 18:22:34
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;
}
}
}
}
Re: счетчик нажатии на кнопку не работает!!!
Добавлено: Вс авг 11, 2013 19:02:03
blackx
А что у вас собственно не получается? Как проверяли программу?
Re: счетчик нажатии на кнопку не работает!!!
Добавлено: Вс авг 11, 2013 19:15:51
brodar
проверял в proteus ,не получается записать значение при нажатие кнопки в a++!
например когда на порт PINC.0 логическая единица записываю в a=1 когда второи раз нажимаю a=2 и так далее
и потом проверяю if(a=2){PORTB=0b00000001} ;но проблема в том что при нажатие на кнопку не срабатавает a++!!!
Re: счетчик нажатии на кнопку не работает!!!
Добавлено: Вс авг 11, 2013 19:47:10
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 выводится новое значение.
Re: счетчик нажатии на кнопку не работает!!!
Добавлено: Пн авг 12, 2013 08:16:33
ibiza11
судя по коду кнопки подключены к PORTC, внутренняя подтяжка отключена. если кнопка тактовая (два контакта), то нужна внешняя подтяжка.
Как вы кнопки подключили? выложите картинку здесь.
Вот родной хостинг РадиоКота.
Re: счетчик нажатии на кнопку не работает!!!
Добавлено: Пн авг 12, 2013 22:47:22
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;
}
}
}
