OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3148|回复: 11

输入捕获测示波器频率并用液晶显示无法显示小数部分

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-9-8
在线时间
3 小时
发表于 2018-9-8 20:43:40 | 显示全部楼层 |阅读模式
用定时器输入捕获测示波器频率并用液晶显示,但是无法显示小数部分,请各位大佬指点一下,谢谢!
QQ截图20180908204248.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-8 22:33:42 | 显示全部楼层
本帖最后由 edmund1234 于 2018-9-8 22:39 编辑

int a=10,b=5,c=8;
double v;

v = double((a+b)/c);    // 这是得不到小数的
v = double((a+b)/(double)c);    // 这也是得不到小数的
v = double(((double)a+b)/c);    // 这是正确的写方, 可以得到小数


算式中, 第一个被提取的变量的类型, 将会是整个算式中计算是的类型
a是第一个被提取的变量, 你不指定它是double, 往后的计算都是以int类型来计算, 直到最后才转为double类型, 所以不会有小数

回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-9-8
在线时间
3 小时
 楼主| 发表于 2018-9-9 10:27:47 | 显示全部楼层
edmund1234 发表于 2018-9-8 22:33
int a=10,b=5,c=8;
double v;

大佬,ADVANCE_TIM_PSC是常量72,按你说的我把IC1value前加了个float,如下,但是频率还是显示不出来小数!
                                                    /* 频率计算 */
    Frequency = (float)((72000000/(ADVANCE_TIM_PSC+1))/((float)IC1Value+1));
                LCD_ShowxNum(156,130,Frequency,4,16,24);//显示频率的值
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-9 13:59:35 | 显示全部楼层
本帖最后由 edmund1234 于 2018-9-9 14:06 编辑
stmlxp 发表于 2018-9-9 10:27
大佬,ADVANCE_TIM_PSC是常量72,按你说的我把IC1value前加了个float,如下,但是频率还是显示不出来小数 ...

Frequency = (float)(( (float)72000000.0/(ADVANCE_TIM_PSC+1))/((float)IC1Value+1));
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-9-8
在线时间
3 小时
 楼主| 发表于 2018-9-9 21:38:26 | 显示全部楼层
edmund1234 发表于 2018-9-9 13:59
Frequency = (float)(( (float)72000000.0/(ADVANCE_TIM_PSC+1))/((float)IC1Value+1));

大佬,按你这个改了,可还是显示不出来频率,我感觉液晶显示的代码也没啥问题啊!
        
        LCD_ShowString(60,130,200,16,16,"Frequency : 0000.00Hz");             
        LCD_ShowString(60,150,200,16,16,"DutyCycle:   0.00%");            
        while(1)
        {
                /* 获取输入捕获值 */
  IC1Value = TIM_GetCapture1(TIM1);
  IC2Value = TIM_GetCapture2(TIM1);
                // 注意:捕获寄存器CCR1和CCR2的值在计算占空比和频率的时候必须加1
        if (IC1Value != 0)
  {
    /* 占空比计算 */
    DutyCycle = (float)((IC2Value+1) * 100) / (IC1Value+1);
                LCD_ShowxNum(156,150,DutyCycle,1,16,24);//显示占空比值
               
    /* 频率计算 */

                Frequency = (float)(((float)72000000.0/(ADVANCE_TIM_PSC+1))/((float)IC1Value+1));
                LCD_ShowxNum(156,130,Frequency,4,16,24);//显示频率的值
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-9 21:44:33 | 显示全部楼层
LCD_ShowxNum这函数的参数是float吗?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-9-8
在线时间
3 小时
 楼主| 发表于 2018-9-9 22:57:59 | 显示全部楼层
edmund1234 发表于 2018-9-9 21:44
LCD_ShowxNum这函数的参数是float吗?

嗯嗯,是的
extern float DutyCycle;
extern float Frequency;
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-9 23:00:44 | 显示全部楼层
你直接把它改成 Frequency = (float)123.456;
看它能显示不?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-9-8
在线时间
3 小时
 楼主| 发表于 2018-9-9 23:04:15 | 显示全部楼层
edmund1234 发表于 2018-9-9 23:00
你直接把它改成 Frequency = (float)123.456;
看它能显示不?

123整数可以显示出来,小数显示不出来!
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-9 23:20:17 | 显示全部楼层
stmlxp 发表于 2018-9-9 23:04
123整数可以显示出来,小数显示不出来!

那就是函数的问题啊, 再怎样算出个小数来它也不显示
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-9-8
在线时间
3 小时
 楼主| 发表于 2018-9-9 23:39:50 | 显示全部楼层
edmund1234 发表于 2018-9-9 23:20
那就是函数的问题啊, 再怎样算出个小数来它也不显示

对呢!我实在找不出来原因,大佬可否帮我看看
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-9-8
在线时间
3 小时
 楼主| 发表于 2018-9-9 23:47:04 | 显示全部楼层
本帖最后由 stmlxp 于 2018-9-10 17:08 编辑
stmlxp 发表于 2018-9-9 23:39
对呢!我实在找不出来原因,大佬可否帮我看看

我私信你了,大佬看的咋样,我实在找不出问题
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 06:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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