Форум РадиоКот • Просмотр темы - Как выводить на 7-LED цифры с запятой?
Сообщения без ответов | Активные темы
Страница 1 из 1
[ Сообщений: 15 ]
Автор
Сообщение
xterro
Заголовок сообщения: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 06:25:02
Опытный кот
Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59Сообщений: 873Откуда: Тюмень
Рейтинг сообщения: 0
Доброго времени суток, хочу спросить по поводу вывода циферки на 7-сегментный индикатор. Накидал такой вот простой счётчик, просто выводит поочерёдно цифры от 0 до 999:
Спойлер Код:
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define DIGITS_ARRAY_SIZE 10 #define LED_AMOUNT 3 unsigned int digits[DIGITS_ARRAY_SIZE] = {0x3, 0x9F, 0x25, 0xD, 0x99, 0x49, 0x41, 0x1F, 0x1, 0x9}; unsigned int GPeriod = 0; unsigned int CurrentDigit = 1; unsigned int Counter = 0; int datarray[3]; void InitAll() { DDRB = 0xFF; DDRD = 0xFF; PORTB = 0x0; /* Timer */ TCNT0 = 0x0; TCCR0B |= (1<<CS02);//|(1<<CS00); TIMSK0 |= (1 << TOIE0); sei(); } void UpdateLED() { switch(CurrentDigit) { case 0: PORTB = (1 << CurrentDigit); PORTD = digits[datarray[CurrentDigit]]; break; case 1: PORTB = (1 << CurrentDigit); PORTD = digits[datarray[CurrentDigit]]; break; case 2: PORTB = (1 << CurrentDigit); PORTD = digits[datarray[CurrentDigit]]; break; } } void ConvertToBCD(unsigned int num) { unsigned int temp ; signed char i ; for (i=2; i>=0; i--) { datarray[i] = 0; } for (i=2; num>0; i--) { temp = num / 10 ; datarray[i] = num-(10*temp); num = temp ; } } ISR(TIMER0_OVF_vect) { if (CurrentDigit == 2) CurrentDigit = 0; else CurrentDigit++; if(GPeriod == 10) { if(Counter == 999) Counter = 0; else Counter++; ConvertToBCD(Counter); GPeriod=0; } else GPeriod++; } int main() { InitAll(); //ConvertToBCD(459); while(1) { UpdateLED(); } return 0; }
Не могу понять, как обрабатывать числа с запятой, т.е как например вывести 32.5? (Преобразование у меня идёт в функции ConvertToBCD)
Вернуться наверх
Реклама
ploop
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 06:34:52
Модератор
Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25Сообщений: 13490Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Вывести 325 и зажечь запятую на втором индикаторе.
Вернуться наверх
Реклама
xterro
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 06:40:16
Опытный кот
Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59Сообщений: 873Откуда: Тюмень
Рейтинг сообщения: 0
Это то понятно, меня интересует, как преобразовать число с запятой(можно на примере функции ConvertToBCD), чтобы при выводе я знал, что 1. Эта запятая вообще в числе есть и 2. В каком разряде её выводить
Вернуться наверх
ChipKiller
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 06:50:51
Сверлит текстолит когтями
Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15Сообщений: 1163
Рейтинг сообщения: 0
Код:
void UpdateLED() { switch(CurrentDigit) { case 0: PORTB = (1 << CurrentDigit); PORTD = digits[datarray[CurrentDigit]]; break; case 1: PORTB = (1 << CurrentDigit); PORTD = digits[datarray[CurrentDigit]]; break; case 2: PORTB = (1 << CurrentDigit); PORTD = digits[datarray[CurrentDigit]]; break; } }
в чем смысл switch(CurrentDigit)?
Вернуться наверх
Реклама
xterro
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 07:25:28
Опытный кот
Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59Сообщений: 873Откуда: Тюмень
Рейтинг сообщения: 0
Цитата:
в чем смысл switch(CurrentDigit)?
Включает определённый разряд, по очереди, это ведь динамическая индикация
Вернуться наверх
Реклама
ChipKiller
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 07:29:09
Сверлит текстолит когтями
Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15Сообщений: 1163
Рейтинг сообщения: 0
Код:
PORTB = (1 << CurrentDigit); PORTD = digits[datarray[CurrentDigit]];
... вполне достаточно
Вернуться наверх
Реклама
xterro
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 07:37:34
Опытный кот
Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59Сообщений: 873Откуда: Тюмень
Рейтинг сообщения: 0
Кстати да, не подумал, спасибо... осталось узнать, как добавить поддержку точки в преобразование числа. (Минус уж не спрашиваю, это не сложно)
Вернуться наверх
ChipKiller
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 07:40:36
Сверлит текстолит когтями
Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15Сообщений: 1163
Рейтинг сообщения: 0
Цитата:
как преобразовать число с запятой
... зависит от того, зачем это нужно - самый "тупой" способ - подключить float.
Вернуться наверх
xterro
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 08:00:12
Опытный кот
Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59Сообщений: 873Откуда: Тюмень
Рейтинг сообщения: 0
Делаю стопицотый термометр
И вот думаю, как мне преобразовать свою функцию ConvertToBCD чтобы она учитывала запятую, т.е если я на вход её подам, скажем 21.8, то в лучшем случае у меня выведет 218
Цитата:
самый "тупой" способ - подключить float.
Это как? Можно пример?
Вернуться наверх
Реклама
ChipKiller
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 11:05:00
Сверлит текстолит когтями
Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15Сообщений: 1163
Рейтинг сообщения: 0
xterro писал(а):
И вот думаю, как мне преобразовать свою функцию ConvertToBCD чтобы она учитывала запятую, т.е если я на вход её подам, скажем 21.8, то в лучшем случае у меня выведет 218
для начала выучить матчасть. Как в свою
ConvertToBCD(unsigned int num) вы собрались "подать скажем 21.8", когда
unsigned int - это число от 0 до 65535 ?
PS. чтобы получить правильный ответ, нужно задать правильный вопрос
Вернуться наверх
xterro
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 11:11:26
Опытный кот
Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59Сообщений: 873Откуда: Тюмень
Рейтинг сообщения: 0
Это всё понятно, поменять на float не проблема, проблема, как выбрать дробную часть и узнать позицию точки?
Вернуться наверх
ChipKiller
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 11:20:45
Сверлит текстолит когтями
Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15Сообщений: 1163
Рейтинг сообщения: 0
xterro писал(а):
Это всё понятно, поменять на float не проблема
..ну если
все понятно и поменять не проблема, то welcome
сюда
Вернуться наверх
srg320
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 11:28:51
Карма: 2
Рейтинг сообщений: 17
Зарегистрирован: Пт фев 01, 2013 17:47:26Сообщений: 85Откуда: Украина, Луганская область
Рейтинг сообщения: 0
можно так, если допустим значение находиться в переменной value типа float, тогда: int temp = value*100; десятки=(temp/1000)%10; единицы=(temp/100)%10; десятые=(temp/10)%10; сотые=temp%10; между единицами и десятыми выводите запятую диапазон от 0 до 99,99 при таком варианте производительность будет не ахти, но для начала пройдёт.
Вернуться наверх
ChipKiller
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 11:32:05
Сверлит текстолит когтями
Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15Сообщений: 1163
Рейтинг сообщения: 0
srg320 , чем "так....." - лучше использовать printf
Вернуться наверх
xterro
Заголовок сообщения: Re: Как выводить на 7-LED цифры с запятой?
Добавлено: Вт апр 09, 2013 11:33:10
Опытный кот
Карма: 18
Рейтинг сообщений: 44
Зарегистрирован: Чт апр 12, 2012 07:19:59Сообщений: 873Откуда: Тюмень
Рейтинг сообщения: 0
srg320 Благодарю, попробую так
Вернуться наверх
Страница 1 из 1
[ Сообщений: 15 ]
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения