铛铛铛挡 发表于 2016-8-17 17:10

sprintf()函数在LCD应用中遇到问题

本帖最后由 铛铛铛挡 于 2016-8-17 17:19 编辑

先贴出我的sprintf()函数在12864液晶显示程序中的应用
void display()                                                   //液晶显示函数
{
               static unsigned char str;            //创建长度为20的字符形数组来存放数据
                __no_operation();                        //1.在此处设置断点
                float a=1.23;                              //创建一个浮点数,用长度20的数组存放应该足够了
                __no_operation();                        //2.在此处设置断点
               sprintf(str,"%f",a);                        //将获取的数值转换为字符型数组
               __no_operation();                         //3.在此处设置断点
                write_hanzi((uchar *)str);               //写入函数,将字符写入12864

}
问题来了:分别在那3个断电观察参数的值,很奇怪,
a不是1.23;
str的值也不是0(我用了static,所以默认值应该是0);
经过sprintf()之后,a的值反而变成了332.0
excuse me????
程序运行到最后,液晶屏没有显示东西。
贴图:
a不是1.23;
str的值也不是0;
经过sprintf()之后,a的值反而变成了332.0

还有一个情况:
我只是将上面那个程序改了float-int,f-d,1.23-123
液晶上居然能显示出123,然后表达式却观察不到变化!
void display()                                                   //液晶显示函数
{
               static unsigned char str;            //创建长度为20的字符形数组来存放数据
                __no_operation();                        //1.在此处设置断点
                int a=123;                                     //创建一个浮点数,用长度20的数组存放应该足够了
                __no_operation();                        //2.在此处设置断点
               sprintf(str,"%d",a);                        //将获取的数值转换为字符型数组
               __no_operation();                         //3.在此处设置断点
                write_hanzi((uchar *)str);               //写入函数,将字符写入12864

}

lcofjp 发表于 2016-8-18 12:36

<div class='shownolgin' data-isdigest='no'>看看你有没有选择优化,调试的时候需要关掉优化再调试,否则调试起来会很诡异。</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

铛铛铛挡 发表于 2016-8-17 17:11

{:1_110:}请大侠路过帮忙解答!感激不尽!:shy:

shauew 发表于 2016-8-17 17:40

sprintf(str,"%f",a);
里面的%f 换成 %s试试看

铛铛铛挡 发表于 2016-8-17 18:07

shauew 发表于 2016-8-17 17:40
sprintf(str,"%f",a);
里面的%f 换成 %s试试看

刚刚试了,换了s的话,经过sprintf()函数后,a的值会变成464.0;

火火山 发表于 2016-8-17 19:22

铛铛铛挡 发表于 2016-8-17 18:07
刚刚试了,换了s的话,经过sprintf()函数后,a的值会变成464.0;

你好,我想请问一下,MSP430的库有sprintf的吗?你的sprintf函数是库自带的还是自己写的?sprintf函数打印在哪里显示?

我想学习一下,这样就不用经常用串口看数据了

shauew 发表于 2016-8-17 20:45

铛铛铛挡 发表于 2016-8-17 18:07
刚刚试了,换了s的话,经过sprintf()函数后,a的值会变成464.0;

唉没辙了 主要是看str变成什么吧

迈尔风随 发表于 2016-8-17 20:56

<div class='shownolgin' data-isdigest='no'>这个sprintf函数能用吗?先确定你这个函数输出正确了</div><script>showreplylogin();</script>

铛铛铛挡 发表于 2016-8-17 21:37

<div class='shownolgin' data-isdigest='no'>迈尔风随 发表于 2016-8-17 20:56
这个sprintf函数能用吗?先确定你这个函数输出正确了

#include<stdio.h>,sprintf()是这个头文件吧?
因为我试过如果用int型,是可以成功的,但是float就不行,很奇怪,通过断点调试居然不能看到str的值,但是却在液晶上显示出来了。
</div><script>showreplylogin();</script>

铛铛铛挡 发表于 2016-8-17 21:39

<div class='shownolgin' data-isdigest='no'>shauew 发表于 2016-8-17 20:45
唉没辙了 主要是看str变成什么吧

您看看我一开始那样定义有没有问题
static unsigned char str; 理论上str里的值都是0吧。。。。为什么观察不到呢?、
float a=1.23;这样定义,结果在表达式窗口看到的值也不对。。。。。。这。。。
</div><script>showreplylogin();</script>

铛铛铛挡 发表于 2016-8-17 21:43

<div class='shownolgin' data-isdigest='no'>火火山 发表于 2016-8-17 19:22
你好,我想请问一下,MSP430的库有sprintf的吗?你的sprintf函数是库自带的还是自己写的?sprintf函数打 ...

我也还没成功呢。用sprintf()可以打印int,但是float就不行了,不知道是不是碰巧的?。
你试试
#include<stdio.h>
再用sprintf()看能不能用?
我是把数字(int/float)用sprintf转换成char,然后用液晶显示这个char</div><script>showreplylogin();</script>

火火山 发表于 2016-8-17 22:51

<div class='shownolgin' data-isdigest='no'>铛铛铛挡 发表于 2016-8-17 21:43
我也还没成功呢。用sprintf()可以打印int,但是float就不行了,不知道是不是碰巧的?。
你试试
#incl ...

sprintf函数打印在哪里啊?</div><script>showreplylogin();</script>

铛铛铛挡 发表于 2016-8-17 23:38

<div class='shownolgin' data-isdigest='no'>火火山 发表于 2016-8-17 22:51
sprintf函数打印在哪里啊?

就在str里啊,把str想象成显示器</div><script>showreplylogin();</script>

shauew 发表于 2016-8-18 08:31

<div class='shownolgin' data-isdigest='no'>铛铛铛挡 发表于 2016-8-17 21:39
您看看我一开始那样定义有没有问题
static unsigned char str; 理论上str里的值都是0吧。。。。为什 ...

static unsigned char str
如果想初始化为0 可以这样写
static unsigned char str = {0};</div><script>showreplylogin();</script>

lcofjp 发表于 2016-8-18 12:35

<div class='shownolgin' data-isdigest='no'>shauew 发表于 2016-8-18 08:31
static unsigned char str
如果想初始化为0 可以这样写
static unsigned char str = {0};

静态变量和全局变量默认初始化为0</div><script>showreplylogin();</script>

ywlzh 发表于 2016-8-18 15:16

<div class='shownolgin' data-isdigest='no'>现在看到的一些例程中用的sprintf()函数,大多都是字符串的操作

比如,先申请一定的内存,做两个字符串的合并,再用别的函数打印这个合并后的字符串</div><script>showreplylogin();</script>

shauew 发表于 2016-8-18 15:57

<div class='shownolgin' data-isdigest='no'>lcofjp 发表于 2016-8-18 12:35
静态变量和全局变量默认初始化为0

实际应用中要看编译器的, 我用arm gcc的时候如果不赋初值,那么里面的值会随机。</div><script>showreplylogin();</script>

铛铛铛挡 发表于 2016-8-19 17:22

<div class='shownolgin' data-isdigest='no'>lcofjp 发表于 2016-8-18 12:36
看看你有没有选择优化,调试的时候需要关掉优化再调试,否则调试起来会很诡异。

这个倒是没试过,请问在哪里关掉优化呀?</div><script>showreplylogin();</script>

lcofjp 发表于 2016-8-19 17:28

<div class='shownolgin' data-isdigest='no'>铛铛铛挡 发表于 2016-8-19 17:22
这个倒是没试过,请问在哪里关掉优化呀?

我也不知道,没用过ccs</div><script>showreplylogin();</script>

Gen_X 发表于 2024-7-15 11:17

<div class='shownolgin' data-isdigest='no'><p>用到浮点需要&ldquo;string.h&rdquo;,并且需要在程序配置中申明启用sprint 关于float的库</p>
</div><script>showreplylogin();</script>
页: [1]
查看完整版本: sprintf()函数在LCD应用中遇到问题