51单片机用“sprintf”遇到问题,输出变量自动扩大256倍

2020-01-18 18:41发布

不知道这样标题对不对?

单片机用的是STC12C5608AD,
准备用他的4路PWM做一个电脑风扇的调速器。但是刚开始折腾显示部分就遇到了一个小麻烦。
屏幕用了两个,一个是MP3拆的12864液晶。显示正常。
另一个是某宝买的串口通讯彩屏。
在使用“sprintf”函数然后输出串口时,里面的变量会有一个随机的初始值(比如照片中原本应显示0,实际显示221)。然后变量会自动扩大256倍,实际显示出来的数值就是变量扩大256倍在加上这个初始值(比如第二张照片中原本应该显示1,现在显示“221+1*256”=477)
除了变量以外的数值显示正常!
折腾了好久也没有一个所以然……
所以请各位大神帮忙出出主意

相关代码:
#include "stdio.h"
uchar Aold=0,Bold=0,st=0,num=0;//±àÂëÆ÷²âÊÔ
uchar idata buf[64];

void SendData(uchar dat1)
{
        ES=0;
        TI=0;
        //TB8=~P;
        SBUF=dat1;
        while(!TI);
        TI=0;
}

void SendString(char *s)
{
        while(*s)
        {
        SendData(*s++);
        }
        delay(10);
}       

sprintf(buf,"DS16(115,147,'0-255:%02d',15); ",num);
SendString(buf);       

下面是图:

初始值应为0,实际显示221
P60222-121054.jpg (107.52 KB, 下载次数: 0) 下载附件 2016-2-22 12:56 上传

“完整”源代码,就算不能解决问题,也可以给初学者一个参考,(st7567液晶当做字符屏,中断方式驱动旋转编码器)
st7567点阵当字符.rar (10.79 KB, 下载次数: 9) 2016-2-22 13:02 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
bbglx
1楼-- · 2020-01-19 15:25
jswd0810 发表于 2016-2-22 14:29
sprintf(buf,"DS16(115,147,'0-255:%02c',15); ",num);
这样试试

%c不是打印字符的吗,楼主要的是数值。。。
lovelywwei
2楼-- · 2020-01-19 20:04
 精彩回答 2  元偷偷看……
sdf159372008
3楼-- · 2020-01-20 00:49
1a2b3c 发表于 2016-2-22 14:13
8位机
打印格式默认是 int

谢谢了。
两个方法都试过了,都可以用,但是用“unsigned int”没必要,而且占用资源多,所以选择了加一个“b”
sdf159372008
4楼-- · 2020-01-20 04:35
jswd0810 发表于 2016-2-22 14:29
sprintf(buf,"DS16(115,147,'0-255:%02c',15); ",num);
这样试试

这样不行。
显示到屏幕上是乱码
sdf159372008
5楼-- · 2020-01-20 07:43
lovelywwei 发表于 2016-2-22 15:07
/*******************************************
KEIL里扩展出了b,h,l来对输入字节宽的设置:
(1)b八位

谢谢了!这个比较全面
yangbo18416
6楼-- · 2020-01-20 07:56
之前还没注意到这个问题,学习了~~~

一周热门 更多>