虚拟信号发生器的设计.docx
- 文档编号:2432673
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:12
- 大小:90.64KB
虚拟信号发生器的设计.docx
《虚拟信号发生器的设计.docx》由会员分享,可在线阅读,更多相关《虚拟信号发生器的设计.docx(12页珍藏版)》请在冰豆网上搜索。
虚拟信号发生器的设计
课程设计任务书
学年第学期
学院:
专业:
学生姓名:
学号:
课程设计题目:
虚拟信号发生器的设计
起迄日期:
课程设计地点:
指导教师:
系主任:
下达任务书日期:
年月日
课程设计任务书
1.设计目的:
1)熟练使用编程语言开发平台;
2)掌握基本库函数的应用;
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):
本系统应完成以下功能:
(1)能选择产生多种信号。
(2)动态改变信号的频率,幅值,周期数。
(3)能够随时进行数据保存,并实现测试数据的回显。
设计要求:
1)程序结构采用模块化设计,具有友好的界面和较强的容错能力。
2)编程语言环境任选。
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:
(1)要求设计组的每个成员都要了解设计的要求和思路;
(2)编写详细的设计说明书一份;
(3)要求有正确的运行结果及结果分析。
课程设计任务书
4.主要参考文献:
1谭浩强,C程序设计,清华大学出版社
2胡海生,VisualC++6.0编程,清华大学出版社
3郑阿奇,VisualC++实用教程,电子工业出版社
5.设计成果形式及要求:
1)提供详细的设计说明书一份;
2)运行正确的源程序;
6.工作计划及进度:
2010年12月28日~2011年1月2日:
查阅相关资料
2011年1月3日~2011年1月7日:
设计方案,编写程序并调试
2011年1月8日~2011年1月9日:
完成课程设计说明书
2011年1月10日:
答辩、验收
系主任审查意见:
签字:
年月日
目录
一、设计目的…………………………………………………………………………5
二、设计分析…………………………………………………………………………5
三、总体设计…………………………………………………………………………5
四、技术要点…………………………………………………………………………8
五、个人总结…………………………………………………………………………9
六、附录………………………………………………………………………………9
七、参考文献…………………………………………………………………………12
一、设计目的
利用函数的调用、数组等相关编程知识以及VC++6.0软件制作一个可以产生多种信号的虚拟信号发生器。
二、设计分析
(1)在VC++6.0编程环境中进行操作
(2)FZ,ZQS,PL是定义的全局变量。
(3)定义波形为数组元素。
如正弦波,三角波等。
(4)利用循环实现不同频率,幅值的波形的输出。
(5)调用函数实现波形的输出。
三、总体设计
1、主要功能
(1)能选择产生多种信号。
(2)动态改变信号的频率,幅值,周期数。
(3)能够随时进行数据保存,并实现测试数据的回显。
(4)实现数据与信号的统一对应。
2、系统模块分析图
在主界面中选择信号,参数有波形,频率,幅值,周期数。
运行程序完成
型号的输出。
图1系统模块分析图
3、程序流程图
利用if语句选择不同类型的波形,运用for循环选择不同的,周期数,频率,
幅值。
流程图如下:
图2程序流程图
4、程序中所涉及的函数
GetClientRect()得到的是在客户区坐标系下的RECT(即以所在窗口左上角为原点,去掉了标题栏计算,仅仅是个大小,返回值的左上角永远为0,0)
OnInitDialog()确定应用程序的入口和出口,处理一些启动和退出程序时需要读取或写入的设置信息,设置某些全局变量。
DoDataExchange()一种数据动态绑定技术函数,用于添加新的变量。
5、运行结果
初始界面如图3:
图3应用程序初始状态
(1)选择波形为方波,频率为5,幅值为5,周期数为7,输出图形如图4:
图4:
方波(5Hz)
(2)选择波形为三角波,频率为5,幅值为5,周期数为2.输出图像如图5:
图5三角波(5Hz)
(3)选择波形为正弦波,频率为10,幅值为5,周期数为2.输出图像如图6:
图6正弦波(10Hz)
四、技术要点
1、通过确定一个点的时间,以及一个周期上图像的点数确定周期,从而确定频率。
例如:
绘制一个正弦波形,由1200个点组成,窗口中显示3个正弦周期,则每个周期含有400个点。
先利用正弦函数确定出每个点的坐标(x,y),然后用GetClientRect()函数确定每个点在绘图窗口上的坐标,即可得到所求波形。
2、在VC++6.0环境下,在对话框是添加控件,控制其波形,频率,幅值,周期数的改变。
调用绘图函数输出图像。
五、个人总结
在做课程设计之前,我对C++,VC++知之甚少,基本上只学习过C程。
接到课程设计的任务,感觉很迷茫,不知道怎么办。
拿着VC++的课本,开始漫无目的地翻阅,渐渐地有了些概念。
在认真地看了看设计任务,开始查看相关的知识点。
通过边学习边练习,我很快掌握了部分要领。
也是我对VC++有了更深刻的了解。
我深刻的体会到,边学习边实践是一种很好的学习方法,它不仅使我对知识点的理解更深,也是我真真体味到学习新知识的乐趣。
六、附录
(1)程序初始化的实现
CA11Dlg:
:
CA11Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(CA11Dlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CA11Dlg)
m_PL=0.0;
m_ZQS=0;
m_FZ=0.0;
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
(2)变量范围的确定
voidCA11Dlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CA11Dlg)
DDX_Control(pDX,IDC_BX,m_bx);
DDX_Text(pDX,IDC_PL,m_PL);
DDV_MinMaxDouble(pDX,m_PL,0.1,100.);
DDX_Text(pDX,IDC_ZQS,m_ZQS);
DDV_MinMaxInt(pDX,m_ZQS,1,10);
DDX_Text(pDX,IDC_FZ,m_FZ);
DDV_MinMaxDouble(pDX,m_FZ,1.,10.);
//}}AFX_DATA_MAP
}
(3)程序显示的初值
CStringstr[6]={"正弦波","三角波","方波","电平信号"};
inti,nIndex;
for(i=0;i<5;i++)
{
nIndex=m_bx.AddString(str[i]);
m_bx.SetItemData(nIndex,i);
}
m_bx.SetCurSel(0);
m_FZ=5;
m_PL=10;
m_ZQS=2;
UpdateData(FALSE);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
(4)图像输出的过程:
描点连线
voidCA11Dlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
CPaintDCdc(this);
CRectrect;
GetClientRect(&rect);
CPointaPoint[500];
dc.Polyline(aPoint,MaxNum);*/
intm_BXNum,i,j;
doublePI=3.1415926;
double*Data1,kk;
intnIndex=m_bx.GetCurSel();
if(nIndex!
=CB_ERR)
m_BXNum=m_bx.GetItemData(nIndex);
else
m_BXNum=0;
intperNum,PerMax;
perNum=(int)(1000/m_PL/5);
PerMax=perNum*m_ZQS;
Data1=(double*)malloc(PerMax*sizeof(double));
if(m_BXNum==0)
{
for(i=0;i { kk=-m_FZ*sin(PI/perNum*2*i); for(intj=0;j { Data1[j*perNum+i]=kk; } } } elseif(m_BXNum==1) { doublenum1=perNum*0.25; for(i=0;i { if(i<=num1) kk=i*(m_FZ/num1); elseif(i<=num1*3) kk=i*(-m_FZ/num1)+2.0*m_FZ; else kk=i*(m_FZ/num1)-4.0*m_FZ; for(j=0;j { Data1[j*perNum+i]=kk; } } } else { for(inti=0;i { if(i kk=-m_FZ; else kk=m_FZ; for(intj=0;j { Data1[j*perNum+i]=kk; } } } CPointaPoint; CDC*dc=GetDC(); CRectrect; GetClientRect(&rect); intnWidth=rect.Width()-10; intnHeight=(rect.Height()-76)/2; dc->Rectangle(10,10,nWidth,nHeight*2); dc->MoveTo(10,nHeight); dc->LineTo(nWidth,nHeight); dc->MoveTo(10,nHeight); for(i=0;i { aPoint.x=10+(i*(nWidth-10))/PerMax; aPoint.y=(int)(nHeight+Data1[i]*nHeight/10); dc->LineTo(aPoint); } } (5)改变三个属性并重新显示 voidCA11Dlg: : OnChangePl() { UpdateData(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟 信号发生器 设计