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); // единицы }//