[uquote="aleksey chilov",url="/forum/viewtopic.php?p=4324009#p4324009"]Проблема разрешилаь очень просто. Применил остаток от деления %. И потом положил в массив. Точку тоже положил в массив куда мне нужно. Ну а
дальше вывел как простую строчку. Получилось прикольно!
Ну признаться посмотрел на форуме там приводился пример подобных действий,я применил его,
я такую разбивку применял только по 7seg indication тоже нормально работает.[/uquote]
Интересно, а что там за магическое число в программе - 0x30?
Последний раз редактировалось Bill_ Вт ноя 22, 2022 12:02:36, всего редактировалось 1 раз.
[uquote="MLX90640",url="/forum/viewtopic.php?p=4324557#p4324557"]Добавка для ANSI-кодировки цифр. В таблице ANSI цифры начинаются с кода 0х30[/uquote]
А по-моему проще написать '0'. Или нет?
[uquote="Bill_",url="/forum/viewtopic.php?p=4324626#p4324626"]Проще, проще... требуется ввести только 3 символа вместо 4-х.[/uquote] Тогда так ещё проще
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Bill_, при чем здесь "три символа"? '0' — это и в Африке '0', наглядно и понятно. А что за хрень 0x30 — кто бы знал?
Вот можно и строки заканчивать символом 0x0A, но наглядней таки '\n' писать (я и сам полез сейчас в хексдамп, чтобы глянуть, какой код у '\n', т.к нафиг оно мне в реальной жизни сплющилось это помнить?).
А то еще дойдет до писания букв их кодами. А в какой кодировке тогда?? Вот я работаю в КОИ8-Р, хоть давно на хрюникод все попереходили.
Добавлено after 3 minutes 5 seconds:
Кстати, у меня для печати целых вот что нарисовано:
static char *_2str(uint32_t val, uint8_t minus){
static char strbuf[12];
char *bufptr = &strbuf[11];
*bufptr = 0;
if(!val){
*(--bufptr) = '0';
}else{
while(val){
*(--bufptr) = val % 10 + '0';
val /= 10;
}
}
if(minus) *(--bufptr) = '-';
return bufptr;
}
// return string with number `val`
char *u2str(uint32_t val){
return _2str(val, 0);
}
char *i2str(int32_t i){
uint8_t minus = 0;
uint32_t val;
if(i < 0){
minus = 1;
val = -i;
}else val = i;
return _2str(val, minus);
}
Когда начал играться с Cortex-M3, пришлось еще и на флоаты расширять...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4324646#p4324646"][uquote="Bill_",url="/forum/viewtopic.php?p=4324626#p4324626"]Проще, проще... требуется ввести только 3 символа вместо 4-х.[/uquote] Тогда так ещё проще
Вы чего? шуток не понимаете?вон сколько морд нарисовал!!!! читаемость кода на первом месте всегда! (глаза и нервы даны одни на всю жизнь, а клавиатуру по мере износа и поменять можно )
Хотя... бывают случаи, когда читабельность не на первом месте (или даже вредна)... но встречаются довольно редко и данный случай к ним не относится.
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4324680#p4324680"]Вы чего? шуток не понимаете?вон сколько морд нарисовал!!!! читаемость кода на первом месте всегда! (глаза и нервы даны одни на всю жизнь, а клавиатуру по мере износа и поменять можно )
Хотя... бывают случаи, когда читабельность не на первом месте (или даже вредна)... но встречаются довольно редко и данный случай к ним не относится.[/uquote]Да я как-то не привык морды рисовать. Ни кошачьи, ни другие... Ладно, для данного случая так и быть нарисую.
PS: Вообще-то, я задал вопрос автору поста как-бы в шутку, чтобы обратить его внимание на эту деталь. Но люди восприняли это всерьёз и стали отвечать. Ладно, впредь в таких случаях буду рисовать кошачьи мордочки.
Последний раз редактировалось Bill_ Ср ноя 23, 2022 07:21:45, всего редактировалось 1 раз.
Мужики, выручайте. )
Есть код. В функцию отправляю переменную с конкретным значением. В функции конструкция switch - case.
Значение переменной, пусть будет 2. Он корректно в отладчике прилетает на этот же CASE. Однако, потом случается чудо и после break он летит через несколько case и выполняет еще один и тот не полностью...
Т.е. перескакивает. В итоге на выходе в регистрах получаются не не значения, которые нужны...
Чудес не бывает. Вам сначала нужно выключить все сегменты в портах, а затем уже зажигать.
Starichok51 опередил.)
Добавлено after 7 minutes 6 seconds:
А вообще, это делается не так. Обычно в хедере расписывается подключение индикатора и всё. Программа же не меняется. И пофигу, общий анод или катод, один порт, два или три. И кол-во разрядов индикатора.
Последний раз редактировалось OKF Пн мар 13, 2023 21:58:59, всего редактировалось 1 раз.
Вот и все. Понятно, что надо и сегменты выключать, но при инциализации они выключены все. Это первая команда, которая включает их. БОльше нигед ничего пока нет. Просто хочу зажечь один индикатор и все.
Добавлено after 1 minute 54 seconds:
И да, я допишу в функцию изначальное гашение всех сегментов. Это СПАСИБО, что посказали и напомнили. )
Добавлено after 1 minute 15 seconds:
У меня почему то , что в отладчике перескакивает при нажатии F11 через несколько кейсов. Что залитая в МК показывает хреноту.
Добавлено after 5 minutes 31 second:
OKF писал(а):А вообще, это делается не так. Обычно в хедере расписывается подключение индикатора и всё
Очередная задача...
Кстати, с первой был простой косяк: оптимизация компилияции в АВРстудио почему то жутко урезала код, что начлало скакаять по кейсам в свитч не понятно куда. Убрал оптимизацию и все стало так, как нужно.
Теперь я хочу разбивать число неопределенного количества разрядов на цифры. Мне нужен только алгоритмический принцип, а не код. Понимаю, что надо использовать деление на 10 и остаток от деления на 10. Много чего уже посмотрел, но все равно плохо доходит. Думаю, что и сам скоро разберусь, однако не помешает и толчек в нужном направлении.
Суть в том, что я не знаю, сколько разрядов у числа изначально. Может быть три, а может пять. Мне надо его разбить на отдельные цифры и вывести корректно на индикатор.
Опишите суть, или ткните, где это максимально понятно расписано.
Добавлено after 12 minutes 22 seconds:
З.Ы. Число целое. До 5 разрядов.
кроме деления часто используют вычитание.
если 5 разрядов, то сначала вычитают 10000, пока есть от чего вычитать.
потом вычитают 1000, потом 100, и наконец 10.
после вычитания десятков остаются единицы числа.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
с /10 и %10 и получаете разряды (напр. масив цифр), с максимально возможного количества цифр для отображения на дисплее. Затем (при необходимости), удаляете незначащие нули (leading_zeros) (заменяете их пустым символом).
напр.: 123456 в 8-digit 7-сегментный дисплей
123456 -> 0, 0, 1, 2, 3, 4, 5, 6 -> ' ', ' ', 1, 2, 3, 4, 5, 6
а затем последовательно вывести их на дисплей.
Последний раз редактировалось veso74 Ср мар 15, 2023 20:14:50, всего редактировалось 1 раз.
[uquote="Starichok51",url="/forum/viewtopic.php?p=4386512#p4386512"]кроме деления часто используют вычитание.[/uquote]
Т.е. каждый раз сравнивают (проверяют), что разность больше чем вычитаемое, тогда продолжают вычитать. Накапливают переменную. и так далее с каждым разрядом?