c51中打印

使用printf:

把以下代码,放到uart.h中,左右就是把printf中的putchar重定向到输出串口中。

void uart_putchar(u8 i)
{
	ES = 0;
	TI = 0; //清空发送完中断请求标志位
	SBUF = i;  //将数据放入寄存器发送
	while(TI == 0);//等待发送完毕,发送完毕 TI == 1
	TI = 0; //清空发送完中断请求标志位
	ES = 1;
}

//重定向
u8 putchar(u8 c)
{
	uart_putchar(c);
	return c;
}

printf中的格式问题:

51单片机与标准C有区别,c语言中char、short、int都能用%d,在c51中有他自己的一套标准。
KEIL里扩展出了b,h,l来对输入字节宽的设置:
(1)b:八位
(2)h:十六位
(3)l:三十二位

unsigned char 、short、int 的字节数:

    printf("char:%bu\r\n",sizeof(u8));
    
    
    printf("short:%bu\r\n",sizeof(short));
    
    
    printf("int:%bu\r\n",sizeof(int));
    

封装仿真时printf不能打印浮点数:

       

/*
	*解决无法打印浮点数
	*要打印的浮点数	保留的位数	存到res数组中
*/
void sprintf_float(float value,u8 num,u8 *res)
{
	u8 buf[20]={0};
	int tmp,tmp1;
	u8 i = 0, index = 0;
	u16 t = 10;
	tmp = (int)value;
	sprintf(buf, "%d.", tmp);
	while(buf[i])
	{
		index++;
		i++;
	}
	for (i = 0, t = 10; i < num; i++,t*=10)
	{
		tmp1=(int)((value-tmp)*t)%10;
		sprintf(buf + index, "%d", tmp1);
		index++;
	}
	buf[index] = 0;
	if(res!=NULL&&index<=20)
	{
		memcpy(res, buf, index);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small_planet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值