毕业设计(论文)-大学物理实验中示波器的设计与实现.doc

上传人:椰子壳 文档编号:3284333 上传时间:2019-08-08 格式:DOC 页数:27 大小:250.02KB
返回 下载 相关 举报
毕业设计(论文)-大学物理实验中示波器的设计与实现.doc_第1页
第1页 / 共27页
毕业设计(论文)-大学物理实验中示波器的设计与实现.doc_第2页
第2页 / 共27页
毕业设计(论文)-大学物理实验中示波器的设计与实现.doc_第3页
第3页 / 共27页
毕业设计(论文)-大学物理实验中示波器的设计与实现.doc_第4页
第4页 / 共27页
毕业设计(论文)-大学物理实验中示波器的设计与实现.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《毕业设计(论文)-大学物理实验中示波器的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-大学物理实验中示波器的设计与实现.doc(27页珍藏版)》请在三一文库上搜索。

1、大学物理实验中示波器的设计与实现大学物理实验中示波器的设计与实现 摘摘 要要 仿真是求解随机问题的技术。随着具有存储功能的计算机的出现,计算机 仿真技术越来越受到重视,现已被应用于各个领域。本系统主要用于教育领域, 形象了演示了示波器的功能,方便了老师的教学。 本文主要描述了仿真技术的基本概念以及仿真技术,介绍仿真技术在现实 生活中的应用实例,讨论了仿真理论目前的发展状况、前景以及论文研究的目 的和意义。 本文所设计实现的基于仿真技术的示波器仿真实验系统是在 Visual C+6.0 开发环境下编程实现的,利用 MFC 类库和 Visual C+提供的高度可视的 应用程序开发工具,在其开发的小

2、型应用程序平台上实现示波器控制面板的绘 制、位图资源的加载,可以分别选择单踪波和双踪波的通道来实现不同波形的 动态演示,以及实现双踪波幅值分离的设计实现和波形周期的增加和减小。本 文的最后对设计研究工作进行了总结,指出了研究上的不足和系统需要改进的 地方,说明了需要进一步深入讨论的内容。 关键词:关键词:模拟仿真;随机问题; MFC 类库;可视化 Man-machine Interaction Equipment-Oscilloscope Simulation Abstract Simulation technology is a skill to solve random problem.

3、With the memory function of the computer, computer simulation technology has been widely applied in various fields. The system is mainly used for teaching and the visualized demonstration of the oscilloscope functions will facilitate the teachers teaching. The thesis describes the basic concepts of

4、simulation technology. And with application examples in real life about simulation, it discusses the current development situation and prospects of simulation technology, as well as the purpose and significance of the research in the thesis. The oscilloscope simulation system which based on simulati

5、on technology in the thesis is in Visual C + + 6.0 Programming environments. Using MFC and Visual C + + which provide a high degree of visual application development tools, the system can achieve such functions: the drawing of oscilloscopes control panel, the loading of bitmap resources, the dynamic

6、 displaying of different waveform with single-track and double-track channel respectively, and the achievement of amplitude separation and the variation of time cycle of the wave of double-track. Finally, the thesis concludes for the research, and points out the lack of the system and the content fo

7、r discussing further. Key words: Simulation; Random Problem; MFC; Visualization 目目 录录 论文总页数:29 页 1引言.1 1.1仿真理论的发展.1 1.2计算机仿真技术.1 1.3计算机仿真应用实例.2 1.4论文的目的及意义.2 2系统的总体设计.3 2.1系统功能说明.3 2.2开发运行平台选择及分析.3 2.2.1实现系统的硬件环境.3 2.2.2实现系统的软件环境.4 2.2.3实现系统的理论基础.4 第 2 页 共 29 页 3示波器仿真系统的实现.4 3.1应用程序平台基本框架的建立.4 3.1.1

8、添加消息处理函数.6 3.1.2添加成员变量.8 3.1.3添加 RECOURCE 资源9 3.1.4定时器成员函数.10 3.1.5通道的选择.10 3.1.6BUTTON 单击事件的设计11 3.2曲线面板的设计.14 3.2.1位图资源及其应用.14 3.2.2图形刷新.16 3.2.3获取设备环境.18 3.2.4映射模式.19 3.2.5绘图工具.21 3.3本章小节.23 4系统运行结果及工作总结.23 4.1系统运行结果.23 4.2遇到的问题及解决方法.25 4.3系统改进方法.26 结 论.26 参考文献.26 第 3 页 共 29 页 1引言引言 1.1仿真理论的发展仿真理

9、论的发展 仿真技术最早可以追溯到 1773 年法国自然学家 G.L.L.Buffon 为了估计 的值而采用随机数做实验来求解随机问题。仿真又称做蒙特卡罗方法。比较早 而且著名的蒙特卡罗方法使用者是 W.S.Gosset。他在 1908 年以“Student”为 笔名发表论文时,使用了蒙特卡罗方法来证明他的 t 分布法。尽管蒙特卡罗方 法起源于 1876 年,但是直到 75 年之后才被命名。现代化的具有程序储存功能 的计算机使冗长的计算成为可能,而这种计算正式蒙特卡罗所要求的。 如今计算机仿真技术被广泛运用于众多的领域之中。在国外,1876 年,美 国统计学家第一次使用仿真模拟方法做随机实验。进

10、入 20 世纪 80 年代,仿真 模拟技术在高科技中所处的地位日益提高。一些发达国家非常重视仿真模拟技 术的开发利用,在科学研究、工业、交通、军事、教育等领域得到大量应用。 1.2计算机仿真技术计算机仿真技术 所谓计算机仿真是指在实体尚不存在、或者不易在实体上进行实验的情况 下,先通过对考察对象进行建模,用数学方程式表达出其物理特性,然后编制 计算机程序,并通过计算机运算出考察对象在系统参数以及内外环境条件改变 的情况下,其主要参数如何变化,从而达到全面了解和掌握考察对象特性的目 的。 计算机仿真技术是作为分析和研究系统运行行为、揭示系统动态过程和运 动规律的一种重要手段和方法。近年来,随着系

11、统科学研究的深入、控制理论、 计算技术、计算机科学与技术的发展,计算机仿真技术已发展成一门新的学科。 信息处理技术的突飞猛进,更使得仿真技术得到迅速发展。 一、计算机仿真的特点 1.模型参数任意调整 模型参数可根据要求通过计算机程序随时进行调整,修改或补充,使人们 能够掌握各种可能的仿真结果,为进一步完善研究方案提供了极大的方便。 2.系统模型快速求解 借助于先进的计算机系统,人们在较短时间内就能知道仿真运算的结果(数 据或图像),从而为人们的实践活动提供强有力的指导。这是通常的数学模型方 法所无法实现的。 3.运算结果准确可靠 只要系统模型、仿真模型和仿真程序是科学合理的,那么计算机的运算结

12、 果一定准确无误(除非机器有故障)。因此,人们可毫无顾虑地应用计算机仿真 的结果。 第 4 页 共 29 页 4.实物仿真形象直观 只要系统模型、仿真模型和仿真程序是科学合理的,那么计算机的运算结 果一定准确无误(除非机器有故障)。因此,人们可毫无顾虑地应用计算机仿真 的结果。 1.3计算机仿真应用实例计算机仿真应用实例 因工作需要,要求一油缸保持稳定的工作压力,具体参数如下:油缸设定 压力 10bar,压力允许误差为 15%,蓄能器体积 6.3L,充气压力 2bar,其它参 数如电机转速、泵排量、缸径、泄露量等皆为已知,图一为该系统的仿真模型, 其保压原理是通过检测液压缸内的工作压力并与设定

13、的压力进行比较从而决定 是否启动电机带动泵运行。当对仿真模型中的每个图形模块设置我们所期望的 参数值后,运行该仿真模型便可得出多种仿真结果。 1. 压力对比 为了比较采用保压控制和不保压控制这两个方案,仿真的结果告诉我们, 由于没有采用保压控制,在泄漏的影响下,系统的压力一直在下降,经过一段 时间后,缸内的压力就达不到压力要求了,而采用了保压系统的方案,缸内的 压力可以一直维持在要求的压力上。 2. 仿真结果 通过仿真计算,还可以直接做出采用保压控制方案后缸内压力随时间的变 化,可以知道:缸内压力建立需要的时间是 25 秒,进一步放大图中直线部分, 我们可以清楚地看到缸内压力的波动情况,压力波

14、动的振幅为 0.008bar。此外 我们也可以将电机启动停止情况和压力波动情况绘在一张图上,电机在 100 秒 的仿真时间内起停了三次。 3. 参数优化 如果需要考察气囊式蓄能器预充气压力对压力波动、压力建立时间及其保 压时间等参数的影响,可以利用 AMESim 的 Batch 仿真运行模式,分别将预充气 压力设定为bar、bar 和bar,从图七中可以明显看出:充气压力小时, 压力波动值较小,但是压力建立时间长,保压时间短;充气压力高时,压力虽 可迅速建立,保压时间也较长,但是压力波动也较大。因此在产品设计阶段我 们可以根据要求在压力波动、压力建立时间及其保压时间之间折衷以确定最佳 的预充气

15、压力。 1.4论文的目的及意义论文的目的及意义 本系统的目的是利用 VC+进行简单仿真实现的人机交互设备,完成了一个 小型的应用程序及简单示波器仿真系统。论文主要涉及到仿真模拟技术,通过 对次系设计开发对仿真理论的发展及主要内容有了基本的认识与了解。 第 5 页 共 29 页 通过对仿真系统的设计与实现,笔者熟悉了 VC+的 MFC 开发模式流程,掌 握了仿真技术的思想,完成了简单的示波器仿真系统,验证了仿真在连续系统 仿真下的可行性。 2 系统的总体设计系统的总体设计 系统设计的基本思想是以示波器的工作原理为基础,通过 Visual C+语言 设计实现完成一个小型的示波器仿真系统。 2.1系

16、统功能说明系统功能说明 本系统是利用 VC+的 MFC 类库设计搭建的应用程序基本框架,在其基础上 添加一些相关的类和消息处理机制。本系统在运行以后,就可以点击相关的按 钮来选择单踪波和双踪波的演示。并在此基础上可以点击相应的按钮来调节波 形幅度和波形周期,另外,如果选择的是双踪波的演示,我们可以点击相应的 按钮来实现双踪波的分离,使两个波的幅度差越来越大。直观上充分的说明了 示波器的工作原理。功能模块划分如下: 图 1 功能模块图 2.2开发运行平台选择及分析开发运行平台选择及分析 本系统是以 VC+6.0 结合图形可视化的思想作为系统的开发环境。 2.2.12.2.1 实现系统的硬件环境实

17、现系统的硬件环境 实现本系统的硬件配置如表 1 所示: 表 1 硬件配置 CPUAMD Sempron(tm) 2200+ 内存1.50 GHz,512 M 第 6 页 共 29 页 显卡NVIDIA GeForce4 MX 440 with AGP8X 笔者所搭建的仅是一个小型的实验模拟系统,因此一般的用户 PC 机都可 畅通无阻的运行本程序。 2.2.22.2.2 实现系统的软件环境实现系统的软件环境 Visual C+自诞生以来,一直是 Windows 环境下最主要的应用开发系统之 一。Visual C+不仅是 C+语言的集成开发环境,而且与 Win32 紧密相连,利 用 Visual

18、C+开发系统,可以完成各种各样的应用程序开发,从底层软件直到 上层直接面向用户的软件。而且,Visual C+强大的调试功能也为大型复杂软 件的开发提供了有效的排错手段。 进入 20 实际 90 年代以来,随着多媒体技术和图形图像技术的不断发展, 可视化(Visual)技术得到广泛的重视,越来越多的计算机专业人员都开始研 究并应用可视化技术。Visual C+是一个很好的可视化编程工具,使用 Visual C+环境来开发基于 Windows 的应用程序大大缩短了开发时间,而且它的界面更 友好,便于程序员操作。 2.2.32.2.3 实现系统的理论基础实现系统的理论基础 Visual C+是一个

19、很好的可视化编程工具,使用 Visual C+环境来开发基 于 Windows 的应用程序大大缩短了开发时间,而且它的界面更友好,便于操作。 开发环境是编程者同 Visual C+的交互界面,通过它可以访问 C+源代码编辑 器、资源编辑器、使用内部调试器,还可以创建项目文件。 3示波器仿真系统的实现示波器仿真系统的实现 3.1应用程序平台基本框架的建立应用程序平台基本框架的建立 笔者使用 VC+6.0 结合图形可视化技术实现了示波器的仿真试验系统。打 开 Visual C+6.0 操作界面,建立工程类型为 MFC AppWizard exe 的对话框 文档的新工程,系统自动为用户创建 CMyA

20、pp, CMyDlg 两个类。创建过程如图所 示: 第 7 页 共 29 页 图 2 创建工程的界面 图 3 选择工程类型的界面 图 4 创建好的工程信息界面 在 Resource View 中的 Dialog 文件目录下有两个对话框,分别为 IDD- ABOUTBOX 和 IDD-MY-DIALOG,如下图所示: 第 8 页 共 29 页 图 5 IDD-ABOUTBOX 在 IDD-MY-DLALOG 对话框中进行设置,在对话框中添加一个 STATIC TEXT 控件和四个 GROUP BOX 控件,然后再在每个 GROUP BOX 控件中添加 相应的 BUTTON 按纽,结果如图所示:

21、图 6 IDD_MY_DIALOG 3.1.13.1.1 添加消息处理函数添加消息处理函数 为每个按纽创建类向导,右键单击,选择“CLASS WIZARD”,就会出现如 图所示的对话框: 第 9 页 共 29 页 图 7 CLASS WIZARD 对话框 此对话框主要是用来为每个用 ID 标志的按纽添加消息处理函数,如对应的 ID 为 IDC-BMINUS 的按扭,有两个相应的消息处理函数,如 BN_CLICKED 与 BN_DOUBLECLICKED,而我们在此工程中用到的是 BN_CLICKED,点击有边的添加 消息处理函数就可以了,双击相应的消息处理函数名就可以进入相应的消息处 理函数的

22、编辑,如对应的幅值增加按扭的消息处理函数为: Void CMy22Dlg:OnVoltplus () ID_VOLTMINUS (对应的幅值减小的按扭): Void CMy22Dlg:OnVoltminus () 在相应的 DLGH 文件中的 CLASS CMY22Dlg: public CDialog 中就会出现 相应的消息处理函数的声明 AFX_MSG (CMy22Dlg) Virtual BOOL OnInitDialog (); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx

23、_msg HCURSOR OnQueryDragIcon(); afx_msg void OnVoltplus(); afx_msg void OnVoltminus(); 第 10 页 共 29 页 afx_msg void OnTimeplus(); afx_msg void OnTimeminus(); afx_msg void OnAplus(); afx_msg void OnAminus(); afx_msg void OnBplus(); afx_msg void OnBminus(); afx_msg void OnRadio1(); afx_msg void OnRadio2

24、(); afx_msg void OnRadio3(); /AFX_MSG DECLARE_MESSAGE_MAP () 3.1.23.1.2 添加成员变量添加成员变量 同样右键单击“CLASS WIZARD” ,在弹出来的对话框中点击“Member Variables”,就可对相应的控件添加相应的成员变量,如图所示: 图 8 添加成员变量的界面 在相应的 DLGH 文件中的 CLASS CMY22Dlg: public CDialog 中就会出现 以下代码: / Dialog Data /AFX_DATA(CMy22Dlg) enum IDD = IDD_MY22_DIALOG ; CBut

25、tonm_btnaminus; CButtonm_btnaplus; CButtonm_btnbminus; 第 11 页 共 29 页 CButtonm_btnbplus; CButtonm_btntimeminus; CButtonm_btnvoltplus; CButtonm_btnvoltminus; CButtonm_btntimeplus; CStringm_wndscope; /AFX_DATA 3.1.33.1.3 添加添加 RECOURCERECOURCE 资源资源 在“RECOURCE VIEW”中,展开“ICON”目录,右键单击,选择“IMPORT” 选项,则会弹出以下对

26、话框: 图 9 导入位图资源界面 选择你所要导入的图标所在文件的目录及相应的图标,然后在“ICON”目 录下就会显示刚刚导入的图标,导入之后并设置相应的属性如“ID” 。添加相应 的图标之后,在 Dlg.cpp 文件中的 BOOL CMy22Dlg:OnInitDialog()函数中添 加以下代码为每个按扭加载图标 m_btnvoltplus.SetIcon (IDI_LEFT); /为“幅值增加”按扭设置图标 m_btnvoltminus.SetIcon (IDI_RIGHT); /为“幅值减小”按扭设置图标 m_btntimeplus.SetIcon (IDI_LEFT); /为“时间增加

27、”按扭设置图标 m_btntimeminus.SetIcon (IDI_RIGHT); /为“时间减少”按扭设置图标 m_btnaplus.SetIcon (IDI_UP); m_btnAMinus.SetIcon (IDI_DOWN); m_btnbplus.SetIcon (IDI_UP); m_btnbminus.SetIcon (IDI_DOWN); 同时对 STATIC TEXT 对象 m_wndscope 设置标题和度量单位显示的设置 第 12 页 共 29 页 m_wndscope.SetTitle(“虚拟示波器“);/显示标题 m_wndscope.SetValueString

28、 (“电压“,“伏“);/设置波形显示时的幅值单 位 SetTimer (1, 20, NULL); 3.1.43.1.4 定时器成员函数定时器成员函数 在 Dlg.cpp 文件中添加定时器函数 OnTimer(UINT nIDEvent),在定时器函 数中实现正弦波和余弦波以及方波的的波形实现函数 方波的波形实现:首先要定义一个 Double 类型的变量 dTime,调用系统提 供的一个全局函数:timeGetTime()来获取系统当前的时间,然后把获取的系统 当前时间赋值给 dTime。因为方波的只有两个逻辑值,那就是低电平和高电平 的显示。所以本文作者在本系统中申明了一个 Int 类型的

29、变量 iTime,通过 iTime 对 2 取余,即可实现只有 0 和 1 两种值的功能完整的代码实现: Double dTime =: timeGetTime ()/1000.0;/获取系统当前时间 int iTime = dTime;/对“dTime”类型进行强制类型转换 dValue0 = 4*(iTime%2);/实现只取逻辑值 0 和 1 的表达式 余弦波的波形实现:余弦波的波形实现与方波的实现有些类似,但是在实 现正弦波的时候,本文作者需要用到数学中的一个 sin()函数,因此在 Dlg.cpp 中就要引用头文件。但是 Sin () 函数中的参数是直接获取的系统当 前时间。完整的代

30、码实现: Double dTime =: timeGetTime ()/1000.0;/获取系统时间 dValue1 = 5*sin(4*dTime) ;/实现余弦波的表达式 上面两个函数的实现中有用到的 dValue0和 dValue1是作者在 OnTimer(UINT nIDEvent)函数中定义的存放方波和弦波值的一个一维数组 3.1.53.1.5 通道的选择通道的选择 在本系统中,作者用到了三个通道来分别实现单踪波 A 和单踪波 B 以及双 踪波的选择,在 IDD_MY_DLALOG 中作者设置了三个 RADIO 按扭,所以在实现通 道选择的时候,本文作者使用 GetCheckedRa

31、dioButton()函数来获取按下的是 哪一个按扭,int nID=GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO3), IDC_RADIO1 为第一个按扭的 ID,IDC_RADIO3 为最后一个按扭的 ID,然后我们 再判断 nID 与 IDC_RADIO1,IDC_RADIO2,IDC_RADIO3 的关系。部分代码如下: int nID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3); If (nID=IDC_RADIO1) 第 13 页 共 29 页 m_wndScope.ClearB(); /删除正

32、弦波相关函数,释放内存 m_wndScope.AddValueA(dTime,dValue0); /随波形的变化增加波形的末断端点 m_wndScope.SetValueA(dValue0); /在对话框中产生一个从-4 到 4 变化的数值 DevalueA (dTime,dValue0)与 SetValueA(dValue0)两个函数的具体实 现都可以在 Scope.cpp 类中找到 3.1.63.1.6 BUTTONBUTTON 单击事件的设计单击事件的设计 在本系统的对话框中设置了 8 个 BUTTON,在本文的前章节中已经讲过了如 何为这 8 个 BUTTON 添加消息处理函数,分别为

33、 void CMy22Dlg:OnVoltplus(), OnVoltminus(),OnTimeplus(),OnTimeminus(),OnAplus(),OnAminus(), OnBplus(),OnBminus(),但是在前章节中并没有写如何对消息处理的,点击相 应的按扭,都会触使 m_wndscope 这个 TEXT 对象中的波形的改变,因此在本系 统中,作者在每个 BUTTON 的消息处理函数中都调用了 m_wndscop.button(i)。 部分代码如下: Void CMyDlg:OnVoltplus () m_wndScope.Button (0); Void CMyDlg

34、:OnVoltminus () m_wndScope.Button (1); 省略部分 BUTTON 的消息处理函数 Void CMyDlg:OnBplus () m_wndScope.Button (6); Void CMyDlg:OnBminus () m_wndScope.Button (7); 第 14 页 共 29 页 在 scope.cpp 的 button(i)中,用 Switch 语句来判断按下的是哪个按扭, 并写出相应的消息处理。部分代码如下: Void CScope:Button( int i ) Switch (i) Case 0:/如果按下的是“IDC_VOLTPLUS

35、”按扭,则调节波形的幅值 If (m_dDimY=1 Else if (m_dDimY=0 If (m_dDimY-60) m_Amove=m_Amove-10; Break; /则 A 的 Case 5: If (m_Amove-60) m_Bmove=m_Bmove-10; Break; Case 7: If (m_BmoveMoveTo(m_rectCurve.left+i*m_rectCurve.Width()/100,nCenterY-1.5); pDC- LineTo(m_rectCurve.left+i*m_rectCurve.Width()/100,nCenterY+3.5);

36、 /绘制横向基线辅助线 int nPosY; /画横线,把整个面板纵向平均分为四份,然后根据当前 nPosY 的当前 值进行判断 for(i=1;iMoveTo(m_rectCurve.left,nPosY); pDC-LineTo(m_rectCurve.right,nPosY); 3.2.53.2.5 绘图工具绘图工具 Windows 绘图使用画笔和画刷进行,画笔的功能是画直线和曲线,画刷用 于指定区域的填充。 1.1. 画笔 画笔的操作包括创建画笔,将画笔选入设备环境和删除画笔。 1) 画笔的创建 使用画笔之前必须事先定义一个画笔句柄。形式如下: HPEN Hp; 定义画笔句柄完成后,可

37、直接调用函数 GetStockObject 获取 Windows 系统定义的四种画笔。这四种画笔分别为 WHITE_PEN,BLACK_PEN,DC_PEN 和 NULL_PEN.例如获取画笔 BLACK_PEN 的形式如下: Hp=(HPEN)GetStockObject(BLACK_PEN); 当然,也可创建新画笔。创建新画笔的形式如下: CreatePen ( int nPenStyle,/确定画笔样式 int nWidth, /画笔宽度,取 0 表示一个像素宽 COLORREF rgbColor /画笔颜色 ); 本系统在 scope.h 文件中定义了五种画笔,分别为曲线 A 的画笔,

38、曲线 B 的画笔,表格画笔,明线画笔,暗线画笔。 CPen m_PenCurveA;/曲线 A 画笔 CPen m_PenCurveB;/曲线 B 画笔 CPen m_PenGrid;/表格画笔 CPen m_PenBrightLine;/明线画笔 CPen m_PenDarkLine;/暗线画笔 第 21 页 共 29 页 在头文件定义之后,在 scope.cpp 文件中的数据初始化的时候就开始使用 各自的对象来创建自己的画笔 m_PenCurveA.CreatePen(PS_SOLID,2,RGB(0,255,0);/ 曲线 A 画笔 m_PenCurveB.CreatePen(PS_SO

39、LID,2,RGB(0,255,255); /曲线 B 画笔 m_PenGrid.CreatePen(PS_SOLID,0,RGB(192,192,192); 表格画笔 m_PenBrightLine.CreatePen(PS_SOLID,0,RGB(0xff,0xff,0xff); 明 线画笔 m_PenDarkLine.CreatePen(PS_SOLID,0,RGB(0x55,0x55,0x55); 暗线 画笔 2) 将画笔选入设备环境 创建画笔后,必须调用 SelectObject 函数将其选入设备环境。其形式如下: hPenOld=SelectObject(hdc,hP); /hP

40、为所创建或获取的画笔句柄,调用 该函数后,应用程序将使用句柄 hP 所指的画笔绘图,直到选入另外的一种画笔 为止。SelectObject 函数的返回值保存上一次使用的画笔句柄 hPenOld。 本系统在绘制面板的时候,笔者使用 pDC- SelectObject(/设定默认为明线画 笔 pDC-MoveTo(m_rectValuePanel.left,m_rectValuePanel.top); pDC-LineTo(m_rectValuePanel.left,m_rectValuePanel.bottom); pDC-MoveTo(m_rectValuePanel.left,m_rectV

41、aluePanel.top); pDC-LineTo(m_rectValuePanel.right,m_rectValuePanel.top); 使用 pDC-SelectObject(/设定默认为暗线画笔 pDC-MoveTo(m_rectValuePanel.right,m_rectValuePanel.top); pDC-LineTo(m_rectValuePanel.right,m_rectValuePanel.bottom); pDC-MoveTo(m_rectValuePanel.left,m_rectValuePanel.bottom); pDC-LineTo(m_rectVal

42、uePanel.right,m_rectValuePanel.bottom); 3) 删除画笔 不再使用当前画笔时,需调用函数 DeleteObject 删除画笔,以免占用内存 空间。在删除前应首先调用函数 SelectObjec 恢复原来系统的画笔,其形式为: 第 22 页 共 29 页 SelectObject(hdc,hPenOld);/hPenOld 为系统原有的画笔 DeleteObject(hP); 2. 画刷 画刷的创建与应用与画笔很相似,操作画刷也包括创建、选入设备环境和 删除画刷 1) 画刷的创建 定义画刷句柄的形式如下: HBRUSH hBr;/hBr 为画刷句柄 定义画刷

43、句柄后,可直接调用函数 GetStockObject 获取 Windows 提供的 8 种 画刷,调用画刷的形式如下: hBr=(HBRUSH)GetStockObject(nBrushStyle);/ nBrushStyle 为画刷样式 本系统在 scope.h 中声明了三个画刷对象,分别为黑色画刷,面板画刷, 曲线画刷,定义如下: CBrush m_BkBrush;/黑色画刷 CBrush m_PanelBrush;/面板画刷 CBrush m_CurveBrush;/曲线画刷 在 scope.cpp 文件中,三个对象分别创建了自己的画笔,相关代码如下: m_BkBrush.CreateS

44、olidBrush(RGB(0x00,0x00,0x33); m_PanelBrush.CreateSolidBrush(RGB(0x22,0x22,0x44); m_CurveBrush.CreateSolidBrush(RGB(0x00,0x00,0x00); 2) 选入设备环境 创建画刷完成后,必须调用 SelectObject 函数将其选入设备环境中,其形 式如下:hBrOld=SelectObject(hdc,hBr); SelectObject 函数的返回值中将保存上一次使用的画刷句柄 hBrOld。 3.3本章小节本章小节 本章首先描述了系统中应用程序基本框架的建立,然后分别具体

45、说明了刷 新的工作原理、位图的载入和加载、画笔和画刷的创建及其如何被选入设备环 境。 4系统系统运行结果及工作总结运行结果及工作总结 4.1 系统运行结果系统运行结果 本系统完成后,经过编译连接以后,点击运行连接后就可以显现出示波器 仿真对话框。如图所示: 第 23 页 共 29 页 图 11 示波器面板 选择不同的通道时,会出现不同的波形,当选择“A”通道时,方波波形显 示如下 图 12 方波 当选择 B 通道时,会出现相应的正弦波波形如图所示: 第 24 页 共 29 页 图 13 余弦波 当选择“A,B”通道时,双踪波的波形如下图所示: 图 14 双踪波 4.2 遇到的问题及解决方法遇到

46、的问题及解决方法 在系统编程实现的过程中同样遇到了各种各样的疑难问题,通过查找相关 书籍以及询问同学或老师解决了其中的大部分。遇到的疑难问题有: 1. 正弦波波形显示的问题: 笔者在查找相关资料后仍不能解决,请教老师后在 OnTimer(UINT nIDEvent)消 息处理函数中添加了以下代码: 第 25 页 共 29 页 int iTime = dTime dValue0 = 4*(iTime%2) 实现了方波的波形显示。 4.3 系统改进方法系统改进方法 本系统目前还仅仅是一个小型的示波器仿真系统,系统改进主要将其功能 庞大化,界面改进,现在的界面较为简单,可以修饰美化,再加入一些适当的

47、 帮助解释信息。1 精练代码,内部代码部分不是很精练,要进行较多的后续收 尾工作,去除冗余且整理出较清晰的后续代码添加接口。2 丰富功能,本系统还 不能较好地显示示波器的工作原理,人机交互性能还不够完善,要多添加一些 示波器的接口功能。 结结 论论 经过几个月的设计和开发,一个小型的示波器仿真系统基本完成。系统的 功能基本符合需求,能够完成波形通道的选择和波形幅值、波形的周期时间调 节。 在基于示波器的仿真模拟实验系统中笔者完成了: 1.通过对不同通道的选择,可实现单踪示波器和双踪示波器的演示,对示 波器可实现幅值调节和时间调节 2. 波形类型的实现(如方波和正弦波以及如何将波形显示出来) 3

48、. 通过控制划块的上下移动实现整个面板的移动 本文的不足的地方以及未实现的功能: 1. 由于时间有限,且对 VC+6.0 开发环境和编程不够熟悉,对仿真技术的 掌握还不够深入等因素,系统中只是实现简单的波形绘制和示波器面板的绘制。 2. 代码中有许多冗余,未对代码做必要的解释。 在这次系统开发过程中,遇到了不少的问题,通过查阅资料,请教老师、 同学得到了解决。同时也认识到,自己还有许多的知识需要学习和补充,还有 很多的仿真理论知识需要深入研究。在今后的工作学习中笔者将会完成系统未 完成的功能模块,并且更加深入的学习仿真技术。 参考文献参考文献 1 黄维通.Visual C+面向对象与可视化程序设计 M.北京:清华大学出版社,2003.4。 2 胡哲源.掌握 Visual C+MFC 程序设计与剖析 M.北京:清华大学出版社, 2001.3。 第 26 页 共 29 页 3 陈元琰.Visual C+编程使用技术与案例 M.北京:清华大学出版社,2001.2。 4 康风举.现代仿真技术及应用 M.北京:清华大学出版社,2005.1。 5 周明,胡斌.计算机仿真原理及其应用 M.武汉:华中科技大学出版社,2005.9

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

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1