论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

人机接口设备-示波器的仿真实现(论文+程序)

3.1.3   添加RECOURCE资源

在“RECOURCE VIEW”中,展开“ICON”目录,右键单击,选择“IMPORT”选项,则会弹出以下对话框:

内容来自www.paper51.com

paper51.com

图9 导入位图资源界面

copyright paper51.com

选择你所要导入的图标所在文件的目录及相应的图标,然后在“ICON”目录下就会显示刚刚导入的图标,导入之后并设置相应的属性如“ID”。添加相应的图标之后,在Dlg.cpp文件中的BOOL CMy22Dlg::OnInitDialog()函数中添加以下代码为每个按扭加载图标 内容来自论文无忧网 www.paper51.com

m_btnvoltplus.SetIcon (IDI_LEFT); //为“幅值增加”按扭设置图标m_btnvoltminus.SetIcon (IDI_RIGHT); //为“幅值减小”按扭设置图标 copyright paper51.com

m_btntimeplus.SetIcon (IDI_LEFT); //为“时间增加”按扭设置图标m_btntimeminus.SetIcon (IDI_RIGHT); //为“时间减少”按扭设置图标 copyright paper51.com

m_btnaplus.SetIcon (IDI_UP);

http://www.paper51.com

m_btnAMinus.SetIcon (IDI_DOWN); 内容来自www.paper51.com

m_btnbplus.SetIcon (IDI_UP);

paper51.com

m_btnbminus.SetIcon (IDI_DOWN);

内容来自www.paper51.com

同时对STATIC TEXT对象m_wndscope设置标题和度量单位显示的设置 copyright paper51.com

m_wndscope.SetTitle("虚拟示波器");//显示标题

http://www.paper51.com

m_wndscope.SetValueString ("电压","伏");//设置波形显示时的幅值单位

paper51.com

SetTimer (1, 20, NULL);

内容来自论文无忧网 www.paper51.com

3.1.4   定时器成员函数

内容来自www.paper51.com

在Dlg.cpp文件中添加定时器函数OnTimer(UINT nIDEvent),在定时器函数中实现正弦波和余弦波以及方波的的波形实现函数 内容来自www.paper51.com

方波的波形实现:首先要定义一个Double类型的变量dTime,调用系统提供的一个全局函数::timeGetTime()来获取系统当前的时间,然后把获取的系统当前时间赋值给dTime。因为方波的只有两个逻辑值,那就是低电平和高电平的显示。所以本文作者在本系统中申明了一个Int类型的变量iTime,通过iTime对2取余,即可实现只有0和1两种值的功能完整的代码实现:

http://www.paper51.com

Double dTime =:timeGetTime ()/1000.0;//获取系统当前时间

http://www.paper51.com

int iTime= dTime;//对“dTime”类型进行强制类型转换

copyright paper51.com

dValue[0] = 4*(iTime%2);//实现只取逻辑值0和1的表达式 http://www.paper51.com

余弦波的波形实现:余弦波的波形实现与方波的实现有些类似,但是在实现正弦波的时候,本文作者需要用到数学中的一个sin()函数,因此在Dlg.cpp中就要引用<math.h>头文件。但是Sin () 函数中的参数是直接获取的系统当前时间。完整的代码实现: 内容来自论文无忧网 www.paper51.com

Double dTime =:timeGetTime ()/1000.0;//获取系统时间

内容来自www.paper51.com

dValue[1] = 5*sin(4*dTime) ;//实现余弦波的表达式 内容来自www.paper51.com

上面两个函数的实现中有用到的dValue[0]和dValue[1]是作者在OnTimer(UINT nIDEvent)函数中定义的存放方波和弦波值的一个一维数组

copyright paper51.com

3.1.5   通道的选择

内容来自论文无忧网 www.paper51.com

在本系统中,作者用到了三个通道来分别实现单踪波A和单踪波B以及双踪波的选择,在IDD_MY_DLALOG中作者设置了三个RADIO按扭,所以在实现通道选择的时候,本文作者使用GetCheckedRadioButton()函数来获取按下的是哪一个按扭,int nID=GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO3),IDC_RADIO1为第一个按扭的ID,IDC_RADIO3为最后一个按扭的ID,然后我们再判断nID与IDC_RADIO1,IDC_RADIO2,IDC_RADIO3的关系。部分代码如下: 内容来自www.paper51.com

int nID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3); http://www.paper51.com

If (nID==IDC_RADIO1)

paper51.com

内容来自www.paper51.com

m_wndScope.ClearB(); paper51.com

//删除正弦波相关函数,释放内存 copyright paper51.com

   m_wndScope.AddValueA(dTime,dValue[0]); 内容来自www.paper51.com

//随波形的变化增加波形的末断端点

copyright paper51.com

   m_wndScope.SetValueA(dValue[0]);

内容来自论文无忧网 www.paper51.com

//在对话框中产生一个从-4到4变化的数值

copyright paper51.com

   } 内容来自www.paper51.com

DevalueA (dTime,dValue[0])与SetValueA(dValue[0])两个函数的具体实现都可以在Scope.cpp类中找到

copyright paper51.com

3.1.6   BUTTON单击事件的设计

copyright paper51.com

在本系统的对话框中设置了8个BUTTON,在本文的前章节中已经讲过了如何为这8个BUTTON添加消息处理函数,分别为voidCMy22Dlg::OnVoltplus(),OnVoltminus(),OnTimeplus(),OnTimeminus(),OnAplus(),OnAminus(),OnBplus(),OnBminus(),但是在前章节中并没有写如何对消息处理的,点击相应的按扭,都会触使m_wndscope这个TEXT对象中的波形的改变,因此在本系统中,作者在每个BUTTON的消息处理函数中都调用了m_wndscop.button(i)。部分代码如下:

paper51.com

Void CMyDlg::OnVoltplus()

内容来自论文无忧网 www.paper51.com

{ 内容来自论文无忧网 www.paper51.com

   m_wndScope.Button (0);

http://www.paper51.com

}

内容来自论文无忧网 www.paper51.com

Void CMyDlg::OnVoltminus() 内容来自www.paper51.com

{ http://www.paper51.com

   m_wndScope.Button (1);   内容来自www.paper51.com

}

内容来自论文无忧网 www.paper51.com

………………………省略部分BUTTON的消息处理函数 copyright paper51.com

Void CMyDlg::OnBplus()

内容来自论文无忧网 www.paper51.com

{

paper51.com

   m_wndScope.Button (6);  

http://www.paper51.com

} paper51.com

Void CMyDlg::OnBminus() 内容来自www.paper51.com

{ 内容来自www.paper51.com

   m_wndScope.Button (7);   copyright paper51.com

}

paper51.com

在scope.cpp的button(i)中,用Switch语句来判断按下的是哪个按扭,并写出相应的消息处理。部分代码如下: paper51.com

Void CScope::Button( inti ) paper51.com

{

paper51.com

   Switch(i) 内容来自论文无忧网 www.paper51.com

   {Case0://如果按下的是“IDC_VOLTPLUS”按扭,则调节波形的幅值

http://www.paper51.com

       {

copyright paper51.com

       If(m_dDimY>=1&&m_dDimY<10) 内容来自www.paper51.com

          m_dDimY+=1;

paper51.com

       If(m_dDimY>=10&&m_dDimY<100)

copyright paper51.com

          m_dDimY+=10;

paper51.com

       If(m_dDimY>=100&&m_dDimY<1000) http://www.paper51.com

          m_dDimY+=100; 内容来自论文无忧网 www.paper51.com

       If(m_dDimY>=1000)

paper51.com

          m_dDimY+=1000;

paper51.com

       Elseif (m_dDimY>=0&&m_dDimY<1)

copyright paper51.com

          m_dDimY+=0.1; 内容来自论文无忧网 www.paper51.com

        Break; paper51.com

       }             // 鼠标点击箭头按钮控制幅度的增加

http://www.paper51.com

   Case1:            //如果按下的是“IDC_VOLTMINUS”按扭

paper51.com

       {

内容来自www.paper51.com

       If(m_dDimY>1&&m_dDimY<=10) copyright paper51.com

          M_dDimY-=1; 内容来自论文无忧网 www.paper51.com

       If(m_dDimY>10&&m_dDimY<=100) copyright paper51.com

          M_dDimY-=10;

内容来自www.paper51.com

       If(m_dDimY>100&&m_dDimY<=1000) copyright paper51.com

          M_dDimY-=100;

内容来自论文无忧网 www.paper51.com

       If(m_dDimY>1000) copyright paper51.com

          M_dDimY-=1000; copyright paper51.com

       If(m_dDimY<=1) paper51.com

          m_dDimY=max (m_dDimY-0.1, 0.1); 内容来自论文无忧网 www.paper51.com

       Break;

http://www.paper51.com

       }

paper51.com

   Case2:                //如果按下的是“IDC_TIMEPLUS”按扭  paper51.com

{m_dDimT+=0.1;break ;}    //则每按下一次按扭,时间增加幅度为“0.1”

内容来自论文无忧网 www.paper51.com

  Case3:           //如果按下的是“IDC_TIMEPLUS”按钮 {m_dDimT=max (m_dDimT-0.1, 0.1); break ;}       

http://www.paper51.com

//则如果当前时间大于0.1,则单位时间减1,如果不是,则当前时间取0.1 内容来自www.paper51.com

   Case4://如果按下的是“IDC_AMINUS” http://www.paper51.com

       {

copyright paper51.com

       If(m_Amove>-60)

paper51.com

       m_Amove=m_Amove-10; http://www.paper51.com

        Break;

paper51.com

       }//则A的

paper51.com

   Case5:

copyright paper51.com

       {   copyright paper51.com

       If(m_Amove<60) 内容来自论文无忧网 www.paper51.com

       m_Amove=m_Amove+10;

paper51.com

        Break; http://www.paper51.com

       } 内容来自www.paper51.com

   Case6:

内容来自www.paper51.com

       {

内容来自论文无忧网 www.paper51.com

       If(m_Bmove>-60)

paper51.com

       m_Bmove=m_Bmove-10; http://www.paper51.com

        Break;

paper51.com

       }

http://www.paper51.com

   Case7:

paper51.com

       { http://www.paper51.com

       If(m_Bmove<60) http://www.paper51.com

       m_Bmove=m_Bmove+10; http://www.paper51.com

        Break; paper51.com

       }

paper51.com

   Default: copyright paper51.com

       Break;

copyright paper51.com

   }  

http://www.paper51.com

   Invalidate(); paper51.com

} http://www.paper51.com

------分隔线----------------------------
联系方式