极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 81933|回复: 27

【LCD12864】发个很多朋友都能用的上的东西,int转char,用于12864显示数值~

  [复制链接]
发表于 2013-2-10 10:06:46 | 显示全部楼层 |阅读模式
很多人在玩12864的时候,都会发现不能直接显示字符,因为大多数12864类库没有显示数值的函数,那么我们就需要把int型变量转换成字符串,方法很简单,只要在代码末尾加上一个功能函数即可~

  1. char* itostr(char *str, int i)
  2. {
  3.     sprintf(str, "%d", i);
  4.     return str;
  5. }
复制代码


把上述代码放入程序末尾,在程序头定义一个char(ep.char a[25]),在读取完数值之后就可以轻松的用一行itostr(a,b);来转换,其中a是之前定义的char,b是数值变量,是不是很方便呢?

上个演示图,图为mini12864以及iRemote





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-4-21 00:12:13 | 显示全部楼层
这几天玩电子秤,用到double转string,可以直接调用。转自网上李鑫的blog,有链接,我在1.05测试通过。串口打印“131.24”
  1. /*
  2. http://www.lixin.me/blog/2013/04/21/29713
  3. 如果尝试使用sprintf()函数在arduino上进行对float指转换为一个字符串的话,你会发现,it doesn’t work。弄了很久,还以为是没学c++的原因。其实在arduino上,这个函数就是不对float起作用。
  4. 替代的方法是使用dtostrf()函数。

  5. char* dtostrf(double _val,signed char _width, unsigned char prec, char* _s)
  6. _val:要转换的float或者double值。
  7. _width:转换后整数部分长度。
  8. _prec:转换后小数部分长度。
  9. _s:保存到该char数组中。
  10. */

  11. void setup() {
  12.     Serial.begin(9600);
  13. }

  14. void loop() {
  15.   double test = 131.23789;
  16.   char test2[10] ;
  17.   
  18. dtostrf(test,4,2,test2);
  19.   Serial.println(test2);
  20.   delay(1000);
  21. }

复制代码
回复 支持 1 反对 0

使用道具 举报

发表于 2013-2-10 13:20:00 | 显示全部楼层
好帖顶一个
回复 支持 反对

使用道具 举报

发表于 2013-2-11 10:05:13 | 显示全部楼层
不错啊~这个12864和5110显示上的区别大吗?
回复 支持 反对

使用道具 举报

发表于 2013-3-23 14:09:26 | 显示全部楼层
很好很强大!!!
回复 支持 反对

使用道具 举报

发表于 2013-4-18 10:33:08 | 显示全部楼层
本帖最后由 瘦网虫 于 2013-4-18 12:51 编辑

int转string可以用
string(123456789)直接转。


======================================
附一个double转string的,感谢群里的@厦门-学长

测试未通过奇怪了。


  1. void setup() {
  2.   // put your setup code here, to run once:
  3.   double test = 1.23;
  4.   char test2[25] ;
  5.   dtostr(test2,test);
  6. }

  7. void loop() {
  8.   // put your main code here, to run repeatedly:
  9.   
  10. }



  11. char* dtostr(char *str, double d)
  12. {
  13.     sprintf(str, "%f", d);
  14.     return str;
  15. }
复制代码


$money = 123.1
$formatted = sprintf ("%06.2f", $money); // 此时变数 $ formatted 值为 "123.10"
$formatted = sprintf ("%08.2f", $money); // 此时变数 $ formatted 值为 "00123.10"
$formatted = sprintf ("%-08.2f", $money); // 此时变数 $ formatted 值为 "123.1000"
$formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比
%08.2f 解释:
%开始符
0是 "填空字元" 表示,如果长度不足时就用0来填满。
8格式化后总长度
2f小数位长度,即2位
第3行值为"00123.10" 解释:
因为2f是(2位)+小数点符号(1位)+前面123(3位)=6位,总长度为8位,故前面用[填空字元]0表示,即00123.10
第4行值为"123.1000" 解释:
-号为反向操作,然后填空字元0添加在最后面了
回复 支持 反对

使用道具 举报

发表于 2013-5-9 18:52:40 | 显示全部楼层
简直就是神器啊
回复 支持 反对

使用道具 举报

发表于 2013-9-2 14:20:14 | 显示全部楼层
不错哈,学习了哦
回复 支持 反对

使用道具 举报

发表于 2013-10-9 10:55:31 | 显示全部楼层
C本来就有内置函数 itoa()可以用啊~
回复 支持 反对

使用道具 举报

发表于 2014-4-21 15:05:13 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2014-5-10 11:16:27 | 显示全部楼层
沧海笑1122 发表于 2014-4-21 00:12
这几天玩电子秤,用到double转string,可以直接调用。转自网上李鑫的blog,有链接,我在1.05测试通过。串口打 ...

这个非常好啊,但有一个疑问,比如就说这个131.23789,小数位是5位,如果转换位小于5位显示都正常,但如果转换5位时(也就是小数位全部转换时),转换出来的最后一位比原来的小1,如131.23789小数位全部转换出来就是131.23788,如果是131.2378,小数位全部转换出来就是131.2377,这是个什么原理?
回复 支持 反对

使用道具 举报

发表于 2014-5-10 21:49:13 | 显示全部楼层
本帖最后由 沧海笑1122 于 2014-5-10 21:53 编辑
hlzero 发表于 2014-5-10 11:16
这个非常好啊,但有一个疑问,比如就说这个131.23789,小数位是5位,如果转换位小于5位显示都正常,但如果 ...


我只是使用,电子秤也没有用到五位。不影响用吧。如果深究那要研究库了,如有收获跟贴分享一下吧。
回复 支持 反对

使用道具 举报

发表于 2014-7-27 20:20:12 | 显示全部楼层
沧海笑1122 发表于 2014-4-21 00:12
这几天玩电子秤,用到double转string,可以直接调用。转自网上李鑫的blog,有链接,我在1.05测试通过。串口打 ...

可不可以看一下你的电子秤?
回复 支持 反对

使用道具 举报

发表于 2014-8-3 17:23:56 | 显示全部楼层
沧海笑1122 发表于 2014-4-21 00:12
这几天玩电子秤,用到double转string,可以直接调用。转自网上李鑫的blog,有链接,我在1.05测试通过。串口打 ...

学习了     
回复 支持 反对

使用道具 举报

发表于 2014-10-29 10:43:00 | 显示全部楼层
好帖顶一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 22:36 , Processed in 0.051546 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表