單片機的DA接口應用用0832單片機控制生成正弦波,頻率和幅值可調_第1頁
單片機的DA接口應用用0832單片機控制生成正弦波,頻率和幅值可調_第2頁
單片機的DA接口應用用0832單片機控制生成正弦波,頻率和幅值可調_第3頁
單片機的DA接口應用用0832單片機控制生成正弦波,頻率和幅值可調_第4頁
單片機的DA接口應用用0832單片機控制生成正弦波,頻率和幅值可調_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、桂 林 電 子 科 技 大 學單片機最小應用系統設計報告指導老師: 吳 兆 華學 生: 劉 毅 學 號: 082011119 桂林電子科技大學機電工程學院單片機最小應用系統設計報告一、設計題目3二、設計目的3三、系統硬件圖43.1系統的硬件電路原理圖43.2 最小系統原理電路圖43.3 電壓放大電路6四、程序流程圖 6五、系統說明與分析85.1設計步驟85.2 D/A轉換器與MCS-51單片機接口85.3 DA轉換器選擇要點及輔助電路95.4典型的D/A轉換器芯片DAC0832性能介紹105.5 8051單片機簡要介紹135.6 數碼顯示部分16六、源程序17七、總結24八、參考文獻24單片機

2、最小應用系統設計報告一、設計題目單片機的D/A 接口應用:用0832單片機控制生成正弦波,頻率和幅值可調。二、設計目的設計目的:1.了解單片微機系統中實現D/A(數字/模擬)轉換的原理及方法;2.詳細了解D/A轉換芯片0832的性能及編程方法;3.了解單片機系統中擴展D/A轉換的基本原理,了解單片機如何進行數據采集;4.掌握DAC0832,AT89C51輸入/輸出接口電路設計方法;5.掌握DAC0832轉換實現的程序控制方法;6.掌握單片機匯編編程技術中的設計和分析方法;7.學會使用并熟練掌握電路繪制軟件Protel99SE(或DXP);8.掌握電路圖繪制及PCB圖布線技巧。 設計要求:1、在

3、系統掌握單片機相應基礎知識的前提下,熟悉單片機最小應用系統的設計方法及系統設計的基本步驟。2、完成所需單片機最小應用系統原理圖設計繪制的基礎上完成系統的電路圖設計。3、完成系統所需的硬件設計制作,在提高實際動手能力的基礎上進一步鞏固所學知識。4、進行題目要求功能基礎上的軟件程序編程,會用相應軟件進行程序調試和測試工作。5、用AT89C51,DAC0832設計出題目所要求的正弦波實現頻率和幅值可調輸出,并針對實際設計過程中軟、硬件設計方面出現的問題提出相應解決辦法。6、通過單片機應用系統的設計將所學的知識融會貫通,鍛煉獨立設計、制作和調試單片機應用系統的能力;領會單片機應用系統的軟、硬件調試方法

4、和系統的研制開發過程,為進一步的科研實踐活動打下堅實的基礎。三、系統硬件圖3.1系統的硬件電路原理圖系統的硬件電路圖如圖1所示,從圖中可以看到該電路主要有時鐘電路、復位電路、D/A轉換電路和運算放大電路等組成。電源電路有設備提供,在原理圖上不再說明,本文簡單介紹電源電路的組成原理。圖1 系統硬件電路原理圖3.2 最小系統原理圖1 8051單片機:圖2 8051引腳圖2 時鐘電路該電路主要有電容C1、C2和晶振Y1組成。其組成原理圖如圖3所示,圖中XTAL1為芯片內部振蕩電路的輸入端,XTAL2為芯片內部振蕩電路的輸出端。圖3 時鐘電路3 復位電路單片機通常采用的復位方式有上電復位和按鈕復位兩種

5、。本次設計用的復位方式是按鈕電平復位。其原理圖如圖4所示。當按下按鈕SW時,電容對R6迅速放電,RESET端變為高電平,RESET松開后,電容通過電阻R6進行充電,RESET端恢復為低電平。圖4 復位電路3.3 電壓放大電路電壓放大電路主要有LM358組成,LM358內部包括有兩個獨立的、高增益、內部頻率補償的雙運算放大器,適合于電源電壓范圍很寬的單電源使用,也適合用于雙電源工作模式。電壓放大電路組成如圖5所示。圖5 電壓放大電路四、程序流程圖本設計程序流程圖如下:子程序流程圖:圖6 程序流程圖五、系統說明與分析5.1設計步驟1. 理解設計任務要求(通過閱讀有關資料及調查研究);2. 對總體方

6、案進行分析、論證;3. 系統硬件電路的設計;4. 系統控制軟件的設計;1) 以功能明確、相互界面能清晰分割的軟件程序為基礎,確定主程序流程框圖;2) 以主程序流程框圖為基礎,確定各模塊程序算法及實現的功能,進一步確定各模塊程序流程框圖;3) 根據軟件流程框圖,用AT89C51匯編語言編寫主程序和延時子程序;4) 系統軟、硬件的調試;5) 編寫課程設計說明書;6) 答辯驗收。5.2 D/A轉換器與MCS-51單片機接口模數轉換器(D/A)就是一種把數字信號轉換成為模擬電信號的器件。D/A轉換是單片機應用測控系統典型的接口技術內容,D/A轉換接口設計的主要任務是選擇D/A集成芯片,配置外圍電路及器

7、件,實現數字量到模擬量的線性轉換。 一 D/A轉換器的基本原理與分類 D/A轉換器用來將數字量轉換成模擬量。它的基本要求是輸出電壓VO應該和輸入數字量成正比,即:VO=D*VR 其中, VR為參考電壓。每一個數字量都是數字代碼的按位組合,每一位數字代碼都有一定的“權”,對應一定大小的模擬量。為了將數字量轉換成模擬量,應該將其每一位都轉換成相應的模擬量,然后求和既可得到與數字量成正比的模擬量。 DA轉換器可分成兩大類:1.直接DA轉換器是指直接將輸入的數字信號轉換為輸出的模擬信號。2.間接DA轉換器是先將輸入的數字信號轉換為某種中間量,然后再把這種中間量轉換成為輸出的模擬信號。其中,間接DA轉換

8、方式在集成DA轉換器中很少使用。 二 DA的轉換器的主要指標 1分辨率這里指最小輸出電壓(對應的輸入數字量只有最低有效位為“1”)與最大輸出電壓(對應的數字輸出信號所有有效位全為“1”)之比,例如對于10位DA轉換器,其分辨率為:0.0001。分辨率越高,轉換時,對應數字輸入信號最低位的模擬信號電壓數值越小,也就越靈敏,有時,也用數字輸入信號的有效位數來給出分辨率。例如,單片集成DA轉換器AD7541的分辨率為12位,單片集成DA轉換器DAC0832的分辨率為8位等。2線性度通常用非線性誤差的大小表示DA轉換器的線性度。并且,把理想的輸入輸出特性的偏差與滿刻度輸出之比的百分數,定義為非線性誤差

9、。例如,單片集成DA轉換器AD7541的線性度(非線性誤差)為小于等于0.02FSR(FSR為滿刻度的英文縮寫)。3.轉換精度轉換精度以最大的靜態轉換誤差的形式給出。這個轉換誤差應該是非線性誤差、比例系數誤差以及漂移誤差等綜合誤差。但是有的產品說明中,只是分別給出各項誤差,而不給出綜合誤差。精度和分辨率是兩個不同的概念。精度是指轉換后所得的實際值對于理想值的接近程度,而分辨率是指能夠對轉換結果以后影響的最小輸入量,對于分辨率很高的D/A轉換器并不一定具有很高的精度 4建立時間對于一個理想的D/A轉換器,其數字輸入信號從一個二進制數變到另一個二進制數時,其輸出模擬信號電壓,應立即從原來的輸出電壓

10、跳到與新的數字信號相對應的新的輸出電壓。但是在實際的DA轉換器中,電路中的電容、電感和開關電路會引起電路時間延遲。所謂建立時間,系指數模擬轉換器中的輸入代碼有滿度值的變化時,其輸出模擬信號電壓(或模擬信號電流)達到滿刻度值的1/2LSB(或滿刻度值差百分之多少)時所需的時間。 5.3 DA轉換器選擇要點及輔助電路 選擇DA轉換芯片時,主要考慮芯片的性能、結構及應用特性。在性能上必須滿足DA轉換的要求;在結構和應用特性上應滿足接口方便、外圍電路簡單、價格低廉等要求。一、DA轉換器的選擇要點 1. DA轉換芯片主要性能指標的選擇在DA接口設計的實際應用中,在選擇時主要考慮的是用位數(8位、12位)

11、表示的轉換精度和轉換時間。2. DA轉換芯片的主要結構特性與應用特性選擇DA轉換器的特性雖然主要表現為芯片內部結構的配置狀況,但這些配置狀況對DA轉換接口電路設計帶來很大影響,主要有:1)數字輸入特性 數字輸入特性包括接收數的碼制、數據格式以及邏輯電平等。目前批量生產的DA轉換芯片一般都只能接收自然二進制數字代碼。2)數字輸出特性 目前多數D/A轉換器件均屬電流輸出器件,手冊上通常給出的輸入參考電壓及參考電阻之下的滿碼(全l)輸出電流I0。另外還給出最大輸出短路電流以及輸出電壓允許范圍。3)鎖存特性及轉換控制 D/A轉換器對數字量輸出是否具有鎖存功能將直接影響與CPU的接口設計。如果D/A轉換

12、器沒有輸入鎖存器,通過CPU數據總線傳送數字量時,必須外加鎖存器,否則只能通過具有輸出鎖存功能的IO給D/A送入數字量。 4)參考源 D/A轉換中,參考電壓源是唯一影響輸出結果的模擬參量,是D/A轉換接口中的重要電路,對接口電路的工作性能、電路的結構有很大影響使用內部帶有低漂移精密參考電壓源的D/A轉換器不僅能保證有較好的轉換精度,而且可以簡化接口電路。3. DA轉換器模擬輸出電壓的極性所有的DA轉換器件的輸出模擬電壓Vo,都可以表達成為輸入數字量D(數字代碼)和模擬參考電壓VR的乘積。由于目前絕大多數DA輸出的模擬量均為電流量,這個電流量要通過一個反相輸入的運算放大器才能轉換成模擬電壓輸出。

13、在這種情況下,模擬輸出電壓Vo與輸入數字量D和參考電壓VR的關系為:當參考電壓VR極性不變時,要想得到雙極性的模擬輸出,就必須采取四象限工作的DA接口電路,該接口電路輸出的模擬電壓V0為:不論參考電壓VR的極性如何,都可以獲得雙極性的電壓輸出,在參考電壓極性不變時,輸出模擬電壓的極性完全取決于輸入數字量二進制碼的最高位(MSB)。5.4典型的D/A轉換器芯片DAC0832性能介紹 DAC083008310832是8位分辯率的DA轉換集成芯片,與微處理器完全兼容。這個系列的芯片以其價格低廉、接口簡單、轉換控制容易等優點,在單片機應用系統中得到了廣泛的應用 這類DA轉換器由8位輸入鎖存器、8位DA

14、C寄存器、八位DA轉換電路及轉換控制電路構成 。DAC0832的應用特性與引腳功能 DAC0830系列芯片是一種具有兩個輸入數據寄存器的8位DAC,是一個8位D/A轉換器芯片,單電源供電,從+5V+15V均可正常工作。其主體部分為由T型狀態。而模擬開關控制標準電源在T型電阻網絡所產生的電流。輸入的數字量通過兩級緩沖器送到 D/A 轉換電路。通過對這兩級緩沖器進行控制,可以實現直通、單緩沖、雙緩沖三種工作方式。如果控制信號使得兩級緩沖器一直處于選通狀態,則 DAC0832 工作在直通方式;當輸入寄存器、 DAC 寄存器中有一個直接選通,另一個受控制,則它工作在單緩沖方式;當輸入寄存器、DAC 寄

15、存器都受控制時,它工作在雙緩沖方式。DAC0832屬于電流型輸出的 D/A 轉換器。這些電流經外部運算放大器實現 I-V 變換輸出模擬電壓。模擬電壓根據不同的外接電路又可分為單極性和雙極性。DAC0832是8位芯片,采用CMOS工藝和R2RT形電阻解碼網絡, 轉換結果為一對差動電流 I01和 I02輸出,其主要性能參數為:·分辨率: 8位·單電源供電:5V-15V·參考電壓:-10V10V ·轉換時間:1us·滿刻度誤差;士1LSB ·數據輸入電平與TTL電平兼容·電流穩定時間1us;·可單緩沖、雙緩沖或直接數字輸

16、入;·只需在滿量程下調整其線性度;·低功耗,200mW。1)DAC0832內部結構和引腳 DAC0832的內部結構如圖7所示:圖7 DAC0832的內部結構圖DAC0832引腳如圖8所示,它采用20線雙列直插式封裝,引腳功能如下: (1)D7D0轉換數據輸入。(2)CS片選信號(輸入),低電平有效。(3)ILE數據鎖存允許信號(輸入),高電平有效。(4)WR1第一信號(輸入),低電平有效。該信號與ILE 信號共同控制輸入寄存器是數據直通方式還是數據鎖存方式:當ILE=1和XFER=0時,為輸入寄存器直通方式;當ILE=1和WR1 =1時,為輸入寄存器鎖存方式。 (5) WR

17、2 第2寫信號(輸入),低電平有效.該信號與信號合在一起控制DAC寄存器是數據直通方式還是數據鎖存方式:當 WR2=0和XFER=0時,為 DAC寄存器直通方式; 當WR2=1和XFER=0時,為DAC寄存器鎖存方式。 圖8 0832引腳圖(6)XFER數據傳送控制信號(輸入),低電平有效 。 (7)Iout2電流輸出“1”。當數據為全“1”時,輸出電流最大;為全“0”時輸出電流最小。(8)Iout2電流輸出“2”。DAC轉換器的特性之一是:Iout1 +Iout2=常數。(9)RFB反饋電阻端即運算放大器的反饋電阻端,電阻(15K)已固化在芯片中。因為DAC0832是電流輸出型D/A轉換器,

18、為得到電壓的轉換輸出,使用時需在兩個電流輸出端接運算放大器,RFB即為運算放大器的反饋電阻。(10)Vref基準電壓,是外加高精度電壓源,與芯片內的電阻網絡相連接,該電壓可正可負,范圍為-10V+10V。(11)DGND數字地(12)AGND模擬地2)DAC0832工作方式 DAC0832利用WR1 、 WR2 、ILE、XFER 控制信號可以構成三種不同的工作方式。(1) 直通方式WR1= WR2 =0時,數據可以從輸入端經兩個寄存器直接進入D/A轉換器。(2)單緩沖方式兩個寄存器之一始終處于直通,即WR1=0或WR2=0,另一個寄存器處于受控狀態。(3)雙緩沖方式兩個寄存器均處于受控狀態。

19、這種工作方式適合于多模擬信號同時輸出的應用場合。 其中, 所謂單緩沖方式就是使DAC0832的兩個輸入寄存器中有一個(多位DAC寄存器)處于直通方式,而另一個處于受控鎖存方式。單緩沖方式連接如圖9所示:WR74LS373GDAC0832DI0-7CSXFERWR1WR2VccILEVrefRfbIout1Iout2AGNDDGND-+5Vp2.7ALEP080C51oooVout 圖9 單緩沖方式連接圖為使DAC寄存器處于直通方式,應使WR2 =0和XFER=0。為此可把這兩個信號固定接地,或如電路中把WR2與WR1相連,把XFER與CS相連。 為使輸入寄存器處于受控鎖存方式,應把WR1接80

20、C51的WR,ILE接高電平。此外還應把CS接高位地址線或地址譯碼輸出,以便于對輸入寄存器進行選擇。 在多路D/A轉換的情況下,若要求同步轉換輸出,必須采用雙緩沖方式。DAC0832采用雙緩沖方式時,數字量的輸入鎖存和D/A轉換輸出是分兩步進行的。第一,CPU分時向各路D/A轉換器輸入要轉換數字量并鎖存在各自輸入寄存器中。第二,CPU對所有的D/A轉換器發出控制信號,使各路輸入寄存器中的數據進入DAC寄存器,實現同步轉換輸出。如下圖10為兩片DAC0832與8031的雙緩沖方式連接電路,能實現兩路同步輸出。 DAC0832轉換器輸出可以分電流輸出和電壓輸出兩種形式,通常均需通過運算放大器進變換

21、。按電壓輸出時,還可分單極性和雙極性兩種形式 5.5 8051單片機簡要介紹8051單片機包含中央處理器(CPU)、存儲器(程序存儲器ROM和數據存儲器RAM)、定時/計數器、并行I/O接口(P1、P2、P3、P0共4個8位口)、一個雙工串行接口和5個中斷源等幾大單元及數據總線、地址總線和控制總線三大總線等結構組成。8051與DAC0832的雙緩沖方式接口電路如圖10所示。DAC0832的電壓輸出方式如圖11所示CSXFERRfbIout1Iout21WR2WRWRDAC0832DAC0832RfbIout1Iout2CSXFERDI7DI01WR2WRDI7DI0-+-+VxVyP0.7-P

22、0.080C51P2.5P2.6P2.7 圖10 8051與DAC0832的雙緩沖方式接口電路圖10 DAC0832的電壓輸出方式  MCS-51系列單片機中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結構,右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用。現在我們對這些引腳的功能加以說明:MCS-51系列單片機的內部結構示意圖如圖12所示。圖12 MCS-51系列單片機的內部結構示意圖· Pin20: 接地腳。 · Pi

23、n40: 正電源腳,正常工作或對片內EPROM燒入程序時,接+5V電源。 · Pin19: 時鐘XTAL1腳,片內振蕩電路的輸入端。 · Pin18: 時鐘XTAL2腳,片內振蕩電路的輸出端。 8051的時鐘有兩種方式,一種是片內時鐘振蕩方式,但需在18和19腳外接石英晶體(2-12MHz)和振蕩電容,振蕩電容的值一般取10p-30p。另外一種是外部時鐘方式,即將XTAL1接地,外部時鐘信號從XTAL2腳輸入。  · 輸入輸出(I/O)引腳:Pin39-P

24、in32為P0.0-P0.7輸入輸出腳,Pin1-Pin1為P1.0-P1.7輸入輸出腳,Pin21-Pin28為P2.0-P2.7輸入輸出腳,Pin10-Pin17為P3.0-P3.7輸入輸出腳。· Pin9: RESET/V pd 復位信號復用腳。當8051通電,時鐘電路開始工作,在RESET引腳上出現24個時鐘周期以上的高電平,系統即初始復位。初始化后,程序計數器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統即從0000H地址開始執行程序。然而,初始復

25、位不改變RAM(包括工作寄存器R0-R7)的狀態。· Pin30: ALE/ 當訪問外部程序器時,ALE(地址鎖存)的輸出用于鎖存地址的低位字節。而訪問內部程序存儲器時,ALE端將有一個1/6時鐘頻率的正脈沖信號,這個信號可以用于識別單片機是否工作,也可以當作一個時鐘向外輸出。更有一個特點,當訪問外部程序存儲器,ALE會跳過一個脈沖。 如果單片機是EPROM,在編程其間, 將用于輸入編程脈沖。 · Pin29: 當訪問外部程序存儲器時,此腳輸出負脈沖選通信號,PC的16位地址數據將出現在P0和P

26、2口上,外部程序存儲器則把指令數據放到P0口上,由CPU讀入并執行。· Pin31: EA/V pp 程序存儲器的內外部選通線,8051和8751單片機,內置有4kB的程序存儲器,當EA為高電平并且程序地址小于4kB時,讀取內部程序存儲器指令數據,而超過4kB地址則讀取外部指令數據。如EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。顯然,對內部無程序存儲器的8031,EA端必須接地。  ·在對8751的EPROM進行編程時,EA/Vpp 腳還需加上用于編程的電壓。5.6數碼顯示部分八段LED數碼管由8個發

27、光二極管組成。基中7個長條形的發光管排列成“日”字形,另一個圓點形的發光管在顯示器的右下角作為顯示小數點用,它能顯示各種數字及部份英文字母。LED數碼管有兩種不同的形式:一種是8個發光二極管的陽極都連在一起的,稱之為共陽極LED數碼管;另一種是8個發光二極管的陰極都連在一起的,稱之為共陰極LED數碼管。四位八段數碼管的引腳結構如下圖13所示:圖13 四位八段數碼管的引腳結構其中S1,S2,S3,S4為字位選擇端口,A,B,C,D,E,F,G,DP為字形選擇端口。在單片機應用系統中,數碼管顯示常用兩種方法:靜態顯示和動態掃描顯示。所謂靜態顯示,就是每一個顯示器都要占用單獨的具有鎖存功能的I/O接

28、口用于筆劃段字形代碼。這樣單片機只要把要顯示的字形代碼發送到接口電路,就不用管它了,直到要顯示新的數據時,再發送新的字形碼。動態掃描顯示接口是單片機中應用最為廣泛的一種顯示方式之一。其接口電路是把所有顯示器的8個筆劃段A-H同名端連在一起,而每一個顯示器的公共極COM是各自獨立地受I/O線控制。CPU向字段輸出口送出字形碼時,所有顯示器接收到相同的字形碼,但究竟那個顯示器亮,則取決于COM端,而這一端是由I/O控制的,所以就可以自行決定何時顯示哪一位了。所謂動態掃描就是指我們采用分時的方法,輪流控制各個顯示器的COM端,使各個顯示器輪流點亮。在輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫

29、的(約1ms),盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感。六、源程序1、主程序 /* /DAC0832波形控制試驗 /功能:根據按鍵控制輸出頻率和幅值可調的正弦波*/#include <reg52.h>#include <math.h>#include <intrins.h>#include "key.c"#define PI 3.14#define DataNum 256 /定義一個周期的點數/#define DAC0832 XBYTE0x7fff /定義端口地址sbit

30、WRI=P36; /定義寫信號的IO口sbit CS=P27; /定義片選信號的IO口/數碼管顯示的編碼u_char code number_code = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xc1,0X8e;/顯示共陽極的09,全滅,U,F/*延時*/void delay_us(u_int time) do time-; while (time>1); /毫秒級延時程序 void delay_ms(u_int time) while(time!=0) delay_us(1000); time-; /外部中斷0的

31、服務程序void int0_sever(void) interrupt 0 using 1 u_char i; g_keys=1; view_state(); INT0=1; do i=INT0; while(i); /等待P32恢復/外部中斷1的服務程序void int1_sever(void) interrupt 2 using 1 u_char i; g_keys=2; view_state(); INT1=1; do i=INT1; while(i); /等待P33恢復/演示數碼管顯示數字定時器1的中斷服務/*/void time1_sever(void) interrupt 1 us

32、ing 2 u_char buffer4,i; TR0 = 0;buffer3=number_codeqian;buffer2=number_codebai;buffer1=number_codeshi;buffer0=number_codege;P1=0xff;P2|=0x0f; for (i=0; i<4; i+) switch (i) case 0: P1=buffer0;P2&=0xfe; delay_ms(1);P2|=0x0f;break; case 1: P1=buffer1;P2&=0xfd; delay_ms(1);P2|=0x0f;break; cas

33、e 2: P1=buffer2;P2&=0xfb; delay_ms(1);P2|=0x0f;break; case 3: P1=buffer3;P2&=0xf7; delay_ms(1);P2|=0x0f;break; default: break; TH0 =0xd8; /預置計數0初值 TL0 =0xf0; TR0 =1;/實現DA轉換void DAConvert(u_char Data) /EA = 0; CS=1; WRI=1; delay_us(2); CS=0; WRI=0; P0=Data; CS=1; WRI=1; EA = 1;/正弦波數據計算/入口:X為轉

34、換的量,MAX為幅值控制u_int GetSinData(u_char x) u_int SinData; SinData=(sin(2*PI*x/DataNum)+1)/2.0)*255; SinData=SinData*g_max/16; /MAX為1至16 return SinData;/*/系統上電初始化/*/void system_init(void) TMOD = 0x11; / T/C0 T/C1方式 0 定時 TH0 = 0xd8; /預置計數0初值 TL0 = 0xf0; TR0 = 1; /開啟T0計數 IE = 0x87; /定時器0,外部中斷0,1,CPU開中斷IT1=

35、1; IT0=1; /選擇INT0為電平觸發方式g_state=0;g_keys=0;qian=0; bai=0; shi=0; ge=1; g_max=16;g_fre=10;/主程序main() u_char i=0; system_init(); /系統初始化 while (1) for( i=0;i<DataNum;i+ ) DAConvert( GetSinData(i); delay_us(g_fre*10); /控制正弦波每個點的輸出時間以產生一定的頻率 2、按鍵子程序/* 文件名:key.c功能描述:讀取鍵值,并根據當前的狀態執行相關的模塊子程序 適用類型:AT89S系列

36、 設計者:劉毅 /K1=正弦波菜單鍵/K2=參數修改鍵/鍵盤接口是p3.2和p3.3*/#define u_int unsigned int#define u_char unsigned char/定義全局變量u_char g_max,g_keys,g_state,g_fre;/ g_max表示幅值參數,g_keys鍵值,g_state系統狀態,g_fre頻率參數 u_char qian,bai,shi,ge;/數碼管顯示位緩存/格式:鍵碼次態執行模塊u_int code fun_zero =1,1,0, 0; /狀態0:顯示當前的波形代碼u_int code fun_one =1,2,2,

37、2,1,3, 0; /狀態1:顯示正弦波幅值代碼u_int code fun_two =1,0,4, 2,2,3, 0; /狀態2:顯示正弦波頻率代碼/*/功能:進入正弦波幅值的設定void into_scop(void) qian=11; bai=10; shi=g_max/10; ge=g_max%10; /LED顯示U_*/功能:進入正弦波頻率的設定void into_fre(void) qian=12; bai=10; shi=g_fre/10; ge=g_fre%10; /LED顯示F_*/功能:參數值的遞增循環輸入void in_Parameter(void) if(g_state=1) g_max+; if(g_max>16) g_max=1; shi=g_max/10; ge=g_max%10; else if(g_state=2) g_fre+; if(g_fre>10) g_fre=1; shi=g_fre/10; ge=g_fre%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論