版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計</b></p><p> 題目:簡易數(shù)字信號發(fā)生器</p><p><b> 學(xué)院:電子工程學(xué)院</b></p><p> 專業(yè):光電信息科學(xué)與工程</p><p><b> 班級: </b></p><p&g
2、t;<b> 課程設(shè)計要求</b></p><p> 以msp430單片機為核心,通過一個DA(數(shù)字模擬)轉(zhuǎn)換芯片,將單片機輸出的方波、三角波、正弦波(數(shù)字信號)轉(zhuǎn)換為模擬信號輸出。提供芯片:msp430G2553/msp430f5529、DAC0832、REF102、LM384、OP07。</p><p><b> 1.基本要求</b>&
3、lt;/p><p> ?。?)供電電壓 VDD= 5V~12V;</p><p> ?。?)信號頻率:5~500Hz(可調(diào));</p><p> ?。?)輸出信號電壓可調(diào)范圍:≥0.5*VDD,直流偏移可調(diào):≥0.5*VDD; </p><p> ?。?)完成輸出信號切換;</p><p> ?。?)方波占空比:平滑可調(diào)2
4、0%~80%;</p><p> ?。?)通帶內(nèi)正弦波峰峰值穩(wěn)定度誤差:≤±10%(負載1K);</p><p> ?。?)提交設(shè)計報告。</p><p><b> 2.發(fā)揮部分</b></p><p> 信號頻率:5~2000Hz(可調(diào));</p><p> 多通道同時輸出同頻正
5、弦波,方波,三角波。(頻率可調(diào));</p><p> 輸出頻率與幅度可調(diào)的正弦波與余弦波,相位誤差≤±5度;</p><p><b> 自由發(fā)揮。</b></p><p><b> 系統(tǒng)硬件和軟件框圖</b></p><p><b> 系統(tǒng)硬件框圖</b>&l
6、t;/p><p><b> 圖1 系統(tǒng)硬件框圖</b></p><p><b> 軟件框圖</b></p><p><b> 圖2 系統(tǒng)軟件框圖</b></p><p> 各函數(shù)的作用和相互關(guān)系:</p><p> 在主函數(shù)中首先對系統(tǒng)的時鐘、I/
7、O口、定時器進行了初始化。初始化完畢,開啟總中斷。接著進入循環(huán)等待定時器中斷子程序的執(zhí)行。按鍵中斷函數(shù)主要對三個菜單按鍵的動作進行處理。這三個菜單按鍵可以實現(xiàn)波形的切換,頻率的加減,信號的使能輸出。在按鍵中斷函數(shù)中修改的信號頻率大小和波形的種類這兩個參數(shù)會被主函數(shù)和定時器中斷函數(shù)調(diào)用。</p><p><b> 硬件系統(tǒng)設(shè)計</b></p><p><b>
8、; 方案論證與選擇</b></p><p><b> 方案一:</b></p><p> 利用DAC0832的11號管腳做為信號輸出端,8號管腳輸入基準(zhǔn)電壓,將其輸出的電流信號再轉(zhuǎn)換為電壓信號進行檢測調(diào)試。</p><p><b> 方案二:</b></p><p> 利用DA
9、C0832的8號管腳做為信號輸出端,11號管腳輸入基準(zhǔn)電壓,其輸出直接為電壓信號,可以直接利用示波器進行檢測調(diào)試。</p><p> 綜上,方案二省去了電流信號轉(zhuǎn)電壓信號的過程,實行起來更加簡便。所以最終采用方案二。</p><p> 2、硬件電路系統(tǒng)設(shè)計</p><p> 系統(tǒng)主控部分采用MSP430G2452 LaunchPad開發(fā)板;外圍電路主要包括DA
10、C模塊、放大電路、電源及按鍵模塊。</p><p> ?。?)DAC模塊:DAC模塊采用的是DAC0832。 DAC0832 是8分辨率的D/A轉(zhuǎn)換集成芯片。與微處理器完全兼容。這個DA芯片以其價格低廉、接口簡單、轉(zhuǎn)換控制容易等優(yōu)點,在單片機應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。其主要特性如下:</p><p><b> * 分辨率為8位;</b></p><
11、;p> * 電流穩(wěn)定時間1us;</p><p> * 可單緩沖、雙緩沖或直接數(shù)字輸入;</p><p> * 只需在滿量程下調(diào)整其線性度;</p><p> * 單一電源供電(+5V~+15V);</p><p> * 低功耗,20mW</p><p><b> 其引腳功能如下:</
12、b></p><p> * D0~D7:8位數(shù)據(jù)輸入線,TTL電平,有效時間應(yīng)大于90ns(否則鎖存器的數(shù)據(jù)會出錯);</p><p> * ILE:數(shù)據(jù)鎖存允許控制信號輸入線,高電平有效;</p><p> * CS:片選信號輸入線(選通數(shù)據(jù)鎖存器),低電平有效;</p><p> * WR1:數(shù)據(jù)鎖存器寫選通輸入線,負脈沖(
13、脈寬應(yīng)大于500ns)有效。由ILE、CS、WR1的邏輯組合產(chǎn)生LE1,當(dāng)LE1為高電平時,數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線變換,LE1的負跳變時將輸入數(shù)據(jù)鎖存;</p><p> * XFER:數(shù)據(jù)傳輸控制信號輸入線,低電平有效,負脈沖(脈寬應(yīng)大于500ns)有效;</p><p> * WR2:DAC寄存器選通輸入線,負脈沖(脈寬應(yīng)大于500ns)有效。由WR2、XFER的邏輯組合產(chǎn)生L
14、E2,當(dāng)LE2為高電平時,DAC寄存器的輸出隨寄存器的輸入而變化,LE2的負跳變時將數(shù)據(jù)鎖存器的內(nèi)容打入DAC寄存器并開始D/A轉(zhuǎn)換。</p><p> * IOUT1:電流輸出端1,其值隨DAC寄存器的內(nèi)容線性變化;</p><p> * IOUT2:電流輸出端2,其值與IOUT1值之和為一常數(shù);</p><p> * Rfb:反饋信號輸入線,改變Rfb端外
15、接電阻值可調(diào)整轉(zhuǎn)換滿量程精度;</p><p> * Vcc:電源輸入端,Vcc的范圍為+5V~+15V;</p><p> * VREF:基準(zhǔn)電壓輸入線,VREF的范圍為-10V~+10V;</p><p> * AGND:模擬信號地;</p><p> * DGND:數(shù)字信號地。</p><p> DAC
16、電路原理圖如下:</p><p> ?。?)放大模塊:放大電路模塊只要采用的是LM358運算放大器。LM358內(nèi)部包括有兩個獨立的、高增益、內(nèi)部頻率補償?shù)碾p運算放大器,適合于電源電壓范圍很寬的單電源使用,也適用于雙電源工作模式。</p><p><b> 其主要特性如下:</b></p><p> * 內(nèi)部頻率補償 </p>
17、<p> * 直流電壓增益高(約100dB) </p><p> * 單位增益頻帶寬(約1MHz) </p><p> * 源電壓范圍寬:單電源(3—30V); 雙電源(±1.5一±15V) </p><p> * 低功耗電流,適合于電池供電;低輸入偏流 </p><p> * 低輸入失調(diào)電壓和
18、失調(diào)電流 </p><p> * 共模輸入電壓范圍寬,包括接地 </p><p> * 差模輸入電壓范圍寬,等于電源電壓范圍 </p><p> 我們采用的是單電源同相放大。同時為了給信號加入偏置電壓,采用了加法器的設(shè)計。</p><p> LM358引腳圖及引腳功能如圖所示。</p><p> 放大電
19、路原理圖如下:</p><p> ?。?)電源模塊:實驗中用到的電壓主要有12V,5V,3.5V</p><p> ?、?2V:12V電壓主要是給DAC0832,REF102以及LM358提供工作電壓,其來源是由穩(wěn)壓電源直接產(chǎn)生的。</p><p> ②5V:5V電壓主要是做為基準(zhǔn)電壓源,其產(chǎn)生來源是REF102與運放OP07搭建產(chǎn)生的。</p>&
20、lt;p><b> 其電路圖如圖所示</b></p><p> ?、?.5V:其作用主要是給DAC0832的19管腳置于高電平。其來源是msp430G2553的VCC管腳產(chǎn)生的。</p><p><b> 總電路原理圖</b></p><p><b> 4、焊接的萬能板</b></p
21、><p><b> 軟件系統(tǒng)設(shè)計</b></p><p><b> 1、程序主流程</b></p><p> 如圖8所示為程序主流程圖:</p><p><b> 2、程序設(shè)計</b></p><p> 系統(tǒng)程序主要分為以下幾個模塊:初始化程序、主
22、程序、輸出程序和中斷函數(shù)。</p><p><b> 2.1初始化程序</b></p><p> 初始化程序主要完成的引腳的配置</p><p> void IO_init(void)</p><p><b> {</b></p><p> P1DIR=0xf0;&
23、lt;/p><p> P1REN |=BIT1+BIT2+BIT3;</p><p> P1IE |=0x0E;</p><p> P1IES|=0x0E;</p><p> P2DIR=0x0f; //P2的低四位作為輸出</p><p><b> }</b></p>&
24、lt;p><b> 2.2主程序</b></p><p> 主程序要負責(zé)總體程序管理功能以及AD使能。</p><p> int main(void)</p><p><b> {</b></p><p> // Stop watchdog timer to prevent time
25、 out reset</p><p> WDTCTL = WDTPW + WDTHOLD;</p><p> IO_init();</p><p> DCO_init();</p><p> ADC_init();</p><p> _enable_interrupts();</p><p
26、> Timer_A0_init();</p><p><b> while(1)</b></p><p><b> {</b></p><p> ADC10CTL0 |= ENC + ADC10SC;</p><p><b> }</b></p>
27、<p> //return 0;</p><p><b> }</b></p><p> 2.3 按鍵中斷程序</p><p> 主要完成按鍵的讀取,以及相應(yīng)的輸出量賦值。</p><p> #pragma vector = PORT1_VECTOR</p><p> __i
28、nterrupt void PORT1_ISR(void)</p><p><b> {</b></p><p> //-----啟用Port1事件檢測函數(shù)-----</p><p> P1_IODect();//檢測通過,則會調(diào)用事件處理函數(shù)</p><p> P1IFG=0;
29、 //退出中斷前必須手動清除IO口中斷標(biāo)志</p><p><b> }</b></p><p> void P1_IODect(void)</p><p><b> {</b></p><p> unsigned int Push_Key=0;&l
30、t;/p><p> //-----排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標(biāo)志位-----</p><p> Push_Key=P1IFG&(~P1DIR);</p><p> //-----延時一段時間,避開機械抖動區(qū)域-----</p><p> __delay_cycles(10000);//消抖延時<
31、/p><p> //----判斷按鍵狀態(tài)是否與延時前一致-----</p><p> if((P1IN&Push_Key)==0) //如果該次按鍵確實有效</p><p><b> {</b></p><p> //----判斷具體哪個IO被按下,調(diào)用該IO的事件處理函數(shù)
32、-----</p><p> switch(Push_Key){</p><p> // case BIT0:P10_Onclick();break;</p><p> case BIT1:</p><p><b> {</b></p><p> WaveSelect+=5;&l
33、t;/p><p><b> tt=1;</b></p><p> switch(WaveSelect)</p><p><b> {</b></p><p> case 5: break;</p><p> case 10: break;</p>&
34、lt;p> case 15: break;</p><p> // case 20: break;</p><p> default: WaveSelect=5;break;</p><p><b> }</b></p><p> };break;</p><p> ca
35、se BIT2:</p><p><b> {</b></p><p><b> if(tt==1)</b></p><p><b> {</b></p><p> num=num+1;</p><p> Tccr0=keynum[num];&
36、lt;/p><p><b> }</b></p><p> if(num==100)num=1;</p><p><b> }break;</b></p><p> case BIT3:</p><p><b> {</b></p>
37、<p><b> if(tt==1)</b></p><p><b> {</b></p><p> num=num-1;</p><p> Tccr0=keynum[num];</p><p><b> }</b></p><p&g
38、t; if(num==0)num=99;</p><p><b> }</b></p><p><b> break;</b></p><p> default:break;//任何情況下均加上default</p><p><b> }</b>
39、</p><p><b> }</b></p><p><b> }</b></p><p><b> 2.4輸出程序</b></p><p> 使用TimerA0計數(shù)器進行輸出使能</p><p> #pragma vector =TIMER
40、0_A0_VECTOR</p><p> __interrupt void Timer_A0(void) //CCIFG中斷被響應(yīng)后,該標(biāo)志位自動清零</p><p><b> {</b></p><p> if(WaveSelect==5)</p><p><b&
41、gt; {</b></p><p><b> if(j<200)</b></p><p><b> {</b></p><p> write_dac(sindata[j]) ; //正弦波產(chǎn)生</p><p><b> //j
42、++;</b></p><p><b> j+=4;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> j=0;</b></p><p> TA
43、0CCR0 =Tccr0;</p><p><b> }</b></p><p> if(WaveSelect==10)</p><p><b> {</b></p><p> if(ttcout==0)</p><p><b> {</b>&
44、lt;/p><p> if(tcoutm<200)</p><p><b> {</b></p><p> write_dac(tcoutm) ; //三角波產(chǎn)生上升段</p><p> tcoutm = tcoutm+8;</p><p><b&
45、gt; }</b></p><p><b> else</b></p><p><b> ttcout=1;</b></p><p> TA0CCR0 =Tccr0;</p><p><b> }</b></p><p> if(
46、ttcout==1)</p><p><b> {</b></p><p> if(tcoutm>0)</p><p><b> {</b></p><p> write_dac(tcoutm) ; //三角波產(chǎn)生下降段</p><p
47、> tcoutm = tcoutm-8;</p><p><b> }</b></p><p><b> else</b></p><p><b> ttcout=0;</b></p><p> TA0CCR0 =Tccr0;</p><p&
48、gt;<b> }</b></p><p><b> }</b></p><p> if(WaveSelect==15)</p><p><b> {</b></p><p> if(ttcout==0)</p><p><b>
49、{</b></p><p> if(tcoutn<h_time)</p><p><b> {</b></p><p> write_dac(high) ; //方波產(chǎn)生上升段</p><p> tcoutn+=4;</p><p>&
50、lt;b> }</b></p><p><b> else</b></p><p><b> ttcout=1;</b></p><p> TA0CCR0 =Tccr0;</p><p><b> }</b></p><p>
51、 if(ttcout==1)</p><p><b> {</b></p><p> if(tcoutn<200)</p><p><b> {</b></p><p> write_dac(low) ; //方波產(chǎn)生下降段</p>&
52、lt;p> tcoutn+=4;</p><p><b> }</b></p><p><b> else</b></p><p><b> tcoutn=0;</b></p><p><b> ttcout=0;</b></p>
53、;<p> TA0CCR0 =Tccr0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 3、各模塊之間關(guān)系</b></p>
54、<p><b> 實現(xiàn)功能說明</b></p><p><b> 1、實現(xiàn)的基本要求</b></p><p> (1)供電電壓 VDD= 5V~12V;</p><p> (2)信號頻率:5~500Hz(可調(diào));</p><p> ?。?)輸出信號電壓可調(diào)范圍:≥0.5*VDD,
55、直流偏移可調(diào):≥0.5*VDD; </p><p> ?。?)完成輸出信號切換;</p><p> ?。?)方波占空比:平滑可調(diào)20%~80%;</p><p> ?。?)通帶內(nèi)正弦波峰峰值穩(wěn)定度誤差:≤±10%(負載1K);</p><p><b> 2、實現(xiàn)的提高要求</b></p><
56、;p> 信號頻率:5~2000Hz(可調(diào));</p><p> 自由發(fā)揮,實現(xiàn)了頻率的平滑可調(diào)。</p><p><b> 程序調(diào)試與運行結(jié)果</b></p><p><b> 1、切換波形</b></p><p> 產(chǎn)生的正弦波,三角波,方波,鋸齒波。如圖:</p>
57、<p><b> 2、頻率范圍可調(diào)</b></p><p> 輸出頻率范圍5~2000Hz可調(diào)。如圖:</p><p> 3、輸出信號范圍與直流偏置可調(diào)范圍</p><p> 輸出信號電壓可調(diào)范圍:> 0.5Vdd</p><p> 直流偏移可調(diào):> 0.5Vdd</p>&
58、lt;p><b> 4、方波占空比可調(diào)</b></p><p> 平滑可調(diào)20%~80%</p><p><b> 故障及問題分析</b></p><p> 1、程序燒制后,將單片機連接到電路中后,波形不穩(wěn)定,只有當(dāng)按住P 1.3鍵時,波形才會穩(wěn)定。</p><p> 解決方法:經(jīng)過
59、幾次的不斷程序調(diào)試后,問題一直存在。后來我們單獨搭了個外設(shè)按鍵來代替P 1.3按鍵,發(fā)現(xiàn)是因為單片機的P 1.3按鍵出了故障,從而導(dǎo)致波形無法穩(wěn)定。</p><p> 2、正弦波頻率無法達到500 Hz以上。</p><p> 解決方法:經(jīng)過查詢各種資料以及不斷的學(xué)習(xí),發(fā)現(xiàn)是我們在程序中所取的采樣點過多,從而導(dǎo)致波形頻率無法繼續(xù)上升。從而通過減少采樣點的個數(shù),使得最后波形頻率達到了20
60、00 Hz。</p><p> 3、給波形添加直流偏置時遇到的阻礙。</p><p> 解決方法:為了給正弦波添加直流偏置我們采用了加法器。但對于負載電阻的選取遇到了一定的麻煩。若電阻過小,會導(dǎo)致直流偏置改變非常小,要想達到預(yù)想的直流偏置大小,只能加入非常大的電壓,這對電路是非常不利的。若負載電阻過大,雖然能滿足直流偏置的要求,但電路的放大倍數(shù)會非常小,甚至?xí)?dǎo)致波形反而縮小。所以通過
61、我們不斷的調(diào)試,最后發(fā)現(xiàn)當(dāng)負載電阻為33K時不僅滿足波形的放大,也滿足直流偏置的要求。</p><p> 本次課程設(shè)計中的創(chuàng)新點</p><p> 本次課程設(shè)計我們采用了全新的電路設(shè)計,利用了DAC0832直接輸出電壓值,省去了將電流轉(zhuǎn)換為電壓的步驟,不僅電路更加簡便,波形輸出也更加穩(wěn)定。在電路的焊接,調(diào)試上也更加簡單。</p><p> 也是在老師的鼓勵下,
62、使我們的電路從一開始的設(shè)計上就獨辟蹊徑,在后續(xù)的實驗中也順利地能完成此次課程設(shè)計。</p><p><b> 總結(jié)與反思</b></p><p> 此次課程設(shè)計綜合了我們在大學(xué)本科學(xué)習(xí)到的很多知識,包括微機原理與接口技術(shù),程序設(shè)計語言,模擬電子電路,數(shù)字電子電路等,不僅是對大學(xué)知識的綜合考驗,也是對于大學(xué)本科所學(xué)知識的一次深層次運用,加強了我們對于知識更加系統(tǒng),更
63、加深入的理解與運用。</p><p> 在對于電路的設(shè)計方面,也是考驗和鍛煉我們?nèi)W(xué)會怎么閱讀器件的說明手冊,怎么從中去篩選我們所需的重要信息。也使得我們更加具備了專業(yè)所需的基礎(chǔ)本領(lǐng)。在電路的焊接方面,也是對于焊接技術(shù)的再次鍛煉。</p><p> 通過此次課程設(shè)計,收獲頗多,無論是對于學(xué)習(xí)還是對于生活都是一次收獲。對于電路的分模塊調(diào)試,分模塊焊接;對于代碼的不斷調(diào)試修改,電路的不斷改
64、進,都是我們從中得到的進步與收獲。</p><p> 但此次課程設(shè)計仍舊存在一些遺憾,比如我們沒有完成波形的三路同時輸出。我們也將繼續(xù)反思,繼續(xù)學(xué)習(xí)。</p><p> 同時也感謝老師在整個過程中對于我們的支持和鼓勵,使我們順利地完成了此次課程設(shè)計。</p><p><b> 附源代碼:</b></p><p>&
65、lt;b> /*</b></p><p><b> * main.c</b></p><p><b> */</b></p><p> #include <msp430g2553.h></p><p> #include <in430.h><
66、/p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> #define ulong unsigned long</p><p> #define SID BIT4</p><p> #define SCLK
67、BIT3</p><p> //#define CS BIT5</p><p> //#define CS_SET P2OUT|=BIT4</p><p> //#define CS_CLC P2OUT&=~BIT4</p><p> //#define WR_SET P2OUT|=BIT5</p><
68、p> //#define WR_CLC P2OUT&=~BIT5</p><p><b> uint i=0;</b></p><p><b> uint k=0;</b></p><p><b> uint j=0;</b></p><p> uint
69、 tt=0;</p><p> uint Tccr0=160; //待定</p><p> uint data0;</p><p> uchar tcout=0;</p><p> uchar tcoutm=0;</p><p> uchar tcoutn=0;</p><p>
70、 uchar high=255;</p><p> uchar low=0;</p><p> uint ttcout=0;</p><p> uint num=89;</p><p> uint data=0;</p><p> uint h_time=100;</p><p>
71、//uint h_fre=167;</p><p> uint WaveSelect=5;</p><p> ulong a=0;</p><p> uint keynum[100]={</p><p> 50000,16000,8000,5333,4000,3200,2667,2286,2000,1778,1600,1455<
72、/p><p> ,1333,1231,1143,1067,1000,889,842,800,762,727,696,667</p><p> ,640,615,593,571,552,516,500,485,471,457,432,421</p><p> ,410,400,390,381,372,364,356,348,340,333,327,320,314,3
73、08</p><p> ,302,296,291,281,276,271,267,262,258,254,250,246,242</p><p> ,239,235,232,229,225,222,219,216,213,211,208,203,200</p><p> ,198,195,193,190,188,186,182,180,178,176,172,
74、170</p><p> ,168,167,165,163,162,155,150,145,134,130,126,115};</p><p><b> //延時程序</b></p><p> #define CPU_F ((double)16000000)</p><p> #define delay_us(x
75、) __delay_cycles((long)(CPU_F*(double)x/1000000.0))</p><p> #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))</p><p> //static unsigned char temp=0xaa; //定時
76、器</p><p> uchar sindata[64]={71.18,77.29,83.29,89.11,94.70,100.00,104.97,109.55,113.70,</p><p> 117.38,120.56,123.20,125.29,126.79,127.70,128.00,127.70,126.79,125.29,123.20,</p><p&g
77、t; 120.56,117.38,113.70,109.55,104.97,100.00,94.70,89.11,83.29,77.29,71.18,65.00,</p><p> 58.82,52.71,46.71,40.89,35.30,30.00,25.03,20.45,16.30,12.62,9.44,6.80,4.71,3.21,</p><p> 2.30,2.00,2.
78、30,3.21,4.71,6.80,9.44,12.62,16.30,20.45,25.03,30.00,35.30,40.89,46.71,52.71,58.82,65.00};</p><p> /*{66.98,68.96,70.93,72.90,74.86,76.81,78.74,80.67,82.58,84.47,86.34,88.19,</p><p> 90.02,91.
79、82,93.60,95.35,97.07,98.76,100.41,102.03,103.61,105.16,106.66,108.13,109.55,</p><p> 110.93,112.26,113.54,114.78,115.97,117.11,118.19,119.23,120.21,121.13,122.00,122.82,123.58,</p><p> 124.28,
80、124.92,125.50,126.02,126.48,126.88,127.22,127.50,127.72,127.88,127.97,128.00,127.97,</p><p> 127.88,127.72,127.50,127.22,126.88,126.48,126.02,125.50,124.92,124.28,123.58,122.82,122.00,</p><p>
81、 121.13,120.21,119.23,118.19,117.11,115.97,114.78,113.54,112.26,110.93,109.55,108.13,106.66,</p><p> 105.16,103.61,102.03,100.41,98.76,97.07,95.35,93.60,91.82,90.02,88.19,86.34,84.47,82.58,</p><p
82、> 80.67,78.74,76.81,74.86,72.90,70.93,68.96,66.98,65.00,63.02,61.04,59.07,57.10,55.14,53.19,</p><p> 51.26,49.33,47.42,45.53,43.66,41.81,39.98,38.18,36.40,34.65,32.93,31.24,29.59,27.97,26.39,24.84,</
83、p><p> 23.34,21.87,20.45,19.07,17.74,16.46,15.22,14.03,12.89,11.81,10.77,9.79,8.87,8.00,7.18,6.42,5.72,</p><p> 5.08,4.50,3.98,3.52,3.12,2.78,2.50,2.28,2.12,2.03,2.00,2.03,2.12,2.28,2.50,2.78,3.1
84、2,3.52,3.98,</p><p> 4.50,5.08,5.72,6.42,7.18,8.00,8.87,9.79,10.77,11.81,12.89,14.03,15.22,16.46,17.74,19.07,20.45,21.87,</p><p> 23.34,24.84,26.39,27.97,29.59,31.24,32.93,34.65,36.40,38.18,39
85、.98,41.81,43.66,45.53,47.42,</p><p> 49.33,51.26,53.19,55.14,57.10,59.07,61.04,63.02,65.00</p><p><b> };*/</b></p><p> uchar count[200]={</p><p> 0x00,0
86、x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,</p><p> 0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x2
87、8,</p><p> 0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,</p><p> 0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x
88、4b,0x4c,0x4d,0x4e,0x4f,0x50,</p><p> 0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,</p><p> 0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0
89、x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,</p><p> 0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,</p><p> 0x8d,0x8e,0x8f,0x90,
90、0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,0xa0,</p><p> 0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,</p><p
91、> 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,</p><p><b> };</b></p><p> void P1_IODect(void);</p><p> /*******
92、*********************************************/</p><p><b> //IO初始化</b></p><p> /****************************************************/</p><p> void IO_init(void)</p&
93、gt;<p><b> {</b></p><p> P1DIR=0xf0;</p><p> P1REN |=BIT1+BIT2+BIT3;</p><p> P1IE |=0x0E;</p><p> P1IES|=0x0E;</p><p> P2DIR=0x0f;
94、 //P2的低四位作為輸出</p><p><b> }</b></p><p> /****************************************************/</p><p><b> //時鐘初始化</b></p><p> /************
95、****************************************/</p><p> void DCO_init(void)</p><p><b> {</b></p><p> BCSCTL1 = CALBC1_16MHZ; //設(shè)定cpu時鐘DCO頻率為16MHz</p><p> DCO
96、CTL = CALDCO_16MHZ;</p><p> BCSCTL2|=SELM_1+DIVM_0; //SMCLK選擇16MHz,不分頻</p><p> BCSCTL2&=~SELS;</p><p><b> }</b></p><p> /*************************
97、***************************/</p><p><b> //ADC初始化</b></p><p> /****************************************************/</p><p> void ADC_init(void)</p><p>&l
98、t;b> {</b></p><p> /*ADC10CTL0=ADC10SHT_2 + ADC10ON + ADC10IE;</p><p> ADC10CTL1=INCH_0; //通道2</p><p> ADC10CTL0 |=ENC; //使能*/</p>
99、<p> ADC10CTL0&=~ENC;</p><p> ADC10CTL0 |= ADC10ON +ADC10SHT_0 + SREF_0 +ADC10IE;</p><p> ADC10CTL1 |= INCH_0+CONSEQ_0;</p><p> ADC10AE0|=0x00;</p><p> /
100、/ADC10CTL0 |= ENC + ADC10SC;</p><p><b> _EINT();</b></p><p><b> }</b></p><p> /****************************************************/</p><p>&
101、lt;b> //定時器A初始化</b></p><p> /****************************************************/</p><p> void Timer_A0_init(void)</p><p><b> {</b></p><p> T
102、A0CTL|=TASSEL_2+MC_1; //TA時鐘源選擇SMCLK,連續(xù)增計數(shù)模式</p><p> TA0CCR0=167;</p><p> TA0CCTL0|=CCIE; //打開 比較模塊0中斷</p><p><b>
103、; _EINT();</b></p><p><b> }</b></p><p> /****************************************************/</p><p> //ADC中斷服務(wù)程序</p><p> /*********************
104、*******************************/</p><p> #pragma vector=ADC10_VECTOR</p><p> __interrupt void ADC10(void)</p><p><b> {</b></p><p> data0=ADC10MEM;
105、 //獲取外部輸入的電壓</p><p><b> /*</b></p><p> if(100<data0<600)</p><p><b> {</b></p><p> data=(uint)(data0/2-5
106、0);</p><p> h_time=180-data;</p><p><b> }*/</b></p><p> h_time=data0*15/128+40;</p><p> //TA0CCR0=data0*45+115;</p><p><b> }</b&g
107、t;</p><p> /****************************************************/</p><p><b> //輸出程序</b></p><p> /****************************************************/</p><
108、p> void write_dac(uchar da)</p><p><b> {</b></p><p> P1OUT=da; //P1P2組合輸出</p><p><b> P2OUT=da;</b></p><p> delay_us(1);</
109、p><p><b> }</b></p><p> /****************************************************/</p><p> //定時器中斷服務(wù)程序</p><p> /***********************************************
110、*****/</p><p> #pragma vector =TIMER0_A0_VECTOR</p><p> __interrupt void Timer_A0(void) //CCIFG中斷被響應(yīng)后,該標(biāo)志位自動清零</p><p><b> {</b></p><p
111、> if(WaveSelect==5)</p><p><b> {</b></p><p><b> if(j<64)</b></p><p><b> {</b></p><p> write_dac(sindata[j]) ;
112、 //正弦波產(chǎn)生</p><p><b> j++;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> j=0;</b></p><p> TA
113、0CCR0 =Tccr0;</p><p><b> }</b></p><p> if(WaveSelect==10)</p><p><b> {</b></p><p> if(ttcout==0)</p><p><b> {</b>&
114、lt;/p><p> if(tcoutm<200)</p><p><b> {</b></p><p> write_dac(tcoutm) ; //三角波產(chǎn)生上升段</p><p> tcoutm = tcoutm+2;</p><p><b&
115、gt; }</b></p><p><b> else</b></p><p><b> ttcout=1;</b></p><p> TA0CCR0 =Tccr0;</p><p><b> }</b></p><p> if(
116、ttcout==1)</p><p><b> {</b></p><p> if(tcoutm>0)</p><p><b> {</b></p><p> write_dac(tcoutm) ; //三角波產(chǎn)生下降段</p><p
117、> tcoutm = tcoutm-2;</p><p><b> }</b></p><p><b> else</b></p><p><b> ttcout=0;</b></p><p> TA0CCR0 =Tccr0;</p><p&
118、gt;<b> }</b></p><p><b> }</b></p><p> if(WaveSelect==15)</p><p><b> {</b></p><p> if(ttcout==0)</p><p><b>
119、{</b></p><p> if(tcoutn<h_time)</p><p><b> {</b></p><p> write_dac(high) ; //方波產(chǎn)生上升段</p><p><b> tcoutn++;</b><
120、/p><p><b> }</b></p><p><b> else</b></p><p><b> ttcout=1;</b></p><p> TA0CCR0 =Tccr0;</p><p><b> }</b><
121、;/p><p> if(ttcout==1)</p><p><b> {</b></p><p> if(tcoutn<200)</p><p><b> {</b></p><p> write_dac(low) ; //方波
122、產(chǎn)生下降段</p><p><b> tcoutn++;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> tcoutn=0;</b></p><p><
123、;b> ttcout=0;</b></p><p> TA0CCR0 =Tccr0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> #pr
124、agma vector = PORT1_VECTOR</p><p> __interrupt void PORT1_ISR(void)</p><p><b> {</b></p><p> //-----啟用Port1事件檢測函數(shù)-----</p><p> P1_IODect();//檢測通
125、過,則會調(diào)用事件處理函數(shù)</p><p> P1IFG=0; //退出中斷前必須手動清除IO口中斷標(biāo)志</p><p><b> }</b></p><p> /***********************************************************
126、*******************************************</p><p> * 名 稱:P1_IODect()</p><p> * 功 能:判斷具體引發(fā)中斷的IO,并調(diào)用相應(yīng)IO的中斷事件處理函數(shù)</p><p><b> * 入口參數(shù):無</b></p><p&
127、gt;<b> * 出口參數(shù):無</b></p><p> * 說 明:該函數(shù)兼容所有8個IO的檢測,請根據(jù)實際輸入IO激活“檢測代碼”。</p><p> * 本例中,僅有P1.3被用作輸入IO,所以其他7個IO的“檢測代碼”沒有被“激活”。</p><p> * 范 例:無</p>
128、<p> ******************************************************************************************************/</p><p> void P1_IODect(void)</p><p><b> {</b></p><p>
129、; unsigned int Push_Key=0;</p><p> //-----排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標(biāo)志位-----</p><p> Push_Key=P1IFG&(~P1DIR);</p><p> //-----延時一段時間,避開機械抖動區(qū)域-----</p><p> __delay_cy
130、cles(10000);//消抖延時</p><p> //----判斷按鍵狀態(tài)是否與延時前一致-----</p><p> if((P1IN&Push_Key)==0) //如果該次按鍵確實有效</p><p><b> {</b></p><p> /
131、/----判斷具體哪個IO被按下,調(diào)用該IO的事件處理函數(shù)-----</p><p> switch(Push_Key){</p><p> // case BIT0:P10_Onclick();break;</p><p> case BIT1:</p><p><b> {</b></p>
132、<p> WaveSelect+=5;</p><p><b> tt=1;</b></p><p> switch(WaveSelect)</p><p><b> {</b></p><p> case 5: break;</p><p>
133、case 10: break;</p><p> case 15: break;</p><p> // case 20: break;</p><p> default: WaveSelect=5;break;</p><p><b> }</b></p><p> };br
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計-簡易信號發(fā)生器
- 簡易信號發(fā)生器 課程設(shè)計
- 簡易信號發(fā)生器課程設(shè)計
- 簡易信號發(fā)生器課程設(shè)計
- 微機課程設(shè)計--簡易信號發(fā)生器
- eda課程設(shè)計-簡易信號發(fā)生器
- 模電簡易信號發(fā)生器課程設(shè)計
- 模電課程設(shè)計-簡易信號發(fā)生器
- 模電課程設(shè)計-簡易信號發(fā)生器報告
- 模電課程設(shè)計——簡易函數(shù)信號發(fā)生器
- 信號發(fā)生器課程設(shè)計----函數(shù)信號發(fā)生器
- 簡易波形發(fā)生器課程設(shè)計
- 電子技術(shù)課程設(shè)計--簡易信號發(fā)生器
- 簡易信號發(fā)生器單片機課程設(shè)計報告
- 測控課程設(shè)計--簡易低頻信號發(fā)生器的設(shè)計
- 信號發(fā)生器課程設(shè)計
- 信號發(fā)生器課程設(shè)計
- 課程設(shè)計--信號發(fā)生器設(shè)計
- 信號發(fā)生器課程設(shè)計報告--函數(shù)信號發(fā)生器的設(shè)計
- 綜合課程設(shè)計--簡易波形發(fā)生器
評論
0/150
提交評論