Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.07.2011, 14:32
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Сообщение от Easyrider83
|
На 2,4,8.. делю сдвигом
|
Ну это само собой (old school ). А чем плоха на 8 битниках математика? Смотри только за разрядностью используемых переменных.
|
|
|
|
28.07.2011, 14:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Десятки микросекунд и меньше 50 слов кода. Это для 8-ногой тиньки
|
|
|
|
28.07.2011, 14:37
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Сообщение от heady69
|
Индикация явно не динамика. Вывод через сдвиговые регистры с зящелкой на выходе. Да и код конечно... особенно это:
Код:
|
while (SUM ›=100)
{
tens++;
SUM -=100;
};
while (SUM ›= 10)
{
one++;
SUM -= 10;
fractions=SUM;
}; |
делить на 100 и на десять методом вычитания это ЖЕСТЬ!! Вообще с СИ сеть операторы: "/"разделить, "%"взять остаток деления .
|
А ещё практикуют математику с вещественными числами реализовывать на сдвигах и ..и много ещё чего - какой ужас!
Это не жесть, это адекватное понимание возможностей платформы с которой имеешь дело.
Вы сравните размер и скорость выполнения кода - сами примете на вооружение.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Nfc за это сообщение:
|
|
|
28.07.2011, 14:46
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Сообщение от Nfc
|
Вы сравните размер и скорость выполнения кода - сами примете на вооружение.
|
Только дурак не заглядывает в то,что компилятор наваял. Ессесно приходится иногда и код править для оптимальной компиляции.
|
|
|
|
28.07.2011, 15:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Цитата:
|
делить на 100 и на десять методом вычитания это ЖЕСТЬ!! Вообще с СИ сеть операторы: "/"разделить, "%"взять остаток деления
|
для типа char деление на 100 дает 1 или 2 вычитания - стандартный способ двоично-десятичного преобразования для 8-битных архитектур. Использовался еще на 8080. И если компилятор умный, то он сам заменит 8 сдвигов / вычитаний на те же самые две операции.
__________________
misterdi<@>i.ua
|
|
|
|
28.07.2011, 16:11
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Сообщение от MisterDi
|
для типа char деление на 100 дает 1 или 2 вычитания - стандартный способ двоично-десятичного преобразования для 8-битных архитектур.
|
Понятно,что не больше 2 (char= 255 max). На "старичке" Sinclaire таким "вычитательным" образом делии. Только в программе делится не char , а uint.
Последний раз редактировалось heady69; 28.07.2011 в 16:14.
|
|
|
|
28.07.2011, 16:21
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Сообщение от MisterDi
|
И если компилятор умный, то он сам заменит 8 сдвигов / вычитаний на те же самые две операции.
|
Надеемся на это и уповаем. Конечно компилеры далеко не глупые люди пишут,но всн варианты как говорится не предусмотришь.
Последний раз редактировалось heady69; 28.07.2011 в 16:23.
|
|
|
|
28.07.2011, 16:23
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Сообщение от heady69
|
Надеемся на это и уповаем.
|
Проверил. Мой не умный. Таких вещей делать не умеет. Но на 2 делит правильно.
|
|
|
|
28.07.2011, 16:45
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Сообщение от Easyrider83
|
heady69, много проще через BCD формат все сделать
|
А по подробнее, для чайника можете обьяснить?
|
|
|
|
28.07.2011, 16:58
|
|
Вид на жительство
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
|
Re: Способы вывода данных на семисегментный индикатор
Код:
|
unsigned char led_update ( unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e, unsigned char f )
{
led_buff[0]=led_table[a]; //Çàïîëíÿåì áóôåð ðàçðÿäîâ
led_buff[1]=led_table[b]; // èíäèêàöèÿ CUrOUt òîê âûõîäà
led_buff[2]=led_table[c];
led_buff[3]=led_table[d];
led_buff[4]=led_table[e];
led_buff[5]=led_table[f];
return a,b,c,d,e,f;
}
led_update(1,2,3,4,F_,H_); |
Ничего пока толковей чем это не придумал...
хочу делать таким образом:
led_update(1,2,3,4,F_,H_);
led_update(2,3,4,F_,H_,__);
led_update(3,4,F_,H_,__,1); // подчеркивание это пробел
Код:
|
#define __ 10
#define t_ 12
#define L_ 13
#define A_ 14
#define r_ 15
#define d_ 16
#define b_ 17
#define dp_ 18
#define P_ 19
#define C_ 20
#define U_ 21
#define E_ 22
#define H_ 23
#define F_ 24
#define tC_ 25 |
Это я переделал код уважаемого товарища АРВ
вопрос такой, зачем здесь надо "return" ? поясните мне пожалуйста.
с Ув. Артем
Кидаю вам проект, вот такое я хочу сделать, выталкивание предыдущего меню.
Последний раз редактировалось artyomugr; 28.07.2011 в 17:38.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:03.
|
|