微机系统与应用课程设计实验报告评语:教师:________年月日成绩:班级:学号:姓名:地点:时间:常用函数波形发生器的设计一、课程设计目的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编译器八、应用系统设计方案1.主程序#includestdafx.h#includeFuncitonProducer.h#includeFuncitonProducerDlg.h#includePCI9052Dll.h#includecmath#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_MSGDECLARE_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();//AddAbout...menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX0xF000);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'smainwindowisnotadialogSetIcon(m_hIcon,TRUE);//SetbigiconSetIcon(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);//devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);//CentericoninclientrectangleintcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cyIc