Страница 1 из 1

atmega 8 связь с семисегментным индикатором

Добавлено: Ср июл 29, 2015 21:39:02
lelik-balabolik
привет всем. я начинающий потому не смейтесь. есть переменная которую я изменяю кнопками.... и порт которому присваиваю значение, на порт подвешен семисегментный индикатор с четырьмя ногами (BCD) он мне в 16ричной системе циферки показывает. ВОПРОС: КАК СДЕЛАТЬ ТАК ЧТО БЫ В ДЕСЯТИЧНОЙ ПОКАЗЫВАЛ? Тип переменной int. работает как счётчик.

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Ср июл 29, 2015 22:03:29
Аlex
Странный какой-то вопрос. Очевидно же - переписать программу так, чтобы на индикатор можно было выводить десятичные цифры :roll:

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Чт июл 30, 2015 04:57:08
pyzhman
lelik-balabolik писал(а):...с четырьмя ногами (BCD) ...
Эмулятор? Протеус? Программу кто писал?

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Чт июл 30, 2015 06:52:01
Андрей СШ
Если индикатор одноразрядный, то просто не выводить на него значения больше 9-и. Всё равно не влезет.

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Чт июл 30, 2015 09:26:07
lelik-balabolik
привет всем. Alex в том то и состоит вопрос как и что дописать что бы на индикаторы (2 шт продлючены к порту D один соответственнно на ноги 1-4 , второй на ноги 5-8) . теперь про саму переменную. тип unsignet int. работает так. если pinc0==1 то a++, если pinc2==1 то а--. после чего вот так PortD=a. вот . и оно мне циферки показывает но в шеснадцатиричной системе. а хочется в десятичной. что нужно дописать?

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Чт июл 30, 2015 09:47:06
ARV
вместо PORTD = a; написать это

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

if(a > 99) a=0;
PORTD = (a % 10) | ((a / 10) << 4);

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Чт июл 30, 2015 19:31:17
lelik-balabolik
СПАСИБИЩЕ!!!!!!!!!! Я СОВСЕМ ЗАБЫЛ ПРО % ЗАДАЮЩИЙ ФОРМАТ!!!!!!!

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Чт июл 30, 2015 19:39:13
lelik-balabolik
дружище скинь реквизиты я те хоть на пиво пришлю.

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Чт июл 30, 2015 21:08:17
ARV
lelik-balabolik писал(а):дружище скинь реквизиты я те хоть на пиво пришлю.
детям Донбасса пожертвуй

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Пт июл 31, 2015 01:01:12
lelik-balabolik
Как скажешь. Вот ещё вопрос. есть иф елс и порт настроеный на выход. как написать код чтоб именно конкретная нога меняла состояние при выполнении ифа.... тоесть я не умею обращаться к конкретной ноге порта. подскажите( сама задумка в том что разные ифы будут управлять разными ногами одного порта)

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Пт июл 31, 2015 06:54:11
ARV
PD3 - четвертая нога порта D
вот так можно поменять на противоположный уровень по if

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

if(some_condition){
   // меняем состояние ноги
   PORTD ^= 1 << PD3;
} else {
   // делаем что-то иное
}

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Пн авг 03, 2015 21:51:47
lelik-balabolik
Спс. Есть ещё вопрос. Существует функция _delay_ms () . как сделать что бы её время указанное в скобках изенялось. тоесть было переменной а не константой. пробовал писать переменную типа int-работать не хочет.

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Вт авг 04, 2015 06:51:26
ARV
lelik-balabolik писал(а):Есть ещё вопрос. Существует функция _delay_ms () . как сделать что бы её время указанное в скобках изенялось. тоесть было переменной а не константой
есть два пути, как это сделать: читать документацию и много думать и задать вопрос и скопипастить ответ:

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

void delay(int d){
   if(!d) return;
   for(; d; d--) _delay_ms(1);
}

Re: atmega 8 связь с семисегментным индикатором

Добавлено: Вс авг 09, 2015 07:07:15
SopaXorzTaker
lelik-balabolik писал(а):СПАСИБИЩЕ!!!!!!!!!! Я СОВСЕМ ЗАБЫЛ ПРО % ЗАДАЮЩИЙ ФОРМАТ!!!!!!!
Здесь это не формат, а операция "модуль".