num.c

来自「在arm上模拟数字示波器」· C语言 代码 · 共 73 行

C
73
字号
#include "Glib.h"
void GUI_DispDecAt(I32 v, I16P x, I16P y, U8 Len) {
	char ac[12];
	char* s = ac;
  GUI_AddDecShift(v, Len, 0, &s);
  Disp_String(ac, x, y);
}
const U32 GUI_Pow10[10] = {
  1 , 10, 100, 1000, 10000,
  100000, 1000000, 10000000, 100000000, 1000000000
};
void GUI_AddDecShift(I32 v, U8 Len, U8 Shift, char**ps) {
  char c,GUI_DecChar;
  long d;
  GUI_DecChar = '.';
  if (Shift) Len--;
  if ((U32)v >= GUI_Pow10[Len])
	v = GUI_Pow10[Len]-1;
  while (Len) 
  {
    if (Len--==Shift)
      *(*ps)++ = GUI_DecChar;
    d = GUI_Pow10[Len];
    c = (char) (v/d);
    v -= c*d;
    *(*ps)++ = c+'0';
  }
  **ps = 0;
}





/////////////////////////////////////////////////////////////////////////
extern void GUI_DispBinAt(U32 v, I16P x, I16P y, U8 Len) {
	char ac[33];
	char* s = ac;
  GUI_AddBin(v, Len, &s);
  Disp_String(ac, x, y);
}
void GUI_AddBin(U32 v, U8 Len, char**ps) 
{
  char *s = *ps;
  (*ps) += Len;
  **ps     = '\0';     /* Make sure string is 0-terminated */
  while(Len--) {
    *(s+Len) = (char)('0'+ (v&1));
    v>>=1;
  }
}
//////////////////////////////////////////////////////////////////////
extern void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len) {
  char ac[9];
	char* s = ac;
  GUI_AddHex(v, Len, &s);
  Disp_String(ac, x, y);
}
static const char acHex[16] =  {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

void GUI_AddHex(U32 v, U8 Len, char**ps) {
  char *s = *ps;
  if (Len > 8)
    return;
  (*ps) += Len;
  **ps     = '\0';     /* Make sure string is 0-terminated */
  while(Len--) {
    *(s+Len) = acHex[v&15];
    v>>=4;
  }
}
//////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?