c8051f020信號(hào)發(fā)生器設(shè)計(jì)報(bào)告_第1頁
c8051f020信號(hào)發(fā)生器設(shè)計(jì)報(bào)告_第2頁
c8051f020信號(hào)發(fā)生器設(shè)計(jì)報(bào)告_第3頁
c8051f020信號(hào)發(fā)生器設(shè)計(jì)報(bào)告_第4頁
c8051f020信號(hào)發(fā)生器設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

簡易數(shù)字合成信號(hào)發(fā)生器設(shè)計(jì)PAGE50-目錄TOC\o"1-3"\h\u32296實(shí)驗(yàn)?zāi)康?-2-17267軟件設(shè)計(jì) -4-22439第一節(jié)軟件總體設(shè)計(jì) -4-26113第二節(jié)軟件功能設(shè)計(jì) -4-13446一、系統(tǒng)初始化程序設(shè)計(jì) -4-3307二、鍵盤掃描及處理程序設(shè)計(jì) -5-26067三、中斷服務(wù)程序設(shè)計(jì) -12-27395四、數(shù)據(jù)顯示部分 -14-18730五、DAC0部分 -15-19779六、附加模塊 -16-28224電路設(shè)計(jì) -20-10401第一節(jié)電路總體設(shè)計(jì) -20-29154第二節(jié)電路功能設(shè)計(jì) -21-31652一、總體電路模塊 -21-449二、電源模塊 -22-18799三、開關(guān)電容濾波器模塊 -22-22466四、四象限乘法器模塊 -23-25186五、負(fù)載驅(qū)動(dòng)模塊 -25-12459六、負(fù)載模塊 -25-3711實(shí)驗(yàn)調(diào)試 -26-8553第一節(jié)程序調(diào)試 -26-4144一、初始化程序 -26-1850二、鍵盤掃描及處理程序設(shè)計(jì) -26-27183三、顯示程序 -27-29318四、定時(shí)器2、3服務(wù)程序及正弦波發(fā)生程序 -28-27024第二節(jié)電路調(diào)試 -28-10544一、電源模塊調(diào)試 -28-15684二、開關(guān)電容濾波器模塊調(diào)試 -29-1179三、四象限乘法器模塊調(diào)試 -30-28302四、負(fù)載驅(qū)動(dòng)及負(fù)載模塊調(diào)試 -30-20671實(shí)驗(yàn)結(jié)果 -31-27197實(shí)驗(yàn)數(shù)據(jù)及分析 -34-15617第一節(jié)數(shù)/模轉(zhuǎn)換MCUDAC輸出 -34-2222第二節(jié)低通濾波器輸出 -34-13481第三節(jié)低通濾波器時(shí)鐘信號(hào) -35-13025第四節(jié)系統(tǒng)最終輸出信號(hào) -35-25645實(shí)踐總結(jié)、心得 -36-29987附錄一源程序 -37-6566附錄二電路原理圖 -52-實(shí)驗(yàn)?zāi)康南到y(tǒng)框圖實(shí)驗(yàn)平臺(tái)板實(shí)驗(yàn)平臺(tái)板LED數(shù)碼管矩陣鍵盤PIO(8it)PIODAC開關(guān)電容濾波器四象限乘法器緩沖放大平臺(tái)實(shí)驗(yàn)板實(shí)驗(yàn)室提供“電子系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)平臺(tái)板”,板上集成C8051F020處理器,該處理器內(nèi)置DAC等資源,合成信號(hào)即由該DAC輸出(電壓信號(hào))。學(xué)生應(yīng)充分利用板上集成的LED數(shù)碼管顯示器、4×4矩陣掃描鍵盤等資源,自行開發(fā)驅(qū)動(dòng)程序。實(shí)現(xiàn)較完善的功能。開關(guān)電容濾波器為了進(jìn)行DAC的信號(hào)濾波,推薦學(xué)生使用MAX7400(或MAX293)系列開關(guān)電容濾波器,該類濾波器的截止頻率可由輸入其中的時(shí)鐘信號(hào)控制,我們要求該濾波器的截止頻率應(yīng)跟隨合成信號(hào)的頻率變化,該跟隨特性由處理器進(jìn)行控制。四象限乘法器四象限乘法器(是一種結(jié)構(gòu)的DAC芯片)用來控制信號(hào)幅度,有處理器通過并行數(shù)據(jù)端口進(jìn)行控制。芯片推薦使用TLC7528。緩沖放大器緩存放大器可由運(yùn)算放大器結(jié)合必要的分立元件(晶體管、電阻、電容等)組成,用以驅(qū)動(dòng)低阻負(fù)載獲得足夠功率,運(yùn)算放大器推薦使用LM358。負(fù)載純阻負(fù)載,初擬為50歐姆/1W。功能要求頻率和幅度可由鍵盤控制,頻率和幅度的設(shè)定值可由LED數(shù)碼管顯示器顯示。指標(biāo)要求頻率范圍由設(shè)計(jì)者自行確定,頻率輸出較高的組可獲得額外加分;信號(hào)最大幅度為10V峰峰值或20V峰峰值,幅度可控,控制階至少100級(jí)。負(fù)載電路:50歐姆;如可做到8歐姆,可額外加分。發(fā)揮部分:信號(hào)可實(shí)現(xiàn)幅度控制或相位控制,酌情加分。軟件設(shè)計(jì)第一節(jié)軟件總體設(shè)計(jì)應(yīng)用系統(tǒng)中的應(yīng)用軟件是根據(jù)系統(tǒng)功能要求而設(shè)計(jì)的,能可靠地實(shí)現(xiàn)系統(tǒng)的各種功能。一個(gè)優(yōu)秀的應(yīng)用系統(tǒng)的應(yīng)具有下列特點(diǎn):(1)根據(jù)軟件功能要求,將系統(tǒng)軟件分成若干個(gè)獨(dú)立的部分。設(shè)計(jì)出軟件的總體結(jié)構(gòu),使其結(jié)構(gòu)清晰、流程合理。(2)要樹立結(jié)構(gòu)化程序設(shè)計(jì)風(fēng)格,各功能程序模塊化、子程序化。既便于調(diào)試、鏈接,又便于移植、修改。(3)建立正確的數(shù)學(xué)模型。即根據(jù)功能要求,描述各個(gè)輸入和輸出變量之間的數(shù)學(xué)關(guān)系,它是關(guān)系到系統(tǒng)好壞的重要因素。(4)為提高軟件設(shè)計(jì)的總體效率,以簡明、直觀法對(duì)任務(wù)進(jìn)行描述,在編寫應(yīng)用軟件之前,應(yīng)繪制出程序流程圖。(5)要合理分配系統(tǒng)資源,包括ROM、RAM、定時(shí)數(shù)器、中斷資源等。(6)注意在程序的有關(guān)位置處寫上功能注釋,提高程序的可讀性。(7)加強(qiáng)軟件抗干擾設(shè)計(jì),它是提高系統(tǒng)應(yīng)用可靠性的有利措施。本系統(tǒng)的軟件包括以下幾個(gè)程序模塊:(1)初始化程序;(2)顯示程序;(3)鍵盤掃描程序與處理程序;(4)定時(shí)器2、3服務(wù)程序;(5)正弦波發(fā)生程序及其服務(wù)程序。第二節(jié)軟件功能設(shè)計(jì)一、系統(tǒng)初始化程序設(shè)計(jì)復(fù)位程序完成如下工作:(1)顯示的P.HELLO初始界面直到有鍵按下;(2)初始頻率設(shè)置為100HZ,初始化幅度為5V,初始化DAC0為8位工作精度,并且輸出更新發(fā)生在寫DAC0H后;(3)將頻率值轉(zhuǎn)換成定時(shí)器的初值,并將幅度值轉(zhuǎn)化為P7口送入7528控制器件;(4)置定時(shí)器3工作于方式1,即16位自動(dòng)重載定時(shí)器方式,送入定時(shí)器3定時(shí)初值,啟動(dòng)定時(shí)器3工作;(5)根據(jù)按鍵顯示初始頻率或幅度,并產(chǎn)生波形;(6)轉(zhuǎn)鍵盤掃描程序、頻率或幅度顯示程序。(7)同時(shí)程序還試著來模擬一個(gè)簡單的調(diào)幅波和調(diào)相波輸出。系統(tǒng)的初始化流程如圖1所示。圖1初始化流程圖二、鍵盤掃描及處理程序設(shè)計(jì)這部分程序包括如下幾部分:(1)鍵盤掃描程序unsignedcharGetkey();(2)先對(duì)P1置數(shù),對(duì)第一行掃描;(3)判斷是否有鍵按下;(4)延時(shí),軟件去干擾;(5)確認(rèn)按鍵按下,并返回鍵值;(6)以此方法對(duì)2、3、4行進(jìn)行掃描,對(duì)應(yīng)行上有鍵按下就返回對(duì)應(yīng)值;(7)執(zhí)行相應(yīng)鍵值程序。下面分別介紹其功能及設(shè)計(jì)思想。單片機(jī)系統(tǒng)中,鍵盤掃描是CPU工作的一個(gè)主要內(nèi)容之一。CPU忙于各項(xiàng)工作任務(wù)時(shí),如何兼顧鍵盤掃描。既保證不失時(shí)機(jī)的響應(yīng)鍵盤操作,又不過多占用CPU時(shí)間。因此,要根據(jù)應(yīng)用系統(tǒng)中的CPU的忙、閑情況,選擇好鍵盤的工作方式。在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,采用非編碼鍵盤,在這種鍵盤結(jié)構(gòu)中,程序設(shè)計(jì)中單片機(jī)對(duì)它的控制為:程序控制掃描方式。以下為幾種鍵盤控制方式:程序控制掃描方式這種方式就是只有當(dāng)單片機(jī)空閑時(shí),才調(diào)用鍵盤掃描子程序,響應(yīng)鍵盤的輸入請求。定時(shí)掃描方式這種方式就是每隔一定的時(shí)間對(duì)鍵盤掃描一次。通常是利用單片機(jī)內(nèi)部定時(shí)器產(chǎn)生10ms的定時(shí)中斷,CPU響應(yīng)定時(shí)器溢出中斷請求,對(duì)鍵盤進(jìn)行掃描,以響應(yīng)鍵盤輸入請求。中斷工作方式為進(jìn)一步提高CPU效率,可以采用中斷掃描工作方式。即在鍵盤有健按下時(shí),才執(zhí)行鍵盤掃描,執(zhí)行該鍵功能程序。本系統(tǒng)采用程序控制掃描工作方式。在該設(shè)計(jì)中的鍵盤的行列線連接于C8051F020的P3口上。鍵盤掃描程序自復(fù)位后就開始工作,時(shí)刻監(jiān)視鍵盤,有無鍵按下。在監(jiān)視鍵盤過程中,允許定時(shí)器T2、T3中斷,即同時(shí)動(dòng)態(tài)顯示數(shù)據(jù)和輸出波形。一旦有鍵按下,先延時(shí),去除鍵的抖動(dòng),再讀出鍵值,其框圖如圖2所示:圖2鍵盤掃描對(duì)應(yīng)鍵盤如圖3所示圖3鍵盤實(shí)現(xiàn)鍵盤采用矩陣式鍵盤(如圖4-3所示),由軟件返回相應(yīng)編碼,再根據(jù)相應(yīng)返回值調(diào)用相應(yīng)的子程序。表4-1鍵盤處理程序返回值對(duì)應(yīng)處理程序1Key1萬位頻率調(diào)整(ww)2key2千位頻率調(diào)整(qw)3Key3百位頻率調(diào)整(sw)4Key4十位頻率調(diào)整(gew)5Key5個(gè)位頻率調(diào)整(xsw)6Key6十位幅度調(diào)整(Asw)7Key7個(gè)位幅度調(diào)整(Agw)8Key8十分位幅度調(diào)整(Axsw)9Key9為模擬產(chǎn)生調(diào)幅波10Key10為相位調(diào)制(Phase_1)11Key11為相位調(diào)制(Phase_2)12Key12為相位調(diào)制(Phase_3)13Key13為相位調(diào)制(Phase_4)14Key14為相位調(diào)制(Phase_5)需要說明的是:調(diào)用Key1-Key8時(shí),對(duì)應(yīng)位加1,加到10時(shí)回0;對(duì)于有些數(shù)值,通過程序可控制在一定的范圍。鍵盤掃描源程序如下:unsignedcharGetkey()//鍵盤掃描程序,用于識(shí)別哪一個(gè)鍵按下,并返回鍵值{P3=0xff;P3_7=0;if(P3_3==0){Delay_nms(50); if(P3_3==0) return1;}if(P3_2==0){Delay_nms(50); if(P3_2==0) return2;}if(P3_1==0){Delay_nms(50); if(P3_1==0) return3;}if(P3_0==0){Delay_nms(50); if(P3_0==0) return4;}P3_7=1;P3_6=0;if(P3_3==0){Delay_nms(50); if(P3_3==0) return5;}if(P3_2==0){Delay_nms(50); if(P3_2==0) return6;}if(P3_1==0){Delay_nms(50); if(P3_1==0) return7;}if(P3_0==0){Delay_nms(50); if(P3_0==0) return8;}P3_6=1;P3_5=0;if(P3_3==0){Delay_nms(50); if(P3_3==0) return9;}if(P3_2==0){Delay_nms(50); if(P3_2==0) return10;}if(P3_1==0){Delay_nms(50); if(P3_1==0) return11;}if(P3_0==0){Delay_nms(50); if(P3_0==0) return12;}P3_5=1;P3_4=0;if(P3_3==0){Delay_nms(50); if(P3_3==0) return13;}if(P3_2==0){Delay_nms(50); if(P3_2==0) return14;}if(P3_1==0){Delay_nms(50); if(P3_1==0) return15;}if(P3_0==0){Delay_nms(50); if(P3_0==0) return16;}P3_4=1;return17;}下面是對(duì)應(yīng)的子程序:/******************鍵盤控制程序部分F部分***************************/voidkey1()//控制萬位{if(ww<9&&ww>=0) ww++;else ww=0;}voidkey2()//控制千位{if(qw<9&&qw>=0) qw++;else qw=0;}voidkey3()//控制百位{if(bw<9&&bw>=0) bw++;else bw=0;}voidkey4()//控制十位{if(sw<9&&sw>=0) sw++;else sw=0;}voidkey5()//控制個(gè)位{if(gw<9&&gw>=0) gw++;else gw=0;}/*******************鍵盤控制A部分******************************/voidkey6()//控制十位{if(Asw<2&&Asw>=0) Asw++;else Asw=0;}voidkey7()//控制個(gè)位{if(Asw!=2) {if(Agw<9&&Agw>=0) Agw++;else Agw=0;} else { if(Agw<5&&Agw>=0) Agw++;else Agw=0;}}voidkey8()//控制0.1位{if(Asw==2&&Agw==5) { Axsw=0; } else {if(Axsw<9&&Axsw>=0) Axsw++;else Axsw=0;}}/**************************************************/voidkey9()//調(diào)幅輸出,載頻1000HZ,信號(hào)為方波。{qw=1; bw=0; sw=0; gw=0; Asw=0; Agw=5; Axsw=0;}三、中斷服務(wù)程序設(shè)計(jì)采用定時(shí)器T3定時(shí)中斷產(chǎn)生正弦波并同時(shí)產(chǎn)生一個(gè)頻率是正弦信號(hào)100倍的CLOCK信號(hào)。定時(shí)器的初值可以這樣計(jì)算:f=100000*ww+1000*qw+100*bw+10*sw+gw;tt=2^16-24M/f/8/100;除以100,是為了產(chǎn)生那個(gè)周期為正弦周期百分之一的clock信號(hào)。定時(shí)器2只有在按下鍵9后到按下其它鍵之前,啟用。其它時(shí)間段內(nèi)都是禁用的。采用定時(shí)器2是為了控制P7口使輸出幅度周期變化。從而產(chǎn)生調(diào)幅波。voidTimer3_ISR(void)interrupt14//定時(shí)器3服務(wù)程序{TMR3CN&=~(0x80); P0_6=~P0_6; if(kk<=23)kk++; elseif(kk==24) { DAC0L=0x00;DAC0H=to_sin[ii];// ii=ii+16; ii=ii+32;// if(ii>=128) if(ii>=256) { ii=0;} kk=0; }}voidTimer2_ISR(void)interrupt5//定時(shí)器2服務(wù)程序{T2CON&=~(0x80);if(AM==0) { P7=100; AM=1; } else { P7=0xff; AM=0;}}voidTimer3_ISR(void)interrupt14//定時(shí)器3服務(wù)程序{TMR3CN&=~(0x80); P0_6=~P0_6; if(kk<=23) kk++; elseif(kk==24) { DAC0L=0x00;DAC0H=to_sin[ii];// ii=ii+16; ii=ii+32;// if(ii>=128) if(ii>=256) { ii=0;} kk=0; }}voidTimer2_ISR(void)interrupt5//定時(shí)器2服務(wù)程序{T2CON&=~(0x80);if(AM==0) { P7=100; AM=1; } else { P7=0xff; AM=0;}}四、數(shù)據(jù)顯示部分關(guān)于數(shù)據(jù)顯示,分為兩個(gè)部分,兩個(gè)顯示如何分配。本程序通過設(shè)置一個(gè)標(biāo)識(shí)位FA來進(jìn)行區(qū)分,當(dāng)FA為1時(shí),進(jìn)行頻率顯示。而當(dāng)FA為0時(shí),顯示幅度。FA的值在程序中,當(dāng)按下頻率控制鍵時(shí),置為1,按下幅度控制鍵時(shí)置為0;復(fù)位時(shí)自動(dòng)變?yōu)?。也就是當(dāng)你調(diào)節(jié)頻率時(shí)自動(dòng)顯示頻率,當(dāng)調(diào)節(jié)幅度時(shí)自動(dòng)顯示幅度。兩者都是能過P2口進(jìn)行位選,再通過P1口進(jìn)行段選。6個(gè)數(shù)碼管,通過循環(huán)移位進(jìn)行顯示。頻率顯示/*********************LED顯示程序F部分********************/voiddisplayF(){P2=0x20; P1=0x8e; Loop_Delay(1);P2=0x10; P1=number_tab[ww];Loop_Delay(1); P2=0x08; P1=number_tab[qw]; Loop_Delay(1); P2=0x04; P1=number_tab[bw]; Loop_Delay(1); P2=0x02; P1=number_tab[sw]; Loop_Delay(1); P2=0x01; P1=number_tab[gw]; Loop_Delay(1);}幅度顯示/****************LED顯示程序A部分*******************/voiddisplayA(){P2=0x20; P1=0x88; Loop_Delay(1);P2=0x10; P1=0xff;Loop_Delay(1); P2=0x08; P1=0xff; Loop_Delay(1); P2=0x04; P1=number_tab[Asw]; Loop_Delay(1); P2=0x02; P1=number_tab[Agw]&0x7f; Loop_Delay(1); P2=0x01; P1=number_tab[Axsw]; Loop_Delay(1);}五、DAC0部分對(duì)于正弦信號(hào)的產(chǎn)生,經(jīng)對(duì)比,以數(shù)組形式產(chǎn)生波形為最好的方式。DAC0工作方式為:內(nèi)部偏壓發(fā)生器和電壓基準(zhǔn)緩沖器工作,基準(zhǔn)從VREF引腳輸出DAC0使能,DAC輸出更新發(fā)生在寫DAC0時(shí)。對(duì)于它的初化為:voidDAC_Init(void)//初始化I/O口//內(nèi)部偏壓發(fā)生器和電壓基準(zhǔn)緩沖{//器工作,基準(zhǔn)從VREF引腳輸出REF0CN|=0x03;//DAC0便能,DAC輸出更新發(fā)生在 DAC0CN=0x84;//寫DAC0時(shí)。 DAC0L=0x00; DAC0H=0x00;}六、附加模塊模擬調(diào)幅對(duì)于調(diào)幅,由于時(shí)間關(guān)系。沒有時(shí)間再做電路,只有用單片機(jī)做一個(gè)簡單的模擬,主要目的是為了提出一種只用單片機(jī)的一個(gè)DAC做AM波輸出的方法。其中主要的思想是,用定時(shí)器2控制P7口,也就是控制輸出波的幅度大小。所以只要能夠通過設(shè)計(jì)P7口的數(shù)據(jù)輸出,就能輸出調(diào)幅波。本程序模擬的是一個(gè)載波為1000HZ,5V的正弦波。調(diào)制波為100HZ,調(diào)制度為50%。程序如下:voidkey9()//調(diào)幅輸出,載頻1000HZ,信號(hào)為方波。{qw=1; bw=0; sw=0; gw=0; Asw=0; Agw=5; Axsw=0;}voidTimer2_Init(){ET2=1;T2CON=0x00; RCAP2L=0x00; RCAP2H=0xff; TL2=0x00; TH2=0xff; T2CON=0x04;}voidTimer2_ISR(void)interrupt5{T2CON&=~(0x80);if(AM==0) { P7=100;AM=1; } else { P7=0xff;AM=0;}}模擬調(diào)相對(duì)于相位調(diào)制,用單片機(jī)模擬起來,用AM調(diào)制的思想設(shè)計(jì)比較復(fù)雜。首先,反相時(shí)不一定在DAC0為零;其次,P7口數(shù)據(jù)設(shè)計(jì)比較繁雜,而且容易出錯(cuò)。本組的楊建敏同學(xué)從另一個(gè)方向設(shè)計(jì)出了一個(gè)解決方法。就在是正弦數(shù)組方面著手,兩個(gè)正弦數(shù)組各自存一個(gè)周期的正弦數(shù)據(jù),但兩個(gè)數(shù)組數(shù)據(jù)反相,在反相點(diǎn)直接輸出另一個(gè)數(shù)組。但是鑒于時(shí)間問題,還有就是學(xué)校不給片子,自己在課下不能做實(shí)驗(yàn)調(diào)試,故在此提出這種方法。希望其它人能在此基礎(chǔ)上調(diào)試出結(jié)果。下面也給出自己關(guān)系到的盲寫的程序。下面是相位初始化:intinitial_phase(){intini_phase=0;switch(pha) { case1:if(Phase_1==1) { ini_phase=1; }else { ini_phase=0; }break;case2:if(Phase_2==1) { ini_phase=1; } else { ini_phase=0; }break;case3:if(Phase_3==1) { ini_phase=1; } else { ini_phase=0; }break;case4:if(Phase_4==1) { ini_phase=1; } else { ini_phase=0; }break;case5:if(Phase_5==1) { ini_phase=1; } else { ini_phase=0; }break; }returnini_phase;}相應(yīng)的中斷3服務(wù)程序也應(yīng)改為:voidTimer3_ISR(void)interrupt14{TMR3CN&=~(0x80); P0_6=~P0_6; if(kk<=23) kk++; elseif(kk==24) { DAC0L=0x00;if(initial_phase()==0) {DAC0H=to_sin0[ii]; } elseif(initial_phase()==1) {DAC0H=to_sin1[ii]; }// ii=ii+1; ii=ii+32; if(ii>=256)// if(ii>=8) { ii=0; pha++; if(pha>6) { pha=1; }} kk=0; }}電路設(shè)計(jì)第一節(jié)電路總體設(shè)計(jì)本系統(tǒng)電路部分是比較關(guān)鍵的一部分。在實(shí)驗(yàn)過程中,我們發(fā)現(xiàn)電路雖說不是本次課程設(shè)計(jì)的最主要部分,但卻直接決定著本次課程設(shè)計(jì)是否能夠順利完成。在設(shè)計(jì)電路的過程中,結(jié)合已有通用電路并加以改善,使電路實(shí)現(xiàn)更多的功能,以下是本次課程設(shè)計(jì)各部分電路的總結(jié)。本系統(tǒng)的電路包括以下幾個(gè)模塊。(1)電源模塊。(2)開關(guān)電容濾波器模塊。(3)四象限乘法器模塊。(4)負(fù)載驅(qū)動(dòng)模塊。(5)負(fù)載模塊。核心器件引腳圖。MAX7400引腳圖L7805引腳圖MAX7400引腳圖L7805引腳圖LM358引腳圖TLC7528引腳圖LM358引腳圖TLC7528引腳圖第二節(jié)電路功能設(shè)計(jì)一、總體電路模塊以上是本次課程設(shè)計(jì)各部分電路的概覽。本次課程設(shè)計(jì)我們進(jìn)行模塊化電路設(shè)計(jì),將各部分電路進(jìn)行相應(yīng)模塊焊接。模塊之間沒有直接用導(dǎo)線焊接上,而是用排針與導(dǎo)線相結(jié)合實(shí)現(xiàn)模塊間連接,從而增加了模塊的可重用性和測試的方便性,從而避免因?yàn)椴槐匾暮附邮д`,而導(dǎo)致重復(fù)拆焊、焊接的麻煩。二、電源模塊該電源模塊核心芯片為L7805,使用12V供電電壓,5V穩(wěn)壓輸出,為板上其他模塊提供5V供電。由于面包板資源有限,通過分析板上資源,將面包板右側(cè)一列通路均接為5V,方便其他模塊的使用。三、開關(guān)電容濾波器模塊該電路模塊通過開關(guān)電容濾波器MAX7400實(shí)現(xiàn)濾波功能,使用P0.6產(chǎn)生時(shí)鐘信號(hào),DAC0產(chǎn)生階梯信號(hào),通過DAC0輸入八階階梯波,CLK輸入100:1(時(shí)鐘信號(hào)頻率:正弦信號(hào)頻率)的時(shí)鐘信號(hào),從而實(shí)現(xiàn)開關(guān)電容濾波器的功能。在后續(xù)拓展中實(shí)現(xiàn)了相位的數(shù)字調(diào)制。信號(hào)頻率可調(diào)。通過程序控制改變DAC0產(chǎn)生階梯信號(hào)的頻率和改變CLK產(chǎn)生式中信號(hào)的頻率從而實(shí)現(xiàn)對(duì)信號(hào)頻率的控制??梢詫?shí)現(xiàn)的最高頻率輸出為2000Hz,并有穩(wěn)定的頻率輸出。信號(hào)相位調(diào)制。通過對(duì)DAC0的相位進(jìn)行選擇輸出,從而實(shí)現(xiàn)了數(shù)字相位的調(diào)制。當(dāng)數(shù)字為0時(shí)使用0相位,數(shù)字為1時(shí)使用π相位。四、四象限乘法器模塊以上是四象限乘法器模塊,使用12V電源給四象限乘法器供電。并使用雙電源給LM358供電。通過學(xué)習(xí)四象限乘法器的功能,結(jié)合data—sheet上的電路圖,加以改善,從而實(shí)現(xiàn)了二、四象限乘法器的轉(zhuǎn)換,單、雙極性的乘法器選擇以及AM調(diào)制。二、四象限乘法器轉(zhuǎn)換。通過打開S1和S2,使第二級(jí)運(yùn)放不接入電路中,并直接使用2_quadrant_out直接加負(fù)載驅(qū)動(dòng)電路,從而只實(shí)現(xiàn)二象限乘法器的功能。單、雙極性乘法器選擇。閉合S2,打開或閉合S1從而實(shí)現(xiàn)四象限乘法器的單、雙極性轉(zhuǎn)換。當(dāng)S1閉合時(shí),實(shí)現(xiàn)雙極性四象限乘法器的功能,當(dāng)D0-D7輸出為0x80時(shí),輸出為0;當(dāng)D0-D7輸出為0xff時(shí)輸出為0相位的最大正弦波,最大幅度可達(dá)5.5V;當(dāng)D0-D7輸出為0x00時(shí)輸出為π相位的最大正弦波,最大幅度可達(dá)5.5V。為雙極性正弦信號(hào)。當(dāng)S1打開時(shí),實(shí)現(xiàn)單極性四象限乘法器的功能,當(dāng)D0-D7輸出為0x00時(shí),輸出為0;當(dāng)D0-D7輸出為0xff時(shí)輸出為0相位的最大正弦波,最大幅度峰峰值可達(dá)11V。為單極性正弦信號(hào)。AM調(diào)制。通過判斷AM調(diào)制位按下,從而選擇AM調(diào)制模式。在AM調(diào)制模式中,通過定時(shí)改變D0-D7的輸出從而實(shí)現(xiàn)信號(hào)幅度的定期改變,從而實(shí)現(xiàn)信號(hào)的AM調(diào)制。五、負(fù)載驅(qū)動(dòng)模塊以上是負(fù)載驅(qū)動(dòng)模塊,本模塊使用12V電源供電,并使用跟隨器的方法從而增加輸出阻抗,實(shí)現(xiàn)驅(qū)動(dòng)較小負(fù)載的功能。六、負(fù)載模塊本模塊使用10K電位器,從而實(shí)現(xiàn)負(fù)載可調(diào),可實(shí)現(xiàn)對(duì)較大范圍的負(fù)載的選擇。實(shí)驗(yàn)調(diào)試本次實(shí)驗(yàn)調(diào)試共分為兩大部分:程序調(diào)試、電路調(diào)試。以下為各部分調(diào)試步驟及解決方案。第一節(jié)程序調(diào)試由于之前沒有接觸過這咱類型的單片機(jī),而且該單片機(jī)的設(shè)置比較的復(fù)雜,各種資源的分配等等。還好,學(xué)校圖書館里有大量的書籍可以數(shù)據(jù)集,在此也向同學(xué)們推薦一本書《C8051F系列單片機(jī)開發(fā)與C語言編程》北航出版。程序調(diào)試過程中我們也遇到了一些問題,以下是各模塊程序調(diào)試步驟和解決方案。本系統(tǒng)的軟件包括以下幾個(gè)程序模塊:(1)初始化程序;(2)鍵盤掃描程序與處理程序;(3)顯示程序;(4)定時(shí)器2、3服務(wù)程序及正弦波發(fā)生程序;一、初始化程序這一部分相對(duì)簡單,主要看看輸出“P.HELLO”是否正常,從而判斷出對(duì)于I/O口的設(shè)置是否正常。相對(duì)簡單,調(diào)試也容易。調(diào)試步驟測試電源確保電源供電正常。連接電源和在線調(diào)試器件。觀察數(shù)碼管輸出。分析程序問題,修改程序重復(fù)步驟(3)。解決方案由于此部分程序比較簡單、工作正常,本模塊并未出現(xiàn)任何故障。二、鍵盤掃描及處理程序設(shè)計(jì)對(duì)于4X4鍵盤,由于已前對(duì)它的了解不夠,還有就是程序過程中,與做電路的人交流很少,對(duì)它沒有足夠的了解,所以造成了前期調(diào)試過程中的很多錯(cuò)誤??偨Y(jié)起來就是,寫程序時(shí)一定要看懂電路,對(duì)其原理有一個(gè)本質(zhì)的認(rèn)識(shí)。調(diào)試步驟(1)測試電源確保電源供電正常。(2)連接電源和在線調(diào)試器件。(3)按下每個(gè)鍵,觀察對(duì)應(yīng)的輸出是否變化和怎樣變化。(4)分析問題,找出對(duì)應(yīng)的錯(cuò)誤后,修改程序重復(fù)步驟(3)確保最后鍵盤正確輸入。解決方案由于4X4鍵盤電路相對(duì)復(fù)雜,所以調(diào)試中出現(xiàn)很多問題。程序最開始測試過程,發(fā)現(xiàn)沒有輸入。經(jīng)過幾次檢查后,發(fā)現(xiàn)自己對(duì)4X4鍵盤的理解出現(xiàn)的很大的偏差。自己的程序只是讀每個(gè)口的輸入,并沒有進(jìn)行高4位和低4位的分別讀取。還有沒有進(jìn)行相應(yīng)位的拉低,所以讀取的數(shù)據(jù)不對(duì)。解決方案是,進(jìn)行逐行讀取。具體程序內(nèi)容參見程序的鍵盤掃描及處理程序設(shè)計(jì)模塊。對(duì)于這個(gè)部分,我們提出幾點(diǎn)意見方便后人再做。寫程序之前一定要對(duì)你要做的模塊充分理解。4X4鍵盤方面,我們的程序不是很完整,存在的一個(gè)最大的問題就是設(shè)計(jì)不完整,首先是讀取次數(shù)太多,按行取了四次,效率不高。完全可以做成讀兩次,讀高四位再讀低四位。程序不難,希望看了此篇文章的同學(xué)做的時(shí)候注意。還有就是由于自己查資料時(shí)看的不是很細(xì),對(duì)于單片機(jī)I/O口的幾種輸出設(shè)置沒有完全理解,所以在程序時(shí)對(duì)于鍵盤輸入口的沒有正確設(shè)置,后面出現(xiàn)了一些錯(cuò)誤。所以,對(duì)于技術(shù)手冊來說,大家還是應(yīng)該抱著一種敬畏之心一點(diǎn)一點(diǎn)的看。三、顯示程序顯示部分,電路簡單,主要是程序的設(shè)計(jì)上問題。對(duì)于它的調(diào)試,相對(duì)簡單。主要是對(duì)于參數(shù)的修改。調(diào)試步驟(1)測試電源確保電源供電正常。(2)連接電源和在線調(diào)試器件。(3)按下每個(gè)鍵,觀察對(duì)應(yīng)的輸出是否變化和怎樣變化。(4)分析問題,找出對(duì)應(yīng)的錯(cuò)誤后,修改程序重復(fù)步驟(3)確保最后數(shù)碼管正確輸出。解決方案由于我們在調(diào)試時(shí),設(shè)置合理,沒有出現(xiàn)什么問題,所以就對(duì)同學(xué)們可以出現(xiàn)的問題作些分析,避免再做時(shí)會(huì)出現(xiàn)的問題。頻率高時(shí),會(huì)閃的很嚴(yán)重。當(dāng)F>2000HZ時(shí),由于還要一個(gè)CLOCK信號(hào),它的頻率要是F的100倍,所以CLOCK在F=2000HZ時(shí)在跳中斷的頻率為2000X200=400000HZ對(duì)于晶振只有24M的單片機(jī)來說,中斷跳的太頻繁,顯示無法正常工作。數(shù)碼管少,只有6個(gè),所以做顯示分配時(shí)不足。所以推薦幅度和頻率分開顯示。四、定時(shí)器2、3服務(wù)程序及正弦波發(fā)生程序定時(shí)器和DAC0的設(shè)置的服務(wù)程序應(yīng)該說是重點(diǎn)內(nèi)容,這個(gè)部分很程度上決定了此次實(shí)驗(yàn)是否成功。對(duì)于它的調(diào)試沒少費(fèi)工夫,調(diào)試步驟(1)測試電源確保電源供電正常。(2)連接電源和在線調(diào)試器件。(3)按下每個(gè)鍵,觀察對(duì)應(yīng)的輸出是否變化和怎樣變化。(4)分析問題,找出對(duì)應(yīng)的錯(cuò)誤后,修改程序重復(fù)步驟(3)確保最后正弦波正確輸出。解決方案這一部分由于需要設(shè)置的關(guān)鍵參數(shù)太多,寫程序時(shí)也遇到了很多困難。對(duì)于這部分也沒有什么好的意見,就是自己分塊進(jìn)行測試,查找問題心要細(xì),不要想著一蹴而就。最好先找一個(gè)這方面的例子,運(yùn)行正確后在這個(gè)基礎(chǔ)上進(jìn)行修改。遇到的第一個(gè)困難就是,程序?qū)戇M(jìn)去了,但是沒有輸出。經(jīng)推斷,初步認(rèn)為是中斷只跳了一次,或者就沒有跳。最后,經(jīng)過查看技術(shù)手冊和一些例子自己沒有設(shè)置自動(dòng)重載模式。改后中斷正常。第二個(gè)就是輸出波形不正確,很明顯,是正弦數(shù)組不正確。于是自己又從網(wǎng)上找一個(gè)正確的,輸出正常。第二節(jié)電路調(diào)試在進(jìn)行電路調(diào)試過程中,我們利用手上已有資源,先在面包板上搭好電路,進(jìn)行測試完成之后,再進(jìn)行焊接。這樣不僅為焊接電路節(jié)省時(shí)間,也有效的保證電路的準(zhǔn)確性和有效性。同時(shí),在焊接電路的過程中,在保證電路功能的正常實(shí)現(xiàn)的前提下,注重電路的美觀性和電氣特性,使器件引腳盡量短、布線盡量整齊、勻稱,并使用排針和導(dǎo)線作為模塊間的連接,從而方便各部分模塊的測試及修改,有效的保證了電路設(shè)計(jì)的效率和效果。以下為各部分電路的調(diào)試步驟及解決方案。一、電源模塊調(diào)試由于在前面的學(xué)習(xí)中,我們進(jìn)行過7805穩(wěn)壓電源的設(shè)計(jì),本次課程設(shè)計(jì)電源模塊是最為順利的環(huán)節(jié)。調(diào)試步驟(1)在面包板上將電路按照電路設(shè)計(jì)部分中原理圖進(jìn)行搭接。(2)檢查電路連接是否正確。(3)上電檢測。12V電源是否輸入7805,檢測7805輸出是否為5V左右。(4)分析電路問題,修改電路重復(fù)步驟(3)。解決方案由于電源部分電路比較簡單、器件工作正常、電路連接未出現(xiàn)問題,本模塊并未出現(xiàn)任何故障。二、開關(guān)電容濾波器模塊調(diào)試在老師的提示下,針對(duì)MAX7400特殊的工作方式,我們采用了如電路原理圖所示的電路。本模塊測試中我們遇到了一些問題。調(diào)試步驟(1)在面包板上將電路按照電路設(shè)計(jì)部分中原理圖進(jìn)行搭接。(2)檢查電路連接是否正確。(3)上電檢測。檢測5V電源是否輸入MAX7400;檢測八階階梯信號(hào)是否輸入IN;檢測輸入IN信號(hào)直流分量是否為2.5V左右;檢測時(shí)鐘信號(hào)是否輸入CLK;檢測MAX7400輸出隔直前與隔直后是否正常。(4)分析電路問題,修改電路重復(fù)步驟(3)。解決方案(1)電路測試過程中,我們在第一次電路設(shè)計(jì)中對(duì)于OS端并未輸入2.5V,而是直接通過10u電容接地,信號(hào)并未正常輸出。由于MAX7400datasheet中OS端直接接地,我們并未找到電路出現(xiàn)問題。通過從網(wǎng)上咨詢以及和同學(xué)相互討論,我們嘗試著將OS端輸入2.5V,電路可以正常工作。(2)我們找到以下幾點(diǎn)MAX7400在使用過程中的注意事項(xiàng),也方便將來同學(xué)們在使用該器件時(shí)能夠正確使用。截止頻率范圍為1Hz–10kHz,時(shí)鐘與截止頻率比為100:1。輸出有+-5mV的失調(diào)電壓,所以不適用于要求高直流精度的場合。第6腳OS是失調(diào)電壓調(diào)整引腳,用途是電平搬移,不是失調(diào)調(diào)零。只能單電源供電,輸入只能為正電壓,不能為負(fù),當(dāng)輸入為負(fù)時(shí),輸出為零(實(shí)際為失調(diào)電壓5mV)。建議OS引腳始終接電阻網(wǎng)絡(luò),我們在實(shí)際應(yīng)用中發(fā)現(xiàn)這樣輸出噪聲比較小。5V供電的MAX7400不接受3.3V電平標(biāo)準(zhǔn)以下的時(shí)鐘輸入。三、四象限乘法器模塊調(diào)試本次實(shí)驗(yàn)四象限乘法器模塊部分是本次課程設(shè)計(jì)電路部分的亮點(diǎn),我們有效的利用開關(guān)對(duì)四象限乘法器模塊進(jìn)行了拓展,實(shí)現(xiàn)了二、四象限乘法器轉(zhuǎn)換,單、雙極性四象限乘法器轉(zhuǎn)換。調(diào)試步驟(1)在面包板上將電路按照電路設(shè)計(jì)部分中原理圖進(jìn)行搭接。(2)檢查電路連接是否正確。(3)上電檢測。檢測12V電壓是否接入;檢測運(yùn)算放大器正負(fù)電源是否都已接入;檢測MAX7400輸出正弦信號(hào)是否接入電路;檢測電路是否輸出正常;檢測二象限乘法器輸出是否正常;檢測單極性四象限乘法器是否輸出正常;檢測雙極性四象限乘法器是否輸出正常。(4)分析電路問題,修改電路重復(fù)步驟(3)。解決方案(1)模塊測試過程中,我們對(duì)電路進(jìn)行正常搭接、測試后發(fā)現(xiàn)輸出信號(hào)出現(xiàn)平頂失真和正弦信號(hào)正電壓正常,負(fù)電壓部分失真的問題。通過向老師咨詢及反復(fù)檢查電路,我們成功解決了這些問題。(2)針對(duì)平頂失真,我們發(fā)現(xiàn)是因?yàn)殡娢黄髡{(diào)節(jié)的問題,使電位器接入電路部分電阻與電路不匹配。我們通過調(diào)節(jié)電位器接入電路部分電阻,成功將平頂失真的問題解決。(3)正弦信號(hào)正電壓正常,負(fù)電壓部分失真。這個(gè)問題我們開始也很困擾,通過向老師咨詢和自己研究,我們嘗試對(duì)電路進(jìn)行改進(jìn),將FEBA相接的電阻短路,電容去掉。這樣的確解決了問題。后來我們對(duì)該部分電路又進(jìn)行仔細(xì)的修改,發(fā)現(xiàn)電阻和電容都可以維持原來的選擇,但是一定要保證電阻要在200歐姆左右,電容不能太大,我們選擇的電容是33p,datasheet中建議電容為10p-15p。這一點(diǎn)是一定要注意的,否則電路將不能正常實(shí)現(xiàn)我們要求的工作。四、負(fù)載驅(qū)動(dòng)及負(fù)載模塊調(diào)試負(fù)載驅(qū)動(dòng)模塊,我們使用了跟隨器的方法,提高輸出阻抗,使電路可以驅(qū)動(dòng)較小的負(fù)載。調(diào)試步驟(1)在面包板上將電路按照電路設(shè)計(jì)部分中原理圖進(jìn)行搭接。(2)檢查電路連接是否正確。(3)上電檢測。檢測運(yùn)算放大器正負(fù)電源是否都已接入;檢測TLC7528輸出正弦信號(hào)是否接入電路;檢測電路是否輸出正常;(4)分析電路問題,修改電路重復(fù)步驟(3)。解決方案由于本部分電路比較簡單,并未出現(xiàn)比較嚴(yán)重的問題。實(shí)驗(yàn)結(jié)果單片機(jī)數(shù)模轉(zhuǎn)換DAC0口輸出波形,如圖可知輸出波形為8級(jí)階梯波,峰峰值為2.34V。經(jīng)過濾波電路后輸出的波形,輸出波形呈標(biāo)準(zhǔn)的正弦形,頻率為1.005kHz,峰峰值為2.38V。P0.6口輸出的時(shí)鐘信號(hào),頻率為100.5kHz,為信號(hào)頻率的100倍,符合設(shè)計(jì)要求。經(jīng)過4象限放大器輸出的波形,經(jīng)過放大,幅度放大為11.4V。附加功能:方波調(diào)制、正弦波調(diào)制。\總結(jié)以上,我們的信號(hào)發(fā)生器能實(shí)現(xiàn)頻率可調(diào),幅度可控,并能通過4象限放大器實(shí)現(xiàn)信號(hào)的放大,符合技術(shù)要求。在附加實(shí)驗(yàn)部分我們實(shí)現(xiàn)了方波和正弦波的調(diào)制。實(shí)驗(yàn)數(shù)據(jù)及分析第一節(jié)數(shù)/模轉(zhuǎn)換MCUDAC輸出實(shí)驗(yàn)數(shù)據(jù)每周期樣點(diǎn)數(shù)電平范圍直流電平80-2.4V2.4V實(shí)驗(yàn)數(shù)據(jù)分析(1)由于要滿足信號(hào)發(fā)生器可以產(chǎn)生較高頻率的信號(hào),故采用每周期樣點(diǎn)數(shù)比較少的方法,這樣能夠保證定時(shí)器的賦初值可以保證足夠大。我們采用8點(diǎn)采樣,由于更少點(diǎn)采樣可能不會(huì)產(chǎn)生比較好的階梯波,故選擇該采樣方式。(2)由于DAC0的參考電平為2.4V,故輸出電平范圍為0-2.4V,中間電平為1.2V,有直流電平2.4V。由于MAX7400的特殊工作要求,必須要求有直流電平2.5V,所以將DAC0輸出信號(hào)進(jìn)行隔直后,并加一個(gè)2.5V的直流電平輸入到MAX7400中。低通濾波器輸出實(shí)驗(yàn)數(shù)據(jù)波形形狀電平范圍直流電平頻率可調(diào)范圍標(biāo)準(zhǔn)正弦波0-2.4V2.5V0.5Hz-2kHz實(shí)驗(yàn)數(shù)據(jù)分析經(jīng)過低通濾波器濾波之后,能夠?qū)崿F(xiàn)標(biāo)準(zhǔn)正弦波輸出,電平范圍為0-2.4V。經(jīng)過低通濾波器之后,會(huì)有2.5V的直流電平與正弦波疊加,為了避免后續(xù)放大過程中,直流電平被放大,從而燒毀器件,我們對(duì)低通濾波器輸出進(jìn)行了隔直處理,并對(duì)后續(xù)運(yùn)算放大器采用雙電源12V供電。從而保證最終的輸出不存在直流電平。低通濾波器部分同時(shí)通過程序控制可以實(shí)現(xiàn)頻率可控,我們經(jīng)過不斷實(shí)驗(yàn),最終頻率可調(diào)范圍可以達(dá)到0.5Hz-2kHz。但是在控制過程中,能夠保證在0-1.4kHz很好的控制,在1.5kHz-2kHz不是能夠特別好的控制,經(jīng)過分析,我們認(rèn)為是因?yàn)轭l率越高,定時(shí)器跳中斷就越頻繁,故可以根據(jù)各頻率對(duì)定時(shí)器計(jì)數(shù)初值進(jìn)行適當(dāng)補(bǔ)償,從而式該頻率范圍也能很好的得到控制。第三節(jié)低通濾波器時(shí)鐘信號(hào)實(shí)驗(yàn)數(shù)據(jù)電平波形形狀3.3V標(biāo)準(zhǔn)方波實(shí)驗(yàn)數(shù)據(jù)分析通過查找資料我們發(fā)現(xiàn)5V供電的MAX7400不接受3.3V電平標(biāo)準(zhǔn)以下的時(shí)鐘輸入,也就是說時(shí)鐘信號(hào)幅度不達(dá)到3.3V可能就不會(huì)產(chǎn)生正常的濾波效果。通過測試時(shí)鐘信號(hào),我們得到時(shí)鐘信號(hào)的幅度約為3.3V,這樣就可以保證MAX7400可以正常工作。第四節(jié)系統(tǒng)最終輸出信號(hào)實(shí)驗(yàn)數(shù)據(jù)波形形狀中間電平幅度控制范圍頻率范圍驅(qū)動(dòng)最小負(fù)載標(biāo)準(zhǔn)正弦波00-10V0.5Hz-2kHz200Ω(10V)實(shí)驗(yàn)數(shù)據(jù)分析通過不斷的實(shí)驗(yàn)我們使系統(tǒng)最終輸出信號(hào)可以實(shí)現(xiàn)0-10V的控制,并且,對(duì)于范圍內(nèi)的信號(hào)幅度都可以實(shí)現(xiàn)標(biāo)準(zhǔn)控制。(2)中間電平為0,保證系統(tǒng)最終輸出信號(hào)沒有直流分量。(3)負(fù)載驅(qū)動(dòng)模塊使用跟隨器的方法,在峰峰值10V條件下可以驅(qū)動(dòng)200Ω的電阻,跟老師要求的50Ω還有差距,我們認(rèn)為這是正常情況,因?yàn)樵诜宸逯?0V條件下,電流為25mA,已經(jīng)很大了。由于LM358,在15V的情況下其輸出電流的典型值為40mA,最小值為20mA而我們在使用LM358時(shí)使用12V供電,典型值約為32mA,最小值約16mA為由于器件間差距,在10V條件下驅(qū)動(dòng)200Ω屬于正常情況。實(shí)踐總結(jié)、心得在大三下學(xué)期這個(gè)重要的時(shí)期,我們基本掌握了學(xué)科要求的一些技能,學(xué)校開設(shè)這么一門課是十分關(guān)鍵的。讓我們在實(shí)踐中鞏固知識(shí),應(yīng)用知識(shí)真正做到“學(xué)以致用”。同時(shí)也在實(shí)踐中加深了對(duì)課本所學(xué)知識(shí)的認(rèn)識(shí),對(duì)將來走上工作崗位或者繼續(xù)學(xué)習(xí)都是十分重要的財(cái)富。這次的電子系統(tǒng)設(shè)計(jì),可謂“軟硬兼施”,既要求我們掌握C語言編程,單片機(jī)的使用,也要求我們能夠自行設(shè)計(jì)電路。這對(duì)我們是十分重要的,讓我們更加熟悉C語言的編程,也進(jìn)一步熟悉了單片機(jī)的使用,同時(shí)也鞏固了電子線路的基本知識(shí),熟悉了低通濾波器、四象限乘法器的使用方法,對(duì)我們掌握新知識(shí),鞏固學(xué)過的知識(shí),都是至關(guān)重要的。此外,我們的收獲是我要更好的去學(xué)習(xí)專業(yè)知識(shí)。在實(shí)踐中很多時(shí)候都需要用到學(xué)過的知識(shí),但是學(xué)習(xí)是永無止境的,只有在困難中找出解決的方法,長進(jìn)的才快。所以,我們所學(xué)的還遠(yuǎn)遠(yuǎn)不夠,更需要在實(shí)踐中發(fā)現(xiàn)新知識(shí),學(xué)習(xí)新知識(shí)。在實(shí)驗(yàn)中,我們也遇到了很多困難,如何把顯示在數(shù)碼管上的頻率跟輸出波形的頻率對(duì)應(yīng),我們在一次一次的實(shí)驗(yàn)中調(diào)節(jié)參數(shù),最后終于能夠比較好的將兩個(gè)頻率對(duì)應(yīng)起來。同樣在電路的設(shè)計(jì)及驗(yàn)證中,一個(gè)人接線難免會(huì)有疏漏,當(dāng)小組協(xié)作的時(shí)候,便能很快發(fā)現(xiàn)錯(cuò)誤,更快的解決問題。另一方面,這次的設(shè)計(jì)采用了小組合作的方式,在小組合作中更重要的是鍛煉自己的團(tuán)隊(duì)意識(shí),與別人合作的意識(shí),以及傾聽他人建議的意識(shí),和自己的溝通能力。這也是我們走出校園走上社會(huì)的必修課??傊@次的系統(tǒng)設(shè)計(jì)是十分必要的也是十分有意義的。它讓我們在實(shí)踐中應(yīng)用和鞏固了學(xué)過的知識(shí),也讓我們在實(shí)踐中鍛煉了團(tuán)隊(duì)意識(shí),溝通能力。最后感謝各位組員的努力和在實(shí)驗(yàn)過程中老師和其他同學(xué)對(duì)于我們的幫助,有了大家的努力和幫助我們才能夠更好的完成本次課程設(shè)計(jì)。附錄一源程序#include<c8051f020.h>#include<intrins.h>sfr16TMR3RL=0x92;sfr16TMR3=0x94;sfr16DAC0=0xD2;sbitP3_0=P3^0;sbitP3_1=P3^1;sbitP3_2=P3^2;sbitP3_3=P3^3;sbitP3_4=P3^4;sbitP3_5=P3^5;sbitP3_6=P3^6;sbitP3_7=P3^7;sbitP0_6=P0^6;unsignedcharcodenumber_tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//09數(shù)學(xué)共陽極unsignedcharcodeto_sin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7, 0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9, 0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8, 0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5, 0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7, 0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2, 0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c, 0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55, 0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15, 0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04, 0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, 0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e, 0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d, 0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};//正弦波數(shù)據(jù)unsignedintww=0,qw=0,bw=1,sw=0,gw=0,xsw=0;//ww為萬位數(shù)字,qw為千位數(shù)字,bw為百//位數(shù)字,sw為十位數(shù)字,gw為個(gè)位數(shù)字unsignedintt,tt,ttt,f,m;//t為時(shí)間變量,f為頻率變量,tt為定時(shí)器初始值unsignedintfudu=0;unsignedintAsw=0,Agw=0,Axsw=0,A=0;unsignedintth,tl;//定時(shí)器高位和低位unsignedcharii=0,kk=0;bitFA=1;bitAMflag=0;bitAM=0;//顯示為頻率時(shí)為1,顯示為幅度時(shí)為0/********子程序聲明***********************************/unsignedcharGetkey();voidkey1();voidkey2();voidkey3();voidkey4();voidkey5();voidkey6();voidkey7();voidkey8();voidkey9();voidkey10();voidkey11();voidkey12();voidkey13();voidkey14();voidkey15();voidkey16();voidcalculateF();voidcalculateA();voiddisplayF();voiddisplayA();voidDAC_Init(void);voidOSCILLATOR_Init(void);voidTimer2_Init();voidTimer2_ISR(void);voidTimer3_Init(unsignedintcounts);voidTimer3_ISR(void);voidLoop_Delay(unsignedintloop);voidDelay_nms(unsignedintn);voidio_config();voidio_init();intmain(){ EA=0; WDTCN=0xDE; WDTCN=0xAD;// XBR0=XBR0|0x04; //UART0:P0.0和P0.1 XBR2=XBR2|0x40; //enablecrossbar OSCILLATOR_Init(); io_config(); io_init();DAC_Init(); P0_6=0; EA=1;// ii=0; while(1) { if(Getkey()<=16) {switch(Getkey()) { case1:key1();FA=1;AMflag=0;break;//按下萬位鍵 case2:key2();FA=1;AMflag=0;break;//按下千位鍵 case3:key3();FA=1;AMflag=0;break;//按下百位鍵 case4:key4();FA=1;AMflag=0;break;//按下十位鍵 case5:key5();FA=1;AMflag=0;break;//按下個(gè)位鍵 case6:key6();FA=0;AMflag=0;break;// case7:key7();FA=0;AMflag=0;break;// case8:key8();FA=0;AMflag=0;break;// case9:key9();AMflag=1;break;//// case10:key10();break;//// case11:key11();break;//// case12:key12();break;//// case13:key13();break;//// case14:key14();break;//// case15:key15();break;//// case16:key16();break;//按下確定鍵} if((FA==1)&&(AMflag==0)) { calculateF(); ET2=0; } elseif((FA==0)&&(AMflag==0)) { calculateA(); ET2=0;} else { calculateF(); calculateA(); Timer2_Init();} } if(FA==1) { displayF(); } else { displayA();}}}/********************鍵盤掃描程序部分***********************************/unsignedcharGetkey()//鍵盤掃描程序,用于識(shí)別哪一個(gè)鍵按下,并返回鍵值{P3=0xff;P3_7=0;if(P3_3==0){Delay_nms(50); if(P3_3==0) return1;}if(P3_2==0){Delay_nms(50); if(P3_2==0) return2;}if(P3_1==0){Delay_nms(50); if(P3_1==0) return3;}if(P3_0==0){Delay_nms(50); if(P3_0==0) return4;}P3_7=1;P3_6=0;if(P3_3==0){Delay_nms(50); if(P3_3==0) return5;}if(P3_2==0){Delay_nms(50); if(P3_2==0) return6;}if(P3_1==0){Delay_nms(50); if(P3_1==0) return7;}if(P3_0==0){Delay_nms(50); if(P3_0==0) return8;}P3_6=1;P3_5=0;if(P3_3==0){Delay_nms(50); if(P3_3==0) return9;}if(P3_2==0){Delay_nms(50); if(P3_2==0) return10;}if(P3_1==0){Delay_nms(50); if(P3_1==0) return11;}if(P3_0==0){Delay_nms(50); if(P3_0==0) return12;}P3_5=1;P3_4=0;if(P3_3==0){Delay_nms(50); if(P3_3==0) return13;}if(P3_2==0){Delay_nms(50); if(P3_2==0) return14;}if(P3_1==0){Delay_nms(50); if(P3_1==0) return15;}if(P3_0==0){Delay_nms(50); if(P3_0==0) return16;}P3_4=1;return17;}/*********************鍵盤控制程序部分F部分*********************************/voidkey1()//控制萬位{if(ww<9&&ww>=0) ww++;else ww=0;}voidkey2()//控制千位{if(qw<9&&qw>=0) qw++;else qw=0;}voidkey3()//控制百位{if(bw<9&&bw>=0) bw++;else bw=0;}voidkey4()//控制十位{if(sw<9&&sw>=0) sw++;else sw=0;}voidkey5()//控制個(gè)位{if(gw<9&&gw>=0) gw++;else gw=0;}/*****************************鍵盤控制A部分**************************/voidkey6()//控制十位{if(Asw<2&&Asw>=0) Asw++;else Asw=0;}voidkey7()//控制個(gè)位{if(Asw!=2) {if(Agw<9&&Agw>=0) Agw++;else Agw=0;} else { if(Agw<5&&Agw>=0) Agw++;else Agw=0;}}voidkey8()//控制0.1位{if(Asw==2&&Agw==5) { Axsw=0; } else {if(Axsw<9&&Axsw>=0) Axsw++;else Axsw=0;}}/*******************************************************************************/voidkey9()//調(diào)幅輸出,載頻1000HZ,信號(hào)為方波。{qw=1; bw=0; sw=0; gw=0; Asw=0; Agw=5; Axsw=0;}/*********************LED顯示程序F部分**********************************/voiddisplayF(){P2=0x20; P1=0x8e; Loop_Delay(1);P2=0x10; P1=number_tab[ww];Loop_Delay(1); P2=0x08;P1=number_tab[qw]; Loop_Delay(1); P2=0x04; P1=number_tab[bw]; Loop_Delay(1); P2=0x02; P1=number_tab[sw]; Loop_Delay(1); P2=0x01; P1=number_tab[gw]; Loop_Delay(1);}/*****************************LED顯示程序A部分******************************/voiddisplayA(){P2=0x20; P1=0x88; Loop_Delay(1);P2=0x10; P1=0xff;Loop_Delay(1); P2=0x08; P1=0xff; Loop_Delay(1); P2=0x04; P1=number_tab[Asw]; Loop_Delay(1); P2=0x02; P1=number_tab[Agw]&0x7f; Loop_Delay(1); P2=0x01; P1=number_tab[Axsw]; Loop_Delay(1);}/***************計(jì)算定時(shí)器初值程序部分*****************************/voidcalculateF(){f=1000*qw+100*bw+sw*10+gw;// tt=65536-(28800/f); tt=65536-(300000/(f*30));// if(Getkey()==16)//如果確定鍵按下,通過改變計(jì)數(shù)器初值,從而改變輸出信號(hào)頻率 Timer3_Init(tt);//else //Timer3_Init(65507);// Timer3_Init(65190);}/***************計(jì)算幅度A程序部分*****************************/voidcalculateA(){A=10*Asw+Agw+0.1*Axsw; A=A*10; P7=A*2;}/******************延時(shí)子程序部分**********************************/void

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

提交評(píng)論