51单片机 lcd12864显示 用sprintf显示数字,只能显示小于32767的数,大于这

51单片机lcd12864显示用sprintf显示数字,只能显示小于32767的数,大于这个数的数还是显示32767,而且前面有负号... 51单片机 lcd12864显示 用sprintf显示数字,只能显示小于32767的数,大于这个数的数还是显示32767,而且前面有负号 展开
 我来答
百度网友977a197
2014-02-01
知道答主
回答量:15
采纳率:0%
帮助的人:5.4万
展开全部
数据溢出了,也就是说lcd12864显示数的范围只有 32767~ -32768
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一剑出血
高粉答主

2014-02-01 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
因为你给sprintf函数传递的参数是int型啊。int型的有效范围是-32768~+32767。
追问
我把它改成了unsigned int 
void show_number(uchar add, unsigned int n)
{
unsigned char s[6];
sprintf(s,"%05d",n); /
show_string(add,s);
}
追答
我说的你听不懂么?自己想想把一个unsigned int型当做signed int型传递是个什么结果。
自己去查查sprintf()函数的原型。

另外,你知道这两种类型在存储器中的格式吗?
考考你,例如0x8765,作为unsigned int型代表多少,作为signed int型代表多少?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2014-02-02 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38386
国家科技进步奖

向TA提问 私信TA
展开全部
你不用这个函数,自己做一个显示函数就可以了,或者你可以修改这个函数的源程序。
追问
我用n/1000方法是可以的
追答
当然这也是一种方法,也就是送两次显示就可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式