不知道这样标题对不对?
单片机用的是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 上传
点击文件名下载附件
打印格式默认是 int
所以两个解决办法 1.前面加'b'表示UCHAR,例如 %02bd
2.printf("%02d",(unsigned int)num)
实际上都是强制转换的概念
也许你后面遇到 long的还会出错,所以补充一下,logn的需要加'l'转换
虽然还是不怎么懂,但是百度了一下,
buf改成char,效果一样
后面的格式%02hu也一样
这个问题不知道有没有好的解决方法,当时好像试过强制转换也不行
sprintf(buf,"DS16(115,147,'0-255:%02c',15); ",num);
这样试试
一周热门 更多>