OpenEdv-开源电子网

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

StEmwin+ucosiii波形的形式显示adc数据

[复制链接]

10

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1479
金钱
1479
注册时间
2016-1-25
在线时间
260 小时
发表于 2018-8-21 16:10:13 | 显示全部楼层 |阅读模式
实现环境:STM32战舰V3开发板+4.3寸触摸屏【屏尺寸大小可以根据自己实际使用显示屏,修改对应的坐标范围】+10K可调电阻【作为adc采集输入源】实验参考:①https://blog.csdn.net/neqee/article/details/53366158
               ②emwin5中文手册->窗口对象(小工具)->15.9图形小工具

实现效果:使用emwin的图形小工具GRAPH,用波形的方式来实时显示adc采集到电压变化



实现过程:首先:将原子哥中的 D:\STM32_SOURCE\STM32战舰V3\A盘 基本资料\4,程序源码\3,扩展例程\3,EMWIN扩展例程\EMWIN实验14 GUIbulider使用     拷贝到桌面进行修改,利用GUIbulider创建一个graph窗口,保存后替换点例程里面的C:\Users\Administrator\Desktop\GRAPH\EMWIN_DEMO\GUIBulder的FramewinDLG.c文件 【注意:当中文件目录为自己电脑文件夹所在位置】,这只是简单的生成一个显示框架而已。

               接下来:我们就必须根据emwin5中文手册修改FramewinDLG.c文件的内容,来进行波形显示窗口的绘制,需要修改的代码如下:
[mw_shl_code=c,true]//对需要使用到的句柄进行定义
extern WM_HWIN hItem;                          //»ñè¡μ±Ç°¶ÔÏó¾ä±ú
extern WM_HWIN pdataGRP;                //»ñè¡μ±Ç°ÇúÏßò»¾ä±ú
extern WM_HWIN pdataGRP1;                //»ñè¡μ±Ç°ÇúÏ߶t¾ä±ú
//构建需要波形显示窗口
static void _cbdraw(WM_MESSAGE * pMsg) {
       
                WM_HWIN hScaleV;
                WM_HWIN hScaleH;
       
                hItem =WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);

                GRAPH_SetBorder(hItem,40, 5, 5, 30);//éèÖñ߿ò3ß′ç  éÏÏÂ×óóò

                GRAPH_SetGridVis(hItem,1);                                        //ÆôóÃíø¸ñ»æÖÆ

                GRAPH_SetGridFixedX(hItem,1);                                //1춨XÖá·½ÏòμÄíø¸ñ

                GRAPH_SetGridDistY(hItem,25);                                //éèÖÃˮƽíø¸ñ¼ä¾à

                GRAPH_SetGridDistX(hItem,50);                                //éèÖÃ′1Ö±íø¸ñ¼ä¾à

                hScaleV =GRAPH_SCALE_Create(30, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 25);//′′½¨oíìí¼ó′1Ö±·¶Î§3߶è±êÇ©

                GRAPH_SCALE_SetTextColor(hScaleV,GUI_RED);  //éèÖñêÇ©×ÖìåÑÕé«

                GRAPH_AttachScale(hItem,hScaleV);                                          //ìí¼óμ½Ë®Æ½·½Ïò
               
                hScaleH =GRAPH_SCALE_Create(390, GUI_TA_HCENTER, GRAPH_SCALE_CF_HORIZONTAL, 50);//′′½¨oíìí¼óˮƽ·¶Î§3߶è±êÇ©

                GRAPH_SCALE_SetTextColor(hScaleH,GUI_DARKGREEN);                         //éèÖñêÇ©×ÖìåÑÕé«

                GRAPH_AttachScale(hItem,hScaleH);                                                                                  //ìí¼óμ½′1Ö±·½Ïò     

                pdataGRP =GRAPH_DATA_YT_Create(GUI_GREEN, 500, 0, 0);        //′′½¨êy¾YÇúÏß ò»
                GRAPH_AttachData(hItem,pdataGRP);                                                                                 //Îa»æí¼¿ØÖÆìí¼óêy¾Y¶ÔÏó
               
                pdataGRP1 =GRAPH_DATA_YT_Create(GUI_RED, 500, 0, 0);        //′′½¨êy¾YÇúÏß ¶t
                GRAPH_AttachData(hItem,pdataGRP1);                                                                                 //Îa»æí¼¿ØÖÆìí¼óêy¾Y¶ÔÏó
                               
}
//替换原来自动生成创建对话框内容
WM_HWIN CreateFramewin(void) {
  WM_HWIN hWin;
       
        hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbdraw, WM_HBKWIN, 0, 0);
        return hWin;
}[/mw_shl_code]
到上面这步,我们只是简单的实现绘制一个跟示波器显示一样的窗口而且,需要使用GRAPH_DATA_YT_AddValue()函数赋值给GRAPH控件,每赋值一个数据则显示一个点,点和点之间emWin会自动连结起来,无需我们操心:
    我要显示的是adc采集到的电压变化,所以我们直接拷贝原子哥的adc实验,这边需要注意的几点,因为我们是拷贝出来的EMWIN实验14 GUIbulider使用 例程,所以直接将adc实验添加进去编译的话肯定会报错。
   注意:
  一:需要将__STM32F10x_CONF_H配置文件中的#include "stm32f10x_adc.h"包含进去,例程中原子哥是给屏蔽掉的
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_CONF_H
#define __STM32F10x_CONF_H

/* Includes ------------------------------------------------------------------*/
/* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
#include "stm32f10x_adc.h"
//#include "stm32f10x_bkp.h"
//#include "stm32f10x_can.h"
//#include "stm32f10x_cec.h"
//#include "stm32f10x_crc.h"
//#include "stm32f10x_dac.h"
//#include "stm32f10x_dbgmcu.h"
二:需要stm32f10x_adc.c文件添加到程序中FWLIB库中,例程也是没有添加进去。

做完以上部分的话 接下来就简单了,在ucos创建三个任务:一:任务创建 二:波形框初始化 三:波形显示
以下为adc数据显示的代码
[mw_shl_code=c,true]void led0_task(void *p_arg)
{
        OS_ERR err;
        u16 adcx;
        float temp;
        while(1)
        {
                adcx=Get_Adc_Average(ADC_Channel_1,10);
                temp=(float)adcx*(3.3/4096);
                adcx=temp*100;       
                GRAPH_DATA_YT_AddValue(pdataGRP,adcx);
                //GRAPH_DATA_YT_AddValue(pdataGRP1,(i+50));//2¨DΠ ¶t
                LED0 = !LED0;
                OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_PERIODIC,&err);//Ñóê±500ms
        }
}[/mw_shl_code]
到这里的话 整个程序就算完成了,完整的大家可以下载附件中的源码,里面也有详细的注释,因为编码格式不同,所以上传的代码注释就成乱码了。我觉得最主要的还是要看emwin5中文手册,里面的对图形API函数都有详细的描述,所以对照着手册学起来也会轻松一点
如:GRAPH_SetBorder(hItem,40, 5, 5, 30);//设置边框尺寸  上下左右
描述
设置给定图形小工具的左、上、右和下边框。
原型
void GRAPH_SetBorder(GRAPH_Handle hObj,
unsigned BorderL, unsigned BorderT,
unsigned BorderR, unsigned BorderB);

参数:
hObj 小工具的句柄。
BorderL 距离左边框的尺寸 (单位:像素)。
BorderT 距离上边框的尺寸 (单位:像素)。
BorderR 距离右边框的尺寸 (单位:像素)。
BorderB 距离下边框的尺寸 (单位:像素)。

我也是刚学,所以也只是简单的实现一些效果而已。感谢文中网友neqee的网文和原子哥提供的开源环境提供的帮助。
1.jpg
创建FramewinDLG.c

波形左移效果

波形左移效果

左移效果
GRAPH.rar (11.68 MB, 下载次数: 769)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10542
金钱
10542
注册时间
2017-2-18
在线时间
1908 小时
发表于 2018-8-21 17:01:26 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-10-10 08:34:37 | 显示全部楼层
MAKR  一下
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2014-8-5
在线时间
12 小时
发表于 2018-11-22 10:04:13 | 显示全部楼层
请问你刷新速度快不快?
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2019-3-21
在线时间
33 小时
发表于 2019-5-20 21:09:34 | 显示全部楼层
楼主,问一下,为什么我的GRAPH窗口画的网格在电压波形进来的时候一直在刷屏?
回复 支持 反对

使用道具 举报

10

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1479
金钱
1479
注册时间
2016-1-25
在线时间
260 小时
 楼主| 发表于 2019-5-22 08:38:49 | 显示全部楼层
啦啦啦13207 发表于 2019-5-20 21:09
楼主,问一下,为什么我的GRAPH窗口画的网格在电压波形进来的时候一直在刷屏?

不会刷屏啊  就是波形是实时更新的   你是不哪里参数设置错了
回复 支持 反对

使用道具 举报

10

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1479
金钱
1479
注册时间
2016-1-25
在线时间
260 小时
 楼主| 发表于 2019-5-22 08:39:34 | 显示全部楼层
hui6209822 发表于 2018-11-22 10:04
请问你刷新速度快不快?

我是设置的实时刷新  就是没采集一个数据就马上显示
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 23:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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