Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Разложить число на символы ASCII

Непрочитано 17.02.2011, 02:14  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

kison,
Цитата:
Это sprintf
Хорошо с этим более менее понятно. Только не совсем.
Как правильно сделать такую штуку
unsigned char sym_out1[4];
float koficient;
koficient=123,25;
sprintf(sym_out1[0], "какието там крокозябры",koficient);
а в масиве стало так
sym_out1[0]==0х31
sym_out1[1]==0х32
sym_out1[2]==0х33
Вот это выражение "какието там крокозябры" как правильно записать.
Реклама:
7Fantomas7 вне форума  
Непрочитано 17.02.2011, 02:33  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

Сообщение от 7Fantomas7 Посмотреть сообщение
Вот это выражение "какието там крокозябры" как правильно записать.
%f
Но учтите что плавучее число обладает некоторыми особенностями. Это не абсолютная точность в первую очередь. 123,25 вполне может оказаться примерно таким - 123,249999999. Так что буфер неплохо немного расширить. Вообще надо брать за правило иметь буфер для вывода sprintf не меньше 20 байт. Лишнее sprintf сама отсечет поставив завершающий 0.
И еще - обычно для экономии памяти используется урезанный вариант (s)printf. Это настраивается в настройках компилятора. Пока не включите правильный вариант этих настроек sprintf не сможет работать с плавучими переменными. Ну и посмотрите на объем программы и время вывода. Полная библиотека обычно обладает немалым объемом и неторопливостью. Если урезанный вариант работающий с целыми переменными более-менее приемлем, то полный может оказаться непозволительной роскошью.
kison вне форума  
Сказали "Спасибо" kison
7Fantomas7 (17.02.2011)
Непрочитано 17.02.2011, 03:14  
akimych
Прописка
 
Регистрация: 02.01.2011
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 32 раз(а) в 28 сообщении(ях)
akimych на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

Значение не может быть смешанным, это что такое вообще?
Если надо строку скопировать в буфер - то берём и копируем. Если надо число типа int преобразовать в строку (123-›"123"), то sprintf, itoa или самому написать.
Или еще что-то?

Цитата:
Вот это выражение "какието там крокозябры" как правильно записать.
Лучше всего открыть хелп на sprintf и прочитать.
У того же %f есть еще параметры (кол-во цифр после точки, к примеру).

Последний раз редактировалось akimych; 17.02.2011 в 03:17.
akimych вне форума  
Сказали "Спасибо" akimych
7Fantomas7 (17.02.2011)
Непрочитано 17.02.2011, 10:37  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

kison,
akimych,
Вы не поняли, просто все что после запятой выбросить и оставить только целую часть.
Цитата:
И еще - обычно для экономии памяти используется урезанный вариант (s)printf
Да конечно именно так sprintf я видимо просто ошибся или не правильно выразился и дело тут не в экономии памяти хотя и это имеет не последнее значение. Поэтому или так "%s" или так "%с", только вот не задача как правильно.
Цитата:
Так что буфер неплохо немного расширить. Вообще надо брать за правило иметь буфер для вывода sprintf не меньше 20 байт.
Просто нужно то всего 3 разряда или 3 символа и больше не будет и не планируется. Это банально динамическая индикация на 3 разрядный семисегментник и точность великая не нужна хотя и хорошо было бы если б округлять как положено в математике но только без лишних плясок с бубном.

Последний раз редактировалось 7Fantomas7; 17.02.2011 в 10:50.
7Fantomas7 вне форума  
Непрочитано 17.02.2011, 11:21  
Maxim39
Прописка
 
Аватар для Maxim39
 
Регистрация: 07.02.2010
Адрес: Калининград
Сообщений: 148
Сказал спасибо: 72
Сказали Спасибо 23 раз(а) в 20 сообщении(ях)
Maxim39 на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

Что то не догоняю как ты на 7-ми сегментник собираешься вывести например букву W или X и т.п. В класическом случае делается таблица конвертации из которой делается выборка, как было в АОНах на Z80.
Если надо я на АСМЕ дам пример из своей жизни для LCD конвертация HEX to ASCII переделаешь под себя.

Последний раз редактировалось Maxim39; 17.02.2011 в 11:23.
Maxim39 вне форума  
Непрочитано 17.02.2011, 11:35  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

Maxim39,
Цитата:
Что то не догоняю как ты на 7-ми сегментник собираешься вывести например букву W или X
А я их и не собираюсь выводить.
Цитата:
В класическом случае делается таблица конвертации из которой делается выборка,
Так сам же ответил на свой вопрос, именно так и делаю. Символы которые не возможно вывести я и не пытаюсь выводить, а в таблице я их просто забил 0 гашением если даже по какойто причине и будет попытка вывести, да и соотносить таблицы так проще.
Цитата:
Если надо я на АСМЕ дам пример
Ну за помощь спасибо. Только я в АСМЕ понимаю чуть лучше чем в китайском балете. Да и зачем, я написал уже все просто возникают конкретные вопросы на которые сам однозначный ответ найти не могу. Я по sprintf прочитал 3 версии документов, вроде одно и тоже а чуток отличается.

Последний раз редактировалось 7Fantomas7; 17.02.2011 в 11:39.
7Fantomas7 вне форума  
Непрочитано 17.02.2011, 11:51  
OlegNZH
Почётный гражданин KAZUS.RUN
 
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

7Fantomas7 Ну ёлки палки - табличку сделай- место есть в памяти? и просто индексами... это-ж всё сто лет пройдено. sym_new[0] =sym_new_new[sym_out1[0]].
OlegNZH вне форума  
Непрочитано 17.02.2011, 13:33  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

OlegNZH,
Та ну елки с палками сделал я табличку давным давно и в памяти места еще хватит бронепоезд развернуть. И функция готова.
И два масива есть и задача стоит чтоб в любом месте общей програмы писать в эти масивы адреса ASCII хоть от символьных значений хоть числовых, но в любом случае адреса. Писать адреса того что необходимо вывести, ну я не знаю как еще объяснить. Замерил я АЦП, отфильтровал, записал в масив значение, обновил динамичку, увидел значени. Нажал кнопку, получил событие, записал адреса в масив например если чтото нажалось то в масив записалось Err, адресами ASCII записалось, ну есть разница пишем Err получаем набор из 3х hex-ов. А таблички и вывод уже есть.

Последний раз редактировалось 7Fantomas7; 17.02.2011 в 13:39.
7Fantomas7 вне форума  
Непрочитано 17.02.2011, 13:45  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

Сообщение от 7Fantomas7 Посмотреть сообщение
Просто нужно то всего 3 разряда или 3 символа и больше не будет и не планируется. Это банально динамическая индикация на 3 разрядный семисегментник и точность великая не нужна хотя и хорошо было бы если б округлять как положено в математике но только без лишних плясок с бубном.
Тогда sprintf это неоправданное излишество. Преобразовать в десятичную строку можно примерно так:
Код:
void Convert(char *OutBuf, float Data)
{
unsigned int DataInt = (unsigned int)(Data + 0.5);
    *(OutBuf+2) = (DataInt % 10)+ '0';
    DataInt = DataInt / 10;
    *(OutBuf+1) = (DataInt % 10)+ '0';
    *OutBuf = (DataInt / 10) + '0';
}
+'0' для получения ASCII, но вообще это нафиг не нужно для семисегментника. Держать полный знакогенератор для индикатора с очень ограниченными возможностями индикации расточительство.
Использовать:
Код:
float fvar;
char Buf[3];

int main(void)
{
....
fvar = 123.65;
Convert(Buf,fvar);
...
}
В Buf будет 124 в ASCII. Если fvar присвоить 1.75, то выведется 002
kison вне форума  
Непрочитано 17.02.2011, 14:07  
OlegNZH
Почётный гражданин KAZUS.RUN
 
Регистрация: 28.02.2010
Сообщений: 2,294
Сказал спасибо: 52
Сказали Спасибо 460 раз(а) в 391 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Разложить число на символы ASCII

Сообщение от kison Посмотреть сообщение
Тогда sprintf это неоправданное излишество. Преобразовать в десятичную строку можно примерно так:
Угу.... как только sprintf врубаешь- сразу код настолько возрастает- мама не горюй!Всё проще должно быть.
OlegNZH вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подбираемся к DX Kabron Микроконтроллеры, АЦП, память и т.д 455 27.10.2014 22:41
Как в CVAVR вывести 3х-значное число на порты? code-by Микроконтроллеры, АЦП, память и т.д 26 23.03.2010 23:23
Число витков трансформатора для развязки звуковых частот Laksus Аудиотехника 6 07.07.2009 15:49


Часовой пояс GMT +4, время: 12:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.