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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  一實(shí)訓(xùn)目的</b></p><p>  通過(guò)本課程的實(shí)訓(xùn),旨在使學(xué)生在掌握先修課程的基礎(chǔ)上,一方面能綜合應(yīng)用這些課程的理論知識(shí),更重要的一方面,是讓學(xué)生親自動(dòng)手,參與到工程實(shí)踐訓(xùn)練中。使學(xué)生在之前掌握的電路.模電.數(shù)電等知識(shí),以及單片機(jī)知識(shí)的基礎(chǔ)上,進(jìn)一步掌握電子產(chǎn)品設(shè)計(jì)以及開發(fā)調(diào)試的全過(guò)程,尤其包括掌握PCB板的設(shè)計(jì).印刷,元器件的安裝.電路調(diào)試.程序調(diào)試.程

2、序下載等實(shí)踐實(shí)訓(xùn)部分,真正培養(yǎng)學(xué)生理論聯(lián)系實(shí)際.分析解決一般性技術(shù)問(wèn)題以及實(shí)際動(dòng)手的能力。</p><p><b>  二.設(shè)計(jì)原理</b></p><p>  電子琴由以下幾個(gè)部件組成:?jiǎn)纹瑱C(jī)89S51、電源、4*4的16個(gè)按鈕矩陣、音頻放大模塊、復(fù)位模塊,數(shù)碼管,LED顯示模塊、晶振模塊。</p><p> ?。?)AT89S51單片機(jī)及其

3、引腳說(shuō)明</p><p>  AT89S51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲(chǔ)單元,功能強(qiáng)大的微型計(jì)算機(jī)的AT89S51&

4、lt;/p><p>  1.主要特性:· 8031 CPU與MCS-51 兼容· 4K字節(jié)可編程FLASH存儲(chǔ)器(壽命:1000寫/擦循環(huán))· 全靜態(tài)工作:0Hz-24KH· 三級(jí)程序存儲(chǔ)器保密鎖定· 128*8位內(nèi)部RAM· 32條可編程I/O線· 兩個(gè)16位定時(shí)器/計(jì)數(shù)器· 6個(gè)中斷源·

5、可編程串行通道· 低功耗的閑置和掉電模式· 片內(nèi)振蕩器和時(shí)鐘電路</p><p>  (2)主要管腳說(shuō)明:    P0口:P0口為一個(gè)8位漏級(jí)開路準(zhǔn)雙向I/O口,每腳可吸收8TTL門電流。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必

6、須被拉高。    P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。    P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,

7、輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)</p><p>  P3口同時(shí)為閃爍編程

8、和編程校驗(yàn)接收一些控制信號(hào)。</p><p><b>  1.音樂(lè)產(chǎn)生的方法</b></p><p>  一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)

9、系弄正確即可。</p><p>  若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間,每當(dāng)計(jì)時(shí)終止后就將P0.0反相,然后重復(fù)計(jì)時(shí)再反相。就可在P0.0引腳上得到此頻率的脈沖。</p><p>  利用AT89S51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如

10、,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計(jì)數(shù)器計(jì)時(shí)956μs/1μs=956,每計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO(523Hz)。</p><p>  計(jì)數(shù)脈沖值與頻率的關(guān)系式(如式2-1所示)是:</p><p>  N=fi÷2÷fr        &

11、#160;                2-1</p><p>  式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。</p><p>  其計(jì)數(shù)初值T的求法如下:</p>

12、<p>  T=65536-N=65536-fi÷2÷fr</p><p>  例如:設(shè)K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計(jì)數(shù)值。</p><p>  T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536

13、-500000/fr</p><p>  低音DO的T=65536-500000/262=63627</p><p>  中音DO的T=65536-500000/523=64580</p><p>  高音DO的T=65536-500000/1046=65059</p><p>  單片機(jī)12MHZ晶振,高中低音符與計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如表2

14、-2所示</p><p>  表2-2 音符頻率表</p><p>  我們要為這個(gè)音符建立一個(gè)表格,單片機(jī)通過(guò)查表的方式來(lái)獲得相應(yīng)的數(shù)據(jù)    低音0-19之間,中音在20-39之間,高音在40-59之間    TABLE: DW 0, 63628, 63835, 64021, 64103, 64260, 64400, 64

15、524, 0, 0</p><p>  DW 0, 63731, 63928, 0, 64185, 64331, 64463, 0, 0, 0</p><p>  DW 0, 64580, 64684, 64777, 64820, 64898, 64968, 65030, 0, 0</p><p>  DW 0, 64633, 64732, 0, 64860, 64

16、934, 64994, 0, 0, 0</p><p>  DW 0, 65058, 65110,65157, 65178, 65217, 65252, 65283, 0, 0</p><p>  DW 0, 65085, 65134, 0, 65198, 65235, 65268, 0, 0, 0</p><p><b>  DW 0 

17、0;  </b></p><p>  音樂(lè)的音拍,一個(gè)節(jié)拍為單位(C調(diào))(如表2-3所示)</p><p><b>  表2-3 曲調(diào)值表</b></p><p>  對(duì)于不同的曲調(diào)我們也可以用單片機(jī)的另外一個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成。</p><p>  琴鍵處理程序,根據(jù)檢測(cè)到得按鍵值,查詢

18、音律表,給計(jì)時(shí)器賦值,發(fā)出相應(yīng)頻率的聲音。對(duì)音調(diào)的控制:根據(jù)不同的按鍵,對(duì)定時(shí)器T1送入不同的初值,調(diào)節(jié)T1的溢出時(shí)間,這樣就可以輸出不同音調(diào)頻率的方波。不同音調(diào)下各個(gè)音階的定時(shí)器。在這個(gè)程序中用到了兩個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成的。其中T0用來(lái)產(chǎn)生音符頻率,T1用來(lái)產(chǎn)生音拍。</p><p>  2.4X4行列式鍵盤識(shí)別及顯示</p><p>  組成鍵盤的按鍵有機(jī)械式、電容式、導(dǎo)電橡膠式、薄膜

19、式多種,但不管什么形式,其作用都是一個(gè)使電路接通與斷開的開關(guān)。目前微機(jī)系統(tǒng)中使用的鍵盤按其功能不同,通??煞譃榫幋a鍵盤和非編碼鍵盤兩種基本類型。 編碼鍵盤:鍵盤本身帶有實(shí)現(xiàn)接口主要功能所需的硬件電路。不僅能自動(dòng)檢測(cè)被按下的鍵,并完成去抖動(dòng)、防串鍵等功能,而且能提供與被按鍵功能對(duì)應(yīng)的鍵碼(如ASCII碼)送往CPU。所以,編碼鍵盤接口簡(jiǎn)單、使用方便。但由于硬件電路較復(fù)雜,因而價(jià)格較貴。 非編碼鍵盤:鍵盤只簡(jiǎn)單地提供按鍵開關(guān)

20、的行列矩陣。有關(guān)按鍵的識(shí)別、鍵碼的確定與輸入、去抖動(dòng)等功能均由軟件完成。目前微機(jī)系統(tǒng)中,一般為了降低成本大多數(shù)采用非編碼鍵盤。 鍵盤接口必須具有去抖動(dòng)、防串鍵、按鍵識(shí)別和鍵碼產(chǎn)生4個(gè)基本功能。 (1)去抖動(dòng):每個(gè)按鍵在按下或松開時(shí),都會(huì)產(chǎn)生短時(shí)間的抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間與鍵的質(zhì)量相關(guān),一般為5—20mm。所謂抖動(dòng)是指在識(shí)別被按鍵是必須避開抖動(dòng)狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開狀態(tài)才能保證識(shí)別正確無(wú)誤。去抖問(wèn)</p>

21、;<p>  題可通過(guò)軟件延時(shí)或硬件電路解決。 (2)防串鍵:防串鍵是為了解決多個(gè)鍵同時(shí)按下或者前一按鍵沒有釋放又有新的按鍵按下時(shí)產(chǎn)生的問(wèn)題。常用的方法有雙鍵鎖定和N鍵輪回兩種方法。雙鍵鎖定,是當(dāng)有兩個(gè)或兩個(gè)以上的按鍵按下時(shí),只把最后釋放的鍵當(dāng)作有效鍵并產(chǎn)生相應(yīng)的鍵碼。N鍵輪回,是當(dāng)檢測(cè)到有多個(gè)鍵被按下時(shí),能根據(jù)發(fā)現(xiàn)它們的順序依次產(chǎn)生相應(yīng)鍵的鍵碼。 (3)被按鍵識(shí)別:如何識(shí)別被按鍵是接口解決的主要問(wèn)題,一般

22、可通過(guò)軟硬結(jié)合的方法完成。常用的方法有行掃描法和線反轉(zhuǎn)法兩種。行掃描法的基本思想是,由程序?qū)︽I盤逐行掃描,通過(guò)檢測(cè)到的列輸出狀態(tài)來(lái)確定閉合鍵,為此,需要設(shè)置入口、輸出口一個(gè),該方法在微機(jī)系統(tǒng)中被廣泛使用。線反轉(zhuǎn)法的基本思想是通過(guò)行列顛倒兩次掃描來(lái)識(shí)別閉合鍵,為此需要提供兩個(gè)可編程的雙向輸入/輸出端口。 (4)鍵碼產(chǎn)生:為了從鍵的行列坐標(biāo)編碼得到反映鍵功能的鍵碼,一般在內(nèi)存區(qū)中建立一個(gè)鍵盤編碼表,通過(guò)查表獲得被按鍵的鍵碼。<

23、/p><p>  用AT89S51的并行口P0接4×4矩陣鍵盤,以P0.0-P0.3作輸入線,以P0.4-P0.7作輸出線;在數(shù)碼管上顯示每個(gè)按鍵的“0-F”序號(hào)。</p><p>  3.LED數(shù)碼顯示原理:    (1)七段LED顯示器內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽(yáng)極型。 LED數(shù)

24、碼管的g~a七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼表(如表2-1所示) </p><p>  表2-1  字形碼表</p><p> ?。?)由于顯示的數(shù)字0-9的字形碼沒有規(guī)律可循,只能采用查表的方式來(lái)完成我們所需的要求了。這樣我們按著數(shù)字0-9的順序,把每個(gè)數(shù)字的筆段代碼按順序排

25、好!建立的表格如下所示:TABLEDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。</p><p>  4.電子琴實(shí)現(xiàn)原理1. 電源部分:是由220V的市電通過(guò)變壓、整流穩(wěn)壓利用7805來(lái)得到+5V電壓,維持系統(tǒng)的正常工作;把7805的3腳輸出接到89S51的40引腳上 </p><p>  2 .4*4的16個(gè)按鈕矩陣: 4*4行列式鍵盤識(shí)別;行

26、線接P0口的P0.0~P0.3,列線P0.4~P0.7,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關(guān)的一端(列線)通過(guò)電阻接VCC,而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。</p><p>  3. 晶振模塊:用12MHZ的晶振,及兩個(gè)30pf的電容,接到單片機(jī)的18,19,20腳,電路如圖(a)所示</p><p> ?。╝)

27、 (b)</p><p>  4. 復(fù)位模塊:利用開關(guān)和一個(gè)10uf的極性電容并聯(lián)接單片機(jī)9腳“reset”腳,電路如圖(b)所示</p><p>  5. 音頻放大模塊:利用三極管將信號(hào)放大,由揚(yáng)聲器放出,信號(hào)由單片機(jī)的17腳“P3.7”口讀出,電路如圖(c)所示 </p><p>  (c)

28、 (d)</p><p>  6. 數(shù)碼管:利用AT89S51單片機(jī)的P2端口的P2.0-P2.7連接到一個(gè)七段數(shù)碼管的a-h(huán)的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示0-7數(shù)字,時(shí)間間隔0.2秒。</p><p><b>  三.硬件電路</b></p><p>  圖3.1 硬件電路原理圖Pr

29、otel</p><p>  圖3.2 硬件電路PCB</p><p>  四.系統(tǒng)程序設(shè)計(jì)流程圖</p><p>  五.Proteus仿真電路</p><p>  圖4.1 Proteus仿真電路圖</p><p><b>  六.源程序</b></p><p> ?。?/p>

30、1)Soundplay調(diào)用程序:</p><p>  /*說(shuō)明**************************************************************************</p><p>  曲譜存貯格式 unsigned char code MusicName{音高,音長(zhǎng),音高,音長(zhǎng)...., 0,0};末尾:0,0 表示結(jié)束(Important

31、)</p><p>  音高由三位數(shù)字組成:</p><p>  個(gè)位是表示 1~7 這七個(gè)音符 </p><p>  十位是表示音符所在的音區(qū):1-低音,2-中音,3-高音;</p><p>  百位表示這個(gè)音符是否要升半音: 0-不升,1-升半音。</p><p>  音長(zhǎng)最多由三位數(shù)字組成: </p>

32、<p>  個(gè)位表示音符的時(shí)值,其對(duì)應(yīng)關(guān)系是: </p><p>  |數(shù)值(n): |0 |1 |2 |3 | 4 | 5 | 6 </p><p>  |幾分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n</p><p>  十位表示音符的演奏效果(0-2): 0-普通,1-連音,2-頓音</p><

33、;p>  百位是符點(diǎn)位: 0-無(wú)符點(diǎn),1-有符點(diǎn)</p><p>  調(diào)用演奏子程序的格式</p><p>  Play(樂(lè)曲名,調(diào)號(hào),升降八度,演奏速度);</p><p>  |樂(lè)曲名 : 要播放的樂(lè)曲指針,結(jié)尾以(0,0)結(jié)束;</p><p>  |調(diào)號(hào)(0-11) :是指樂(lè)曲升多少個(gè)半音演奏;

34、</p><p>  |升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度;</p><p>  |演奏速度(1-12000):值越大速度越快;</p><p>  ***************************************************************************/</p><

35、;p>  #ifndef __SOUNDPLAY_H_REVISION_FIRST__</p><p>  #define __SOUNDPLAY_H_REVISION_FIRST__</p><p>  //**************************************************************************</p>&l

36、t;p>  #define SYSTEM_OSC 12000000//定義晶振頻率12000000HZ</p><p>  #define SOUND_SPACE 4/5 //定義普通音符演奏的長(zhǎng)度分率,//每4分音符間隔</p><p>  sbit BeepIO = P3^7;//定義輸出管腳</p><p>  unsi

37、gned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始頻率表</p><p>  unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在頻率表中的位置</p><p>  unsigned

38、char code LengthTab[7]= { 1,2,4,8,16,32,64 };</p><p>  unsigned char Sound_Temp_TH0,Sound_Temp_TL0;//音符定時(shí)器初值暫存 </p><p>  unsigned char Sound_Temp_TH1,Sound_Temp_TL1;//音長(zhǎng)定時(shí)器初值暫存</p>

39、<p>  //**************************************************************************</p><p>  void InitialSound(void)</p><p><b>  { </b></p><p>  BeepIO = 1;&

40、lt;/p><p>  Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;// 計(jì)算TL1應(yīng)裝入的初值 (10ms的初裝值)</p><p>  Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;// 計(jì)算TH1應(yīng)裝入的初值 </p><p>  TH1 = Sound

41、_Temp_TH1;</p><p>  TL1 = Sound_Temp_TL1;</p><p>  TMOD= 0x11;</p><p>  ET0 = 1;</p><p>  ET1 = 0;</p><p>  TR0 = 0;</p><p>  TR1

42、= 0;</p><p>  EA = 1;</p><p><b>  }</b></p><p>  void BeepTimer0(void) interrupt 1//音符發(fā)生中斷</p><p>  { BeepIO = 0;</p><p>  BeepIO = !

43、BeepIO;</p><p>  TH0 = Sound_Temp_TH0;</p><p>  TL0 = Sound_Temp_TL0;</p><p><b>  }</b></p><p>  //***************************************************

44、***********************</p><p>  void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)</p><p>  {BeepIO = 0;</p><p>  unsigned int NewFreTab[

45、12];//新的頻率表</p><p>  unsigned char i,j;</p><p>  unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;</p><p>  unsigned char Tone,Length,SL,SH,SM,SLen,XG

46、,FD;</p><p>  for(i=0;i<12;i++) // 根據(jù)調(diào)號(hào)及升降八度來(lái)生成新的頻率表 </p><p><b>  {</b></p><p>  j = i + Signature;</p><p>  if(j > 11)</p><p><b&

47、gt;  {</b></p><p><b>  j = j-12;</b></p><p>  NewFreTab[i] = FreTab[j]*2;</p><p><b>  }</b></p><p><b>  else</b></p>&l

48、t;p>  NewFreTab[i] = FreTab[j];</p><p>  if(Octachord == 1)</p><p>  NewFreTab[i]>>=2;</p><p>  else if(Octachord == 3)</p><p>  NewFreTab[i]<<=2;</p&

49、gt;<p>  }</p><p>  SoundLength = 0;</p><p>  while(Sound[SoundLength] != 0x00)//計(jì)算歌曲長(zhǎng)度</p><p><b>  {</b></p><p>  SoundLength+=2;</p>

50、;<p><b>  }</b></p><p>  Point = 0;</p><p>  Tone = Sound[Point];</p><p>  Length = Sound[Point+1]; // 讀出第一個(gè)音符和它時(shí)時(shí)值</p><p>  LDiv0 = 12000/Spee

51、d;// 算出1分音符的長(zhǎng)度(幾個(gè)10ms) </p><p>  LDiv4 = LDiv0/4; // 算出4分音符的長(zhǎng)度 </p><p>  LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最長(zhǎng)間隔標(biāo)準(zhǔn) </p><p>  TR0 = 0;</p><p>  TR1 =

52、1;</p><p>  while(Point < SoundLength)</p><p><b>  {</b></p><p>  SL=Tone%10; //計(jì)算出音符 </p><p>  SM=Tone/10%10; //計(jì)算出高低音 </p><p

53、>  SH=Tone/100; //計(jì)算出是否升半 </p><p>  CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出對(duì)應(yīng)音符的頻率 </p><p><b>  if(SL!=0)</b></p><p><b>  {</b></p>

54、<p>  if (SM==1) CurrentFre >>= 2; //低音 </p><p>  if (SM==3) CurrentFre <<= 2; //高音</p><p>  Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//計(jì)算計(jì)數(shù)器初值</p>

55、<p>  Sound_Temp_TH0 = Temp_T/256; </p><p>  Sound_Temp_TL0 = Temp_T%256; </p><p>  TH0 = Sound_Temp_TH0; </p><p>  TL0 = Sound_Temp_TL0 + 12; //加12是對(duì)中斷延時(shí)的補(bǔ)償 </p><

56、;p><b>  }</b></p><p>  SLen=LengthTab[Length%10]; //算出是幾分音符</p><p>  XG=Length/10%10; //算出音符類型(0普通1連音2頓音) </p><p>  FD=Length/100;</p><p>  LDiv=LDiv

57、0/SLen; //算出連音音符演奏的長(zhǎng)度(多少個(gè)10ms)</p><p>  if (FD==1) </p><p>  LDiv=LDiv+LDiv/2;</p><p>  if(XG!=1)</p><p>  if(XG==0) //算出普通音符的演奏長(zhǎng)度 </p><p>  if (SL

58、en<=4)</p><p>  LDiv1=LDiv-LDiv4;</p><p><b>  else</b></p><p>  LDiv1=LDiv*SOUND_SPACE;</p><p><b>  else</b></p><p>  LDiv1=LDi

59、v/2; //算出頓音的演奏長(zhǎng)度 </p><p><b>  else</b></p><p>  LDiv1=LDiv;</p><p>  if(SL==0) LDiv1=0;</p><p>  LDiv2=LDiv-LDiv1; //算出不發(fā)音的長(zhǎng)度 </p><p>  if

60、(SL!=0)</p><p><b>  {</b></p><p><b>  TR0=1;</b></p><p>  for(i=LDiv1;i>0;i--) //發(fā)規(guī)定長(zhǎng)度的音 </p><p><b>  {</b></p><p>

61、  while(TF1==0);</p><p>  TH1 = Sound_Temp_TH1;</p><p>  TL1 = Sound_Temp_TL1;</p><p><b>  TF1=0;</b></p><p><b>  }</b></p><p><

62、b>  }</b></p><p>  if(LDiv2!=0)</p><p><b>  {</b></p><p>  TR0=0; BeepIO=0;</p><p>  for(i=LDiv2;i>0;i--) //音符間的間隔</p><p><b>

63、;  {</b></p><p>  while(TF1==0);</p><p>  TH1 = Sound_Temp_TH1;</p><p>  TL1 = Sound_Temp_TL1;</p><p><b>  TF1=0;</b></p><p><b>  }

64、</b></p><p><b>  }</b></p><p>  Point+=2; </p><p>  Tone=Sound[Point];</p><p>  Length=Sound[Point+1];</p><p><b>  }</b></

65、p><p>  BeepIO = 0;</p><p><b>  }</b></p><p>  //**************************************************************************</p><p><b>  #endif</b>&

66、lt;/p><p><b> ?。?)主程序</b></p><p>  #include <REG52.H></p><p>  #include "SoundPlay.h"</p><p>  #include<intrins.h></p><p>  

67、#include<math.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  int shang,key;</p><p>  sbit w=P3^2;</p><p>  sbit

68、 k = P3^0;//定義輸出管腳</p><p>  void delay(unsigned int t)</p><p><b>  {</b></p><p>  unsigned int i, j;</p><p>  for (i = 0;i < t;i++)</p>

69、<p>  for (j = 0;j < 10;j++)</p><p><b>  ;</b></p><p><b>  }</b></p><p>  unsigned char code table[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3//</p>&l

70、t;p>  0x66,0x6d,0x7d,0x07, //4,5,6,7//</p><p>  0x7f,0x6f,0x77,0x7c, //8,9,a,b//</p><p>  0x39,0x5e,0x79,0x71 //c,d,e,f//</p><p><b>  };</b></p><p>

71、  //*****************************Music******************************************************</p><p><b>  //揮著翅膀的女孩</b></p><p>  unsigned char code Music_Girl[]={ 0x17,0x02, 0x17,0x03

72、, 0x18,0x03, 0x19,0x02, 0x15,0x03,</p><p>  0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,</p><p>  0x17,0x03

73、, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,</p><p>  0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,</p><p>  0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,</p><p>

74、  0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,</p><p>  0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,</p><p>  0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,</p>

75、<p>  0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,</p><p>  0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,</p><p>  0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03

76、,</p><p>  0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,</p><p>  0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,</p><p>  0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03

77、, 0x19,0x03,</p><p>  0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,</p><p>  0x00, 0x00,0x00};</p><p><b>  //同一首歌</b></p><p>  unsigned char code M

78、usic_Same[]={ 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,</p><p>  0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02,</p><p>  0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x0

79、2,</p><p>  0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,</p><p>  0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,</p><p>  0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x7

80、0, 0x1A,0x03,</p><p>  0x19,0x00, 0x00,0x00 };</p><p>  //兩只蝴蝶 </p><p>  unsigned char code Music_Two[] ={ 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x0

81、3, 0x17,0x03,</p><p>  0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,</p><p>  0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,</p><p>  0x10,0x0E, 0x15,0x04, 0x0F,0x0

82、1, 0x17,0x03, 0x16,0x03,</p><p>  0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01,</p><p>  0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,</p><p>  0x16,0x03, 0x15,0x0

83、3, 0x10,0x03, 0x15,0x03, 0x16,0x01,</p><p>  0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,</p><p>  0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,</p><p>  0x16,0x0

84、D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,</p><p>  0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,</p><p>  0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,</p><p>

85、;  0x10,0x03, 0x15,0x00, 0x00,0x00 };</p><p>  //***********************************************************************************</p><p>  unsigned char code Music_Gir2[]={ 0x25,0x02,0x00,0x0

86、0};</p><p>  unsigned char code Music_Gir3[]={ 0x57,0x02,0x00,0x00};</p><p>  unsigned char code Music_Gir4[]={ 0x84,0x02,0x00,0x00};</p><p>  unsigned char code Music_Gir5[]={ 0x98

87、,0x02,0x00,0x00};</p><p>  unsigned char code Music_Gir6[]={ 0xc0,0x02,0x00,0x00};</p><p>  unsigned char code Music_Gir7[]={ 0x15,0x02,0x00,0x00};</p><p>  unsigned char code Music

88、_Gir8[]={ 0x17,0x02,0x00,0x00};</p><p>  unsigned char code Music_Gir9[]={ 0x16,0x02,0x00,0x00};</p><p>  unsigned char code Music_Gir10[]={ 0x1A,0x02,0x00,0x00};</p><p>  unsigned

89、char code Music_Gir11[]={ 0x1B,0x02,0x00,0x00};</p><p>  unsigned char code Music_Gir12[]={ 0x0E,0x02,0x00,0x00};</p><p>  unsigned char code Music_Gir13[]={ 0x19,0x02,0x00,0x00};</p><

90、;p>  unsigned char code Music_Gir14[]={ 0x17,0x02,0x00,0x00};</p><p><b>  //鍵盤按鍵程序 </b></p><p>  void scan() // 鍵盤掃描程序</p><p><b>  { </b></

91、p><p>  uchar hao[4]={0x0e,0x0d,0x0b,0x07};</p><p>  uchar key_[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //決定了鍵盤按鍵布局 </p><p>  uchar temp,h,j,i,high,low;</p><p>  bit

92、find=0; //定義位find標(biāo)志 并賦值零</p><p><b>  P0=0xf0; </b></p><p>  temp=P0; //行低電平 列高電平</p><p>  if(temp!=0xf0) //檢測(cè)是否有鍵按下</p><p><b>

93、;  {</b></p><p>  delay(20); //去抖</p><p>  if(temp!=0xf0) //確定有鍵按下</p><p><b>  { </b></p><p>  find=1; //標(biāo)志有鍵按下</p><p>  hi

94、gh=(temp>>4); //將列的狀態(tài)存入high</p><p>  P0=0x0f; //翻轉(zhuǎn)行列電平</p><p>  temp=P0; //再次讀取P0</p><p>  low=(temp&0x0f); //將行的狀態(tài)存入low</p><p>  for(i=0;i<4

95、;i++) //確定按鍵的坐標(biāo)</p><p><b>  {</b></p><p>  if(hao[i]==high){j=i;}</p><p>  if(hao[i]==low){h=i;}</p><p><b>  }</b></p><p><b>

96、  }</b></p><p><b>  }</b></p><p>  if(find==0){key=16;}</p><p>  else key=4*h+j;</p><p>  shang=key;</p><p>  }

97、 </p><p>  void keydown()//判斷按鍵是否按下</p><p><b>  { </b></p><p><b>  P0=0xF0 ;</b></p><p>  if(P0!=0xF0)&l

98、t;/p><p><b>  {</b></p><p><b>  scan() ;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  main()</

99、b></p><p><b>  {k=1;w=0;</b></p><p>  InitialSound();</p><p><b>  while(1)</b></p><p>  {shang=20;</p><p>  keydown();</p>

100、<p>  if(shang==13) {P2=table[13]; k=0; delay(200);Play(Music_Girl,0,3,360);k=1;}</p><p>  if(shang==14) {P2=table[14];k=0;delay(200);Play(Music_Same,0,3,360);k=1;}</p><p>  if(shang==15)

101、 {P2=table[15];k=0;delay(200);Play(Music_Two,0,3,360);k=1;}</p><p>  if(shang==0) {shang=20;Play(Music_Gir2,0,3,360);P2=table[0];k=0;delay(600);k=1;}</p><p>  if(shang==1) {shang=20;Play(Music

102、_Gir3,0,3,360);P2=table[1];k=0;delay(600);k=1;}</p><p>  if(shang==2) {shang=20;Play(Music_Gir4,0,3,360);P2=table[2];k=0;delay(600);k=1;}</p><p>  if(shang==3) {shang=20;Play(Music_Gir5,0,3,36

103、0);P2=table[3];k=0;delay(600);k=1;}</p><p>  if(shang==4) {shang=20;Play(Music_Gir6,0,3,360);P2=table[4];k=0;delay(600);k=1;}</p><p>  if(shang==5) {shang=20;Play(Music_Gir7,0,3,360);P2=table[

104、5];k=0;delay(600);k=1;}</p><p>  if(shang==6) {shang=20;Play(Music_Gir8,0,3,360);P2=table[6];k=0;delay(600);k=1;}</p><p>  if(shang==7) {shang=20;Play(Music_Gir9,0,3,360);P2=table[7];k=0;delay

105、(600);k=1;}</p><p>  if(shang==8) {shang=20;Play(Music_Gir10,0,3,360);P2=table[8];k=0;delay(600);k=1;}</p><p>  if(shang==9) {shang=20;Play(Music_Gir11,0,3,360);P2=table[9];k=0;delay(600);k=1;

106、}</p><p>  if(shang==10) {shang=20;Play(Music_Gir12,0,3,360);P2=table[10];k=0;delay(600);k=1;}</p><p>  if(shang==11) {shang=20;Play(Music_Gir13,0,3,360);P2=table[11];k=0;delay(600);k=1;}</p&

107、gt;<p>  if(shang==12) {shang=20;Play(Music_Gir14,0,3,360);P2=table[12];k=0;delay(600);k=1;}</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  七.元

108、件清單</b></p><p>  AT89S51芯片1個(gè)</p><p>  二極管IN40044個(gè)(電橋) </p><p>  極性電容220uf/50V2個(gè)</p><p>  10uf 1個(gè)</p><p>  4電容105

109、2個(gè)</p><p>  30pf 2個(gè)</p><p>  5電阻排1K1個(gè)</p><p>  6電阻5001個(gè)</p><p>  1K9個(gè)</p><p>  5.1K1個(gè)</p><p>  10K

110、1個(gè)</p><p>  7晶振 12MHZ1個(gè)</p><p>  8紅色發(fā)光LED 1個(gè)</p><p>  97段數(shù)碼管 共陰1個(gè)</p><p>  10開關(guān)17個(gè)</p><p>  11喇叭

111、1個(gè)</p><p>  12變壓器1個(gè)</p><p>  13下載線1根</p><p>  14LM78051個(gè)</p><p>  159015PNP1個(gè)</p><p>  169013NPN1個(gè)</p

112、><p><b>  八.設(shè)計(jì)心得與體會(huì)</b></p><p>  在為期一周的單片機(jī)課程設(shè)計(jì)中,我在增長(zhǎng)知識(shí)、提高能力的同時(shí),產(chǎn)生了很深的感觸。從初步定下方案到編出程序,從不斷的運(yùn)行排錯(cuò)到調(diào)試成功,在整個(gè)設(shè)計(jì)過(guò)程中,著實(shí)受益匪淺,不僅可以鞏固以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過(guò)的東西。</p><p>  我懂得了理論與實(shí)際相結(jié)

113、合是很重要的,眼高手低的現(xiàn)象常常難以避免。只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。</p><p>  在設(shè)計(jì)的過(guò)程中難免會(huì)遇到各種各樣的問(wèn)題,但是在這重重困難之中我了解到自己的真實(shí)水平,并努力提高自己。同時(shí)我明白,對(duì)于想要成功的人來(lái)說(shuō)更重要的不是知識(shí)或技能,而是克服困難的信心。實(shí)踐證明看似“莫名其妙”的錯(cuò)誤只要堅(jiān)持嘗試必定有辦法解決,應(yīng)靈活地從各方面找

114、原因而不是一味歸咎于實(shí)驗(yàn)儀器或軟件平臺(tái)。</p><p>  同時(shí)我意識(shí)到合作的精神是非常重要的。有目的的分工可以提高課程設(shè)計(jì)的質(zhì)量和效率,互幫互助的學(xué)風(fēng)可以使每個(gè)成員走最少的彎路而增長(zhǎng)最多的知識(shí)。</p><p>  通過(guò)這次的課程設(shè)計(jì)作品的制作讓我對(duì)單片機(jī)的理論有了更加深入的了解,同時(shí)在具體的制作過(guò)程中我們發(fā)現(xiàn)現(xiàn)在書本上的知識(shí)與實(shí)際的應(yīng)用存在著不小的差距,書本上的知識(shí)很多都是理想化后的

115、結(jié)論,忽略了很多實(shí)際的因素,或者涉及的不全面,可在實(shí)際的應(yīng)用時(shí)這些是不能被忽略的,我們不得不考慮這方的問(wèn)題,這讓我們無(wú)法根據(jù)書上的理論就輕易得到預(yù)想中的結(jié)果,有時(shí)結(jié)果甚至很差別很大。通過(guò)這次實(shí)訓(xùn),基本掌握了Protel99SE原理圖的畫法,并畫出PCB圖,如何利用protues進(jìn)行仿真,利用keil生成hex文件。通過(guò)開發(fā)板的設(shè)計(jì)和硬件搭建的過(guò)程,使我對(duì)51系單片機(jī)的接口有了更深層次的理解,熟悉了一些單片機(jī)常用的外圍電路引腳和連接方法。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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)論