标题: 51单片机驱动数码管,显示不对 发现在在Show里面四个数不对 [打印本页]

作者: lileisgns    时间: 2024-8-24 08:53
标题: 51单片机驱动数码管,显示不对 发现在在Show里面四个数不对
发现在 FloatToNum(float fs)中数值还对,在show里面把四位数码对应位置赋于数码管码值数组显示数值的,但是数值就被改了。什么原因?感谢大侠指教!(附代码),还有我调试时的四张图。第一张图是在 FloatToNum(float fs)中数值,第 二张是在SHOW中刚进行没有在数码管真值表里找值时的 uFirstuSeconduThird,uFour的值,第三张是在数码管真值表里找值时四个数的值(被改变了。)

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

在转换函数里的值.jpg

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

在显示函数里的初值.jpg

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

在显示函数里的后值.jpg

代码.zip

910 Bytes, 下载次数: 10


作者: xiaobendan001    时间: 2024-8-24 13:50
上面的是全局变量,显示函数里面的参数,是局部变量吧。虽然名字一样,但是应该不是一个。
作者: xiaobendan001    时间: 2024-8-24 14:08
不对,你截图显示的就不是一个变量啊,虽然穿进去后不是一个,但是实际上也不会变啊。
作者: 飞云居士    时间: 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;
}
作者: lileisgns    时间: 2024-8-26 10:25
xiaobendan001 发表于 2024-8-24 13:50
上面的是全局变量,显示函数里面的参数,是局部变量吧。虽然名字一样,但是应该不是一个。

后面调用函数时传入数值了。
作者: xiaobendan001    时间: 2024-8-26 12:01

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

作者: xiaobendan001    时间: 2024-8-26 14:55

输出的结果也都对啊

作者: lileisgns    时间: 2024-8-26 20:51
xiaobendan001 发表于 2024-8-26 14:55
输出的结果也都对啊

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

作者: lileisgns    时间: 2024-8-26 21:00
xiaobendan001 发表于 2024-8-26 14:55
输出的结果也都对啊

DigiValue[uFirst]的值在调试中怎么显示时带个‘?’号?
感谢!
作者: lileisgns    时间: 2024-8-26 23:03
这是输出数码管的显示

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

数码管显示.jpg

作者: xiaobendan001    时间: 2024-8-27 07:35
lileisgns 发表于 2024-8-26 21:00
DigiValue的值在调试中怎么显示时带个‘?’号?
感谢!

这个我也不太懂啊,有知道的大神给解惑一下呗
作者: glinfei    时间: 2024-8-28 10:37
1.如果值在ASCII范围,就显示ASCII,不在就显示?
2.共阳的管子写反了,应先关再赋值,否则会重影,估计8字笔画亮度不同还闪烁。

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

感谢!我测试一下。
作者: xiaobendan001    时间: 2024-8-29 10:52
glinfei 发表于 2024-8-28 10:37
1.如果值在ASCII范围,就显示ASCII,不在就显示?
2.共阳的管子写反了,应先关再赋值,否则会重影,估计8 ...

应该不是,你看截图,上面三个一样的值就没有问号。楼主用的DATA,有?,我给改成CODE,也一样有?的。没整明白
作者: xiaobendan001    时间: 2024-8-29 10:55
glinfei 发表于 2024-8-28 10:37
1.如果值在ASCII范围,就显示ASCII,不在就显示?
2.共阳的管子写反了,应先关再赋值,否则会重影,估计8 ...

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1