OpenEdv-开源电子网

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

ADC采集的如何相乘了再显示其值

[复制链接]

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-6-8
在线时间
10 小时
发表于 2016-10-12 18:41:35 | 显示全部楼层 |阅读模式
1金钱
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"

//ALIENTEK Mini STM32开发板范例代码15
//ADC实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
  u8 Buf[30];        
        u8 Buf1[30];
        u8 Buf2[30];
int main(void)
{
        u32 adcx=0;
        u32 adcx1=0;
        u32 adcx2=0;
        float Vol=0;
        float Vol1=0;
        float Vol2=0;
        delay_init();                     //延时函数初始化          
        uart_init(9600);                 //串口初始化为9600
        LED_Init();                                  //初始化与LED连接的硬件接口
        LCD_Init();
        Adc_Init();                 //ADC初始化                         
        POINT_COLOR=RED;//设置字体为红色
        LCD_ShowString(60,50,200,16,16,"Mini STM32");       
        LCD_ShowString(60,70,200,16,16,"ADC TEST");       
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,16,16,"2014/3/9");       
        //显示提示信息
        POINT_COLOR=BLUE;//设置字体为蓝色
        LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:");             
        LCD_ShowString(60,150,200,16,16,"ADC_CH1_VOL:0.000V");       
        LCD_ShowString(60,170,200,16,16,"ADC_CH2_VOL:0.000V");       
        LCD_ShowString(60,190,200,16,16,"ADC_CH3_VOL:0.000V");       
        LCD_ShowString(60,190,220,16,16,"ADC_CH4_VOL:0.000V");               
         
        while(1)
        {
                adcx+=Get_Adc_Average(ADC_Channel_1,10);
                LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
                Vol=(float)adcx*3.3/4096;
                sprintf((char*)Buf,"%.3fV   ",Vol);
                LCD_ShowString(156,150,200,16,16,Buf);
               
               
                adcx1+=Get_Adc_Average1(ADC_Channel_2,10);
                LCD_ShowxNum(156,130,adcx1,4,16,0);//显示ADC的值
                Vol1=(float)adcx1*3.3/4096;
                sprintf((char*)Buf1,"%.3fV   ",Vol1);
                LCD_ShowString(156,170,200,16,16,Buf1);
               
               
                adcx2=Get_Adc_Average2(ADC_Channel_3,10);
                LCD_ShowxNum(156,130,adcx2,4,16,0);//显示ADC的值
                Vol2=(float)adcx2*3.3/4096;
                sprintf((char*)Buf2,"%.3fV   ",Vol2);
                LCD_ShowString(156,190,200,16,16,Buf2);
               

               
                LED0=!LED0;
                delay_ms(100);       
        }                                                                                            
}       

如何相乘后面两路的值显示出来呢

最佳答案

查看完整内容[请看2#楼]

取ADC1值存入变量1, 再取ADC2的值存入变量2, 变量3 = 变量1*变量2 变量3送去显示
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2016-10-12 18:41:36 | 显示全部楼层
取ADC1值存入变量1,
再取ADC2的值存入变量2,
变量3 = 变量1*变量2
变量3送去显示
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-10-12 19:16:55 | 显示全部楼层
不明白你的意思,要显示直接调用函数就行了,保证你的数据正常即可。
回复

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-6-8
在线时间
10 小时
 楼主| 发表于 2016-10-12 20:09:44 | 显示全部楼层
正点原子 发表于 2016-10-12 19:16
不明白你的意思,要显示直接调用函数就行了,保证你的数据正常即可。

这是我采集的3路的数据 我现在要显示adcx1和adcx2相互的乘积
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-10-12 20:22:47 | 显示全部楼层
笨笨呆呆 发表于 2016-10-12 20:09
这是我采集的3路的数据 我现在要显示adcx1和adcx2相互的乘积

这没难度吧。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-6-8
在线时间
10 小时
 楼主| 发表于 2016-10-13 12:11:28 | 显示全部楼层

求原子哥支招   自己写了  显示不了啊
回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2016-8-8
在线时间
101 小时
发表于 2016-10-14 14:29:48 | 显示全部楼层
d1z1y2 发表于 2016-10-13 12:30
取ADC1值存入变量1,
再取ADC2的值存入变量2,
变量3 = 变量1*变量2

有时我们只是被树叶蒙住了眼睛。
但更糟糕的是就算知道自己被树叶蒙住了眼睛,可就是找不到办法。
如何拿下蒙住眼的树叶。
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-10-14 15:09:08 | 显示全部楼层
是显示不出来字符,还是乘不出来结果啊?少年你问问题要问清楚啊
回复

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-6-8
在线时间
10 小时
 楼主| 发表于 2016-10-15 12:44:47 | 显示全部楼层
xianshasaman 发表于 2016-10-14 15:09
是显示不出来字符,还是乘不出来结果啊?少年你问问题要问清楚啊

显示的结果不精准
回复

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-6-8
在线时间
10 小时
 楼主| 发表于 2016-10-15 12:48:26 | 显示全部楼层
主音调 发表于 2016-10-14 14:29
有时我们只是被树叶蒙住了眼睛。
但更糟糕的是就算知道自己被树叶蒙住了眼睛,可就是找不到办法。

结果不精准怎么办啊   下面上程序
回复

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-6-8
在线时间
10 小时
 楼主| 发表于 2016-10-15 12:48:58 | 显示全部楼层
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"

//ALIENTEK Mini STM32开发板范例代码15
//ADC实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
  u8 Buf[30];        
        u8 Buf1[30];
        u8 Buf2[30];
  u8 Buf3[30];
int main(void)
{
        u32 adcx=0;
        u32 adcx1=0;
        u32 adcx2=0;
        //u32 Vol4=0;
        float Vol=0;
        float Vol1=0;
        float Vol2=0;
        float Vol3=0;
        float dianliang=0;
        delay_init();                     //延时函数初始化          
        uart_init(9600);                 //串口初始化为9600
        LED_Init();                                  //初始化与LED连接的硬件接口
        LCD_Init();
        Adc_Init();                 //ADC初始化                         
        POINT_COLOR=RED;//设置字体为红色
        LCD_ShowString(60,50,200,16,16,"Mini STM32");       
        LCD_ShowString(60,70,200,16,16,"ADC TEST");       
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,16,16,"2014/3/9");       
        //显示提示信息
        POINT_COLOR=BLUE;//设置字体为蓝色
        LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:");             
        LCD_ShowString(60,150,200,16,16,"ADC_CH1_VOL:0.000V");       
        LCD_ShowString(60,170,200,16,16,"ADC_CH2_VOL:0.000V");       
        LCD_ShowString(60,190,200,16,16,"ADC_CH3_VOL:0.000V");               
        LCD_ShowString(60,210,200,16,16,"ADC_CH3_ADD:0.000V");                 
        while(1)
        {
                adcx+=Get_Adc_Average(ADC_Channel_1,10);
                LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
                Vol=(float)adcx*3.3/4096;
                sprintf((char*)Buf,"%.3fV   ",Vol);
                LCD_ShowString(156,150,200,16,16,Buf);
               
               
                adcx1+=Get_Adc_Average1(ADC_Channel_2,10);
                LCD_ShowxNum(156,130,adcx1,4,16,0);//显示ADC的值
                Vol1=(float)adcx1*3.3/4096;
                sprintf((char*)Buf1,"%.3fV   ",Vol1);
                LCD_ShowString(156,170,200,16,16,Buf1);
               
               
                adcx2=Get_Adc_Average2(ADC_Channel_3,10);
                LCD_ShowxNum(156,130,adcx2,4,16,0);//显示ADC的值
                Vol2=(float)adcx2*3.3/4096;
                sprintf((char*)Buf2,"%.3fV   ",Vol2);
                LCD_ShowString(156,190,200,16,16,Buf2);
               
               

                dianliang=Vol1*Vol2;
               
                LCD_ShowxNum(156,130,dianliang,4,16,0);//显示ADC的值
                Vol3=(float)dianliang*3.3/4.096;
                sprintf((char*)Buf3,"%.3fV   ",Vol3);
                LCD_ShowString(156,210,200,16,16,Buf3);
               
                LED0=!LED0;
                delay_ms(100);       
        }                                                                                            
}       



弄出来的 结果不精准啊
回复

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-6-8
在线时间
10 小时
 楼主| 发表于 2016-10-15 12:49:14 | 显示全部楼层
怎么办  求解啊
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-10-15 13:19:44 | 显示全部楼层
然皮大浆子
回复

使用道具 举报

9

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2016-6-8
在线时间
10 小时
 楼主| 发表于 2016-10-15 13:35:35 | 显示全部楼层

????
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-10-15 15:13:03 | 显示全部楼层
我说你这娃是个糊涂蛋。
你把你的问题先分割,自己测试,哪里是对的,从哪里不对了。定位问题出在哪几句。
然后你再说你的问题。你发一堆代码,还是不知道你哪里出问题了。
小小蜗牛
回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
453
金钱
453
注册时间
2016-8-8
在线时间
101 小时
发表于 2016-10-16 17:47:36 | 显示全部楼层
笨笨呆呆 发表于 2016-10-15 12:48
#include "led.h"
#include "delay.h"
#include "sys.h"

dianliang(中文是否叫电量,如果是那因该叫功率)
Vol1=(float)adcx1*3.3/4096;     如果这是电流值
Vol2=(float)adcx2*3.3/4096;     如果这是电压值
     dianliang=Vol1*Vol2;     功率值
Vol3=(float)dianliang*3.3/4.096;    这是什么意思

有时我们只是被树叶蒙住了眼睛。
但更糟糕的是就算知道自己被树叶蒙住了眼睛,可就是找不到办法。
如何拿下蒙住眼的树叶。
回复

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2016-10-17 12:58:35 | 显示全部楼层
adcx+=  是什么意思?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 02:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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