|
#include "graphyt.h"
#include "DIALOG.h"
#include "AFE4400.h"
#include "malloc.h"
#include "exti.h"
#include "led.h"
extern GUI_CONST_STORAGE GUI_FONT GUI_Fontfont28;
extern GUI_CONST_STORAGE GUI_FONT GUI_Fontfont24;
extern GUI_CONST_STORAGE GUI_FONT GUI_Fontfont18;
_oscill_dev oscilldev;
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32开发板
//STemwin GRAPH控件使用
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2016/3/19
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//控件ID
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_TEXT_0 (GUI_ID_USER + 0x02)
#define ID_TEXT_1 (GUI_ID_USER + 0x06)
#define ID_TEXT_2 (GUI_ID_USER + 0x07)
#define ID_TEXT_3 (GUI_ID_USER + 0x08)
#define ID_TEXT_4 (GUI_ID_USER + 0x09)
#define ID_GRAPH_0 (GUI_ID_USER + 0x01)
#define ID_GRAPH_1 (GUI_ID_USER + 0x03)
#define ID_GRAPH_2 (GUI_ID_USER + 0x04)
#define ID_GRAPH_3 (GUI_ID_USER + 0x05)
#define ID_LISTVIEW_0 (GUI_ID_USER + 0x0D)
#define BORDER_TOP 7
#define BORDER_BOTTOM 20
#define BORDER_LEFT 40
#define BORDER_RIGHT 10
static GRAPH_SCALE_Handle hScaleV; //垂直刻度句柄
static GRAPH_SCALE_Handle hScaleH; //水平刻度句柄
//_oscill_dev oscilldev;
GUI_COLOR LineColor[]={GUI_RED,GUI_BLACK,GUI_WHITE,GUI_YELLOW,GUI_BLUE,GUI_DARKMAGENTA};
GUI_COLOR BackColor[]={GUI_BLACK,GUI_LIGHTRED,GUI_DARKMAGENTA,GUI_WHITE,GUI_GREEN};
//对话框资源表
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 800, 480, 0, 0, 0},
{ TEXT_CreateIndirect, "Text0", ID_TEXT_0, 2, 1, 159, 40, 0, 100, 0 },
{ TEXT_CreateIndirect, "Text1", ID_TEXT_1, 340, 50, 30, 150, 0, 100, 0 },
{ TEXT_CreateIndirect, "Text2", ID_TEXT_2, 408, 50, 30, 150, 0, 100, 0 },
{ TEXT_CreateIndirect, "Text3", ID_TEXT_3, 340, 232, 30, 150, 0, 100, 0 },
{ TEXT_CreateIndirect, "Text4", ID_TEXT_4, 408, 232, 30, 150, 0, 100, 0 },
{ LISTVIEW_CreateIndirect, "Listview0", ID_LISTVIEW_0, 408, 232, 1, 1, 0, 0, 0 },
{ GRAPH_CreateIndirect, "Graph0", ID_GRAPH_0, 75, 35, 253, 180, 0, 0x0, 0},
{ GRAPH_CreateIndirect, "Graph1", ID_GRAPH_1, 450, 35, 253, 180, 0, 0x0, 0},
{ GRAPH_CreateIndirect, "Graph2", ID_GRAPH_2, 75, 217, 253, 180, 0, 0x0, 0},
{ GRAPH_CreateIndirect, "Graph3", ID_GRAPH_3, 450, 217, 253, 180, 0, 0x0, 0},
};
//对话框回调函数
static void _cbDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;
WM_HWIN hGraph0;
WM_HWIN hGraph1;
WM_HWIN hGraph2;
WM_HWIN hGraph3;
GUI_UC_SetEncodeUTF8();
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
//初始化FRAMEWIN
hItem = pMsg->hWin;
FRAMEWIN_SetTitleHeight(hItem, 80);
FRAMEWIN_SetText(hItem, "参数曲线");
FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
FRAMEWIN_SetFont(hItem, &GUI_Fontfont28);
FRAMEWIN_SetTextColor(hItem, 0x00000000);
//
// Initialization of 'Text0'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
TEXT_SetText(hItem, "上下键翻页");
TEXT_SetTextColor(hItem, 0x00000000);
TEXT_SetFont(hItem, &GUI_Fontfont18);
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
//
// Initialization of 'Text1'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
TEXT_SetText(hItem, "高\n压\n曲\n线");
TEXT_SetTextColor(hItem, 0x00000000);
TEXT_SetFont(hItem, &GUI_Fontfont24);
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
//
// Initialization of 'Text2'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
TEXT_SetText(hItem, "脉\n搏\n波");
TEXT_SetTextColor(hItem, 0x00000000);
TEXT_SetFont(hItem, &GUI_Fontfont24);
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
//
// Initialization of 'Text3'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
TEXT_SetText(hItem, "低\n压\n曲\n线");
TEXT_SetTextColor(hItem, 0x00000000);
TEXT_SetFont(hItem, &GUI_Fontfont24);
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
//
// Initialization of 'Text4'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
TEXT_SetText(hItem, "脉\n率\n曲\n线");
TEXT_SetTextColor(hItem, 0x00000000);
TEXT_SetFont(hItem, &GUI_Fontfont24);
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
//初始化GRAPH_0,高压曲线
hGraph0=WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
oscilldev.linecolorindex=0; //线条默认红色
oscilldev.backcolorindex=3; //背景默认白色
oscilldev.linecolor=LineColor[oscilldev.linecolorindex];
oscilldev.backcolor=BackColor[oscilldev.backcolorindex];
GRAPH_SetColor(hGraph0,oscilldev.backcolor,GRAPH_CI_BK);//设置GRAPH背景颜色
oscilldev.graphdata0=GRAPH_DATA_YT_Create(oscilldev.linecolor,200,0,0); //创建YT数据对象
GRAPH_AttachData(hGraph0,oscilldev.graphdata0); //将数据对象添加到GRAPH控件中
GRAPH_SetBorder(hGraph0,BORDER_LEFT,BORDER_TOP,BORDER_RIGHT,BORDER_BOTTOM);//设置边界
GRAPH_SetGridDistX(hGraph0,40); //设置水平网格间距
GRAPH_SetGridDistY(hGraph0,25); //设置垂直网格间距
GRAPH_SetGridVis(hGraph0,0); //设置网格可见
hScaleV=GRAPH_SCALE_Create(35,GUI_TA_RIGHT,GRAPH_SCALE_CF_VERTICAL,25); //绘制垂直刻度
GRAPH_SCALE_SetTextColor(hScaleV,GUI_BLACK);
GRAPH_AttachScale(hGraph0,hScaleV); //将刻度对象附加到图形小工具
GRAPH_SCALE_SetFactor(hScaleV,0.4); //设置刻度系数
GRAPH_SCALE_SetOff(hScaleV,-225); //垂直刻度向上移动200个像素点,这样垂直刻度会有负值
GRAPH_SCALE_SetFont(hScaleV, GUI_FONT_24B_ASCII);
hScaleH=GRAPH_SCALE_Create(160,GUI_TA_HCENTER,GRAPH_SCALE_CF_HORIZONTAL,40);//绘制水平刻度
GRAPH_SCALE_SetTextColor(hScaleH,GUI_DARKGREEN);
GRAPH_AttachScale(hGraph0,hScaleH); //将刻度对象附加到图形小工具
GRAPH_SCALE_SetFactor(hScaleH,0.175);
GRAPH_SCALE_SetFont(hScaleH, GUI_FONT_20B_ASCII);
//初始化GRAPH_1,脉搏波曲线
hGraph1=WM_GetDialogItem(pMsg->hWin, ID_GRAPH_1);
oscilldev.linecolorindex=1; //线条默认黑色
oscilldev.backcolorindex=3; //背景默认白色
oscilldev.linecolor=LineColor[oscilldev.linecolorindex];
oscilldev.backcolor=BackColor[oscilldev.backcolorindex];
GRAPH_SetColor(hGraph1,oscilldev.backcolor,GRAPH_CI_BK);//设置GRAPH背景颜色
oscilldev.graphdata1=GRAPH_DATA_YT_Create(oscilldev.linecolor,200,0,0); //创建YT数据对象
GRAPH_AttachData(hGraph1,oscilldev.graphdata1); //将数据对象添加到GRAPH控件中
GRAPH_SetBorder(hGraph1,BORDER_LEFT,BORDER_TOP,BORDER_RIGHT,BORDER_BOTTOM);//设置边界
GRAPH_SetGridDistX(hGraph1,40); //设置水平网格间距
GRAPH_SetGridDistY(hGraph1,25); //设置垂直网格间距
GRAPH_SetGridVis(hGraph1,0); //设置网格可见
hScaleV=GRAPH_SCALE_Create(35,GUI_TA_RIGHT,GRAPH_SCALE_CF_VERTICAL,25); //绘制垂直刻度
GRAPH_SCALE_SetTextColor(hScaleV,GUI_BLACK);
GRAPH_AttachScale(hGraph1,hScaleV); //将刻度对象附加到图形小工具
GRAPH_SCALE_SetFactor(hScaleV,0.4); //设置刻度系数
GRAPH_SCALE_SetOff(hScaleV,-225); //垂直刻度向上移动200个像素点,这样垂直刻度会有负值
GRAPH_SCALE_SetFont(hScaleV, GUI_FONT_24B_ASCII);
hScaleH=GRAPH_SCALE_Create(160,GUI_TA_HCENTER,GRAPH_SCALE_CF_HORIZONTAL,40);//绘制水平刻度
GRAPH_SCALE_SetTextColor(hScaleH,GUI_DARKGREEN);
GRAPH_AttachScale(hGraph1,hScaleH); //将刻度对象附加到图形小工具
GRAPH_SCALE_SetFactor(hScaleH,0.175);
GRAPH_SCALE_SetFont(hScaleH, GUI_FONT_20B_ASCII);
break;
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_KEY_INSERT:
GRAPH_DetachData(hGraph0,oscilldev.graphdata0);
GRAPH_DetachScale(hGraph0,hScaleV);
GRAPH_DetachScale(hGraph0,hScaleH);//分离后的数据对象和刻度对象依然占用内存,需要手动删除
GRAPH_DATA_YT_Delete(oscilldev.graphdata0);
WM_DeleteWindow(hGraph0);
GRAPH_DetachData(hGraph1,oscilldev.graphdata1);
GRAPH_DetachScale(hGraph1,hScaleV);
GRAPH_DetachScale(hGraph1,hScaleH);//分离后的数据对象和刻度对象依然占用内存,需要手动删除
GRAPH_DATA_YT_Delete(oscilldev.graphdata1);
WM_DeleteWindow(hGraph1);
GUI_EndDialog(pMsg->hWin,0);
User1_historicaldata();
break;
case GUI_KEY_ESCAPE:
GUI_EndDialog(pMsg->hWin,0);
CreateFramewin1();
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
//__IO u8 graph_fre=0; //图形刷新频率统计器
WM_HWIN Graphyt_demo(void);
//图形显示demo
WM_HWIN Graphyt_demo(void)
{
WM_HWIN hWin,ClientWin;
int Graph_xSize,Graph_ySize;
int i;
//WM_SetCallback(WM_HBKWIN,_cbBkWindow); //设置背景窗口回调函数
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, WM_HBKWIN,10,9);
ClientWin = WM_GetDialogItem(hWin, ID_GRAPH_0);
Graph_xSize=WM_GetWindowSizeX(ClientWin);
Graph_ySize=WM_GetWindowSizeY(ClientWin);
oscilldev.dataxsize=Graph_xSize-BORDER_LEFT-BORDER_RIGHT-3;
oscilldev.dataysize=Graph_ySize-BORDER_TOP-BORDER_BOTTOM-3;
oscilldev.buffer0=mymalloc(SRAMIN,oscilldev.dataxsize*4); //申请内存
oscilldev.buffer1=mymalloc(SRAMIN,oscilldev.dataxsize*4); //申请内存
//oscilldev.buffer2=mymalloc(SRAMIN,oscilldev.dataxsize*4); //申请内存
//oscilldev.buffer3=mymalloc(SRAMIN,oscilldev.dataxsize*4); //申请内存
for(i=0;i<200;i++)
{
//向GRAPH图形小工具添加数据,注意要缩20倍,因为垂直坐标扩大(缩放)20倍,
//并且还要加200,因为垂直坐标上移了200个像素点
oscilldev.buffer0=90+i*0.5;
oscilldev.buffer1=90+i*0.5;
//oscilldev.buffer2=90+i*0.5;
//oscilldev.buffer3=90+i*0.5;
GRAPH_DATA_YT_AddValue(oscilldev.graphdata0,oscilldev.buffer0/0.4-225);
GRAPH_DATA_YT_AddValue(oscilldev.graphdata1,oscilldev.buffer1/0.4-225);
//GRAPH_DATA_YT_AddValue(oscilldev.graphdata2,oscilldev.buffer2/0.4-225);
//GRAPH_DATA_YT_AddValue(oscilldev.graphdata3,oscilldev.buffer3i]/0.4-225);
}
GUI_Exec();
/*while(1)
{
if(oscilldev.adflag==1)
{
GRAPH_DATA_YT_Clear(oscilldev.graphdata); //清除上一次显示
for(i=0;i<oscilldev.dataxsize;i++)
{
//向GRAPH图形小工具添加数据,注意要缩20倍,因为垂直坐标扩大(缩放)20倍,
//并且还要加200,因为垂直坐标上移了200个像素点
GRAPH_DATA_YT_AddValue(oscilldev.graphdata,oscilldev.buffer/20+200);
}
memset(oscilldev.buffer,0,oscilldev.dataxsize); //清空buffer
oscilldev.adflag=0;
}
graph_fre++;
GUI_Delay(10);
GUI_Exec();
}*/
return hWin;
}
想按下按键后先释放graph再切换页面,但是在红色部分进入了HardFault?
请问硬汉怎么解决?
|
|