搜索
bottom↓
回复: 25

求助:如何在数码管上显示0.001、0.01、0.1(已解决)

[复制链接]

出0入0汤圆

发表于 2015-1-20 16:06:11 | 显示全部楼层 |阅读模式
本帖最后由 sos9616 于 2015-1-21 10:39 编辑

论坛里关于如何实现在数码管上显示小数点的方法和资料很少,
琢磨好几天了,不知道怎么实现根据数值用数码管显示出小数。
比如测得温度值是:1.234。
当到了十位时就是:10.23。
到了百位就是        :123.4。
希望坛友帮帮忙。


我在这里把写的“数码管显示小数点”的方法总结一下吧,
希望能帮到还在纠结的你
void display_SMG(float a)
{
        if((a<10)&&(a>=0))                        //0.000
        {
                a=a*1000;
                num1=(uint)a/1000;
                num2=(uint)a%1000/100;
                num3=(uint)a%1000%100/10;
                num4=(uint)a%1000%100%10;        
                .......
                .....num1加小数点的处理
        }

        if((a<100)&&(a>=10))                        //00.00
        {
                a=a*1000;
                num1=(uint)a/1000;
                num2=(uint)a%1000/100;
                num3=(uint)a%1000%100/10;
                num4=(uint)a%1000%100%10;        
                .......
                .....//num2加小数点的处理
        }

                if((a<1000)&&(a>=100))                        //000.0
        {
                a=a*1000;
                num1=(uint)a/1000;
                num2=(uint)a%1000/100;
                num3=(uint)a%1000%100/10;
                num4=(uint)a%1000%100%10;        
                .......
                .....//num3加小数点的处理
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入4汤圆

发表于 2015-1-20 16:08:37 | 显示全部楼层
把点点亮不就行了

出0入0汤圆

 楼主| 发表于 2015-1-20 16:14:35 | 显示全部楼层
ztrx 发表于 2015-1-20 16:08
把点点亮不就行了

段码0x80是小数点。

个位时有三个小数,十位有两个,百位有1个
  num_1=temp/1000;

  num_2=temp%1000/100;

  num_3=temp%100/10;

  num_4=temp%10;

这样接下来要怎么做?

出0入0汤圆

发表于 2015-1-20 16:20:20 | 显示全部楼层
判断这个数的范围呗

出5入4汤圆

发表于 2015-1-20 16:27:24 | 显示全部楼层
如果是整形存储的,写一个函数,参数是要显示的数值,和小数点的位置。

出0入0汤圆

发表于 2015-1-20 16:28:41 | 显示全部楼层
本帖最后由 waterghost 于 2015-1-20 16:30 编辑

笨点方法。 先判断 整数是1位 2位  3位 。
1位 : 10>X>0
2位 :   100>X>=10
.....
如果你的数码管最大是4.知道整数位数数,就可以知道小数的位数。
例如。1.234   .整数是1个。小数是3个。  然后 1.234*1000.然后 3楼的方法处理。 整数一位  两位  三位 。需要分别标志位。

出0入0汤圆

发表于 2015-1-20 16:29:58 | 显示全部楼层
本帖最后由 iyctj4 于 2015-1-20 16:34 编辑

先叛断出是那一位要显示小数点,在要显示小数点的一位或上0x80,列如现在显示0.,0的代码|0x80就可以啦

出0入0汤圆

发表于 2015-1-20 16:39:19 | 显示全部楼层
在需要的时候直接给小数点亮.

出0入17汤圆

发表于 2015-1-20 16:56:21 | 显示全部楼层
6L是楼主所要的。

出0入4汤圆

发表于 2015-1-20 18:47:15 来自手机 | 显示全部楼层
sos9616 发表于 2015-1-20 16:14
段码0x80是小数点。

个位时有三个小数,十位有两个,百位有1个

如果要显示整4位,这样还不行,
可以在计算的过程中统计有多少个有效数千位如果是0,就多算一位小字,后面类推。
这样得到4位数字加一个小数点,如12.34。按一个方向扫描显示,同时判断下一个是不是小字点,如果下一个是小数点就点亮小数点。

出0入0汤圆

发表于 2015-1-20 20:32:28 | 显示全部楼层
标记一下,显示 小数点

出5入10汤圆

发表于 2015-1-20 20:35:41 | 显示全部楼层
跟据数点的位置来乖10的倍数使小数变成整数,如0.12*100就变成12再通过数码管显示,小数点的位置就跟据100那个数后有几个0算

出0入0汤圆

发表于 2015-1-20 21:27:47 | 显示全部楼层
有这么个函数叫 sprintf 当然用这个函数就不要考虑什么效率啊 空间什么的 如果介意效率和空间 还是楼上的方法简单快捷

出0入0汤圆

发表于 2015-1-20 21:31:13 | 显示全部楼层
用法如下
  char buf [12];

  pi = 3.14159;

  sprintf (buf, "%g\n", pi);

然后就按照顺序一个一个显示吧!

出0入0汤圆

 楼主| 发表于 2015-1-21 10:37:12 | 显示全部楼层
waterghost 发表于 2015-1-20 16:28
笨点方法。 先判断 整数是1位 2位  3位 。
1位 : 10>X>0
2位 :   100>X>=10

已经成功实现,
谢谢你的方法,简单易懂,很好!

出0入0汤圆

 楼主| 发表于 2015-1-21 10:37:56 | 显示全部楼层
本帖最后由 sos9616 于 2015-1-21 18:35 编辑

有更好的方法

出0入0汤圆

发表于 2015-1-21 10:57:23 | 显示全部楼层
0~9定义10个段码表
0~9带小数点定义10个段码表
显示时如果带小数,则个位用带小数点的段码表,其余用基本数字段码表。

出0入0汤圆

发表于 2015-1-21 11:15:55 | 显示全部楼层
sos9616 发表于 2015-1-21 10:37
我在这里把写的“数码管显示小数点”的方法总结一下吧,
希望能帮到还在纠结的你
void display_SMG(float a ...

像你这样写才是纠结!

A.BCD,在0~10之间,先乘以1000,比如1.234,得到1234,然后sprintf,%04d格式,得到1234,查表显示之,同时在第1位点亮小数点;
AB.CD,在10~100之间,先乘以100,比如12.34,得到1234,然后sprintf,%04d格式,得到1234,显示之,同时在第2位点亮小数点;
ABC.D,在100~1000之间,先乘以100,比如123.4,得到1234,然后sprintf,%04d格式,得到1234,显示之,同时在第4位点亮小数点;
ABCD,在1000~10000之间,无需再乘,比如1234,得到1234,然后sprintf,%04d格式,得到1234,显示之,无需点亮小数点;

出0入0汤圆

发表于 2015-1-21 13:27:15 来自手机 | 显示全部楼层
别用除法或者取余数.效率太低.建议使用减法和比较.坛内有帖子专门讨论这个

出20入25汤圆

发表于 2015-1-21 14:39:49 来自手机 | 显示全部楼层
楼主位是错的

出0入0汤圆

发表于 2015-1-21 15:54:38 来自手机 | 显示全部楼层
sprintf到buf中,然后strchr到位置,再把位置或到数字中就可以了

出0入0汤圆

发表于 2015-1-21 16:02:51 | 显示全部楼层
bg6agf 发表于 2015-1-21 13:27
别用除法或者取余数.效率太低.建议使用减法和比较.坛内有帖子专门讨论这个 ...

关键所在。用51作乘除就是等死.

出0入0汤圆

 楼主| 发表于 2015-1-21 18:37:21 | 显示全部楼层
bg6agf 发表于 2015-1-21 13:27
别用除法或者取余数.效率太低.建议使用减法和比较.坛内有帖子专门讨论这个 ...

减法取余?
论坛里找不到诶

出0入0汤圆

 楼主| 发表于 2015-1-21 18:38:19 | 显示全部楼层
freshuman 发表于 2015-1-21 16:02
关键所在。用51作乘除就是等死.

你能把更好的方法在这里举个例子分享给大家吗

出0入0汤圆

发表于 2015-1-21 21:14:57 来自手机 | 显示全部楼层
坛子里曾经有个酷贴.讨论了很多分出每一位的算法.并且讨论效率时间.找一下吧

出0入0汤圆

发表于 2015-1-22 12:18:22 | 显示全部楼层
ma    rk ...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 10:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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