矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 3269|回复: 36

51单片机驱动数码管,显示一直不对。发现在 FloatToNum(float fs)中数值不对

[复制链接]
     
发表于 2024-8-21 22:30:32 | 显示全部楼层 |阅读模式
发现在 FloatToNum(float fs)中数值不对,这个是打算显示数值的,但是把小数转换为四个个位数时数值就被改了。什么原因?感谢大侠指教!
     
发表于 2024-8-21 23:02:02 | 显示全部楼层
电路图、代码都没有,叫别人怎么指教?
回复 支持 反对

使用道具 举报

     
发表于 2024-8-21 23:10:56 | 显示全部楼层
放弃自己写 format 的想法,尽早投入 sprintf 的怀抱
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-8-22 07:14:00 | 显示全部楼层
全部代码已经上传了,提示需要审核。但是帖子倒是出来了。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-8-22 07:15:00 | 显示全部楼层
用附件方式。

代码.zip

910 Bytes, 下载次数: 26

回复 支持 反对

使用道具 举报

发表于 2024-8-22 08:23:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2024-8-22 08:40:44 | 显示全部楼层
本帖最后由 luosifu 于 2024-8-22 08:47 编辑

void FloatToNum(float fs)
这个函数中,有些不严谨

1234567.png
回复 支持 反对

使用道具 举报

     
发表于 2024-8-22 09:20:33 | 显示全部楼层
百位 = FS %1000/100
十位 = FS %100/10
个位 = FS %10

这么写功能上可以,如果51不做其他的工作这么做问题不大,让51不停的算除法,
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-8-22 15:29:37 | 显示全部楼层
lrain 发表于 2024-8-22 08:23
没仔细看,粗看起来问题比较多,是初学者常犯的错误,看show函数中的weiX是显示一个十进制位,其实是一个字 ...

感谢!DigiValue[uFour]中uFour是数码管中这一位的显示的数值,DigiValue[uFour]不就是这个数值的七段数码真值吗?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-8-22 15:30:36 | 显示全部楼层
luosifu 发表于 2024-8-22 09:20
百位 = FS %1000/100
十位 = FS %100/10
个位 = FS %10

这么写是为了显示小数。
回复 支持 反对

使用道具 举报

发表于 2024-8-22 15:47:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2024-8-22 18:49:39 | 显示全部楼层
lrain 发表于 2024-8-22 15:47
位值的范围也就是0~9,为啥要整个uint类型呢?应该用uchar,uint是多字节的,你这个问题应该就是出在类型 ...

很感谢! 在FloatToNum(float fs)里面数值还是对的,刚进入Show()中数值是对的。到给数码管赋值时就出出错了。
在转换函数里的值.jpg
在显示函数里的初值.jpg
在显示函数里的后值.jpg
回复 支持 反对

使用道具 举报

     
发表于 2024-8-22 19:01:25 | 显示全部楼层
你的数字都定义为uint,你的显示数字的字符表是char型的,char DigiValue[]={ 0xC0,0xF9, 0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x89,0xC7,0xC8,0xC1,0x8C,0xA3,0xBF,0xFF};//共阳不带小数点

试试把数据类型搞定,再看看码表对不对。
回复 支持 反对

使用道具 举报

发表于 2024-8-22 19:12:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2024-8-27 11:27:50 | 显示全部楼层
我没有看你的代码,
判断范围与补偿

   if (dc<9.999 && dc>8.000)
  { adc_cal();
    dc=dc+0.055; //补偿
  }
    if (dc<12.999 && dc>10.000)
  { adc_cal();
    dc=dc+0.045;//补偿
  }
提取位,仅供参考
   data[0] = display.encodeDigit(ff/10000 % 10); //显示千位
   data[1] = display.encodeDigit(ff/100 % 10);   //显示百位
   data[2] = display.encodeDigit(ff/10 % 10);    //显示十位  
   data[3] = display.encodeDigit(ff % 10);       //显示个位
   display.setSegments(data);  //显示字符
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 22:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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