2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  設(shè)計題目:寬帶直流放大器</p><p>  摘要:本設(shè)計基于AT89S52單片機作為主控器,由AD603作為放大器的寬帶直流放大器。本電路由級聯(lián)兩片AD603放大電路、增益控制電路、液晶1602顯示電路及4*4矩陣鍵盤處理電路、測量電路和電源電路等部分組成。在電路的設(shè)計過程中,力求硬件電路簡單,充分發(fā)揮軟件編程方便靈活的特點,并最大限度挖掘單片機的資源,來滿足系統(tǒng)設(shè)計要求。本電路具有寬帶數(shù)

2、字程控功能,運用程序采樣測出峰值電壓,然后用公式算出有效值并通過液晶顯示,并運用電容去耦、屏蔽線作為輸入輸出信號線和金屬體屏蔽高頻放大電路等降噪聲、抗干擾措施,使電路輸出信號波形清晰、穩(wěn)定。本電路具有設(shè)計簡單,功耗低,成本小等特點。</p><p>  關(guān)鍵字:寬帶直流放大 數(shù)字程控 AD603 屏蔽 抗干擾</p><p><b>  目 錄</b>

3、</p><p>  1.設(shè)計任務(wù)與要求1</p><p><b>  1.1設(shè)計任務(wù)1</b></p><p><b>  1.2要求1</b></p><p>  2.方案論證與比較1</p><p>  2.1總體設(shè)計方案1</p><p&

4、gt;  2.2主控芯片的比較與選擇1</p><p>  2.3 顯示模塊比較與選擇2</p><p>  2.4 放大器電路比較與選擇2</p><p>  3.理論分析與計算3</p><p>  3.1帶寬增益積3</p><p>  3.2通頻帶內(nèi)增益起伏控制3</p><p&

5、gt;<b>  3.3線性相位3</b></p><p>  3.4抑制直流零點漂移4</p><p>  3.5放大器穩(wěn)定性4</p><p>  4.電路與程序設(shè)計4</p><p>  4.1系統(tǒng)的硬件設(shè)計4</p><p>  4.2 系統(tǒng)軟件設(shè)計:5</p>

6、<p>  軟件設(shè)計框圖如下5</p><p>  5.測試方案與測試結(jié)果5</p><p><b>  5.1測試儀器5</b></p><p><b>  5.2測試數(shù)據(jù)6</b></p><p><b>  6.設(shè)計總結(jié)6</b></p>

7、<p><b>  參考文獻6</b></p><p><b>  附錄6</b></p><p><b>  1.設(shè)計任務(wù)與要求</b></p><p><b>  1.1設(shè)計任務(wù)</b></p><p>  設(shè)計并制作一個寬帶直流放大器

8、及所用的直流穩(wěn)壓電源。</p><p><b>  1.2要求</b></p><p><b>  1.2.1基本要求</b></p><p> ?。?)電壓增益AV≥40dB,輸入電壓有效值Vi≤20mV。AV可在0~40dB范圍內(nèi)手動連續(xù)調(diào)節(jié)。</p><p> ?。?)最大輸出電壓正弦波有效值

9、Vo≥2V,輸出信號波形無明顯失真。</p><p>  (3)3dB通頻帶0~5MHz;在0~4MHz通頻帶內(nèi)增益起伏≤1dB。 </p><p> ?。?)放大器的輸入電阻≥50,負載電阻(50±2)。</p><p> ?。?)設(shè)計并制作滿足放大器要求所用的直流穩(wěn)壓電源。</p><p><b>  1.2.2發(fā)揮部

10、分</b></p><p> ?。?)最大電壓增益AV≥60dB,輸入電壓有效值Vi≤10 mV。</p><p> ?。?)在AV=60dB時,輸出端噪聲電壓的峰-峰值VONPP≤0.3V。</p><p> ?。?)3dB通頻帶0~10MHz;在0~9MHz通頻帶內(nèi)增益起伏≤1dB。</p><p> ?。?)最大輸出電壓正弦

11、波有效值Vo≥10V,輸出信號波形無明顯失真。 </p><p> ?。?)進一步降低輸入電壓提高放大器的電壓增益。</p><p> ?。?)電壓增益AV可預(yù)置并顯示,預(yù)置范圍為0~60dB,步距為5dB(也可以連續(xù)調(diào)節(jié));放大器的帶寬可預(yù)置并顯示(至少5MHz、 10MHz 兩點)。</p><p> ?。?)降低放大器的制作成本,提高電源效率。</p&

12、gt;<p> ?。?)其他(例如改善放大器性能的其它措施等)。</p><p><b>  2.方案論證與比較</b></p><p><b>  2.1總體設(shè)計方案</b></p><p>  分析題目要求,我們將本設(shè)計分為:放大電路及輸入輸出電路、增益控制、鍵盤顯示及處理、測量和穩(wěn)壓電源五大功能模塊

13、 </p><p>  2.2主控芯片的比較與選擇</p><p>  方案一:采用8031作為控制核心,以使用最為普遍的器件ADC0809作模數(shù)轉(zhuǎn)換可以實現(xiàn)模數(shù)轉(zhuǎn)換,但所需的I/O口較多。此方案簡易可行,器件的價格便宜,但8031內(nèi)部沒有程序存儲器,需要擴展,增加了電路的復雜性同時也增加了成本,不能滿足高性價比的要求。</p><p>  方案二:采用凌陽SPCE

14、061A單片機。它中斷資源豐富,而且內(nèi)置了在線仿真、編程接口,可方便地實現(xiàn)在線調(diào)試。但其程序編寫較難,且性價比不夠高。</p><p>  方案三:采用AT89S52作為電路的控制核心,使用8位的I2C總線式的模數(shù)轉(zhuǎn)換器進行數(shù)據(jù)轉(zhuǎn)換。而且AT89S52單片機是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲器。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電

15、模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止;可實現(xiàn)液晶顯示和鍵盤設(shè)定等多種功能。此方案電路簡單并且可以滿足題目的各項要求的精度,所以選擇方案三。</p><p>  2.3 顯示模塊比較與選擇</p><p>  方案一:采用數(shù)碼管顯示位數(shù)太少,布線麻煩,

16、管腳多,則占用相應(yīng)的I/O口也多;</p><p>  方案二:采用液晶顯示位數(shù)多,使用方便,2行每行16個字符。自帶字符庫、帶背光,經(jīng)典的液晶顯示器件通過液晶屏顯示你想要的信息,比發(fā)光二極管、數(shù)碼管等顯示更漂亮,更專業(yè)化, 所以選擇液晶。</p><p>  2.4 放大器電路比較與選擇</p><p>  方案一:簡單的放大電路可由分立元件搭接完成。此

17、方案元器件成本低,易于購置。但是要滿足增益60db的要求,需采用多級放大電路實現(xiàn),這樣便大量采用三極管等分立元件,這樣電路比較復雜,工作點難于調(diào)整,調(diào)試難度太大,周期很長,尤其是短時間內(nèi)手工制作難以保證可靠性及指標,故不采用此方案。</p><p>  方案二:為了實現(xiàn)最大電壓增益AV≥60dB,輸入電壓有效值Vi≤10 mV的要求,采用可調(diào)增益集成運放設(shè)計,如運放AD603,它由無源輸入衰減器、增益控制界面和固

18、定增益放大器三部分組成(如圖(1)所示)。圖中加在梯型網(wǎng)絡(luò)輸入端 (VINP) 的信號經(jīng)衰減后,由固定增益放大器輸出,衰減量是由加在增益控制接口的電壓決定。增益的調(diào)整與其自身電壓值無關(guān) , 而僅與其差值 V 有關(guān) , 由于控制電壓GPOS/GNEG端的輸入電阻高達 50MΩ,因而輸入電流很小, 致使片內(nèi)控制電路對提供增益控制電壓的外電路影響減小。以上特點很適合構(gòu)成程控增益放大器。此方案優(yōu)勢是電路集成度高,容易實現(xiàn),控制方便、易于數(shù)字化用

19、單片機處理,指標和可靠性容易得到保證,故采用此方案。</p><p><b>  3.理論分析與計算</b></p><p><b>  3.1帶寬增益積</b></p><p>  為實現(xiàn)60dB放大能力,本設(shè)計采取兩級AD603級聯(lián)和后級放大電路的增益分配方式。依據(jù)資料,AD603單級采用的是增益為-1dB~42dB、

20、帶寬在9MHZ-90MHZ之間的工作方式,其每級增益為: </p><p>  GAD603(dB)=40×Vg+20 (式3.1-1)</p><p>  式中,Vg為AD603的增益控制電壓,是一腳和二腳的壓差,范圍為-0.50V~0.50V。故兩級級聯(lián)理論上可以達到 84Db,超過要求的60dB</p><p>  單片機通過D/A的輸出電壓

21、控制AD603的增益,本設(shè)計采用TCL5615的十位分辨率DA芯片,則D/A輸入值KDA與AD603控制電壓的對應(yīng)關(guān)系為:</p><p>  第一級AD603控制電壓的對應(yīng)關(guān)系為:</p><p>  Vg=(1/1023* Kda*5)-1 (式3.1-3)</p><p>  式中,KDA為D/A的輸入值,5為TLC5615的參考電壓,1為AD603二腳的電壓

22、</p><p>  第一級AD603控制電壓的對應(yīng)關(guān)系為:</p><p>  Vg=(1/1023* Kda*5)-2 (式3.1-3)</p><p>  由式2-3及式2-4可知增益G與D/A輸入值KDA的對應(yīng)關(guān)系為: </p><p>  第一級為: Kda=(G+20)/40*1023/5 (式3.1-

23、4) </p><p>  步進控制AD603增益:</p><p>  根據(jù)發(fā)揮部分要求,可以以5dB步進調(diào)節(jié)增益,根據(jù)(式3.1-4),我們可以很容易的編程實現(xiàn)。</p><p>  3.2通頻帶內(nèi)增益起伏控制</p><p>  由于是小信號放大,頻帶較寬,所以整個系統(tǒng)比較容易受電磁的干擾,表現(xiàn)為信號波形有飄動起伏,因此必

24、須進行干擾屏蔽。做法有:要有穩(wěn)定、少紋波的電源,PCB板設(shè)計要考慮高頻,系統(tǒng)屏蔽等措施。</p><p><b>  3.3線性相位</b></p><p>  由于本系統(tǒng)設(shè)計要求是寬帶,頻率變化很快,從0HZ到幾十MHZ,如果電路設(shè)計不好容易產(chǎn)生相移,產(chǎn)生相移的原因是電路通道中使用了電容,電感性器件,集成芯片需要相位補償。所以在設(shè)計電路的時候電路通道中盡量少用電容,

25、并注意芯片正確使用。</p><p>  3.4抑制直流零點漂移</p><p>  產(chǎn)生直流零點漂移的原因很多,如電源電壓不穩(wěn)、元器件參數(shù)變值、環(huán)境溫度變化等。在我們的設(shè)計中,為了抑制直流零點漂移,我們精選器件,如:我們選用精密電阻、電解電容,進行有關(guān)參數(shù)的精確設(shè)置;另外,我們使用雙電源對電路進行供電,集成塊內(nèi)使用差分電路,可以有效的抑制直流零點漂移。</p><p&

26、gt;<b>  3.5放大器穩(wěn)定性</b></p><p>  該放大器由級聯(lián)兩片AD603組成,對于低頻信號的輸入起到穩(wěn)定的放大作用,但對于5MHz以上的高頻信號,放大波形有微小失真,且幅值有所減小。但總體上其放大輸出波形還是理想的,工作還是穩(wěn)定的。</p><p><b>  4.電路與程序設(shè)計</b></p><p&g

27、t;  根據(jù)選取的總方框圖,分別對各個主要電路進行設(shè)計和選取,其內(nèi)容應(yīng)該包括:</p><p>  4.1系統(tǒng)的硬件設(shè)計</p><p>  根據(jù)題目的要求,結(jié)合考慮過的各種方案,我們認真取舍,充分利用模擬和數(shù)字系統(tǒng)各自的優(yōu)點,發(fā)揮其優(yōu)勢,采用單片機預(yù)置和控制放大器增益的方法大大提高了系統(tǒng)的精度和可控性;后級放大器使用提高了輸出電壓有效值。我們使信號都在單片機的數(shù)字算法控制下得到最合理的前

28、級放大,使其放大倍數(shù)精確。圖(2)所示即為本系統(tǒng)原理框圖:</p><p><b>  具體電路見附錄</b></p><p>  4.2 系統(tǒng)軟件設(shè)計: </p><p><b>  軟件設(shè)計框圖如下:</b></p><p>  5.測試方案與測試結(jié)果</p><p>

29、<b>  5.1測試儀器</b></p><p>  雙蹤示波器 CA9020 </p><p>  信號發(fā)生器 CA1460-02</p><p>  數(shù)字萬用表 VC890D</p><p><b>  5.2測試數(shù)據(jù)</b></p><p&g

30、t;  測試方案、結(jié)果與結(jié)果分析</p><p> ?。?)最大增益 G=20lg(Vo/Vi) ,在固定頻率下測試得。</p><p><b>  數(shù)據(jù)如表中:</b></p><p>  結(jié)果分析,本系統(tǒng)最大增益達到51.43,大于基本要求的40dB,并且輸入的信號有效值遠小于20mV</p><p> ?。?

31、)輸出有效值及幅頻特性</p><p><b>  第一組:</b></p><p>  上面的那個表格是我們在最大AD603最大增益波形無明顯失真的情況下測量出來的數(shù)據(jù),可以得出最大輸出正弦波有效值Vo=2.30V,大于基本要求的大于2V..。</p><p>  幅頻特性從0Hz到12M,都是比較平穩(wěn)的,但是從8MHz開始出現(xiàn)失真,并且增益

32、明顯下降。該系統(tǒng)有大于12Mhz的帶寬,滿足題目要求。</p><p> ?。?)放大器輸入電阻、負載電阻測量</p><p>  測量方法:使用萬用表直接測量</p><p>  得出結(jié)果是輸入電阻為100Ω ,負載電阻為50Ω,滿足放大器的輸入電阻≥50,負載電阻(50±2)的要求。</p><p>  (4) 增益步進測試

33、</p><p>  測試電路如下圖所示:</p><p>  從表中的數(shù)據(jù)得出:手動步進增益與實際的增益是有一些誤差的,總的誤差為0.38Db,不是很大.出現(xiàn)誤差的原因有DA輸出來的電壓有一些誤差,另外AD603的一二腳的壓差也有一點誤差??偟脕碚f步進增益還是不錯的。</p><p><b>  6.設(shè)計總結(jié)</b></p>&

34、lt;p>  經(jīng)過四天三夜的奮斗,我們設(shè)計的電路基本實現(xiàn)了題目基本部分的要求,并完成了部分發(fā)揮部分要求。在某些方面電路性能還超過了題目的要求。但由于時間緊,工作量大,設(shè)計電路還存在許多可以改進的地方,比如電路布局、和抗干擾方面還有很大的提升空間,經(jīng)過改進,相信性能還會有進一步的提升。本次競賽極大的鍛煉了我們各方面的能力,雖然我們遇到了很多困難和障礙,但在我們組員間團結(jié)協(xié)作,相互理解和支持,一一解決了很多難道。我們將繼續(xù)努力爭取更大

35、的進步。</p><p><b>  參考文獻</b></p><p> ?。?)陳桂友.單片機原理及應(yīng)用.機械工業(yè)出版社出版2007.08.</p><p>  (2)陳大欽.電子技術(shù)基礎(chǔ)實驗. 高等教育出版社出版2007.05.</p><p> ?。?)戴仙金. 51單片機及其C語言程序開發(fā)實例.清華大學出版社20

36、08.02.</p><p> ?。?)劉春生,李小波. AD603在信號采集系統(tǒng)中的應(yīng)用.國外電子元器件.2000.11</p><p><b>  附錄 </b></p><p>  附錄1 總電原理圖包括以下各部分:</p><p><b>  1.電源電路設(shè)計:</b></p>

37、<p><b>  2放大電路設(shè)計:</b></p><p><b>  3.控制電路部分:</b></p><p>  附錄2 印制電路板圖</p><p>  1.控制電路部分PCB</p><p>  2.放大電路設(shè)計PCB</p><p>  3.電源電

38、路PCB:</p><p><b>  圖(1)</b></p><p><b>  附錄3 程序清單</b></p><p>  #include < reg52.h ></p><p>  #define uchar unsigned char</p><p&g

39、t;  #define uint unsigned int</p><p>  #include<system.h></p><p>  uchar flag;</p><p>  extern uchar gain;</p><p>  extern void display_gain();</p><p&

40、gt;  extern void ad603_controll(void);</p><p>  extern void DA_Conver(int DAValue);</p><p>  extern void read_v();</p><p>  void main()</p><p><b>  {</b>&

41、lt;/p><p><b>  int i;</b></p><p>  lcd_init();</p><p>  DA_Conver(0);</p><p><b>  gain=0;</b></p><p>  display_gain();</p><

42、p><b>  while(1)</b></p><p><b>  { </b></p><p>  ad603_controll( );</p><p>  // DA_Conver(360);</p><p><b>  }</b></p><

43、;p><b>  } </b></p><p>  #include < reg52.h ></p><p>  #include < intrins.h ></p><p>  #define uchar unsigned char</p><p>  #define uint unsi

44、gned int</p><p>  /****TLC549管腳定義****/ </p><p>  /****TLC549管腳定義****/ </p><p>  sbit CLK=P3^0; //定義時鐘信號IO口 </p><p>  sbit DO=P3^1;//定義片選信號IO口</p>&

45、lt;p>  sbit CS=P3^2;</p><p>  uchar addata=0; //存放采集到的數(shù)據(jù)</p><p>  uint voltagenum[4]; //轉(zhuǎn)換成顯示的值</p><p>  uint voltage=0; //存放電壓擴大100的值</p><p>  uchar code digi

46、tal[]={"0123456789"}; </p><p>  /****************************/</p><p>  uint max1;</p><p>  uint date[25]; //存放電壓采用值</p><p>  extern void lcd_write(ucha

47、r start, uchar in_data) ;</p><p>  //uchar addata=0; //存放采集到的數(shù)據(jù)</p><p>  //uint voltagenum[3]; //轉(zhuǎn)換成顯示的值</p><p>  //uint voltage=0; //存放電壓擴大100的值 </p><p>  /*ucha

48、r code digital3[]= //LCD1602的數(shù)字顯示碼表</p><p>  { //0-9, : ; < = > ?</p><p>  0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,</p><p>  0x3d,0x3e,0x3f<

49、;/p><p><b>  }; */</b></p><p>  /********************************************************************************</p><p>  ** 函數(shù)名稱:ad_delay</p><p>  ** 功能描述:ad

50、轉(zhuǎn)換延時函數(shù)</p><p><b>  ** 輸入:k</b></p><p><b>  ** 輸出:無</b></p><p><b>  ** 全局變量:無</b></p><p><b>  ** 調(diào)用模塊:無</b></p>&l

51、t;p>  *******************************************************************************/</p><p>  void ad_delay(uchar k)</p><p><b>  {</b></p><p>  uchar i,j;</p>

52、<p>  for(j=0;j<k;j++)</p><p><b>  {</b></p><p>  for(i=0;i<125;i++);</p><p><b>  }</b></p><p><b>  }</b></p>&l

53、t;p><b>  //實現(xiàn)AD轉(zhuǎn)換</b></p><p>  /*******************************************************************************</p><p>  ** 函數(shù)名稱:ad_change</p><p>  ** 功能描述:電壓計算程序<

54、/p><p><b>  ** 輸入:無</b></p><p><b>  ** 輸出:無</b></p><p>  ** 全局變量:addata</p><p>  ** 調(diào)用模塊:_nop_</p><p>  ******************************

55、*************************************************/</p><p>  void ad_change()</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  CS=1; //

56、芯片復位</p><p><b>  CS=0;</b></p><p><b>  CS=1;</b></p><p><b>  CLK=0;</b></p><p><b>  _nop_();</b></p><p><

57、;b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  CS=0; //芯片起始</p><p><b>  _nop_();</b&g

58、t;</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); //等待延時</p><p>  for(i=0;i<8;i++)</p><p>  { //輸入采

59、樣轉(zhuǎn)換時鐘 </p><p><b>  CLK = 1;</b></p><p><b>  CLK = 0;</b></p><p><b>  }</b></p><p>  CS=1; //開始轉(zhuǎn)換</p><p><

60、b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</

61、b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><

62、;p>  _nop_(); //等待轉(zhuǎn)換結(jié)束</p><p>  CS=0; //讀取轉(zhuǎn)換結(jié)果</p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b>&

63、lt;/p><p><b>  _nop_();</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  CLK=1;</b></p><p>  addata<<=

64、1;</p><p><b>  if(DO)</b></p><p><b>  {</b></p><p>  addata|=0x01;</p><p>  //addata=addata+1; </p><p><b>  }</b></p

65、><p><b>  /*else </b></p><p>  addata|=0x00;*/</p><p><b>  CLK=0;</b></p><p><b>  }</b></p><p><b>  CS=1;</b>&

66、lt;/p><p>  //return addata;</p><p><b>  }</b></p><p>  /*******************************************************************************</p><p>  ** 函數(shù)名稱:get_v

67、oltage</p><p>  ** 功能描述:電壓計算程序</p><p>  ** 全局變量:voltage,addata</p><p>  *******************************************************************************/</p><p>  void g

68、et_voltage()</p><p><b>  {</b></p><p>  voltage=addata*(250.0/255); //計算電壓并擴大100倍,500.0是參考電壓2.5擴大100倍得到的,參考電壓由調(diào)節(jié)R4得到</p><p>  //voltage=voltage*3.06453; //根據(jù)實際情況調(diào)整電壓,

69、現(xiàn)在還有一點誤差</p><p>  voltagenum[0]=voltage/1000; </p><p>  voltagenum[1]=voltage%1000/100; </p><p>  voltagenum[2]=voltage%100/10;</p><p>  voltagenum[3]=voltage%10;

70、 </p><p>  //ge=(voltagenum[2]+4)%10;//調(diào)精度個位</p><p>  //shi=(voltagenum[1]+(voltagenum[2]+4)/10)%10; //十位</p><p>  //bai=(voltagenum[0]+(voltagenum[1]+(voltagenum[2

71、]+4)/10))%10;</p><p>  //while(1);</p><p><b>  }</b></p><p>  /***************************************************</p><p>  讀電壓峰峰值函數(shù),各位數(shù)值存放在voltage[4]</p

72、><p>  *****************************************************/</p><p>  void read_AD()</p><p>  { </p><p>  ad_change(); //AD轉(zhuǎn)換</p><p>  

73、ad_delay(200);</p><p>  get_voltage();</p><p><b>  }</b></p><p>  void display()</p><p><b>  {</b></p><p>  lcd_write(0,0x80+11);

74、//設(shè)置顯示位置</p><p>  //lcd_write(1,'V'); </p><p>  lcd_write(1,digital[voltagenum[0]]);</p><p>  lcd_write(1,digital[voltagenum[1]]);</p><p>  lcd_write(1,'.&#

75、39;);</p><p>  lcd_write(1,digital[voltagenum[2]]);</p><p>  lcd_write(1,digital[voltagenum[3]]);</p><p>  lcd_write(1,'V'); </p><p><b>  } </b><

76、/p><p>  void read_v()</p><p><b>  {</b></p><p><b>  uchar n;</b></p><p>  ad_change(); //先進行第一次AD轉(zhuǎn)換,以下是用查詢比較法來測量波峰值的</p><p>  ad_

77、delay(200);</p><p>  get_voltage();</p><p>  date[0]=voltage;</p><p>  max1=date[0];</p><p>  for(n=1;n<25;n++) //為取峰值電壓做準備</p><p><b>  {&l

78、t;/b></p><p>  ad_change(); //AD轉(zhuǎn)換</p><p>  ad_delay(200);</p><p>  get_voltage(); </p><p>  date[n]=voltage;</p><p>  if(date[n]>max1)</p&

79、gt;<p>  max1=date[n];</p><p><b>  }</b></p><p>  max1=max1*0.707;</p><p>  voltagenum[0]=max1/100; </p><p>  //voltagenum[0]=(uchar)voltagenum[0];

80、 //最大值放在max1中</p><p>  voltagenum[1]=max1%100/10; </p><p>  // voltagenum[1]=(uchar)voltagenum[1]; </p><p>  voltagenum[2]=max1%10;</p><p>  //voltagenum[3]=

81、(uchar)voltagenum[3];</p><p>  lcd_write(0,0x80+11); //顯示電壓峰值</p><p>  lcd_write(1,digital[voltagenum[0]]);</p><p>  lcd_write(1,0x2E);</p><p>  lcd_write(1,digit

82、al[voltagenum[1]]); </p><p>  lcd_write(1,digital[voltagenum[2]]); </p><p>  lcd_write(1,0x56);</p><p><b>  }</b></p><p>  #include<syste

83、m.h></p><p>  void DA_Conver(int DAValue)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  DAValue <<= 6;</p><p>  C_S

84、= 0; // 片選DA芯片</p><p>  C_K = 0; // 在以下12個時鐘周期內(nèi),每當在上升沿的 // 數(shù)據(jù)被鎖存,形成DA輸出。在前10個時鐘</p><p>  for

85、(i = 0; i < 12; i++) // 內(nèi)輸入的是10位DA數(shù)據(jù),后兩個時鐘周期</p><p>  { // 為填充字節(jié)。</p><p>  DIN = (bit)(DAValue & 0x8000); //</p><p>  C_

86、K = 1; //</p><p>  DAValue <<= 1; //</p><p><b>  C_K = 0;</b></p><p><b>  }</b></p><p>  C_S = 1

87、; // CS的上升沿和下降沿只有在clk為低的時候</p><p>  C_K = 0; // 才有效</p><p><b>  }</b></p><p>  #include <system.h ></p><p>  //uc

88、har code b[ ] = {"0123456789ABCDEF"};</p><p>  //uchar code iRCode[] = {"0123456789ABCDEF"};</p><p>  /**********************************************************</p>

89、<p>  * 5us 延時子程序</p><p>  **********************************************************/</p><p>  void delayNOP()</p><p><b>  {</b></p><p><b>  _n

90、op_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  _nop_(); </p><p

91、><b>  }</b></p><p>  /**********************************************************</p><p><b>  * 延時子程序</b></p><p>  ****************************************

92、******************/</p><p>  void delay(uint ms) </p><p><b>  {</b></p><p><b>  uchar t;</b></p><p>  while(ms--)</p><p><b> 

93、 { </b></p><p>  for(t = 0; t < 120; t++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /**********************************************

94、************</p><p>  * 檢查LCD忙狀態(tài) </p><p>  * lcd_busy為1時,忙,等待。 </p><p>  * lcd-busy為0時,閑,可寫指令與數(shù)據(jù)

95、 </p><p>  **********************************************************/ </p><p>  bit lcd_busy()</p><p>  { </p><p>  bit result;</

96、p><p>  LCD_RS = 0;</p><p>  LCD_RW = 1;</p><p>  LCD_EN = 1;</p><p>  delayNOP();</p><p>  result = (bit)(P2&0x80);</p><p>  LCD_EN = 0;<

97、/p><p>  return(result); </p><p><b>  }</b></p><p>  /********************************************************* </p><p><b>  * 寫指令或數(shù)據(jù)</b></

98、p><p>  * start=0, 寫入命令; start=1, 寫入數(shù)據(jù)</p><p>  *********************************************************/</p><p>  void lcd_write(uchar start, uchar in_data) </p><p><

99、;b>  {</b></p><p>  uchar Hdata,Ldata;</p><p>  //while(lcd_busy());</p><p>  Hdata=in_data&0xf0; //取高四位</p><p>  Ldata=(in_data<<4)&0xf0;

100、 //取低四位</p><p>  LCD_DATA = Hdata; //發(fā)送高四位 </p><p>  if(start==0) </p><p>  LCD_RS = 0; //寫入命令 ,RS=0,,RW=0時是寫入命令</p><p><b>  else&

101、lt;/b></p><p>  LCD_RS = 1; //寫入數(shù)據(jù) ,RS=1,,RW=0時是寫入數(shù)據(jù)</p><p>  LCD_RW = 0;</p><p>  LCD_EN = 0;</p><p>  delayNOP();</p><p>  LCD_EN = 1;

102、</p><p>  delayNOP();</p><p>  LCD_EN = 0;</p><p>  delayNOP();</p><p>  LCD_DATA = Ldata; //發(fā)送低四位 </p><p>  if(start==0) </p><p

103、>  LCD_RS = 0; //寫入命令 ,RS=0,,RW=0時是寫入命令</p><p><b>  else</b></p><p>  LCD_RS = 1; //寫入數(shù)據(jù) ,RS=1,,RW=0時是寫入數(shù)據(jù) </p><p>  LCD_EN = 1;<

104、/p><p>  delayNOP();</p><p>  LCD_EN = 0;</p><p>  delayNOP();</p><p><b>  }</b></p><p>  void lcd_init()</p><p><b>  {</b&g

105、t;</p><p>  delay(15);</p><p>  lcd_write(0,0x28); //16*2顯示,5*7點陣,4位數(shù)據(jù),</p><p><b>  delay(5);</b></p><p>  lcd_write(0,0x28);</p><p><b

106、>  delay(5);</b></p><p>  lcd_write(0,0x28);</p><p><b>  delay(5);</b></p><p>  lcd_write(0,0x0c); //顯示開,關(guān)光標</p><p>  //delay(5);</p><

107、p>  //lcd_write(0,0x06); //移動光標</p><p><b>  delay(5);</b></p><p>  lcd_write(0,0x01); //清除LCD的顯示內(nèi)容</p><p>  delay(25); //延時</p><p><b>  }&l

108、t;/b></p><p>  void DelayMs(unsigned int n) </p><p><b>  {</b></p><p>  unsigned int i=0,j=0;</p><p>  for (i=n;i>0;i--)</p><p>  fo

109、r (j=0;j<1140;j++); </p><p><b>  }</b></p><p>  /**********************************************************</p><p>  * 設(shè)定顯示位置

110、 </p><p>  **********************************************************/</p><p>  void lcd_pos(uchar pos)</p><p>  {

111、 </p><p>  lcd_write(0,pos=pos+0x80); //數(shù)據(jù)指針=80+地址變量</p><p><b>  }</b></p><p>  /**********************************************************</p&g

112、t;<p>  * 在特定的位置寫一個字符</p><p>  in_data為要寫的數(shù)據(jù)字符</p><p>  pos為指定位置 </p><p>  pos=0時在第一行第一個位置寫,</p><p>  pos=0x40時在第二行第一個位置寫 </p><p>  **************

113、********************************************/</p><p>  void lcd_wr_char(uchar in_data,uchar pos)</p><p><b>  {</b></p><p>  lcd_pos(pos);</p><p>  lcd_write

114、(1, in_data);</p><p><b>  }</b></p><p>  #include<system.h></p><p>  #define V_TLC5615 5.0</p><p>  extern void DA_Conver(int DAValue);</p>&

115、lt;p>  extern void read_v();</p><p>  int g1=0;//令初始增益為0dB</p><p><b>  int gain;</b></p><p>  uchar flag0,flag1,flag2,cw;</p><p>  void display_gain()&

116、lt;/p><p><b>  {</b></p><p>  uchar temp; </p><p>  //if(gain<=6)</p><p>  temp=gain;</p><p><b>  //else</b></p><p

117、>  // temp= gain-5;</p><p>  if(temp>55)</p><p><b>  {</b></p><p><b>  cw=1;</b></p><p>  lcd_init();</p><p>  lcd_write(0,0x

118、80+0x40);//設(shè)置顯示位置</p><p>  lcd_write(1,'E'); </p><p>  lcd_write(1,'r');</p><p>  lcd_write(1,'r');</p><p>  lcd_write(1,'o');</p&g

119、t;<p>  lcd_write(1,'r');</p><p>  lcd_write(1,'!');</p><p>  lcd_write(1,' ');</p><p>  lcd_write(1,' ');</p><p>  lcd_write(1,&

120、#39; ');</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  lcd_write(0,0x80+0x40);//設(shè)置顯示位置</p><p&g

121、t;  lcd_write(1,'G'); </p><p>  lcd_write(1,'a');</p><p>  lcd_write(1,'i');</p><p>  lcd_write(1,'n');</p><p>  lcd_write(1,':'

122、);</p><p>  lcd_write(1,digital[temp/10]);</p><p>  lcd_write(1,digital[temp%10]);</p><p>  lcd_write(1,'d');</p><p>  lcd_write(1,'B'); </p><

123、;p><b>  } </b></p><p><b>  }</b></p><p>  void ad603_controll(void)</p><p><b>  {</b></p><p>  uchar g,i=6;</p><p>

124、;  uchar numb,temp1;</p><p>  uchar temp[4];//存儲輸入的數(shù)值</p><p>  numb=key_scan();</p><p>  if(numb==11)</p><p><b>  {</b></p><p><b>  //qd

125、=0;</b></p><p>  ad_delay(5);</p><p>  if(numb==11)</p><p><b>  {</b></p><p>  lcd_write(0,0x80);</p><p>  lcd_wr_char('I',0);<

126、;/p><p>  lcd_wr_char('n',1);</p><p>  lcd_wr_char('p',2);</p><p>  lcd_wr_char('u',3);</p><p>  lcd_wr_char('t',4);</p><p>  

127、lcd_wr_char(':',5);</p><p>  while(i<8)//接受兩位數(shù)值的輸入</p><p><b>  {</b></p><p><b>  P1=0x0f;</b></p><p>  g=P1&0x0f;</p><

128、;p>  while(g==0x0f)</p><p><b>  {</b></p><p>  g=P1&0x0f;</p><p><b>  } </b></p><p>  numb=key_scan(); //返回鍵值 </p><p>  t

129、emp[i-6]=numb;</p><p>  lcd_wr_char(digital[numb],i++); //在相應(yīng)的位置顯示輸入的數(shù)值</p><p><b>  } </b></p><p>  gain=temp[0]*10+temp[1];</p><p>  gain=gain+5; <

130、/p><p><b>  flag0=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(numb==12) //增益步進加</p><p><b>  {</b>

131、</p><p><b>  //qd=0;</b></p><p>  if(gain<=40)</p><p><b>  gain+=5;</b></p><p><b>  else</b></p><p><b>  gain+

132、=1;</b></p><p>  flag1=1;</p><p>  g1=(int)(((gain+20)/40.0*1023)/V_TLC5615);</p><p>  DA_Conver(g1); </p><p>  display_gain();</p><p><b>  }

133、</b></p><p>  if(numb==13) //增益步進減</p><p><b>  {</b></p><p>  if(gain>40)</p><p><b>  gain-=1;</b></p><p><b>  else

134、</b></p><p><b>  gain-=5;</b></p><p>  //gain-=5;</p><p><b>  flag2=1;</b></p><p>  g1=(int)(((gain+20)/40.0*1023)/V_TLC5615);</p>

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論