心电信号模拟采集软件报告Word文件下载.docx

上传人:b****5 文档编号:8345207 上传时间:2023-05-11 格式:DOCX 页数:14 大小:234.99KB
下载 相关 举报
心电信号模拟采集软件报告Word文件下载.docx_第1页
第1页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第2页
第2页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第3页
第3页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第4页
第4页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第5页
第5页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第6页
第6页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第7页
第7页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第8页
第8页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第9页
第9页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第10页
第10页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第11页
第11页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第12页
第12页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第13页
第13页 / 共14页
心电信号模拟采集软件报告Word文件下载.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

心电信号模拟采集软件报告Word文件下载.docx

《心电信号模拟采集软件报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《心电信号模拟采集软件报告Word文件下载.docx(14页珍藏版)》请在冰点文库上搜索。

心电信号模拟采集软件报告Word文件下载.docx

●缺乏数据采集卡,拟采用已有心电数据文件,打开并读入,然后在屏幕上显示,并且打印波形,写入到xps文件中。

4.实验步骤

●基本功能描述

打开exe文件,在参数设置一栏中,选择所需要的参数,然后点击保存,即会弹出窗口选择所要保存得位置。

点击显示图形按钮,就会在图形上把数据读进去,并显示曲线图。

点击打印按钮,即进入打印的的界面,开始打印曲线图。

●设计思路

1.对需要用到的变量进行初始化,并对控件添加变量,设置变量值。

2.选择相应的按钮之后就响应相应的消息处理函数,实现相对应的功能。

●软件设计

4.1创建对话框

创建一个MFCAppWizard[exe]工程,命名为“PrintDemo”,如图1所示,并创建对话框,如图2所示。

创建成功后,系统自动生成的对话框,如图3所示。

图1

图2

图3

4.2.编辑对话框

在对话框中添加4个ComboBox控件,7个StaticText,3个Button控件,1个tchart控件,并把对话框的Caption改为“心电信号模拟采集软件”。

界面如图4下:

图4

4.2.1参数设置

在参数设置中,添加控件GroupBox,并设置标题为参数设置,即把放大器倍数、高通滤波器频率、低通滤波器频率、数据采集卡频率放到控件GroupBox中,这样会给人感觉比较规整。

设置好之后,在ComboBox的属性Data中添加所要设置的参数,各个数字之间以“;

”隔开,属性如图5所示,这样在控件中将会按行排序。

修改各个控件的ID号,并对其添加变量,如图6所示,在程序初始化中,我把各个参数的第一个参数设置为默认参数,这样在运行时,就直接出现第一个参数,其产生的效果如图7所示。

在参数保存中,我选择的保存方式是.txt文档的形式,为了让保存的数据更加清晰明了,我在每一个数据之前都添加了一个注释。

也就是说保存之后,可以使客户一眼就能看出代表的什么意思,如图8所示。

图5

图6

图7

图8

为了是实现上述的运行之后显示第一个参数,在初始化函数中,添加的程序为:

((CComboBox*)GetDlgItem(IDC_HighFilter_COMBO))->

SetCurSel(0);

((CComboBox*)GetDlgItem(IDC_Amplifier_COMBO))->

((CComboBox*)GetDlgItem(IDC_Data_COMBO))->

((CComboBox*)GetDlgItem(IDC_LowFilter_COMBO))->

在参数保存按钮中,添加的程序为:

CFileDialogFileDlg(false,"

.txt"

"

"

OFN_CREATEPROMPT,"

文本文件

(*.txt)|*.txt"

);

if(IDOK==FileDlg.DoModal())

{

CStringstrName=FileDlg.GetPathName();

GetDlgItem(IDC_Amplifier_COMBO)->

GetWindowText(m_comboamplifier);

GetDlgItem(IDC_HighFilter_COMBO)->

GetWindowText(m_combohighfilter);

GetDlgItem(IDC_LowFilter_COMBO)->

GetWindowText(m_combolowfilter);

GetDlgItem(IDC_Data_COMBO)->

GetWindowText(m_combodata);

CStringstrEdit=m_comboamplifier;

CStringstrEdit1=m_combohighfilter;

CStringstrEdit2=m_combolowfilter;

CStringstrEdit3=m_combodata;

FILE*pflOut;

pflOut=fopen(strName,"

wb"

if(pflOut==NULL)

{

MessageBox(_T("

文件创建失败"

));

}

fputs("

放大器参数:

+strEdit+"

"

pflOut);

//写¡

ä

文?

件t内¨

²

容¨

Y。

¡

ê

高通滤波器参数:

+strEdit1+"

pflOut);

低通滤波器参数:

+strEdit2+"

数据采集频率:

+strEdit3+"

fclose(pflOut);

//关?

闭À

?

件t指?

针?

AfxMessageBox(_T("

参数保存成功|"

}

else

;

4.2.2曲线显示

在显示曲线图时,我选择的是通过添加控件Teechart5,由于tchart控件功能比较强大,双击控件即可进入修改控件中的参数的界面,点击添加曲线图,选择fastline,并对轴进行修改,添加横轴纵轴标签,如图9所示。

还可以自动实现曲线图的放大、缩小,曲线图的形状、视图状态、拖拉、显示数据等功能,并对其进行设置,即把数据传到曲线图中。

在这里我将会展示两种曲线图,分别如图10,11所示。

图10是显示部分数据,这里的曲线图比较直观,可以很快的观察到曲线图的变化。

图11显示的曲线图是把所有的数据都传了进去,并且横轴坐标时间是以秒计算的。

图12是曲线图放大部分,图13是显示的曲线图下移部分。

图9

图10

图11

图12

图13

显示曲线图部分的代码程序如下所示:

ifstreamifs("

samples.txt"

CStringstrLine(_T("

stringstrText("

LPCTSTRszToken(_T("

intcurPos=0;

intnIndex=0;

vector<

Node>

myNodeList;

intnCount=0;

while(getline(ifs,strText))

{

curPos=0;

strLine.Trim(_T("

nIndex=0;

if(strTpare("

)!

=0)

stringstr1=strText.substr(2,2);

stringstr2=strText.substr(5,3);

stringstr3=strText.substr(10);

chartime[10];

itoa(atoi(str1.c_str())*1000+atoi(str2.c_str()),time,10);

strings_time(time);

Nodetemp(strtod(s_time.c_str(),NULL),atof(str3.c_str()));

myNodeList.push_back(temp);

nCount++;

CSeriessertDemo=(CSeries)m_tchart.Series(0);

sertDemo.Clear();

for(inti=0;

i<

nCount;

i++)

sertDemo.AddXY(myNodeList[i].GetTime(),myNodeList[i].GetVolt(),NULL,NULL);

}

4.2.3打印

打印部分,添加打印预览窗口,并设置相对应的变量,代码如下所示:

LRESULTCPrintDemoDlg:

:

OnPrintWindow(WPARAMwParam,LPARAMlParam)

{

CRectrectWnd;

BITMAPbmGraphy;

CBitmapbitmapTemp,*pOldBmpGraphy;

CDC*pGraphyDC=newCDC;

CDC*pDC=GetDC();

CDC*pPrintDC=(CDC*)wParam;

CPrintInfo*pInfo=(CPrintInfo*)lParam;

m_bitmapPrint.GetBitmap(&

bmGraphy);

pGraphyDC->

CreateCompatibleDC(pDC);

pOldBmpGraphy=pGraphyDC->

SelectObject(&

m_bitmapPrint);

pPrintDC->

StretchBlt(pInfo->

m_rectDraw.left,pInfo->

m_rectDraw.top,pInfo->

m_rectDraw.Width(),pInfo->

m_rectDraw.Height(),pGraphyDC,0,0,bmGraphy.bmWidth,bmGraphy.bmHeight,SRCCOPY);

SelectObject(pOldBmpGraphy);

ReleaseDC(pGraphyDC);

deletepGraphyDC;

return1;

}

添加获取窗口曲线函数,获得窗口位图。

程序如下所示:

voidCPrintDemoDlg:

GetWindowGraph()

CRectrectWnd;

CBitmap*pOldBitmap;

CDC*pDC=GetDC();

CDC*pMemDC=newCDC;

GetWindowRect(rectWnd);

m_bitmapPrint.DeleteObject();

m_bitmapPrint.CreateCompatibleBitmap(pDC,rectWnd.Width(),rectWnd.Height());

pMemDC->

pOldBitmap=pMemDC->

PrintWindow(pMemDC,0);

SelectObject(pOldBitmap);

ReleaseDC(pMemDC);

deletepMemDC;

添加C++头文件PrintFrame.cpp,以及在类CPrintFrame中添加函数名为DoPrintView,OnDestroy,DoPrint。

在DoPrintView函数的程序为:

voidCPrintFrame:

DoPrintView()

if(m_pPrintView!

=NULL)

m_pPrintView->

ShowWindow(SW_SHOW);

SetActiveView(m_pPrintView);

SetIcon(m_pMainDlg->

GetIcon(FALSE),FALSE);

GetIcon(TRUE),TRUE);

ShowWindow(SW_MAXIMIZE);

m_pMainDlg->

ShowWindow(SW_HIDE);

CWinApp*pApp=AfxGetApp();

pApp->

m_pMainWnd=this;

m_pPrintView->

OnFilePrintPreview();

在OnDestroy的函数程序为:

OnDestroy()

DestroyWindow();

CFrameWnd:

OnDestroy();

在DoPrint函数的程序为:

DoPrint()

if(m_pPrintView==NULL)

打ä

¨

°

印®

设¦

备À

初?

始º

化¡

¥

失º

ì

败ã

¹

return;

SendMessage(WM_COMMAND,ID_FILE_PRINT);

添加类PrintView,如下:

classCPreviewPrint:

publicCPreviewView

DECLARE_DYNCREATE(CPreviewPrint)

添加类PrieviewPrint,设置变量如下:

BOOLm_bIsCloseFrame;

public:

CPreviewPrint();

virtual~CPreviewPrint();

virtualvoidOnDraw(CDC*pDC);

#ifdef_DEBUG

virtualvoidAssertValid()const;

#ifndef_WIN32_WCE

virtualvoidDump(CDumpContext&

dc)const;

#endif

afx_msgvoidOnPreviewClose();

afx_msgvoidOnPreviewPrint();

protected:

DECLARE_MESSAGE_MAP()

};

双击打印按钮的程序为:

OnBnClickedButtonPrintview()

m_pPrintFrame=newCPrintFrame(this);

GetWindowGraph();

m_pPrintFrame->

DoPrintView();

打印界面如图14所示:

图14.

5.总结与感悟

本次实验课是我第一次触碰C++,及MFC。

完成此次编程的过程中感触良多,最开始虽然上了实验课,但其实脑袋里还是一团浆糊,拿到最后的编程作业时,不知从何入手,于是决定先不管作业,去图书馆借了本C++的书,看了点语法和例程,心有对C++有了大概的认识,关键点个人感觉就是抽象出类来。

对类进行编程。

通过MFC编写心电模拟采集软件,加深了对类的理解,C++的运用,而且在调试过程中遇到的问题也学会了如何去解决。

虽然走了很多弯路,完成的功能也不够强大,但我学到了很多。

最后在绘图程序上进行绘图时候,感觉这些天的努力值了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2