找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于AD数值转换显示百分比 单片机C语言程序问题

[复制链接]
跳转到指定楼层
楼主
ID:978416 发表于 2023-3-12 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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之间就行

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

使用道具 举报

沙发
ID:277550 发表于 2023-3-12 23:49 | 只看该作者
将0-4096,映射到0-100


temp=temp/4096*100

修改成这样:

temp=temp/4096.0*100;

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:978416 发表于 2023-3-13 10:00 | 只看该作者
devcang 发表于 2023-3-12 23:49
将0-4096,映射到0-100

非常感谢,试了一下成功了,想问一下为什么加了个.0就可以了啊
回复

使用道具 举报

地板
ID:139866 发表于 2023-3-14 09:16 | 只看该作者
对于除法运算符“/”,若两个操作数均为整型,则结果为取整,例如10/3=3;

若操作数中任何一个为浮点数,则计算结果为精确值(默认小数点后保留六位),如15.1575/3=5.052500或15/2.50=6.000000;
回复

使用道具 举报

5#
ID:1034262 发表于 2023-3-14 10:06 | 只看该作者
避免浮点就用整数:((u32)adc*100)/4096
回复

使用道具 举报

6#
ID:1045628 发表于 2023-3-15 10:49 | 只看该作者
egsresrhtrhrtst 发表于 2023-3-13 10:00
非常感谢,试了一下成功了,想问一下为什么加了个.0就可以了啊

建议value * 100 /4096 这样,先将数扩大再除,比使用浮点数计算更好,除非你用的dsp芯片,不然永远是整数计算速度更快
回复

使用道具 举报

7#
ID:883242 发表于 2023-3-16 12:22 | 只看该作者
沙发的办法很不好,你检查下原来代码多大,改用沙发解决方案后代码变长了多少,耗费了单片机多少资源。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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