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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p>  摘要………………………………………………………………………… 2</p><p>  第一章 課程設(shè)計(jì)任務(wù)書…………………………………………… 3</p><p>  第二章 系統(tǒng)的主要功能說明……………………………………… 4</p><p>

2、  2.1系統(tǒng)的主要功能…………………………………………………… 4 </p><p>  2.2系統(tǒng)的設(shè)計(jì)思路…………………………………………………… 4</p><p>  第三章 元器件介紹……………………………………………………5</p><p>  3.1單片機(jī)AT89C51…………………………………………………… 5</p><

3、p>  3.2數(shù)模轉(zhuǎn)換器DAC0832……………………………………………… 6</p><p>  3.3數(shù)碼管顯示器……………………………………………………… 8</p><p>  3.4 接口擴(kuò)展8255A…………………………………………………… 9</p><p>  3.5其他元器件說明…………………………………………………… 10</p&g

4、t;<p>  第四章 硬件設(shè)計(jì)………………………………………………………10</p><p>  4.1工作原理…………………………………………………………… 10</p><p>  4.2單片機(jī)及外圍電路設(shè)計(jì)…………………………………………… 11</p><p>  4.3輸入模塊設(shè)計(jì)……………………………………………………… 11<

5、/p><p>  4.4顯示模塊設(shè)計(jì)……………………………………………………… 12</p><p>  4.5系統(tǒng)硬件設(shè)計(jì)圖…………………………………………………… 12</p><p>  4.6硬件系統(tǒng)設(shè)計(jì)圖…………………………………………………… 14</p><p>  第五章 軟件設(shè)計(jì)………………………………………………………15

6、</p><p>  5.1程序分析…………………………………………………………… 15</p><p>  5.2程序流程圖………………………………………………………… 15</p><p>  5.3程序設(shè)計(jì)…………………………………………………………… 16</p><p>  5.4源程序……………………………………………………………

7、… 21</p><p>  參考文獻(xiàn)…………………………………………………………………… 27</p><p>  小結(jié)與體會(huì)………………………………………………………………… 27</p><p><b>  摘要</b></p><p>  本設(shè)計(jì)是一個(gè)基于單片機(jī)的簡(jiǎn)易函數(shù)發(fā)生器,函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)方法有多種,利

8、用單片機(jī)設(shè)計(jì)的函數(shù)信號(hào)發(fā)生器具有編程靈活、顯示清楚等優(yōu)點(diǎn)。它能產(chǎn)生方波、正弦波、鋸齒波和三角波等波形,并實(shí)現(xiàn)對(duì)頻率的調(diào)節(jié)。在編程語(yǔ)言上,此處選擇了簡(jiǎn)便實(shí)用的C語(yǔ)言,在波形調(diào)試和與硬件配合時(shí)更加容易。經(jīng)過不斷改進(jìn),現(xiàn)在已實(shí)現(xiàn)了所有與其目標(biāo)。</p><p>  關(guān)鍵詞:?jiǎn)纹瑱C(jī) 函數(shù)發(fā)生 波形 C語(yǔ)言</p><p>  第一章 課程設(shè)計(jì)任務(wù)書</p><p

9、>  題 目: 簡(jiǎn)易函數(shù)信號(hào)發(fā)生器設(shè)計(jì)</p><p><b>  初始條件:</b></p><p>  1.采用MCS51作為主控芯片;</p><p>  2.采用D/A轉(zhuǎn)換和放大處理,輸出信號(hào);</p><p>  3.要求能輸出方波、三角波、鋸齒波和正弦波4種信號(hào),頻率可調(diào)。</p>&

10、lt;p>  要求完成的主要任務(wù): </p><p>  查閱參考資料,自學(xué)相關(guān)可編程接口芯片的內(nèi)部結(jié)構(gòu)、工作方式和初始化編程過程;</p><p>  根據(jù)設(shè)計(jì)系統(tǒng)的具體功能和性能參數(shù),明確設(shè)計(jì)目標(biāo);</p><p>  單片機(jī)系統(tǒng)及其擴(kuò)展接口電路設(shè)計(jì),繪制系統(tǒng)硬件原理圖;</p><p>  編制系統(tǒng)控制源程序,繪制源程序流程圖,包

11、括初始化和監(jiān)控程序;</p><p>  撰寫設(shè)計(jì)說明書(包括參考資料目錄,字?jǐn)?shù)不少于5000字)</p><p><b>  時(shí)間安排:(兩周)</b></p><p>  指導(dǎo)教師簽名: 2013年 1 月 3 日</p><p>  系主任(或責(zé)任教師)簽名:

12、 年 月 日</p><p>  第二章 系統(tǒng)的主要功能說明</p><p>  2.1系統(tǒng)的主要功能</p><p>  課程設(shè)計(jì)要求的內(nèi)容為:制作簡(jiǎn)易函數(shù)發(fā)生器,采用MCS51作為主控芯片;采用D/A轉(zhuǎn)換和放大處理,輸出信號(hào);要求能輸出方波、三角波、鋸齒波和正弦波4種信號(hào),頻率可調(diào)。</p><p>  該系統(tǒng)不但

13、滿足了課程設(shè)計(jì)題目的基本要求,而且增設(shè)了LED波形指示燈,數(shù)碼管頻率顯示器等原件,使操作更簡(jiǎn)單,使用界面更人性化。</p><p>  2.2系統(tǒng)的設(shè)計(jì)思路</p><p>  第三章 元器件介紹</p><p>  3.1單片機(jī)AT89C51</p><p><b>  1.基本組成</b></p>

14、<p>  AT89C51內(nèi)部結(jié)構(gòu)</p><p><b>  1.運(yùn)算器</b></p><p>  運(yùn)算器由8 位算術(shù)邏輯運(yùn)算單元ALU (Arithmetic Logic Unit )、8 位累加器ACC (Accumulator )、8 位寄存器B 、 程序狀態(tài)字寄存器PSW (Program Status Word )、8 位暫存寄存器TMP1 和

15、TMP2 等組成。 </p><p><b>  2.控制器</b></p><p>  主要由程序計(jì)數(shù)器PC 、 指令寄存器IR 、 指令譯碼器ID 、 堆棧指針SP 、 數(shù)據(jù)指針DPTR 、 時(shí)鐘發(fā)生器及定時(shí)控制邏輯等組成。</p><p>  3.單片機(jī)芯片引腳描述</p><p><b>  單片機(jī)引腳

16、圖</b></p><p>  (1)主電源引腳VCC</p><p> ?。?)外接晶振引腳XTAL1和XTAL2</p><p>  (3)復(fù)位引腳RST,輸入高電平是AT89C51復(fù)位</p><p>  (4)輸入/輸出引腳P0、P1、P2、P3(共32根)</p><p> ?。?)程序存儲(chǔ)器選擇

17、信號(hào)引腳EA</p><p> ?。?)外部程序存儲(chǔ)器讀選通信號(hào)引腳PSEN</p><p> ?。?)外部存儲(chǔ)器低8位地址鎖存信號(hào)引腳ALE</p><p>  3.2數(shù)模轉(zhuǎn)換器DAC0832 </p><p>  DAC0832是8分辨率的D/A轉(zhuǎn)換集成芯片。與微處理器完全兼容。這個(gè)DA芯片以其價(jià)格低廉、接口簡(jiǎn)單、轉(zhuǎn)換控制容易等優(yōu)點(diǎn),在單

18、片機(jī)應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。D/A轉(zhuǎn)換器由8位輸入鎖存器、8位DAC寄存器、8位D/A轉(zhuǎn)換電路及轉(zhuǎn)換控制電路構(gòu)成。</p><p><b>  DAC0832</b></p><p>  (1)分辨率為8位;</p><p>  (2)電流穩(wěn)定時(shí)間1us;</p><p>  (3)可單緩沖、雙緩沖或直接數(shù)字輸入;&l

19、t;/p><p>  (4)只需在滿量程下調(diào)整其線性度;</p><p>  (5)單一電源供電(+5V~+15V);</p><p>  (6)低功耗,20mW。</p><p>  DAC0832結(jié)構(gòu):</p><p>  (1) D0~D7:8位數(shù)據(jù)輸入線,TTL電平,有效時(shí)間應(yīng)大于90ns(否則鎖存器的數(shù)據(jù)會(huì)出錯(cuò))

20、;</p><p>  (2) ILE:數(shù)據(jù)鎖存允許控制信號(hào)輸入線,高電平有效;</p><p>  (3)CS:片選信號(hào)輸入線(選通數(shù)據(jù)鎖存器),低電平有效;</p><p>  (4)WR1:數(shù)據(jù)鎖存器寫選通輸入線,負(fù)脈沖(脈寬應(yīng)大于500ns)有效。由ILE、CS、WR1的邏輯組合產(chǎn)生LE1,當(dāng)LE1為高電平時(shí),數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線變換,LE1的負(fù)跳變時(shí)

21、將輸入數(shù)據(jù)鎖存;</p><p>  (5)XFER:數(shù)據(jù)傳輸控制信號(hào)輸入線,低電平有效,負(fù)脈沖(脈寬應(yīng)大于500ns)有效;</p><p>  (6) WR2:DAC寄存器選通輸入線,負(fù)脈沖(脈寬應(yīng)大于500ns)有效。由WR2、XFER的邏輯組合產(chǎn)生LE2,當(dāng)LE2為高電平時(shí),DAC寄存器的輸出隨寄存器的輸入而變化,LE2的負(fù)跳變時(shí)將數(shù)據(jù)鎖存器的內(nèi)容打入DAC寄存器并開始D/A轉(zhuǎn)換。

22、</p><p>  (7)IOUT1:電流輸出端1,其值隨DAC寄存器的內(nèi)容線性變化;</p><p>  (8)IOUT2:電流輸出端2,其值與IOUT1值之和為一常數(shù);</p><p>  (9)Rfb:反饋信號(hào)輸入線,改變Rfb端外接電阻值可調(diào)整轉(zhuǎn)換滿量程精度;</p><p>  (10) Vcc:電源輸入端,Vcc的范圍為+5V~

23、+15V;</p><p>  (11) VREF:基準(zhǔn)電壓輸入線,VREF的范圍為-10V~+10V;</p><p>  (12) AGND:模擬信號(hào)地</p><p>  (13 )DGND:數(shù)字信號(hào)地</p><p><b>  3.3數(shù)碼管顯示器</b></p><p>  LED數(shù)碼管

24、由7個(gè)發(fā)光二極管組成,此外,還有一個(gè)圓點(diǎn)型發(fā)光二極管(在圖中以dp表示),用于顯示小數(shù)點(diǎn)。通過七段發(fā)光二極管亮暗的不同組合,可以顯示多種數(shù)字、字母以及其它符號(hào)。</p><p>  本設(shè)計(jì)采用共陰極接法:把發(fā)光二極管的陰極連在一起構(gòu)成公共陰極。使用時(shí)公共陰極接地,這樣陽(yáng)極端輸入高電平的段發(fā)光二極管就導(dǎo)通點(diǎn)亮,而輸入低電平的則不點(diǎn)亮。各數(shù)字及部分字母代碼表如下:</p><p><b&

25、gt;  3.4 8255A</b></p><p>  Intel 8086/8088 系列的可編程外設(shè)接口電路簡(jiǎn)稱 PPI,型號(hào)為8255(改進(jìn)型為8255A及8255A-5),具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過它CPU可直接與外設(shè)相連接。</p><p&

26、gt;  8255A在使用前要寫入一個(gè)方式控制字,選擇A、B、C三個(gè)端口各自的工作方式,共有三種;</p><p>  方式0 :基本的輸入輸出方式,即無須聯(lián)絡(luò)就可以直接進(jìn)行的 I/O方式。其中A、B、C口的高四位或低四位可分別設(shè)置成輸入或輸出。</p><p>  方式1 :選通I/O,此時(shí)接口和外圍設(shè)備需聯(lián)絡(luò)信號(hào)進(jìn)行協(xié)調(diào),只有A口和B口可以工作在方式1,此時(shí)C口的某些線被規(guī)定為A口或B

27、口與外圍設(shè)備的聯(lián)絡(luò)信號(hào),余下的線只有基本的I/O功能,即只工作在方式0.</p><p>  方式2: 雙向I/O方式,只有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時(shí)C口有5條線被規(guī)定為A口和外圍設(shè)備的雙向聯(lián)絡(luò)線,C口剩下的三條線可作為B口方式1的聯(lián)絡(luò)線,也可以和B口一起方式0的I/O線。</p><p>  8255A是一個(gè)并行輸入、輸出器件,具有24個(gè)可編程設(shè)置的I/O口

28、,包括3組8位的I/O為PA口、PB口、PC口,又可分為2組12位的I/O口:A組包括A口及C口高4位,B組包括B口及C組的低4位。</p><p>  A口可以設(shè)置為方式0、方式1、方式2,B口與C口只能設(shè)置為方式0或方式1.</p><p>  3.5其他元器件說明</p><p>  晶振電路使用12MHZ的晶體振蕩器,30PF的電容。復(fù)位電路采用10UF的電

29、容,10K的電阻。波形指示區(qū)采用四個(gè)綠色LED燈。頻率顯示器電路中除3個(gè)7段數(shù)碼管外還使用了3個(gè)三極管。波形信號(hào)的放大電路上采用了兩個(gè)放大器。</p><p><b>  主要元器件列表:</b></p><p>  第四章 硬件設(shè)計(jì)</p><p><b>  4.1工作原理</b></p><p

30、>  本系統(tǒng)由單片機(jī)AT89C51對(duì)不同的模塊進(jìn)行統(tǒng)一調(diào)配控制以達(dá)到設(shè)計(jì)目的。首先是輸入模塊,為節(jié)省引腳,此處設(shè)計(jì)為4×4矩陣鍵盤。軟件選用反轉(zhuǎn)法掃描。此功能由P1口控制。數(shù)據(jù)讀入后,經(jīng)單片機(jī)程序分析,分別控制三個(gè)輸出部分:.四個(gè)LED燈,通過其亮滅顯示當(dāng)前輸出的波形類型,此功能由P3.0、P3.1、P3.3、P3.4四個(gè)引腳控制;.三個(gè)共陰極數(shù)碼顯示管,用以顯示當(dāng)前波形的頻率,此功能由P0口輸出數(shù)據(jù),8255A擴(kuò)展接口

31、實(shí)現(xiàn);.示波器。P0口分時(shí)復(fù)用,控制數(shù)碼管顯示后對(duì)數(shù)模轉(zhuǎn)換器DAC0832輸出波形數(shù)據(jù),信號(hào)經(jīng)放大電路放大,然后送至示波器顯示。</p><p>  外圍原件此處省略不講,軟件部分見下章。</p><p>  4.2單片機(jī)及外圍電路設(shè)計(jì)</p><p>  如圖所示,單片機(jī)P口采用總線的連接形式。晶振頻率為12MHz,電容C1、C2均為10uF。復(fù)位電路中,電容C3

32、的作用是在按鈕按下時(shí)儲(chǔ)存電能,電阻R11用作在按鈕斷開時(shí)保護(hù)電路。P3.2口接高電平和按鈕,用來實(shí)現(xiàn)外部中斷的下降沿觸發(fā)。</p><p><b>  4.3輸入模塊設(shè)計(jì)</b></p><p>  為節(jié)省接口,鍵盤設(shè)計(jì)為4*4矩陣鍵盤,通過P1口的高四位和低四位分別對(duì)鍵盤的行和列進(jìn)行掃描,從而檢測(cè)出按下的鍵。具體工作情況詳見軟件部分。</p><

33、p><b>  4.4接口擴(kuò)展</b></p><p>  為了解決接口不足的問題,本設(shè)計(jì)中使用8255A芯片對(duì)P0口進(jìn)行擴(kuò)展,它采用工作方式0即最基本的輸入輸出方式。用鎖存器進(jìn)行地址鎖存,將P0口輸出的數(shù)據(jù)依次存放在A、B、C口,控制所接的三個(gè)數(shù)碼管持續(xù)顯示。</p><p><b>  4.5顯示模塊設(shè)計(jì)</b></p>

34、<p><b>  頻率顯示</b></p><p>  此處采用3個(gè)共陰極的數(shù)碼管顯示波形頻率,顯示方式為靜態(tài)顯示。提供數(shù)據(jù)的8255A芯片具有鎖存功能,故數(shù)據(jù)只需輸入一次便可持續(xù)顯示。次設(shè)計(jì)結(jié)構(gòu)簡(jiǎn)單又能實(shí)現(xiàn)所要求的功能,同時(shí)也是設(shè)計(jì)要求外的創(chuàng)新點(diǎn)。</p><p><b>  波形選擇</b></p><p>

35、;  此處為設(shè)計(jì)要求外的第二處創(chuàng)新點(diǎn),為了告訴操作者示波器當(dāng)前顯示波的波形,我采用了四個(gè)LED燈對(duì)相應(yīng)的波形進(jìn)行指示,通過觀察燈的亮滅就能加以區(qū)分。圖示狀態(tài)為:三角波正在顯示。</p><p><b>  波形顯示</b></p><p>  此處是整個(gè)系統(tǒng)的第二核心,當(dāng)P0口對(duì)頻率顯示信號(hào)輸出完畢后,數(shù)模轉(zhuǎn)換器開關(guān)打開,P0開始為其輸送波形信號(hào)。輸入的信號(hào)經(jīng)功率放大

36、器放大后送至示波器顯示</p><p>  4.6系統(tǒng)硬件設(shè)計(jì)圖</p><p>  第五章 軟件設(shè)計(jì)</p><p><b>  5.1程序分析</b></p><p>  本設(shè)計(jì)采用簡(jiǎn)單方便的C語(yǔ)言編寫程序。為了使編程時(shí)思路清晰,采用模塊化的編寫方式,即分功能編寫子程序,再由主函數(shù)根據(jù)需要依次調(diào)用。按照思路,程序

37、進(jìn)入主函數(shù)后需先對(duì)要用到的外部中斷和定時(shí)計(jì)數(shù)器進(jìn)行初始化,然后進(jìn)入波形輸出的無限循環(huán)中,在此過程中由中斷系統(tǒng)對(duì)輸出進(jìn)行控制,首先程序控制P1口掃描鍵盤,重新輸入波形和頻率的信息,輸入的數(shù)據(jù)經(jīng)程序處理后輸出數(shù)據(jù)送至LED波形指示燈和數(shù)碼管頻率顯示器對(duì)輸入信息進(jìn)行顯示。之后P0口為數(shù)模轉(zhuǎn)換器輸送波形數(shù)據(jù),使示波器顯示波形。</p><p><b>  5.2程序流程圖</b></p>

38、<p><b>  5.3程序設(shè)計(jì)</b></p><p><b>  主函數(shù)</b></p><p>  void main() </p><p><b>  { </b></p><p>  chushihua();//調(diào)用初始化程序,對(duì)中斷和定時(shí)計(jì)數(shù)器初始化

39、</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  {switch(old)</p><p>  { case 33:fang(); break;//檢查按鍵的返回值并選擇輸出波形</p><p>  case

40、44:tran(); break; </p><p>  case 55:jvchi();break;</p><p>  case 66:sin(); break;</p><p><b>  } </b></p><p><b>  }</b></p><p>&l

41、t;b>  } </b></p><p><b>  }</b></p><p><b>  初始化程序:</b></p><p>  void chushihua()</p><p>  {sled=0x80;//8255A控制寄存器初始化</p><p&

42、gt;  IT0=1;//外部中斷0下降沿觸發(fā)</p><p>  EX0=1;//外部中斷0中斷允許</p><p>  EA=1;//CPU中斷允許打開</p><p>  PX0=1;//外部中斷0優(yōu)先</p><p>  TMOD=0x20;//</p><p><b>  TR1=1;//</

43、b></p><p><b>  }</b></p><p><b>  延時(shí)程序:</b></p><p>  因?yàn)镃語(yǔ)言編寫的程序必須經(jīng)過編譯才能應(yīng)用于單片機(jī),而不同的語(yǔ)句編譯后指令的周期不確定,故延時(shí)函數(shù)不宜使用簡(jiǎn)單的for語(yǔ)句或while語(yǔ)句。本處使用單片機(jī)的定時(shí)計(jì)數(shù)器計(jì)時(shí),在很大程度上提高了延時(shí)時(shí)間的精準(zhǔn)性

44、。</p><p>  void delay()//延時(shí)</p><p><b>  {</b></p><p>  while(!TF1);</p><p><b>  TF1=0;</b></p><p><b>  }</b></p>

45、<p>  void delayms(uint j)//</p><p>  {uchar mm;</p><p>  while(j--)</p><p>  {for(mm=0;mm<216;mm++);}</p><p><b>  }</b></p><p><b

46、>  顯示程序:</b></p><p>  此處的顯示程序?yàn)閿?shù)碼管頻率顯示提供數(shù)據(jù)。為了便于編程,顯示程序由顯示子程序和總顯示程序兩部分組成。顯示子程序設(shè)置了三個(gè)不同的參數(shù),通過總程序的調(diào)用及賦值,在數(shù)組中調(diào)用不用的數(shù)字對(duì)應(yīng)的代碼進(jìn)行顯示。</p><p>  void xshz(uchar h,uchar m,uchar p)//顯示子程序</p>&l

47、t;p>  {sled1=smg[h];</p><p>  sled2=smg[m];</p><p>  sled3=smg[p]; </p><p><b>  }</b></p><p>  void xsh()//總顯示</p><p>  { if(k==3) xshz(a[0

48、],a[1],a[2]);</p><p>  if(k==2) xshz(12,a[0],a[1]);</p><p>  if(k==1) xshz(12,12,a[0]);</p><p>  if(k==0) xshz(10,0,11);</p><p><b>  }</b></p><p&

49、gt;<b>  鍵盤輸入程序:</b></p><p>  本處使用鍵盤的掃描方法為反轉(zhuǎn)法,其原理是給端口賦值兩次,通過檢測(cè)兩次的結(jié)果而得到按鍵的信息。例如:</p><p>  1.給P1口賦值0x0f,即00001111,假設(shè)第一個(gè)鍵按下了,則這時(shí)P1口的實(shí)際值為00001110;</p><p>  2.給P1口再賦值0xf0,即111

50、10000,如果第一個(gè)鍵按下了,則這時(shí)P1口的實(shí)際值為11100000;</p><p>  3.把兩次P1口的實(shí)際值相加得11101110,即0xee。</p><p>  由此我們便得到了按下第一個(gè)鍵時(shí)所對(duì)應(yīng)的數(shù)值0xee,以此類推可得出其他15個(gè)按鍵對(duì)應(yīng)的數(shù)值,有了這種對(duì)應(yīng)關(guān)系,矩陣鍵盤編程問題也就解決了,也就是程序的算法已經(jīng)有了。</p><p>  uch

51、ar input() //輸入</p><p>  { uchar hang,lie,rr;</p><p><b>  rr=0;</b></p><p><b>  P1=0xf0;</b></p><p>  if((P1&0xf0)!=0xf0)//軟件消抖</p>&

52、lt;p>  {delayms(20);</p><p>  if((P1&0xf0)!=0xf0)</p><p>  { hang=P1&0xf0;</p><p><b>  P1=0x0f;</b></p><p>  lie=P1&0x0f;</p><p>

53、;  rr=hang+lie;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(rr==table[0]) return(33);//對(duì)不同掃描結(jié)果返回不同的值</p><p>  else if(rr==table[1]) return(4

54、4);</p><p>  else if(rr==table[4]) return(1);</p><p>  else if(rr==table[5]) return(2);</p><p>  else if(rr==table[2]) return(55);</p><p>  else if(rr==table[3])

55、 return(66);</p><p>  else if(rr==table[6]) return(3);</p><p>  else if(rr==table[7]) return(0);</p><p>  else if(rr==table[8]) return(4);</p><p>  else if(rr==table[9]

56、) return(5);</p><p>  else if(rr==table[10]) return(6);</p><p>  else if(rr==table[11]) return(11);</p><p>  else if(rr==table[12]) return(7);</p><p>  else if(rr==tabl

57、e[13]) return(8);</p><p>  else if(rr==table[14]) return(9);</p><p>  else if(rr==table[15]) return(22);</p><p>  else return(12);</p><p><b>  }</b></p&g

58、t;<p><b>  波形函數(shù):</b></p><p><b>  方波</b></p><p>  void fang()</p><p>  { uchar i;</p><p>  DAC0832=0;</p><p>  for(i=0;i<

59、128;i++)</p><p><b>  delay();</b></p><p>  DAC0832=0xff;</p><p>  for(i=0;i<128;i++)</p><p><b>  delay();</b></p><p><b>  

60、}</b></p><p><b>  鋸齒波</b></p><p>  void jvchi()</p><p>  { unsigned char x;</p><p>  for(x=0;x<255;x++)</p><p>  {DAC0832=x;</p>

61、<p><b>  delay();}</b></p><p><b>  }</b></p><p><b>  三角波</b></p><p>  void tran()//三角波</p><p>  { unsigned char y;</p>

62、<p>  for(y=0;y<128;y++)</p><p>  {DAC0832=y;</p><p><b>  delay();</b></p><p><b>  }</b></p><p>  for(y=128;y>0;y--)</p><

63、p>  { DAC0832=y;</p><p><b>  delay();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  正弦波</b></p><p>

64、;  void sin()</p><p>  { unsigned char mm;</p><p>  for(mm=0;mm<255;mm++)</p><p>  {DAC0832=table2[mm];</p><p><b>  delay();}</b></p><p><

65、;b>  }</b></p><p><b>  中斷函數(shù):</b></p><p>  void zhongduan() interrupt 0 //中斷</p><p>  { uchar e,f=0;</p><p><b>  f=0;</b></p>&

66、lt;p><b>  k=0;</b></p><p>  while(input()==12);</p><p>  a[0]=input();</p><p>  if(a[0]==33) {p30=0;p31=1;p33=1;p34=1;old=a[0];}</p><p>  else if(a[0]==4

67、4) {p31=0;p30=1;p33=1;p34=1;old=a[0];}</p><p>  else if(a[0]==55) {p33=0;p31=1;p30=1;p34=1;old=a[0];}</p><p>  else if(a[0]==66) {p34=0;p30=1;p31=1;p33=1;old=a[0];}</p><p><b>

68、  else{ </b></p><p>  for(e=0;e<3;e++)</p><p>  { while(input()>9);</p><p>  a[e]=input();</p><p>  f=10*f+a[e];</p><p><b>  k++;</b&

69、gt;</p><p><b>  xsh();</b></p><p>  delayms(100);</p><p><b>  }</b></p><p>  TH1=256-(1000000/f)/256;</p><p>  TL1=256-(1000000/f)/

70、256;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  5.4源程序</b></p><p>  #include<reg51.h></p><p>  #include<a

71、bsacc.h></p><p>  #define DAC0832 XBYTE[0x0200]</p><p>  #define sled1 XBYTE[0x0100]</p><p>  #define sled2 XBYTE[0x0101]</p><p>  #define sled3 XBYTE[0x0102]</p&

72、gt;<p>  #define sled XBYTE[0x0103]</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  uchar input();</p><p><b>  uint f;<

73、;/b></p><p>  sbit p30=P3^0;</p><p>  sbit p31=P3^1;</p><p>  sbit p33=P3^3;</p><p>  sbit p34=P3^4;</p><p>  sbit p35=P3^5;</p><p>  sbit

74、p36=P3^6;</p><p>  sbit p37=P3^7;</p><p>  uchar old; </p><p>  uchar a[4];</p><p>  uchar k=0;</p><p>  uchar code smg[]={0x3f,0x06,0x5b,0x

75、4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,</p><p>  0x3e,0x00}; </p><p>  uchar code table[]={0xe7,0xeb,0xed,0xee,0xd7,0xdb,0xdd,0xde,0xb7,0xbb,0xbd,</p><p>  0xbe,0x77,0x7b,0x7d,0x7e};

76、 </p><p>  uchar code table2[]={</p><p>  0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92,</p><p>  0x94,0x97,0x99,0x9B,0x9E,0xA0,0xA3,0xA5,</p><p>  0xA7,0xAA,0xAC,0xAE,0xB1,0

77、xB3,0xB5,0xB7,</p><p>  0xB9,0xBB,0xBD,0xBF,0xC1,0xC3,0xC5,0xC7,</p><p>  0xC9,0xCB,0xCC,0xCE,0xD0,0xD1,0xD3,0xD4,</p><p>  0xD6,0xD7,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE,</p><p

78、>  0xDF,0xE0,0xE1,0xE2,0xE3,0xE3,0xE4,0xE4,</p><p>  0xE5,0xE5,0xE6,0xE6,0xE7,0xE7,0xE7,0xE7,</p><p>  0xE7,0xE7,0xE7,0xE7,0xE6,0xE6,0xE5,0xE5,</p><p>  0xE4,0xE4,0xE3,0xE3,0xE2,

79、0xE1,0xE0,0xDF,</p><p>  0xDE,0xDD,0xDC,0xDB,0xDA,0xD8,0xD7,0xD6,</p><p>  0xD4,0xD3,0xD1,0xD0,0xCE,0xCC,0xCB,0xC9,</p><p>  0xC7,0xC5,0xC3,0xC1,0xBF,0xBD,0xBB,0xB9,</p><

80、p>  0xB7,0xB5,0xB3,0xB1,0xAE,0xAC,0xAA,0xA7,</p><p>  0xA5,0xA3,0xA0,0x9E,0x9B,0x99,0x97,0x94,</p><p>  0x92,0x8F,0x8D,0x8A,0x88,0x85,0x83,0x80,</p><p>  0x7D,0x7B,0x78,0x76,0x73

81、,0x71,0x6E,0x6C,</p><p>  0x69,0x67,0x65,0x62,0x60,0x5D,0x5B,0x59,</p><p>  0x56,0x54,0x52,0x4F,0x4D,0x4B,0x49,0x47,</p><p>  0x45,0x43,0x41,0x3F,0x3D,0x3B,0x39,0x37,</p><

82、;p>  0x35,0x34,0x32,0x30,0x2F,0x2D,0x2C,0x2A,</p><p>  0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,</p><p>  0x20,0x1F,0x1E,0x1D,0x1D,0x1C,0x1C,0x1B,</p><p>  0x1B,0x1A,0x1A,0x1A,0x1

83、9,0x19,0x19,0x19,</p><p>  0x19,0x19,0x19,0x19,0x1A,0x1A,0x1A,0x1B,</p><p>  0x1B,0x1C,0x1C,0x1D,0x1D,0x1E,0x1F,0x20,</p><p>  0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,</p>&l

84、t;p>  0x2A,0x2C,0x2D,0x2F,0x30,0x32,0x34,0x35,</p><p>  0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45,</p><p>  0x47,0x49,0x4B,0x4D,0x4F,0x52,0x54,0x56,</p><p>  0x59,0x5B,0x5D,0x60,0x

85、62,0x65,0x67,0x69,</p><p>  0x6C,0x6E,0x71,0x73,0x76,0x78,0x7B,0x7D};</p><p>  void chushihua()//初始化</p><p>  { sled=0x80;</p><p><b>  IT0=1;</b></p>

86、<p><b>  EX0=1;</b></p><p><b>  EA=1;</b></p><p><b>  PX0=1;</b></p><p>  TMOD=0x20;</p><p><b>  TR1=1;</b></p

87、><p><b>  }</b></p><p>  void delay()//延時(shí)</p><p><b>  {</b></p><p>  while(!TF1);</p><p><b>  TF1=0;</b></p><p&

88、gt;<b>  }</b></p><p>  void delayms(uint j)</p><p>  {uchar mm;</p><p>  while(j--)</p><p>  {for(mm=0;mm<216;mm++);}</p><p><b>  }&l

89、t;/b></p><p>  void xshz(uchar h,uchar m,uchar p)//顯示子程序</p><p><b>  {</b></p><p>  sled1=smg[h];</p><p>  sled2=smg[m];</p><p>  sled3=smg[

90、p]; </p><p><b>  }</b></p><p>  void xsh()//顯示</p><p>  { if(k==3) xshz(a[0],a[1],a[2]);</p><p>  if(k==2) xshz(12,a[0],a[1]);</p><p>  if(k==

91、1) xshz(12,12,a[0]);</p><p>  if(k==0) xshz(10,0,11);</p><p><b>  }</b></p><p>  uchar input() //輸入</p><p>  { uchar hang,lie,rr;</p><p><b&

92、gt;  rr=0;</b></p><p><b>  P1=0xf0;</b></p><p>  if((P1&0xf0)!=0xf0)</p><p>  {delayms(20);</p><p>  if((P1&0xf0)!=0xf0)</p><p> 

93、 { hang=P1&0xf0;</p><p><b>  P1=0x0f;</b></p><p>  lie=P1&0x0f;</p><p>  rr=hang+lie;</p><p><b>  }</b></p><p><b>  }

94、</b></p><p>  if(rr==table[0]) return(33);</p><p>  else if(rr==table[1]) return(44); </p><p>  else if(rr==table[4]) return(1);</p><p>  else if(rr==t

95、able[5]) return(2);</p><p>  else if(rr==table[2]) return(55);</p><p>  else if(rr==table[3]) return(66);</p><p>  else if(rr==table[6]) return(3);</p><p>  else if(rr=

96、=table[7]) return(0);</p><p>  else if(rr==table[8]) return(4);</p><p>  else if(rr==table[9]) return(5);</p><p>  else if(rr==table[10]) return(6);</p><p>  else if(rr

97、==table[11]) return(11);</p><p>  else if(rr==table[12]) return(7);</p><p>  else if(rr==table[13]) return(8);</p><p>  else if(rr==table[14]) return(9);</p><p>  else

98、if(rr==table[15]) return(22);</p><p>  else return(12);</p><p><b>  }</b></p><p>  void fang()//方波</p><p>  { uchar i;</p><p>  DAC0832=0;<

99、/p><p>  for(i=0;i<128;i++)</p><p><b>  delay();</b></p><p>  DAC0832=0xff;</p><p>  for(i=0;i<128;i++)</p><p><b>  delay();</b>

100、</p><p><b>  }</b></p><p>  void jvchi()//鋸齒波</p><p>  { unsigned char x;</p><p>  for(x=0;x<255;x++)</p><p>  {DAC0832=x;</p><p&

101、gt;<b>  delay();}</b></p><p><b>  }</b></p><p>  void tran()//三角波</p><p>  { unsigned char y;</p><p>  for(y=0;y<128;y++)</p><p>

102、;  {DAC0832=y;</p><p><b>  delay();</b></p><p><b>  }</b></p><p>  for(y=128;y>0;y--)</p><p>  { DAC0832=y;</p><p><b>  de

103、lay();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void sin()//正弦波</p><p>  { unsigned char mm;</p><p>  for(mm=0;mm<

104、255;mm++)</p><p>  {DAC0832=table2[mm];</p><p><b>  delay();}</b></p><p><b>  }</b></p><p>  void zhongduan() interrupt 0 //中斷</p><p

105、>  { uchar e,f=0;</p><p><b>  f=0;</b></p><p><b>  k=0;</b></p><p>  while(input()==12);</p><p>  a[0]=input();</p><p>  if(a[0

106、]==33) {p30=0;p31=1;p33=1;p34=1;old=a[0];}</p><p>  else if(a[0]==44) {p31=0;p30=1;p33=1;p34=1;old=a[0];}</p><p>  else if(a[0]==55) {p33=0;p31=1;p30=1;p34=1;old=a[0];}</p><p>  els

107、e if(a[0]==66) {p34=0;p30=1;p31=1;p33=1;old=a[0];}</p><p><b>  else{ </b></p><p>  for(e=0;e<3;e++)</p><p>  { while(input()>9);</p><p>  a[e]=input(

108、);</p><p>  f=10*f+a[e];</p><p><b>  k++;</b></p><p>  if(a[e]==11) {f=f-a[e];e--;k--;}</p><p><b>  xsh();</b></p><p>  delayms(100

109、);</p><p><b>  }</b></p><p>  TH1=256-(1000000/f)/256;</p><p>  TL1=256-(1000000/f)/256;</p><p><b>  }</b></p><p><b>  }</

110、b></p><p>  void main() //主函數(shù)</p><p><b>  { </b></p><p>  chushihua();</p><p><b>  while(1)</b></p><p><b>  {</b><

111、;/p><p>  switch(old)</p><p>  { case 33:fang(); break;</p><p>  case 44:tran(); break;</p><p>  case 55:jvchi();break;</p><p>  case 66:sin(); break;</p&g

112、t;<p><b>  } </b></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  參考文獻(xiàn)</b></p><p>  1.王賢勇 趙傳申 編著.單片機(jī)原理與接口技術(shù)

113、應(yīng)用教程.清華大學(xué)出版社.2010</p><p>  2.劉剛 秦永左 編著.單片機(jī)原理及應(yīng)用.中國(guó)林業(yè)出版社.2006</p><p>  3.肖婧 編著.單片機(jī)入門與趣味實(shí)驗(yàn)設(shè)計(jì).北京航空航天大學(xué)出版社.2008</p><p><b>  小結(jié)與體會(huì)</b></p><p>  通過這次單片機(jī)課程設(shè)計(jì),我不僅加深

114、了對(duì)單片機(jī)理論的理解,將課堂學(xué)到的知識(shí)應(yīng)用到實(shí)際設(shè)計(jì)中去,而且還學(xué)到了很多像以前沒有接觸過的知識(shí)。從布置題目開始老師就告訴我們?cè)O(shè)計(jì)中用到的原件都要自己去查找參數(shù),每使用一個(gè)原件都要有理論依據(jù),要明白它的作用和參數(shù)選擇的依據(jù)。所以,我們都認(rèn)真的在網(wǎng)上,在圖書館查找資料,每個(gè)人都想把自己的設(shè)計(jì)做到最好。</p><p>  我設(shè)計(jì)的簡(jiǎn)易函數(shù)發(fā)生器不但能夠符合題意,而且還在幾個(gè)地方增加了顯示功能,這是作品的一大亮點(diǎn)。這

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論