Views: 736
Для отладки часто необходимо на дисплей вывести данные не только в десятичном виде, но и шестнадцатеричном или двоичном виде.
Ниже приведены три функции которые позволяют (совместно с графической библиотекой) вывести на дисплей исследуемую величину.
Преобразование 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); // единицы
}//