常用函数波形发生器的设计说明_第1页
常用函数波形发生器的设计说明_第2页
常用函数波形发生器的设计说明_第3页
常用函数波形发生器的设计说明_第4页
常用函数波形发生器的设计说明_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./微机系统与应用课程设计实验报告成绩:评语:教师:________年月日班级:学号::地点:时间:常用函数波形发生器的设计一、课程设计目的1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。2.加深对和D/A芯片的工作方式的理解,学会编写程序,使D/A转换输出函数的方法。3.掌握通过A/D转换进行实时数据采集与处理的设计思路和实现方法。二、课程设计的容微机通过DAC0832接口〔OUT2输出常用函数波形〔方波,锯齿波,正弦波等,该波形作为ADC0809模拟信号输入连到IN0,ADC0809的输出通过8255接口送到数据总线,设计连接硬件线路,然后编写波形发生和数据采集程序,将采集的数据〔波形显示在计算机屏幕上。三、系统功能与设计要求1.基本功能要求具有友好的人机交互界面,通过鼠标选择相关按钮或菜单对系统进行控制,采集的数据〔波形要以图形的方式实时显示在计算机屏幕上。屏幕显示参考下图:屏幕显示参考以上图形,也可以自行设计界面风格,通过按钮〔或下拉菜单选择要产生的波形,点击"开始"后开始产生波形,并进行数据采集,采集到的数据按照图形坐标显示在计算机屏幕上,点击"停止"后立刻停止输出,重新选择波形后,再次点击"开始"即显示新的波形。2.发挥部分〔1增加频率调节功能。使输出到屏幕上的波形随频率值变化。〔2增加PWM信号,占空比可调。缺省为50%。〔3增加一路信号采集,旋钮电位器的输出端接到ADC0809的IN1,地址信号ADDA、ADDB、ADDC分别接K0,K1,K2开关,波动开关状态为000或001,分别选择0通道或1信号输出到计算机屏幕上显示。四、设计思路微机利用软件编程,通过DAC0832数模转换输出端口OUT2输出0~5V的连续模拟电压〔波形,然后将此模拟电压作为ADC0809模数转换的一路输入信号接到IN0端口,地址信号ADDA、ADDB、ADDC分别接K0,K1,K2开关,选择0通道〔000,输出的八位数字信号可以连接到8255的PA口,控制信号接PB口和PC口,通过采集程序实时读取采集到得数据,并输入到微机,最后在计算机屏幕上以图形方式显示出来。注意事项:D/AC0832和A/DC0809的采样频率应小于640KHz。五、操作步骤1.提交设计方案包括:控制功能实现方案,编程语言,硬件设计方案及硬件连线图,硬件支持环境和软件支持的环境要求。2.方案审核系统设计方案经过指导老师审核后,方可以实施操作。3.硬件系统实现按照硬件设计方案及硬件连线图连线,经过指导老师认可后,加、电并观察是否正确。如果发现异常,立刻关掉电源,查明原因,解决问题后,再加电观察。4.按照功能要求编程,运行,调试六、撰写课程设计报告及其容1.应用系统设计方案2.系统测试结果3.课课程设计中遇到的问题及解决办法4.写出体会与建议七、课程设计实验环境:1.硬件配置:微机一台〔Pentium4微机接口技术实验箱一个ISA–PCI转接卡一块连接电缆一条万用表一块微机接口技术实验讲义一本导线、剥线钳等2.软件环境:WindowsXP平台VisualC++6.0编译器八、应用系统设计方案主程序#include"stdafx.h"#include"FuncitonProducer.h"#include"FuncitonProducerDlg.h"#include"PCI9052Dll.h"#include<cmath>#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif#definePI3.141592654intstyle=-1;//选择的波形类型intx=70,y=480,a=0;intrange=1;intstb=0;doublerate=0.5;doublefrequence=1;intre=1;inttimeq=20;///////////////////////////////////////////////////////////////////////////////CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialog{public: CAboutDlg<>;//DialogData //{{AFX_DATA<CAboutDlg> enum{IDD=IDD_ABOUTBOX}; //}}AFX_DATA //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL<CAboutDlg> protected: virtualvoidDoDataExchange<CDataExchange*pDX>;//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //{{AFX_MSG<CAboutDlg> //}}AFX_MSG DECLARE_MESSAGE_MAP<>};CAboutDlg::CAboutDlg<>:CDialog<CAboutDlg::IDD>{ //{{AFX_DATA_INIT<CAboutDlg> //}}AFX_DATA_INIT}voidCAboutDlg::DoDataExchange<CDataExchange*pDX>{ CDialog::DoDataExchange<pDX>; //{{AFX_DATA_MAP<CAboutDlg> //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP<CAboutDlg,CDialog> //{{AFX_MSG_MAP<CAboutDlg> //Nomessagehandlers //}}AFX_MSG_MAPEND_MESSAGE_MAP<>///////////////////////////////////////////////////////////////////////////////CFuncitonProducerDlgdialogCFuncitonProducerDlg::CFuncitonProducerDlg<CWnd*pParent/*=NULL*/> :CDialog<CFuncitonProducerDlg::IDD,pParent>{ //{{AFX_DATA_INIT<CFuncitonProducerDlg> //}}AFX_DATA_INIT //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp<>->LoadIcon<IDR_MAINFRAME>;}voidCFuncitonProducerDlg::DoDataExchange<CDataExchange*pDX>{ CDialog::DoDataExchange<pDX>; //{{AFX_DATA_MAP<CFuncitonProducerDlg> DDX_Control<pDX,IDC_COMBO1,m_style>; DDX_Control<pDX,IDC_EDIT_RATE,m_rate>; DDX_Control<pDX,IDC_EDIT_RANGE,m_range>; DDX_Control<pDX,IDC_EDIT_FREQUENCE,m_frequence>; //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP<CFuncitonProducerDlg,CDialog> //{{AFX_MSG_MAP<CFuncitonProducerDlg> ON_WM_SYSCOMMAND<> ON_WM_PAINT<> ON_WM_QUERYDRAGICON<> ON_BN_CLICKED<IDC_BUTTON_START,OnStart> ON_BN_CLICKED<IDC_BUTTON_STOP,OnStop> ON_WM_TIMER<> //}}AFX_MSG_MAPEND_MESSAGE_MAP<>///////////////////////////////////////////////////////////////////////////////CFuncitonProducerDlgmessagehandlersBOOLCFuncitonProducerDlg::OnInitDialog<>{ CDialog::OnInitDialog<>; //Add"About..."menuitemtosystemmenu. //IDM_ABOUTBOXmustbeinthesystemcommandrange. ASSERT<<IDM_ABOUTBOX&0xFFF0>==IDM_ABOUTBOX>;ASSERT<IDM_ABOUTBOX<0xF000>; CMenu*pSysMenu=GetSystemMenu<FALSE>;if<pSysMenu!=NULL> { CStringstrAboutMenu; strAboutMenu.LoadString<IDS_ABOUTBOX>; if<!strAboutMenu.IsEmpty<>> { pSysMenu->AppendMenu<MF_SEPARATOR>; pSysMenu->AppendMenu<MF_STRING,IDM_ABOUTBOX,strAboutMenu>; } } //Settheiconforthisdialog.Theframeworkdoesthisautomatically //whentheapplication'smainwindowisnotadialog SetIcon<m_hIcon,TRUE>; //Setbigicon SetIcon<m_hIcon,FALSE>; //Setsmallicon //TODO:Addextrainitializationherem_range.SetWindowText<"1">;m_rate.SetWindowText<"0.5">;m_frequence.SetWindowText<"1">; m_style.SetWindowText<"请选择波形">; returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCFuncitonProducerDlg::OnSysCommand<UINTnID,LPARAMlParam>{ if<<nID&0xFFF0>==IDM_ABOUTBOX> { CAboutDlgdlgAbout; dlgAbout.DoModal<>; } else { CDialog::OnSysCommand<nID,lParam>; }}//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,//thisisautomaticallydoneforyoubytheframework.voidCFuncitonProducerDlg::OnPaint<>{ if<IsIconic<>> { CPaintDCdc<this>;//devicecontextforpainting SendMessage<WM_ICONERASEBKGND,<WPARAM>dc.GetSafeHdc<>,0>; //Centericoninclientrectangle intcxIcon=GetSystemMetrics<SM_CXICON>; intcyIcon=GetSystemMetrics<SM_CYICON>; CRectrect; GetClientRect<&rect>; intx=<rect.Width<>-cxIcon+1>/2; inty=<rect.Height<>-cyIcon+1>/2; //Drawtheicon dc.DrawIcon<x,y,m_hIcon>; } else { CDialog::OnPaint<>; } //画x轴 CClientDCinitdc<this>; initdc.MoveTo<70,480>; initdc.LineTo<70,310>; initdc.LineTo<65,315>; initdc.MoveTo<70,310>; initdc.LineTo<75,315>; //画y轴 initdc.MoveTo<70,480>; initdc.LineTo<750,480>; initdc.LineTo<745,475>; initdc.MoveTo<750,480>; initdc.LineTo<745,485>; //标注y轴 for<inti=1;i<=5;i++> { initdc.MoveTo<70,480-30*i>; initdc.LineTo<75,480-30*i>; } //标注x轴 for<i=1;i<=10;i++> { initdc.MoveTo<70+60*i,480>; initdc.LineTo<70+60*i,475>; }}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theminimizedwindow.HCURSORCFuncitonProducerDlg::OnQueryDragIcon<>{ return<HCURSOR>m_hIcon;}voidCFuncitonProducerDlg::OnStart<>{ //TODO:AddyourcontrolnotificationhandlercodehereInvalidate<>; OnPaint<>; charstr[25]; style=m_style.GetCurSel<>; m_range.GetWindowText<str,25>; if<atoi<str>>3||atoi<str><1> { MessageBox<"请重新输入幅度值!围1~3","错误",MB_ICONEXCLAMATION>; m_range.SetSel<0,-1>; m_range.ReplaceSel<"">; m_range.SetWindowText<"1">; } else range=atoi<str>; if<style==0> { m_rate.GetWindowText<str,25>; if<atof<str>>=1||atof<str><=0> { MessageBox<"请重新输入占空比!围0,1","错误",MB_ICONEXCLAMATION>; m_rate.SetSel<0,-1>; m_rate.ReplaceSel<"">; m_rate.SetWindowText<"0.5">; } else rate=atof<str>; } m_frequence.GetWindowText<str,25>; if<atof<str>>2||atof<str><0.5> { MessageBox<"请重新输入频率!围0.5~2","错误",MB_ICONEXCLAMATION>; m_frequence.SetSel<0,-1>; m_frequence.ReplaceSel<"">; m_frequence.SetWindowText<"1">; } else frequence=atof<str>;// if<!strcmp<str,"方波">>style=0; if<-1==style> { MessageBox<"请选择波形!","错误",MB_ICONEXCLAMATION>; } elseif<0==style> { SetTimer<1,timeq,0>; x=70,y=480,a=0; } elseif<1==style> { SetTimer<2,timeq,0>; x=70,y=480,a=0; } elseif<2==style> { SetTimer<3,timeq,0>; x=70,y=480; } else { SetTimer<4,timeq,0>; x=70; }}voidCFuncitonProducerDlg::OnStop<>{ //TODO:Addyourcontrolnotificationhandlercodehereif<0==style> { KillTimer<1>; } elseif<1==style> { KillTimer<2>; } elseif<2==style> { KillTimer<3>; } else { KillTimer<4>; }}voidCFuncitonProducerDlg::OnTimer<UINTnIDEvent>{ //TODO:Addyourmessagehandlercodehereand/orcalldefault intt; switch<nIDEvent> { case1: { CClientDCidc<this>; idc.MoveTo<x,y>; t=a%<int><120/frequence>; if<t==0||t==rate*120/frequence> { if<y==480> y=480-range*30; else y=480; idc.LineTo<x,y>; } else { CPointpp; pp.x=x; //pp.y=y; pp.y=DA_AD<<unsignedchar><y-390>>+390; idc.SetPixel<pp,RGB<0,255,0>>; } x++; a++; };break; case2: { CClientDCidc<this>; idc.MoveTo<x,y>; if<a%60==0>{ y=480; idc.LineTo<x,y>;} else { CPointpp; pp.x=x; pp.y=DA_AD<<unsignedchar><y-390>>+390; idc.SetPixel<pp,RGB<0,255,0>>; } x+=<int><2.0/frequence>; y-=range; a+=2; };break; case3: { CClientDCidc<this>; CPointpp; pp.x=x;//pp.y=y; pp.y=DA_AD<<unsignedchar><y-300>>+300; idc.SetPixel<pp,RGB<0,255,0>>; y=<int><-sin<<x-10>*PI/30.0*frequence>*30*range+420>; x+=1; };break; case4: { CClientDCidc<this>; CPointpp; pp.x=x; pp.y=-DA_AD<25>+500; idc.SetPixel<pp,RGB<0,255,0>>; x+=1; };break; } CDialog::OnTimer<nIDEvent>;}unsignedcharCFuncitonProducerDlg::DA_AD<unsignedchartochange>{ staticunsignedshortBASE_ADDR,P_ADDR,DA_ADDR; staticunsignedchardata,Idata; OpenDevice<>; GetIoBas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论