Перейти к содержанию
    

Всем привет , подскажите как лучше организовать условие ?

К микроконтроллеру подключен 8ми сегментные индикатор и две кнопки. по нажатию на кнопку "+" цифра на индикаторе меняется с 0 на 1 , при повторном нажатии с 1 на 2 в общем инкримент , при нажатиии на кнопку "-" дикримент (уменьшает на 1)

 

код:

#include <mega8.h>

#include <delay.h>

 

unsigned char i;

flash unsigned char led[11]={

0b10111111, 0b00000110, 0b01011011, 0b01001111,

0b01100110, 0b01101101, 0b01111101, 0b00000111,

0b01111111, 0b01101111, 0b00111111};

 

void main(void)

 

{

i=0;

PORTB.0=1;

PORTB.1=1;

DDRB.0=0;

DDRB.1=0;

PORTD=0b11111111;

DDRD=0b11111111;

 

 

start:

PORTD=led;

while (1)

{

delay_ms(100);

 

if (PINB.0==0) {i++; goto start;} // "+"

if (PINB.1==0) {i--; goto start;} // "-"

 

};

}

 

в моем случае все доходит до первого оператора if и возвращается к метки "start:"

как сделать так чтоб была реакция на кнопки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как сделать так чтоб была реакция на кнопки?

Я вам прежде всего предлагаю почитать, как принято делать подавление дребезга от кнопки, как обрабатывать прерывания, и вообще, как все-таки следует писать программу. Выход из цикла по GOTO в данном случае - это нечто ... Литературы по AVR - масса. Вы, похоже, пытаетесь начать с нуля, а напрасно.

P.S. Вот книги, там есть куча примеров, как раз в помощь начинающему:

http://lord-n.narod.ru/walla.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в моем случае все доходит до первого оператора if и возвращается к метки "start:"

как сделать так чтоб была реакция на кнопки?

Проверить PINB.0 на кз с землей. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

if (PINB.0 == 0)
{
   _delay_ms(100);
  if(PINB.0 == 0) {i++;goto start;}
}

if (PINB.1 == 0)
{
   _delay_ms(100);
  if(PINB.1 == 0) {i++;goto start;}
}

 

 

ЗЫ. Codevision выбросьте ф топку. и все-таки последуйте совету ув. товарисча __Pasha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в моем случае все доходит до первого оператора if и возвращается к метки "start:"

как сделать так чтоб была реакция на кнопки?

У вас переменная i выходит за пределы массива. Ну и метку старт выбросить, она не нужна.

Надо переделать код как-то так

 

char i;

while(1)

{

delay_ms(100);

if(PINB.0==0) i++; //+button

if(PINB.1==0) i--; //-button

if(i>10) i=0;

if(i<0) i=10;

PORTD=led;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...