반응형
#define TRUE	1
#define	FALSE	0

void printf(unsigned char code *pFmt, unsigned int wVal)
{
	unsigned char ucBff, ucDisp;
	unsigned char bNotZero = FALSE, bHex = FALSE;
	unsigned int wDivider = 10000;

	while(ucBff = *(pFmt++))
	{
		if(ucBff == '%') // check special case
		{
			switch( *(pFmt++) ) // check next character
			{
				case 'x': // hexadecimal number
				case 'X':
					wDivider = 0x1000;
					bHex = TRUE;
				case 'd': // decimal number
				case 'i':
		
				if(wVal)
				{
					while(wDivider)
					{
						ucDisp = wVal / wDivider;
						wVal = wVal % wDivider;
		
						if(ucDisp)
						{
							bNotZero = TRUE;
						}
			
						if(bNotZero)
						{
							if (ucDisp > 9)
							{
								putchar(ucDisp - 0x0a + 'A');
							}
							else
							{
								putchar(ucDisp + '0');
							}
						}			
			
						if(bHex)
						{
							wDivider /= 0x10;
						}
						else
						{
							wDivider /= 10;
						}
					}	
				}
				else
				{
					putchar('0');	// Send '0'
				}
				break;
			} 
		}
		else 
		{
			putchar(ucBff); // Send Byte
		}
	} 
}
반응형

'개발모듈 > 펌웨어 모듈' 카테고리의 다른 글

- 타이머 딜레이  (0) 2016.06.03
- WS2812B(RGB-LED) PIC  (0) 2016.05.24
- FND (7-Segment) 모듈  (0) 2016.03.22
- 타이머 처리  (0) 2016.02.29
- UART 송신처리  (0) 2016.02.27
Posted by 메가아재
,