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 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。