但是对于资源紧缺的单片机使用printf(),性能不佳。为了以后工作方便,把几个常用的打印函数记录下来。
非递归实现见另一个博客http://www.cnblogs.com/02xiaoma/archive/2012/06/22/2558618.html
不过该博客里的void printflt(double flt) 不能正确打印 如,1.000123,1.01 1.001,1.0001等小数点后紧跟0的格式
非递归
整数打印
void printHex(int integer) { unsigned char isnegative = 0,len = 0, intstr[10]={'\0'}; if(integer < 0) { isnegative = 1; integer = 0 - integer; } if (integer == 0) intstr[len++] = '0'; while (integer) { intstr[len++] = (integer % 10) + '0'; integer = integer / 10; } if(isnegative) intstr[len++] = '-'; //注意这个k的数据类型 使用k >= 0;为结束条件,k是有符号类型,若是无符号类型,k值回滚到最大值 for(len = len; len > 0; len--) { //printf("%c", intstr[len-1]); UartSend(UART1,&intstr[len-1],1); }}浮点数
void printFlt(float flt,int len) { int integer; integer = (int)flt; printHex(integer); //printf("."); UartSend(UART1,".",1); flt = flt - integer; //while(flt&&(len--)) while(flt) { flt = flt*10; integer = (int)flt + '0'; flt = flt - integer; //printf("%c",integer); UartSend(UART1,&integer,1); } }
