реклама на сайте
подробности

 
 
> Гашение незначащих нулей, кто как делает?
sKWO
сообщение Aug 31 2008, 10:55
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Пока вижу два варианта вывода числа на ЖКИ с гашением незначащих нулей:
Код
#include <stdlib.h>
div_t dtmp;
char str_tmp[6];
str_tmp[5] = 0;  
  OborotiZaMin = (OborotiZaMinConst + (PPeriod >> 1)) / PPeriod;

#if   0

  dtmp = div(OborotiZaMin, 10);
  str_tmp[4] = dtmp.rem + '0';  
  dtmp = div(dtmp.quot, 10);
  str_tmp[3] = dtmp.rem + '0';  
  dtmp = div(dtmp.quot, 10);
  str_tmp[2] = dtmp.rem + '0';  
  dtmp = div(dtmp.quot, 10);
  str_tmp[1] = dtmp.rem + '0';  
  str_tmp[0] = dtmp.quot + '0';  
// Гашение незначащих нулей
  for (i = 0; i < 4; ++i)
    if (str_tmp[i] == '0')
      str_tmp[i] = ' ';
    else
      break;

#else
  
  i = 0;
  dtmp = div(OborotiZaMin, 10000);
  if (dtmp.quot != 0)
    str_tmp[i++] = dtmp.quot + '0';

  dtmp = div(dtmp.rem, 1000);
  if (i || (dtmp.quot != 0))
    str_tmp[i++] = dtmp.quot + '0';
    
  dtmp = div(dtmp.rem, 100);
  if (i || (dtmp.quot != 0))
    str_tmp[i++] = dtmp.quot + '0';
    
  dtmp = div(dtmp.rem, 10);
  if (i || (dtmp.quot != 0))
    str_tmp[i++] = dtmp.quot + '0';
    
  str_tmp[i++] = dtmp.rem + '0';
  str_tmp[i] = 0;
    
#endif
    // LCD_Write

Дабы на ЖКИ небыло такого, например "0750", а было такое "750".
Какой алгоритм используете?


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Aug 31 2008, 15:41
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Ох, что-то, вы, господа, мрачно тут начали, деление и т.д.

Вот - без лидирующих нулей для unsigned short. Заточена под IAR'овское соглашение о связях.
Код
    RSEG CODE:CODE:NOROOT(1)
    PUBLIC _i2a
//   13 __z void i2a(char *s, UINT16 v)
_i2a:
//   14 {
//   15   UINT8 m0; //R16
//   16   UINT8 m1; //R17
//R18-R20 - 24bit fmul result
//R21 - c,b,a ->06 8D B9
//R22 - zero reg
    CLR    R22
    LDI    R21,0x06
//  v=__multiply_unsigned(m0,0x06)+3;
    MUL    R16,R21
    MOVW    R19:R18,R1:R0
    SUBI    R18,0xFD
    SBCI    R19,0xFF
//  v+=__multiply_unsigned(m1,0x06)<<8;
    MUL    R17,R21
    MOV    R20,R1
    ADD    R19,R0
    ADC    R20,R22
//  v+=__multiply_unsigned(m1,0x8D);
        LDI     R21, 0x8D
        MUL     R17, R21
        ADD     R18, R0
        ADC     R19, R1
    ADC    R20, R22
//  v+=__multiply_unsigned(m0,0x8D)>>8;
        MUL     R16, R21
        ADD     R18, R1
        ADC     R19, R22
    ADC    R20, R22
//  v+=__multiply_unsigned(m1,0xB9)>>8;
    LDI    R16,0x10    ; Counter & flags
    LDI    R21,0xB9
        MUL     R17, R21
        LDI     R21, 10        ; Next multiplicand
        ADD     R18, R1
        ADC     R19, R22
    ADC    R20, R22
    BREQ    ??i2a_0
    SUBI    R20,208
    ST    Z+,R20
    INC    R16
??i2a_0:
//   39     UINT16 hv;
//   40     UINT8 bv;
//   41     bv=v>>8;
        MOV     R17, R19
//   42     v=__multiply_unsigned(v,10);
        MUL     R18, R21
        MOVW    R19:R18, R1:R0
//   43     hv=__multiply_unsigned(bv,10);
        MUL     R17, R21
//   44     v+=(hv&0xFF)<<8;
        ADD     R19, R0
//   45     if (SREG_Bit0) hv+=0x100;
    ADC    R1, R22
//   46     bv=hv>>8;
        MOV     R17, R1
//   47     if ((i|bv)&0x8F)
        MOV     R20, R1
        OR      R20, R16
        ANDI    R20, 0x8F
        BREQ    ??i2a_1
//   48     {
//   49       *s++=bv+'0';
    SUBI    R17,208
    ST    Z+,R17
//   50       i|=1;
//        ORI     R18, 0x01
??i2a_1:
//   51     }
//   52     i<<=1;
    ROL    R16
//   54   while(!SREG_Bit0);
        BRBC    0, ??i2a_0
//   55   *s=0;
        ST      Z, R22
//   56 }
        RET


Правда, требует аппаратного умножителя, но теперь уже и камней нету без него...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sKWO   Гашение незначащих нулей   Aug 31 2008, 10:55
- - alux   Цитата(sKWO @ Aug 31 2008, 13:55) Дабы на...   Aug 31 2008, 12:39
- - Павлик   я просто сравниваю число , и если оно равняется 0х...   Aug 31 2008, 13:26
|- - zltigo   Цитата(Павлик @ Aug 31 2008, 15:26) ...ес...   Aug 31 2008, 13:45
|- - rezident   Цитата(zltigo @ Aug 31 2008, 19:45) Здоро...   Aug 31 2008, 15:14
|- - zltigo   Цитата(rezident @ Aug 31 2008, 17:14) Как...   Aug 31 2008, 15:20
- - aesok   Цитата(sKWO @ Aug 31 2008, 14:55) Какой а...   Aug 31 2008, 13:31
- - Aesthete Animus   Ну а кто запрещает пользоваться стандартной snprin...   Aug 31 2008, 14:09
|- - aaarrr   Цитата(Aesthete Animus @ Aug 31 2008, 18...   Aug 31 2008, 14:11
- - aesok   ЦитатаНу и унивесализм, как по радиксу, так и по к...   Aug 31 2008, 14:14
|- - _Pasha   Цитата(aesok @ Aug 31 2008, 18:14) Обе ис...   Aug 31 2008, 15:09
|- - sKWO   Цитата(Rst7 @ Aug 31 2008, 19:41) Ох, что...   Jul 7 2013, 11:55
- - Павлик   Я тут спорить не собираюсь , сам начинающий и мног...   Aug 31 2008, 15:43
|- - zltigo   Цитата(Павлик @ Aug 31 2008, 17:43) Предл...   Aug 31 2008, 16:22
- - defunct   Код// convert and output decimal value int IntToSt...   Aug 31 2008, 18:00
- - ReAl   Ну и до кучи - чтобы все варианты были и чтобы был...   Aug 31 2008, 20:08
|- - 777777   У меня сделано два отдельных преобразования: целое...   Sep 1 2008, 13:01
- - rx3apf   Какие-то все жутковатые алгоритмы... Я вот всю жиз...   Jul 7 2013, 12:19
|- - toweroff   Цитата(rx3apf @ Jul 7 2013, 16:19) заменя...   Jul 7 2013, 13:33
- - V.K   Никогда не думал, что подобные вопросы могут быть ...   Jul 7 2013, 13:50
|- - sKWO   Цитата(V.K @ Jul 7 2013, 17:50) Никогда н...   Jul 7 2013, 14:21
- - zöner   вот тут неплохо разжованы разные алгоритмы преобра...   Jul 7 2013, 19:33
- - Rst7   QUOTE (sKWO @ Jul 7 2013, 14:55) Чисто из...   Jul 8 2013, 07:42
- - sKWO   Цитата(Rst7 @ Jul 8 2013, 11:42) Ничего у...   Jul 8 2013, 10:03


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 09:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01697 секунд с 7
ELECTRONIX ©2004-2016