微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助c51 lcd12864 用sprintf函数显示数字

求助c51 lcd12864 用sprintf函数显示数字

时间:10-02 整理:3721RD 点击:
为什么 在51单片机我用sprintf函数格式化数字输出到字符串中,然后用12864显示 最大数字只能显示到32767,超过这个数就显示不正常了
unsigned int a=39676;
char s[6];
sprintf(s,"%05d",a);
show_string(0x94,s);
有人说是int  和  unsigned的问题
我用vc++,测试没问题,正常显示
#include "stdio.h"
int main()
{
   int a=65389;
   char s[6];
  sprintf(s,"%d",a);
  printf("%s\n",s);
  return 0;
}
之后我把显示数字函数改成了 ,可以正常显示
void show_number2(uchar add,unsigned int n)
{
char s[6];
char i;
i=0;
s[i++]=n/10000+48;
s[i++]=n%10000/1000+48;
s[i++]=n%1000/100+48;
s[i++]=n%100/10+48;
s[i++]=n%10+48;
s[i++]=0;
show_string(add,s);
}
帮我分析下sprintf为什么不能显示大于32767的数字

因为你给sprintf函数传递的参数是int型啊。int型的有效范围是-32768~+32767。
注意  sprintf(s,"%05d",n); //用的是d,代表int
自己想想把一个unsigned int型当做signed int型传递是个什么结果。
来自百度搜索的

一语道破天机啊,%d:输入输出为整形 %ld 长整型 %hd短整型 %hu无符号整形 ,太感谢你了

和楼上意见一致 这是正常的小错误

挺好的!我已下载,里面程序可以直接运行!

Thanks

6666666666666666666666666666666

谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top