常用函数波形发生器的设计DOC.docx

上传人:b****8 文档编号:9708189 上传时间:2023-02-05 格式:DOCX 页数:23 大小:147.37KB
下载 相关 举报
常用函数波形发生器的设计DOC.docx_第1页
第1页 / 共23页
常用函数波形发生器的设计DOC.docx_第2页
第2页 / 共23页
常用函数波形发生器的设计DOC.docx_第3页
第3页 / 共23页
常用函数波形发生器的设计DOC.docx_第4页
第4页 / 共23页
常用函数波形发生器的设计DOC.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

常用函数波形发生器的设计DOC.docx

《常用函数波形发生器的设计DOC.docx》由会员分享,可在线阅读,更多相关《常用函数波形发生器的设计DOC.docx(23页珍藏版)》请在冰豆网上搜索。

常用函数波形发生器的设计DOC.docx

常用函数波形发生器的设计DOC

微机系统与应用课程设计

实验报告

成绩:

评语:

 

教师:

________

年月日

班级:

学号:

姓名:

地点:

时间:

常用函数波形发生器的设计

一、课程设计目的

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.主程序

#include"stdafx.h"

#include"FuncitonProducer.h"

#include"FuncitonProducerDlg.h"

#include"PCI9052Dll.h"

#include

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

#definePI3.141592654

intstyle=-1;//选择的波形类型

intx=70,y=480,a=0;

intrange=1;

intstb=0;

doublerate=0.5;

doublefrequence=1;

intre=1;

inttimeq=20;

/////////////////////////////////////////////////////////////////////////////

//CAboutDlgdialogusedforAppAbout

classCAboutDlg:

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

//Implementation

protected:

//{{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_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CFuncitonProducerDlgdialog

CFuncitonProducerDlg:

:

CFuncitonProducerDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CFuncitonProducerDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CFuncitonProducerDlg)

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_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_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CFuncitonProducerDlgmessagehandlers

BOOLCFuncitonProducerDlg:

:

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:

Addextrainitializationhere

m_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:

Addyourcontrolnotificationhandlercodehere

Invalidate();

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:

Addyourcontrolnotificationhandlercodehere

if(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();

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_ADDR+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1