sprintf在51单片机中转换字符出错问题解决

发布者:MindfulCreator最新更新时间:2018-05-14 来源: eefocus关键字:sprintf  51单片机  转换字符 手机看文章 扫描二维码
随时随地手机看文章

sprintf是C语言库中具有转换数据类型的功能函数,出现一种情况,

在51单片机中,定义unsigned  char   temp;

然后 想用串口直接把temp 以十进制数是、形式打印出来,是先这样转换的 sprintf((char*)tem,"%d",temp);即先把temp转换成十进制数字符tem,然后再通过串口输出tem,然而串口输出的竟然有乱码,而且和temp的值也不对应;

查找原因:原来%d,代表的是将int型数据转换为十进制字符的作用,既然是int型,那他占用空间为至少2个字节,那么我们定义的temp仅是unsigned char 占空间一字节,所以函数在转换时,会错误的转换temp空间外的一字节空间的数据,这是未知的数据,所以会出现打印乱码情况,那么把unsigned char temp;改为 unsigned int temp 后,再次测试

果然输出正确无误!


关键字:sprintf  51单片机  转换字符 引用地址:sprintf在51单片机中转换字符出错问题解决

上一篇:51单片机用定时器0实现流水灯
下一篇:51单片机 bit定义标志位无效原因

推荐阅读最新更新时间:2024-03-16 16:03

MCS-51单片机汇编语言:算数运算指令有哪些?
加法指令(Addtion) ADD A, Rn ; A←(A)+(Rn) ADD A, @Ri ;A←(A)+((Ri)) ADD A, direct ;A←(A)+(direct) ADD A, #data ;A←(A)+#data 带进位加法指令 ADDC A, Rn ; A←(A)+(Rn)+(Cy) ADDC A, @Ri ;A←(A)+((Ri )) +(Cy) ADDC A, direct ;A←(A)+(direct) +(Cy) ADDC A, #data ;A←(A)+#data +(Cy) 加1指令 INC A
[单片机]
51单片机超声波模块数码管程序分享
超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,写的是我使用的是慧净开发板,共阴数码管。 //超声波模块程序 //Trig = P2^0 //Echo = P3^2 #include #define uchar unsigned char #define uint unsigned int unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的码表 uint ti me = 0; uintTImeH = 0; uintTImeL = 0; uint succeed_flag;
[单片机]
<font color='red'>51单片机</font>超声波模块数码管程序分享
51单片机-按键模式
1.前讲回顾 在上一讲的代码里如果我们按下按键一直不松手,则灯会一直闪烁。这是因为“稳定接触状态”一直保持着长时间的低电平,所以程序的二次“if(KEY4==0)”判断一直满足条件就会在“LED2=0;”和“LED2=1;”之间来回切换,再加上50ms延时才会保持亮一段时间灭一段时间所体现的LED闪烁。 2.支持连按概念 这种按键模式就叫做“支持连按”,所谓支持连按即我们使用遥控器放大电视的音量时只需按住“+”键不放,屏幕上的音量值在一直累加,松手后就停止累加了,这种就叫做按键支持连按功能。 3.不支持连按概念 另一种按键模式叫做“不支持连按”,例如我们用的电磁炉上的“+”键,按下不松手时数值只加一次就不加了,只有松手后
[单片机]
基于AT89C51单片机的PT100温度检测系统
一.系统概述 系统使用的模块有AT89C51单片机+8位共阴数码管+ADC0804模数转换+PT100温度检测。 系统内使用AT89C51单片机作为主控,使用PT100来检测温度,检测到的温度模拟信号会通过ADC0804进行数据转换,转换得到的数据经过单片机的处理后传输到数码管上进行显示,显示屏能够显示的温度精度为0.1℃。 二.仿真概述 1.8位共阴极书数码管显示检测到的温度数据。 2.通过PT100温度传感器检测环境温度,通过调节电位器来模拟温度的改变。 3.通过ADC0804可以将采集到的模拟温度数据转换为数字温度数据。 三.程序设计 使用Keil 51进行程序设计,打开Proteus时程序是默认烧录的状
[单片机]
基于AT89C<font color='red'>51单片机</font>的PT100温度检测系统
MCS51单片机在数据采集监控系统中的应用
1.引言 MCS51单片机标准构成只有一组全双工UART串行口,P3.0-RXD收、P3.1-TXD发,如果要完成多路串口收发,一般使用外部扩展芯片,例如:GM8123/25,完成一扩多路串口,但是,由于增加扩展芯片,造成硬件成本增加,PCB板面增大,抗干扰性下降等不良因素,因此能尽量使用现有串口,利用分时切换技术,完成串行口不同类型,不同端口的数据传送是优先选择。 2.硬件功能简述 本设计用于数据采集监控系统如图1所示。采用485串行口完成数据采集,和232串口输出打印功能,这样使得接口连线简单,可靠性高。 RS-485工作特征:发送端:逻辑“1″两线间的电压差为+2至6V表示;逻辑”0″以两线间的电压差为-2至6V表示
[单片机]
MCS<font color='red'>51单片机</font>在数据采集监控系统中的应用
51单片机实现能设置速度档位的数码管倒计时程序
一、使用proteus绘制简单的电路图,用于后续仿真 二、编写程序 /******************************************************************************************************************** ---- @Project: LED-74HC595 ---- @File: main.c ---- @Edit: ZHQ ---- @Version: V1.0 ---- @CreationTime: 20200607 ---- @ModifiedTime: 20200619
[单片机]
<font color='red'>51单片机</font>实现能设置速度档位的数码管倒计时程序
51单片机驱动1602液晶的C程序
# include AT89x51.h /***************************************** 电路连接 P1------DB0~DB7 P2.0------RS P2.1------RW P2.2------E *****************************************/ # define LCD_DB P1 sbit LCD_RS=P2^0; sbit LCD_RW=P2^1; sbit LCD_E=P2^2; /******定义函数****************/ # define ucharunsign
[单片机]
80C51单片机模拟I2C总线的主机程序分享
I2C总线协议程序 在使用的过程中一定要注意时序、时间的问题。 i2c.c /* I2C.c 标准80C51单片机模拟I2C总线的主机程序 All rights reserved. */ #include “I2C.h” //定义延时变量,用于宏I2C_Delay() unsigned char data I2C_Delay_t; /* 宏定义:I2C_Delay() 功能:延时,模拟I2C总线专用 */ #define I2C_Delay() { I2C_Delay_t = (I2C_DELAY_VALUE); while ( --I2C_Delay_t != 0 ); } /* 函数:I2C_Init() 功能:I2C
[单片机]
80C<font color='red'>51单片机</font>模拟I2C总线的主机程序分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved