常用函數(shù)波形發(fā)生器的設(shè)計(jì)說明_第1頁
常用函數(shù)波形發(fā)生器的設(shè)計(jì)說明_第2頁
常用函數(shù)波形發(fā)生器的設(shè)計(jì)說明_第3頁
常用函數(shù)波形發(fā)生器的設(shè)計(jì)說明_第4頁
常用函數(shù)波形發(fā)生器的設(shè)計(jì)說明_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

./微機(jī)系統(tǒng)與應(yīng)用課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告成績:評(píng)語:教師:________年月日班級(jí):學(xué)號(hào)::地點(diǎn):時(shí)間:常用函數(shù)波形發(fā)生器的設(shè)計(jì)一、課程設(shè)計(jì)目的1.掌握微機(jī)系統(tǒng)總線與各芯片管腳連接方法,提高接口擴(kuò)展硬件電路的連接能力。2.加深對(duì)和D/A芯片的工作方式的理解,學(xué)會(huì)編寫程序,使D/A轉(zhuǎn)換輸出函數(shù)的方法。3.掌握通過A/D轉(zhuǎn)換進(jìn)行實(shí)時(shí)數(shù)據(jù)采集與處理的設(shè)計(jì)思路和實(shí)現(xiàn)方法。二、課程設(shè)計(jì)的容微機(jī)通過DAC0832接口〔OUT2輸出常用函數(shù)波形〔方波,鋸齒波,正弦波等,該波形作為ADC0809模擬信號(hào)輸入連到IN0,ADC0809的輸出通過8255接口送到數(shù)據(jù)總線,設(shè)計(jì)連接硬件線路,然后編寫波形發(fā)生和數(shù)據(jù)采集程序,將采集的數(shù)據(jù)〔波形顯示在計(jì)算機(jī)屏幕上。三、系統(tǒng)功能與設(shè)計(jì)要求1.基本功能要求具有友好的人機(jī)交互界面,通過鼠標(biāo)選擇相關(guān)按鈕或菜單對(duì)系統(tǒng)進(jìn)行控制,采集的數(shù)據(jù)〔波形要以圖形的方式實(shí)時(shí)顯示在計(jì)算機(jī)屏幕上。屏幕顯示參考下圖:屏幕顯示參考以上圖形,也可以自行設(shè)計(jì)界面風(fēng)格,通過按鈕〔或下拉菜單選擇要產(chǎn)生的波形,點(diǎn)擊"開始"后開始產(chǎn)生波形,并進(jìn)行數(shù)據(jù)采集,采集到的數(shù)據(jù)按照?qǐng)D形坐標(biāo)顯示在計(jì)算機(jī)屏幕上,點(diǎn)擊"停止"后立刻停止輸出,重新選擇波形后,再次點(diǎn)擊"開始"即顯示新的波形。2.發(fā)揮部分〔1增加頻率調(diào)節(jié)功能。使輸出到屏幕上的波形隨頻率值變化?!?增加PWM信號(hào),占空比可調(diào)。缺省為50%?!?增加一路信號(hào)采集,旋鈕電位器的輸出端接到ADC0809的IN1,地址信號(hào)ADDA、ADDB、ADDC分別接K0,K1,K2開關(guān),波動(dòng)開關(guān)狀態(tài)為000或001,分別選擇0通道或1信號(hào)輸出到計(jì)算機(jī)屏幕上顯示。四、設(shè)計(jì)思路微機(jī)利用軟件編程,通過DAC0832數(shù)模轉(zhuǎn)換輸出端口OUT2輸出0~5V的連續(xù)模擬電壓〔波形,然后將此模擬電壓作為ADC0809模數(shù)轉(zhuǎn)換的一路輸入信號(hào)接到IN0端口,地址信號(hào)ADDA、ADDB、ADDC分別接K0,K1,K2開關(guān),選擇0通道〔000,輸出的八位數(shù)字信號(hào)可以連接到8255的PA口,控制信號(hào)接PB口和PC口,通過采集程序?qū)崟r(shí)讀取采集到得數(shù)據(jù),并輸入到微機(jī),最后在計(jì)算機(jī)屏幕上以圖形方式顯示出來。注意事項(xiàng):D/AC0832和A/DC0809的采樣頻率應(yīng)小于640KHz。五、操作步驟1.提交設(shè)計(jì)方案包括:控制功能實(shí)現(xiàn)方案,編程語言,硬件設(shè)計(jì)方案及硬件連線圖,硬件支持環(huán)境和軟件支持的環(huán)境要求。2.方案審核系統(tǒng)設(shè)計(jì)方案經(jīng)過指導(dǎo)老師審核后,方可以實(shí)施操作。3.硬件系統(tǒng)實(shí)現(xiàn)按照硬件設(shè)計(jì)方案及硬件連線圖連線,經(jīng)過指導(dǎo)老師認(rèn)可后,加、電并觀察是否正確。如果發(fā)現(xiàn)異常,立刻關(guān)掉電源,查明原因,解決問題后,再加電觀察。4.按照功能要求編程,運(yùn)行,調(diào)試六、撰寫課程設(shè)計(jì)報(bào)告及其容1.應(yīng)用系統(tǒng)設(shè)計(jì)方案2.系統(tǒng)測試結(jié)果3.課課程設(shè)計(jì)中遇到的問題及解決辦法4.寫出體會(huì)與建議七、課程設(shè)計(jì)實(shí)驗(yàn)環(huán)境:1.硬件配置:微機(jī)一臺(tái)〔Pentium4微機(jī)接口技術(shù)實(shí)驗(yàn)箱一個(gè)ISA–PCI轉(zhuǎn)接卡一塊連接電纜一條萬用表一塊微機(jī)接口技術(shù)實(shí)驗(yàn)講義一本導(dǎo)線、剝線鉗等2.軟件環(huán)境:WindowsXP平臺(tái)VisualC++6.0編譯器八、應(yīng)用系統(tǒng)設(shè)計(jì)方案主程序#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<"請(qǐng)選擇波形">; 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>; //標(biāo)注y軸 for<inti=1;i<=5;i++> { initdc.MoveTo<70,480-30*i>; initdc.LineTo<75,480-30*i>; } //標(biāo)注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<"請(qǐng)重新輸入幅度值!圍1~3","錯(cuò)誤",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<"請(qǐng)重新輸入占空比!圍0,1","錯(cuò)誤",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<"請(qǐng)重新輸入頻率!圍0.5~2","錯(cuò)誤",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<"請(qǐng)選擇波形!","錯(cuò)誤",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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論