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

下载本文档

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

文档简介

1、微机系统与应用课程设计实 验 报 告成绩:评语: 教师: 年 月 日 班级: 学号:姓名: 地点: 时间: 常用函数波形发生器的设计一、 课程设计目的1. 掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。2. 加深对和D/A 芯片的工作方式的理解,学会编写程序,使D/A 转换输出函数的方法。3. 掌握通过A/D 转换进行实时数据采集与处理的设计思路和实现方法。二、 课程设计的内容微机通过DAC0832 接口(OUT2)输出常用函数波形(方波,锯齿波,正弦波等),该波形作为ADC0809 模拟信号输入连到IN0,ADC0809 的输出通过8255 接口送到数据总线,设计连接

2、硬件线路,然后编写波形发生和数据采集程序,将采集的数据(波形)显示在计算机屏幕上。三、系统功能与设计要求1基本功能要求具有友好的人机交互界面,通过鼠标选择相关按钮或菜单对系统进行控制,采集的数据(波形)要以图形的方式实时显示在计算机屏幕上。屏幕显示参考下图:屏幕显示参考以上图形,也可以自行设计界面风格,通过按钮(或下拉菜单)选择要产生的波形,点击“开始”后开始产生波形,并进行数据采集,采集到的数据按照图形坐标显示在计算机屏幕上,点击“停止”后立刻停止输出,重新选择波形后,再次点击“开始”即显示新的波形。2发挥部分(1) 增加频率调节功能。使输出到屏幕上的波形随频率值变化。(2) 增加PWM 信

3、号,占空比可调。缺省为50%。(3) 增加一路信号采集,旋钮电位器的输出端接到ADC0809 的IN1,地址信号ADDA、ADDB、ADDC 分别接K0,K1,K2 开关,波动开关状态为000 或001,分别选择0 通道或1 信号输出到计算机屏幕上显示。四、设计思路微机利用软件编程,通过DAC0832 数模转换输出端口OUT2 输出05V 的连续模拟电压(波形),然后将此模拟电压作为ADC0809 模数转换的一路输入信号接到IN0 端口,地址信号ADDA、ADDB、ADDC 分别接K0,K1,K2 开关,选择0 通道(000),输出的八位数字信号可以连接到8255 的PA 口,控制信号接PB

4、口和PC 口,通过采集程序实时读取采集到得数据,并输入到微机,最后在计算机屏幕上以图形方式显示出来。注意事项:D/AC0832 和A/DC0809 的采样频率应小于640KHz。五、操作步骤1提交设计方案包括:控制功能实现方案,编程语言,硬件设计方案及硬件连线图,硬件支持环境和软件支持的环境要求。2方案审核系统设计方案经过指导老师审核后,方可以实施操作。3硬件系统实现按照硬件设计方案及硬件连线图连线,经过指导老师认可后,加、电并观察是否正确。如果发现异常,立刻关掉电源,查明原因,解决问题后,再加电观察。4按照功能要求编程,运行,调试六、 撰写课程设计报告及其内容1. 应用系统设计方案2. 系统

5、测试结果3. 课课程设计中遇到的问题及解决办法4. 写出体会与建议七、课程设计实验环境:1. 硬件配置:微机一台 (Pentium 4)微机接口技术实验箱 一个ISA PCI 转接卡 一块连接电缆 一条万用表 一块微机接口技术实验讲义 一本导线、剥线钳等2. 软件环境:Windows XP 平台Visual C+ 6.0 编译器八、应用系统设计方案1. 主程序#include stdafx.h#include Funciton Producer.h#include Funciton ProducerDlg.h#include PCI9052Dll.h#include #ifdef _DEBUG

6、#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif#define PI 3.141592654int style=-1;/选择的波形类型int x=70,y=480,a=0;int range=1;int stb=0;double rate=0.5;double frequence=1;int re=1;int timeq=20;/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg

7、();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_

8、MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEN

9、D_MESSAGE_MAP()/ CFuncitonProducerDlg dialogCFuncitonProducerDlg:CFuncitonProducerDlg(CWnd* pParent /*=NULL*/): CDialog(CFuncitonProducerDlg:IDD, pParent)/AFX_DATA_INIT(CFuncitonProducerDlg)/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-Loa

10、dIcon(IDR_MAINFRAME);void CFuncitonProducerDlg: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,

11、 m_frequence);/AFX_DATA_MAPBEGIN_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()/ CFuncitonProducer

12、Dlg message handlersBOOL CFuncitonProducerDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_AB

13、OUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization here m_range.SetWindowText(1); m_rate.SetWindowT

14、ext(0.5); m_frequence.SetWindowText(1); m_style.SetWindowText(请选择波形);return TRUE; / return TRUE unless you set the focus to a controlvoid CFuncitonProducerDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lPa

15、ram);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CFuncitonProducerDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paint

16、ingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw th

17、e icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint(); /画x轴CClientDC initdc(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.LineT

18、o(745,485);/标注y轴for(int i=1;i=5;i+)initdc.MoveTo(70,480-30*i);initdc.LineTo(75,480-30*i);/标注x轴for(i=1;i3 | atoi(str)=1 | atof(str)2 | atof(str)0.5)MessageBox(请重新输入频率!范围0.52,错误,MB_ICONEXCLAMATION);m_frequence.SetSel(0,-1);m_frequence.ReplaceSel();m_frequence.SetWindowText(1);elsefrequence=atof(str);

19、/if(!strcmp(str,方波) style=0;if(-1=style)MessageBox(请选择波形!,错误,MB_ICONEXCLAMATION);else if(0=style)SetTimer(1,timeq,0);x=70,y=480,a=0;else if(1=style)SetTimer(2,timeq,0);x=70,y=480,a=0;else if(2=style)SetTimer(3,timeq,0);x=70,y=480;elseSetTimer(4,timeq,0);x=70;void CFuncitonProducerDlg:OnStop() / TODO

20、: Add your control notification handler code here if(0=style)KillTimer(1);else if(1=style)KillTimer(2);else if(2=style)KillTimer(3);elseKillTimer(4);void CFuncitonProducerDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultint t;switch(nIDEvent)case 1:CClientDC i

21、dc(this);idc.MoveTo(x,y);t=a%(int)(120/frequence);if(t=0|t=rate*120/frequence)if(y=480)y=480-range*30;elsey=480;idc.LineTo(x,y);elseCPoint pp;pp.x=x; / pp.y=y;pp.y=DA_AD(unsigned char)(y-390)+390;idc.SetPixel(pp,RGB(0,255,0);x+;a+;break;case 2:CClientDC idc(this);idc.MoveTo(x,y);if(a%60=0)y=480;idc.

22、LineTo(x,y);elseCPoint pp;pp.x=x;pp.y=DA_AD(unsigned char)(y-390)+390;idc.SetPixel(pp,RGB(0,255,0);x+=(int)(2.0/frequence);y-=range;a+=2;break;case 3:CClientDC idc(this);CPoint pp;pp.x=x; / pp.y=y;pp.y=DA_AD(unsigned char)(y-300)+300; idc.SetPixel(pp,RGB(0,255,0);y=(int)(-sin(x-10)*PI/30.0*frequence

23、)*30*range+420);x+=1;break;case 4:CClientDC idc(this);CPoint pp;pp.x=x;pp.y=-DA_AD(25)+500;idc.SetPixel(pp,RGB(0,255,0);x+=1;break;CDialog:OnTimer(nIDEvent);unsigned char CFuncitonProducerDlg:DA_AD(unsigned char tochange)static unsigned short BASE_ADDR, P_ADDR, DA_ADDR; static unsigned char data, Idata;OpenDevice();GetIoBase(&BASE_ADDR);P_ADDR = BASE_ADDR + 0x08;/8255基地址,0b000010*DA_ADDR = BASE_ADDR ;/0832基地址,0b000001*/8255初始化data = 0x8B;/ 都是方式0,A口输出,B、C口输入OutByte(P_A

温馨提示

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

评论

0/150

提交评论