一、int 占两个字节 范围:-32768~+32767
二、long占四个字节 范围:-2147483648~+2147483647
三、float占四个字节 范围:3.40E+38 ~ +3.40E+38
四、double占8个字节 范围:-1.79E+308 ~ +1.79E+308
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一。
在单机开发中经常使用串口调试或者收集实时各种数据类型不同的数据少不了使用printf()函数重定向,\ 但是对于资源紧缺的单片机使用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 printInterger(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);\ }\ }
————————————————
最近有同学在51单片机的学习过程中困扰如何使用单片机串口在上位机串口助手上输出显示的问题,其实很多开发环境都支持使用C语言里面最常用的printf函数,Keil中也不例外,不仅仅是最常用的STC89C52、keil下其他51系列单片机如STC12、STC15等同样适用。具体步骤如下:
在Keil中建立一个空的工程,加入一个源文件,如main.c 粘贴以下代码,编译生成hex文件,下载到单片机即可。
需要注意的是:1、需要包含stdio.h头文件 2、串口初试化函数中需要有 TI = 1;
废话少说,直接上代码:
#include \
————————————————