| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Разложить число на символы ASCII
17.02.2011, 16:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: Разложить число на символы ASCII
Можно сделать так:
|
Код:
|
#include ‹stdlib.h›
void Convert(char *OutBuf, float Data)
{
unsigned int DataInt = (unsigned int)(Data + 0.5);
div_t tmp;
tmp = div(Data,10);
*(OutBuf+2) = tmp.rem + '0';
tmp = div(tmp.quot,10);
*(OutBuf+1) = tmp.rem + '0';
*OutBuf = tmp.quot + '0';
} |
Экономия существенна - вместо 1000 тактов всего 600 ( на переменной 345,25, компилятор GCC4.2.2). Можно еще деление на 10 заменить на умножение. Тоже экономия в тактах будет. Да вообще полно вариантов.
|
|
|
|
17.02.2011, 17:13
|
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
|
Re: Разложить число на символы ASCII
Сообщение от 7Fantomas7
|
|
И два масива есть и задача стоит чтоб в любом месте общей програмы писать в эти масивы адреса ASCII хоть от символьных значений хоть числовых, но в любом случае адреса. Писать адреса того что необходимо вывести, ну я не знаю как еще объяснить. Замерил я АЦП, отфильтровал, записал в масив значение, обновил динамичку, увидел значени. Нажал кнопку, получил событие, записал адреса в масив например если чтото нажалось то в масив записалось Err, адресами ASCII записалось, ну есть разница пишем Err получаем набор из 3х hex-ов. А таблички и вывод уже есть.
|
А проблема то где? Если проблема в том, что float не влазит, так преобразуйте его в int, затем уже его в string.(Если точность float не нужна зачем его используете?)
Объясните проще что вам надо, например померил ADC, пересчитал в вольты и показал на экране. Или нажал кнопку, в переменную пита uint8_t записалась 1, как вывести на экран Err. А то выглядит, что вы создали какие то массивы и потом под это подгоняете логику программы.
Если ищите функцию, которая берет переменную любого типа и преобразует в четыре ASCII знака (не больше не меньше ) то готовой такой функции нет, но можете сами написать раз памяти много. Но намного проще, зная тип переменной, преобразовать ее в строку( тот же sprintf с нужным ключом для конкретного типа), а строку вывести на экран как два пальца...
Последний раз редактировалось CodeNameHawk; 17.02.2011 в 17:54.
|
|
|
|
17.02.2011, 18:10
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Разложить число на символы ASCII
|
Цитата:
|
|
Если проблема в том, что float не влазит
|
Влазит, просто отображать с такой точностью не нужно, а для расчетов в другом месте нужно. Но это не проблема.
|
Цитата:
|
|
Если ищите функцию, которая берет переменную любого типа и преобразует в четыре ASCII знака (не больше не меньше )
|
Ее и ищу.
|
Цитата:
|
|
то готовой такой функции нет
|
Жаль, значит sprint и точка.
|
Цитата:
|
|
тот же sprintf с нужным ключом для конкретного типа
|
Видимо на этом остановлюсь. Просто мне человек один объяснял как это красивее сделать, на словах объяснял, мне б дурню записать, ан нет на память понадеялся. Теперь контакта нет с этим человеком.
OlegNZH
|
Цитата:
|
|
как только sprintf врубаешь- сразу код настолько возрастает- мама не горюй!Всё проще должно быть.
|
И мне так сказали. Должно быть красивое решение.
|
|
|
|
17.02.2011, 18:21
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: Разложить число на символы ASCII
Сообщение от 7Fantomas7
|
|
Жаль, значит sprint и точка.
|
Не понравится Вам результат для нецелых переменных. Да и универсальность sprintf тут мнимая. У Вас на момент вызова известен тип переменной. Если напишете например 4 функции для каждого типа выиграете и в объеме и в быстродействии.
|
|
|
|
17.02.2011, 18:47
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Разложить число на символы ASCII
7Fantomas7, Я честно говоря х....ю ...
Если у вас все таки 7 сегментный LED индикатор , то я все вам выложил в прошлый раз . И работу с символами и с числами .
Что там непонятно ??????!!!!!!
__________________
Осторожно , злой кот
|
|
|
|
17.02.2011, 20:24
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Разложить число на символы ASCII
С цифрами всё понятно. Что с буквами? Из чего они должны преобразовываться? По какому закону? Надеюсь, учёл все, что можно отобразить на 7-сегментнике.
|
Код:
|
;Таблица символов
Sims:
db 00000000b ;blank
db 00111111b ;0
db 00000110b ;1
db 01011011b ;2
db 01001111b ;3
db 01100110b ;4
db 01101101b ;5
db 01111101b ;6
db 00001110b ;7
db 01111111b ;8
db 01101111b ;9
db 01111110b ;A
db 01110101b ;b
db 01010001b ;c
db 01010111b ;d
db 01111001b ;E
db 01111000b ;F
db 00111101b ;G
db 01110110b ;H
db 00000111b ;J
db 00110001b ;L
db 01010100b ;n
db 01010101b ;o
db 01111010b ;P
db 01010000b ;r
db 01011011b ;S
db 01110001b ;t
db 01000000b ;-
; **3**
; * *
; 4 2
; * *
; **6**
; * *
; 5 1
; * *
; **0** 7 |
Последний раз редактировалось omercury; 17.02.2011 в 20:31.
|
|
|
|
17.02.2011, 20:50
|
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
|
Re: Разложить число на символы ASCII
Сообщение от 7Fantomas7
|
|
Должно быть красивое решение.
|
itoa вам чем не нравится?
|
|
|
|
17.02.2011, 21:37
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Разложить число на символы ASCII
CodeNameHawk,
|
Цитата:
|
|
itoa вам чем не нравится?
|
А я сейчас достану книжку и как начну читать. Потом будут вопросы
|
|
|
|
17.02.2011, 21:44
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Разложить число на символы ASCII
7Fantomas7, Ссылку на урезанную itoa , я уже давал
__________________
Осторожно , злой кот
|
|
|
|
17.02.2011, 22:22
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Разложить число на символы ASCII
dosikus,
Если не в лом повторите ссылочку. Информации дохрена и я не помню где она.
Да и не давали Вы ссылки, я просмотрел все ваши посты за последнее время, и коментариев по поводу itoa тоже с Вашей стороны не было. Возможно Вы просто собирались что либо подобное сделать.
Последний раз редактировалось 7Fantomas7; 17.02.2011 в 23:08.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:29.
|
|