8个8段led显示浮点型数据

本文详细介绍了如何将浮点数转换为定点数,并通过8位LED显示。主要关注点在于将小数部分精确地映射到LED显示中,包括转换方法、关键步骤和代码实现。
开始不明白,在一个群里讨论的结果: 
 
 
Will(95367158) 21:22:43 
请教大家个问题
Will(95367158) 21:22:49 
请问8位led怎么显示浮点型的数啊,就是小数部分保留3位
Will(95367158) 21:23:34 
最主要小数部分怎么搞
面朝大海(420804633) 21:24:18 
浮点是浮云
往最后的森林(627515898) 21:25:03 
啥是8位LED?8段?
Will(95367158) 21:25:21 
8个8段led
Will(95367158) 21:25:53 
就是有后三个显示小数部分,前5个是整数部分
面朝大海(420804633) 21:26:13 
你做过单片机就知道怎么搞的呀
往最后的森林(627515898) 21:26:39 
看成定点数呗~
Will(95367158) 21:27:10 
这个不解
面朝大海(420804633) 21:27:22 
你不会乘以1000啊
面朝大海(420804633) 21:27:41 
然后让第五位的小数点点亮
面朝大海(420804633) 21:27:47 
不就OK了
Will(95367158) 21:28:38 
对了让第五位小数点点亮是不是|0x80啊
往最后的森林(627515898) 21:28:56 
这个要看电路的吧~~~
往最后的森林(627515898) 21:29:19 
你还要考虑下你显示的数的范围~~
面朝大海(420804633) 21:29:22 
这个看电路,如果电路正常的话应该是
面朝大海(420804633) 21:29:37 
88888.888
Will(95367158) 21:29:46 
恩,有道理
面朝大海(420804633) 21:29:51 
你送过去的是88888888
面朝大海(420804633) 21:30:07 
所以说浮点是浮云
Will(95367158) 21:30:39 
我送过去的事float数据啊
往最后的森林(627515898) 21:31:17 
浮点数其实还是比较玄乎的~~~LS可有考究过
面朝大海(420804633) 21:31:25 
你转成整型
面朝大海(420804633) 21:31:52 
比如是的数是1.5,实际你乘以10再送过去就可以了
面朝大海(420804633) 21:32:05 
只是要把小数点点亮
往最后的森林(627515898) 21:32:12 
这样的缺点就是定点~~~
面朝大海(420804633) 21:32:31 
他说了是定点啊
面朝大海(420804633) 21:32:37 
后三位是小数嘛
往最后的森林(627515898) 21:33:22 
还有如果是纯小数 还要改进下
面朝大海(420804633) 21:33:44 
他懂的
Will(95367158) 21:33:46 
我的是定点
往最后的森林(627515898) 21:34:25 
- -!但愿如此
最后根据大家所说,我可以用这个浮点数据*1000,然后再分别/10000000,1000000,...用长整形变量一位一位得出各个位置,只要第五位我加一个小数点就可以了。
下面是程序:

//***********************************************************
//数码管显示函数:LED()
//***********************************************************

void LED(float ttime)
{
long int t,p;
void Led_init(void);
delay10ms(10);
ttime=ttime*1000;

t=(long)ttime/10000000;
p=(long)ttime%10000000;
Write7279(DECODE1,t);
delay10ms(10);
t=p/1000000;
p=p%1000000;
Write7279(DECODE1+1,t);
delay10ms(10);
t=p/100000;
p=p%100000;
Write7279(DECODE1+2,t);
delay10ms(10);
t=p/10000;
p=p%10000;
Write7279(DECODE1+3,t);
delay10ms(10);
t=p/1000;
p=p%1000;
Write7279(DECODE1+4,t|0x80);
delay10ms(10);
t=p/100;
p=p%100;
Write7279(DECODE1+5,t);
delay10ms(10);
t=p/10;
p=p%10;
Write7279(DECODE1+6,t);
delay10ms(10);
t=p;
Write7279(DECODE1+7,t);
delay10ms(10);
}

真正的双向灯带,如TM1812,它有两个数据引脚:DI(数据输入)和RI(数据返回)。所以实际上有两个数据引脚:一个用于输入(接收控制信号),一个用于输出(返回状态信号)。因此,在物理连接上,双向灯带需要两个数据线(输入和返回)连接到控制器,重新写一下这题: 题目:如何实现LED灯带(8颗)的如下控制要求? 实现要求的前提描述:A.系统框图如下: MCU(Slave)和MCU(Master)之间通信,再传给Drive,再控制灯带,灯带高8位,低一位 B.具体说明如下: 1.输入值通过Can信号或UART信号传入至MCU,数据取值的有效范围为【0,255】换算公式:【结果(用于下表输入数据) = 输入值 * 0.75 - 48】要求:不允许使用浮点运算 2. 主MCU获取从MCU传入的数据后,根据下表计算得出点灯个数 显示个数 输入数据(上行) 输入数据(下行) 8 ≤130.5 - ≥126 >123.75 7 ≤126 ≤123.75 ≥120 >117.75 6 <120 ≤117.75 ≥115.5 >113.25 5 <115.5 ≤113.25 ≥107.25 >102.75 4 <107.25 ≤102.75 ≥83.25 >81 383.25 ≤81 ≥72 >69.75 2 <72 ≤69.75 ≥60 >57.75 1 <60 ≤57.75 ≥50.25 >48 0 <50.25 ≤48 3. MCU将算出的LED点灯个数转换成控制8LED灯的串行数据 C. 系统提供了输入数据获取及输出点灯驱动的接口函数分别如下: 输入数据获取接口:u8_Input_Data_Get(void); 输出点灯驱动接口:vd_Output_Led_Light_Ctl(u8 a_u8_ledsts); 问题: 1.请通过编码实现将输入数据转换成对灯带的点灯控制。(要求代码注释明确) 2.请大家思考,对于此灯带的控制按照上行及下行的方式分别控制有何作用? 3.基于问题2,你能提出其他优化方案吗?
最新发布
09-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值