标题: 关于AD数值转换显示百分比 单片机C语言程序问题 [打印本页]

作者: egsresrhtrhrtst    时间: 2023-3-12 21:03
标题: 关于AD数值转换显示百分比 单片机C语言程序问题
void datapros()           //数据处理函数
{
        
        uint temp;                           
        static uchar i;                   //static 写在局部变量前边表示变量是静态变量。
        if(i==50)
        {
                i=0;
                temp = Read_AD_Data(0xE4);        
        }                                                                        
        i++;                                                                //延时防止读错
        disp[0]=smgduan[temp/1000];//千位
        disp[1]=smgduan[temp%1000/100];//百位
        disp[2]=smgduan[temp%1000%100/10];//十位
        disp[3]=smgduan[temp%1000%100%10];//个位        

这是一段AD转换后显示的函数,想问一下各位,现在数码管显示的是0-4096,我想改成百分比显示的也就是显示0-100要怎么改一下,,
我在temp = Read_AD_Data(0xE4);函数后加了,temp=temp/4096*100;后数码管就显示0000了,不知道是怎么回事,还有就是uint temp;        这个定义需要改成浮点类型的吗,因为运算后会有小数点,但是最后是不需要显示小数点的,只要0-100之间就行


作者: devcang    时间: 2023-3-12 23:49
将0-4096,映射到0-100


temp=temp/4096*100

修改成这样:

temp=temp/4096.0*100;
作者: egsresrhtrhrtst    时间: 2023-3-13 10:00
devcang 发表于 2023-3-12 23:49
将0-4096,映射到0-100

非常感谢,试了一下成功了,想问一下为什么加了个.0就可以了啊
作者: 天ノ忆    时间: 2023-3-14 09:16
对于除法运算符“/”,若两个操作数均为整型,则结果为取整,例如10/3=3;

若操作数中任何一个为浮点数,则计算结果为精确值(默认小数点后保留六位),如15.1575/3=5.052500或15/2.50=6.000000;
作者: coody_sz    时间: 2023-3-14 10:06
避免浮点就用整数:((u32)adc*100)/4096
作者: rctty    时间: 2023-3-15 10:49
egsresrhtrhrtst 发表于 2023-3-13 10:00
非常感谢,试了一下成功了,想问一下为什么加了个.0就可以了啊

建议value * 100 /4096 这样,先将数扩大再除,比使用浮点数计算更好,除非你用的dsp芯片,不然永远是整数计算速度更快
作者: Hephaestus    时间: 2023-3-16 12:22
沙发的办法很不好,你检查下原来代码多大,改用沙发解决方案后代码变长了多少,耗费了单片机多少资源。




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