Визуализация данных

Views: 718


Для отладки часто необходимо на дисплей вывести данные не только в десятичном виде, но и шестнадцатеричном или двоичном виде.

Ниже приведены три функции которые позволяют (совместно с графической библиотекой) вывести на дисплей исследуемую величину.

Преобразование 16 бит в 4 HEX – шестнадцатеричный вид

void bin_HEX (unsigned int chisloin)
{
  char   edin;
    edin=chisloin>>12;
    if(edin<10)SendLCDd (edin+0x30);
    else SendLCDd (edin+0x37);

    edin=chisloin>>8;
    edin=(edin & 0b00001111);
    if(edin<10)SendLCDd (edin+0x30);
    else SendLCDd (edin+0x37);

    edin=chisloin>>4;
    edin=(edin & 0b00001111);
    if(edin<10)SendLCDd (edin+0x30);
    else SendLCDd (edin+0x37);

    edin=(chisloin & 0b00001111);
    if(edin<10)SendLCDd (edin+0x30);
    else SendLCDd (edin+0x37);

}//------------------------------------------------------------------------

Вывод на дисплей двоичных 16 битных чисел – двоичный вид – 16 BIN.

void bin_bin (unsigned int chisloin)
{
  char   a;
  for(a=0;a<16;a++)
  {
      if(chisloin & 0x8000)
          OledSymbol ('1',1,0,0,0);
      else
          OledSymbol ('0',1,0,0,0);
      chisloin<<=1;
  }
}//------------------------------------------------------------------------

Вывод в десятичном виде – 5 DEC

/*============================================================================*/
/* где,
*  data число в диапазоне от -32768 до +32767
*  comma - положение десятичной точки 0- нет точки, 1-5 перед 1-6 знакоместом
*  если 
*  nom - количество выводимых символов 0/1 - один символ 2-6 символа
*  razm - размер выводимых цифр 0/1-нормальные, 2-7 увеличение в соответствующее раз
*/
void bin_dec(int data,char comma,char nom,char razm)	// вывод на дисплей/режим
{
struct
    {
        unsigned MINS:1;
    }Bit;
    int unsigned data01;
    char dest,sotn,tysc,dtys,stys;
    Bit.MINS=0;

    if (data<0) // если отрицательно
    {
        if (data==0x8000)data01=data;
        else data01=-data;
        Bit.MINS=1; 	// признак отрицательного
    }
    else data01=data;
    // преобразование числа в символ
    stys=data01/100000+0x30;
    dtys=data01%100000/10000+0x30;
    tysc=data01%10000/1000+0x30;
    sotn=data01%1000/100+0x30;
    dest=data01%100/10+0x30;
 //   edin=data%10+0x30;
// гашение не значащих нулей
    if (stys==0x30&&comma<5)// гашение не значащих нулей
    {
        stys=' ';
        if (dtys==0x30&&comma<4)// гашение не значащих нулей
        {
            dtys=' ';
            if (tysc==0x30&&comma<3)
            {
                tysc=' ';
                if (sotn==0x30&&comma<2)
                {
                    sotn=' ';
                    if (comma==0&&comma<1)
                    {
                        if (dest==0x30)dest=' ';
                    }
                }
            }
        }
    }
// формирование символа минус для отрицательных чисел
    if (Bit.MINS==1)// формирование символа минус для отрицательных чисел
    {

        if (dtys!=' ')
        {
            stys='-';
        }
        else
        {
            if (tysc!=' ')
            {
                dtys='-';
            }
            else
            {
                if (sotn!=' ')
                {
                        tysc='-';
                }
                else
                {
                    if (dest!=' ')
                    {
                        sotn='-';
                    }
                    else
                    {
                        dest='-';
                    }
                }
            }
        }

// прорисовка чисел
    }
    if (comma==6&&nom == 6)  OledSymbol (',',1,1,razm,razm);// прорисовка запятой

    if (nom == 6)
    {
        if (dest!=0x20||comma == 6) OledSymbol (stys,1,1,razm,razm);// десятки тысяч
               else OledSymbol (' ',1,1,razm,razm);
    }

    if (comma==5&&nom >= 5)  OledSymbol (',',1,1,razm,razm);// прорисовка запятой

    if (nom >= 5)
    {
        if (dest!=0x20||comma >= 5) OledSymbol (dtys,1,1,razm,razm);// десятки тысяч
               else OledSymbol (' ',1,1,razm,razm);
    }

    if (comma==4&&nom >= 4)    OledSymbol (',',1,1,razm,razm);// прорисовка запятой

    if (nom >= 4)
    {
        if (dest!=0x20||comma >= 4) OledSymbol (tysc,1,1,razm,razm);// тысячи
               else OledSymbol (' ',1,1,razm,razm);
    }

    if (comma==3&&nom >= 3)     OledSymbol (',',1,1,razm,razm);// прорисовка запятой

    if (nom >= 3)
    {
        if (dest!=0x20||comma >= 3) OledSymbol (sotn,1,1,razm,razm);// сотни
               else OledSymbol (' ',1,1,razm,razm);
    }

    if (comma==2&&nom >= 2)    OledSymbol (',',1,1,razm,razm);// прорисовка запятой

    if (nom >= 2)
    {
        if (dest!=0x20||comma >= 2) OledSymbol (dest,1,1,razm,razm);// десятки
               else OledSymbol (' ',1,1,razm,razm);
    }

    if (comma==1)    OledSymbol (',',1,1,razm,razm);// прорисовка запятой
                    OledSymbol (data01%10+0x30,1,1,razm,razm); // единицы

}//

Поделись этим!