找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 724|回复: 14
打印 上一主题 下一主题
收起左侧

51单片机驱动数码管,显示不对 发现在在Show里面四个数不对

[复制链接]
跳转到指定楼层
楼主
发现在 FloatToNum(float fs)中数值还对,在show里面把四位数码对应位置赋于数码管码值数组显示数值的,但是数值就被改了。什么原因?感谢大侠指教!(附代码),还有我调试时的四张图。第一张图是在 FloatToNum(float fs)中数值,第 二张是在SHOW中刚进行没有在数码管真值表里找值时的 uFirstuSeconduThird,uFour的值,第三张是在数码管真值表里找值时四个数的值(被改变了。)

在转换函数里的值.jpg (28.84 KB, 下载次数: 14)

在转换函数里的值.jpg

在显示函数里的初值.jpg (37.45 KB, 下载次数: 13)

在显示函数里的初值.jpg

在显示函数里的后值.jpg (39.09 KB, 下载次数: 14)

在显示函数里的后值.jpg

代码.zip

910 Bytes, 下载次数: 10

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1109793 发表于 2024-8-24 13:50 | 只看该作者
上面的是全局变量,显示函数里面的参数,是局部变量吧。虽然名字一样,但是应该不是一个。
回复

使用道具 举报

板凳
ID:1109793 发表于 2024-8-24 14:08 | 只看该作者
不对,你截图显示的就不是一个变量啊,虽然穿进去后不是一个,但是实际上也不会变啊。
回复

使用道具 举报

地板
ID:404160 发表于 2024-8-24 16:50 | 只看该作者
FloatToNum 函数中的精度问题:

当 fs 值在 10 到 100 之间时,uShu 被计算为 fs * 100,这可能导致精度损失,因为浮点数乘以 100 并向下取整可能不会得到精确的整数。


void FloatToNum(float fs) {
    // 根据fs的范围确定乘数
    uint multiplier;
    if (fs >= 100) multiplier = 10;
    else if (fs >= 10) multiplier = 100;
    else multiplier = 1000;

    // 将fs转换为整数后乘以相应的乘数
    uint temp = (uint)(fs * multiplier);

    // 四舍五入处理
    float remainder = fs - (int)fs;
    if (remainder >= 0.5f) {
        temp += 1;
    }

    // 计算各个位上的数值
    uFirst = temp / 1000;
    uSecond = (temp / 100) % 10;
    uThird = (temp / 10) % 10;
    uFour = temp % 10;
}
回复

使用道具 举报

5#
ID:295726 发表于 2024-8-26 10:25 | 只看该作者
xiaobendan001 发表于 2024-8-24 13:50
上面的是全局变量,显示函数里面的参数,是局部变量吧。虽然名字一样,但是应该不是一个。

后面调用函数时传入数值了。
回复

使用道具 举报

6#
ID:1109793 发表于 2024-8-26 12:01 | 只看该作者

模拟中这四个参数的值并没有改变啊。
回复

使用道具 举报

7#
ID:1109793 发表于 2024-8-26 14:55 | 只看该作者

输出的结果也都对啊
回复

使用道具 举报

8#
ID:295726 发表于 2024-8-26 20:51 | 只看该作者
xiaobendan001 发表于 2024-8-26 14:55
输出的结果也都对啊

感谢!我用C++写过软件 ,现在调试都忘记看数码管显示的取值了。但是我数码管显示的8888.还闪烁。
回复

使用道具 举报

9#
ID:295726 发表于 2024-8-26 21:00 | 只看该作者
xiaobendan001 发表于 2024-8-26 14:55
输出的结果也都对啊

DigiValue[uFirst]的值在调试中怎么显示时带个‘?’号?
感谢!
回复

使用道具 举报

10#
ID:295726 发表于 2024-8-26 23:03 | 只看该作者
这是输出数码管的显示

数码管显示.jpg (256.88 KB, 下载次数: 11)

数码管显示.jpg
回复

使用道具 举报

11#
ID:1109793 发表于 2024-8-27 07:35 | 只看该作者
lileisgns 发表于 2024-8-26 21:00
DigiValue的值在调试中怎么显示时带个‘?’号?
感谢!

这个我也不太懂啊,有知道的大神给解惑一下呗
回复

使用道具 举报

12#
ID:844772 发表于 2024-8-28 10:37 | 只看该作者
1.如果值在ASCII范围,就显示ASCII,不在就显示?
2.共阳的管子写反了,应先关再赋值,否则会重影,估计8字笔画亮度不同还闪烁。
回复

使用道具 举报

13#
ID:295726 发表于 2024-8-28 14:59 | 只看该作者
glinfei 发表于 2024-8-28 10:37
1.如果值在ASCII范围,就显示ASCII,不在就显示?
2.共阳的管子写反了,应先关再赋值,否则会重影,估计8 ...

感谢!我测试一下。
回复

使用道具 举报

14#
ID:1109793 发表于 2024-8-29 10:52 | 只看该作者
glinfei 发表于 2024-8-28 10:37
1.如果值在ASCII范围,就显示ASCII,不在就显示?
2.共阳的管子写反了,应先关再赋值,否则会重影,估计8 ...

应该不是,你看截图,上面三个一样的值就没有问号。楼主用的DATA,有?,我给改成CODE,也一样有?的。没整明白
回复

使用道具 举报

15#
ID:1109793 发表于 2024-8-29 10:55 | 只看该作者
glinfei 发表于 2024-8-28 10:37
1.如果值在ASCII范围,就显示ASCII,不在就显示?
2.共阳的管子写反了,应先关再赋值,否则会重影,估计8 ...

刚刚记错了,不好意思,好像还真是,不在ASCII范围就显示?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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