2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(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>  課 程 設(shè) 計(jì) 說 明 書</p><p>  課程名稱: 《單片機(jī)技術(shù)》 </p><p>  設(shè)計(jì)題目: 按鍵控制電子琴 </p><p>  院(部): 電子信息與電氣工程學(xué)院 </p><p>  學(xué)生姓名: </p&g

2、t;<p>  學(xué) 號(hào): </p><p>  專業(yè)班級(jí): 10級(jí)自動(dòng)化(2)班 </p><p>  指導(dǎo)教師: </p><p><b>  年 月 日</b></p><p>  課 程 設(shè)

3、 計(jì) 任 務(wù) 書</p><p><b>  按鍵控制電子琴</b></p><p>  摘 要:本設(shè)計(jì)以AT89C52單片機(jī)為主芯片,在外圍擴(kuò)展和涉及有關(guān)的芯片及電路,用了AT89C52,晶振,發(fā)光二極管,7805,橋堆2W10,電容,電阻,按鍵等元件設(shè)計(jì)了一個(gè)具有電源開關(guān)及指示燈,復(fù)位鍵,并且由按鍵控制,能夠發(fā)出對(duì)應(yīng)音符的聲音,能夠由不同的音符發(fā)出不同對(duì)應(yīng)的le

4、d燈不同組合的閃亮,而且還可以存儲(chǔ)、播放、清除最多50個(gè)按鍵對(duì)應(yīng)的音符,還自帶了一首音樂可以有按鍵控制播放。程序的設(shè)計(jì)可主要分為按鍵判別、發(fā)聲及顯示、存儲(chǔ)及清除三部分。</p><p>  關(guān)鍵詞:電子琴 存儲(chǔ) 復(fù)位 播放音樂</p><p><b>  .</b></p><p><b>  .</b></p&

5、gt;<p><b>  .</b></p><p><b>  目錄</b></p><p><b>  1. 設(shè)計(jì)背景5</b></p><p><b>  1.1時(shí)代背景5</b></p><p><b>  1.2社會(huì)背

6、景5</b></p><p><b>  2.設(shè)計(jì)方案5</b></p><p>  2.1硬件設(shè)計(jì)方案5</p><p>  2.2軟件設(shè)計(jì)方案6</p><p><b>  3. 方案實(shí)施8</b></p><p>  3.1硬件方案實(shí)施8<

7、/p><p>  3.1.1 復(fù)位電路設(shè)計(jì):8</p><p>  3.1.2 時(shí)鐘電路設(shè)計(jì)8</p><p>  3.1.3 電源電路設(shè)計(jì):9</p><p>  3.1.4 LED閃亮電路設(shè)計(jì):9</p><p>  3.1.5 按鍵電路設(shè)計(jì):10</p><p>  3.1.6 蜂鳴

8、器電路設(shè)計(jì):11</p><p>  3.2軟件方案實(shí)施12</p><p>  3.2.1 主程序12</p><p>  3.2.2 調(diào)用程序12</p><p>  4. 結(jié)果與結(jié)論13</p><p><b>  4.1結(jié)果13</b></p><p>

9、<b>  4.2結(jié)論13</b></p><p>  5. 收獲與致謝14</p><p>  6. 參考文獻(xiàn)15</p><p><b>  7. 附件16</b></p><p>  附件1: 總電路圖16</p><p>  附件2: 程序17</p

10、><p>  附件3:實(shí)物圖24</p><p>  附件4:元器件清單25</p><p><b>  1. 設(shè)計(jì)背景</b></p><p><b>  1.1時(shí)代背景</b></p><p>  單片機(jī)作為最典型的嵌入式系統(tǒng),它的成功應(yīng)用推動(dòng)了嵌入式系統(tǒng)的發(fā)展。近年來,

11、除了各種類型的工控機(jī),各種以通用微處理器構(gòu)成的計(jì)算機(jī)方板模塊、以通用微處理器為核,片內(nèi)擴(kuò)展一些外圍功能電路單元構(gòu)成的嵌入式微處理器,甚至單片形態(tài)的PC機(jī)等,都實(shí)現(xiàn)了嵌入式應(yīng)用,成為嵌入式系統(tǒng)的龐大家族。</p><p>  在當(dāng)今社會(huì),隨著單片機(jī)檔次的不斷提高,功能的不斷完善,其應(yīng)用日趨成熟、應(yīng)用領(lǐng)域日趨擴(kuò)大,特別是工業(yè)測(cè)控、尖端武器和日用家電等領(lǐng)域更是因?yàn)橛辛藛纹瑱C(jī)而生輝增色。</p><p

12、><b>  1.2社會(huì)背景</b></p><p>  電子琴在人們?nèi)粘I钪邢喈?dāng)普遍,在各種音樂會(huì)中,在我們所聽歌曲中它無處不在,隨著生活質(zhì)量的提高,人們對(duì)美的追求日益提高,這樣以來電子琴的需求大大提高。</p><p><b>  2.設(shè)計(jì)方案</b></p><p><b>  2.1硬件設(shè)計(jì)方案&

13、lt;/b></p><p>  方案一:由中斷方式響應(yīng)按下的鍵,本方案的優(yōu)點(diǎn)是:響應(yīng)速度快,延時(shí)時(shí)間短;缺點(diǎn)是:按鍵的抖動(dòng)容易引起誤操作,要想解決這個(gè)問題需要防抖電路,電路復(fù)雜,不容易焊接。</p><p>  方案二:由查詢方式響應(yīng)按下的鍵,本方案的優(yōu)點(diǎn)是:思路簡(jiǎn)單,可以利用軟件消抖,可靠行好;缺點(diǎn)是:按鍵的響應(yīng)速度慢。</p><p>  綜上所述及本次

14、課程設(shè)計(jì)的要求主要是鍛煉我們利用單片機(jī)知識(shí)進(jìn)行簡(jiǎn)單設(shè)計(jì)的能力,故選擇方案二。</p><p><b>  2.2軟件設(shè)計(jì)方案</b></p><p>  電子琴設(shè)計(jì)的系統(tǒng)這些要求編寫出程序主流程圖如圖2.1:</p><p>  圖2.1主程序流程圖</p><p>  電子琴設(shè)計(jì)的編寫主程序中調(diào)用程序的流程圖如圖2.2

15、:</p><p>  圖2.2調(diào)用程序流程圖</p><p><b>  3. 方案實(shí)施</b></p><p><b>  3.1硬件方案實(shí)施</b></p><p>  3.1.1 復(fù)位電路設(shè)計(jì):</p><p>  AT89C52的復(fù)位是由外部的復(fù)位電路來實(shí)現(xiàn)的。復(fù)位

16、引腳RST通過一個(gè)施密特觸發(fā)器與復(fù)位電路相連,施密特觸發(fā)器用來抑制噪聲,在每個(gè)周期的S5P2,施密特觸發(fā)器的輸出電平由復(fù)位電路采樣一次,然后才能得到內(nèi)部復(fù)位操作所需要的信號(hào)。按鍵手動(dòng)電平復(fù)位有電平方式和脈沖方式兩種。其中電平復(fù)位是通過RST端經(jīng)電阻與電源vccrst接通而實(shí)現(xiàn)的,本次實(shí)驗(yàn)采用的是電平復(fù)位電路如圖3.1:</p><p>  圖3.1電平復(fù)位電路</p><p>  3.1.

17、2 時(shí)鐘電路設(shè)計(jì):</p><p>  單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,該高增益反相放大器的輸入端為單片機(jī)的XTAL1,輸出端為引腳XTAL2。這兩個(gè)引腳外部跨接石英振蕩器X1和微調(diào)電容C3和C4,構(gòu)成了穩(wěn)定的自激振蕩器。而電容的大小會(huì)影響振蕩的頻率的高低、振蕩器的穩(wěn)定性和起振的快速性,因此對(duì)于電容選擇是很關(guān)鍵的,我們這次設(shè)計(jì)的時(shí)鐘電路采用了所提供的33pF電容可以構(gòu)成穩(wěn)定的自激振蕩器電路。并且

18、選取的是振蕩頻率11.0925MHz。如圖3.2:</p><p><b>  圖3.2時(shí)鐘電路</b></p><p>  3.1.3 電源電路設(shè)計(jì):</p><p>  電源電路主要用用于為整個(gè)系統(tǒng)提供電源。我們?nèi)粘S秒姸际?20V的交流電,所以在設(shè)計(jì)電源時(shí)要先把交流電整成直流,然后再經(jīng)過穩(wěn)壓管輸出整個(gè)系統(tǒng)所需的穩(wěn)定的直流電壓。整流主要采用

19、2W10橋堆和電容濾波以得到基本穩(wěn)定的輸出電壓。穩(wěn)壓部分是采用常用的穩(wěn)壓管W7805得到穩(wěn)定的輸出正5V電壓。電源電路圖如圖3.3:</p><p>  圖3.3 電源電路圖</p><p>  3.1.4 LED閃亮電路設(shè)計(jì):</p><p>  LED主要是顯示單片機(jī)的按鍵音符,單片機(jī)的P0.0-P0.7接發(fā)光二極管LED燈,采用的是陽極接5V電源的接法,發(fā)光二

20、極管采用高亮led能耐大電流所以不用限流電阻。LED閃亮電路圖見圖3.4:</p><p>  圖3.4 LED閃亮電路圖</p><p>  3.1.5 按鍵電路設(shè)計(jì):</p><p>  按鍵電路是矩陣電路,S1~S18按鍵用于音符;S19按鍵用于播放音樂;S20按鍵用于播放存儲(chǔ)的音樂;S21按鍵用于清除存儲(chǔ)。按鍵電路圖3.5所示;</p><

21、;p>  圖3.5 按鍵電路圖</p><p>  3.1.6 蜂鳴器電路設(shè)計(jì):</p><p>  由于蜂鳴器需要大電流才能驅(qū)動(dòng),所以電路采用npn驅(qū)動(dòng)。蜂鳴器電路如圖3.6所示:</p><p>  圖3.6 蜂鳴器電路圖</p><p><b>  3.2軟件方案實(shí)施</b></p><p

22、><b>  3.2.1 主程序</b></p><p>  主程序流程圖如圖2.1。主程序中包含定時(shí)器、蜂鳴器、按鍵的初始化,以開總中斷,然后調(diào)用按鍵掃描程序。</p><p><b>  程序如下:</b></p><p><b>  main()</b></p><p&

23、gt;<b>  { </b></p><p>  TMOD=0x10; //t1方式1 16 t0 ,0 13 </p><p><b>  ET0=1;</b></p><p>  TH0=0x4C; //定時(shí)器初始值</p><p>  TL0=0x00; </p&

24、gt;<p>  EA=1; //開總中斷</p><p><b>  sound=0;</b></p><p>  P2=0xFF; //置P2口</p><p>  P1=0X00|0XF0 ; //將p1.0 p1.1 p1.2清零p1.3</p><

25、p>  delay(10); //延時(shí)</p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  keydown(); //調(diào)用按鍵判斷檢測(cè)程序</p><p><b>  }</b&

26、gt;</p><p><b>  } </b></p><p>  3.2.2 調(diào)用程序</p><p>  調(diào)用程序的流程圖如圖2.2。函數(shù) keydown(void)完成判斷是否按下按鍵,以及按下的鍵值并確定轉(zhuǎn)向那個(gè)子程序;函數(shù)anjian_zhuanhuan(uchar fy) 完成按下鍵的對(duì)應(yīng)音符的轉(zhuǎn)換為按鍵的處理準(zhǔn)備;函數(shù)anjia

27、n_chuli( uchar conv1_ma ) 將轉(zhuǎn)換的音符播放出來;函數(shù)_anjian_cunchu(uchar _key)) 將按鍵存儲(chǔ)起來;函數(shù)_cunchu_bofang(void) 將存儲(chǔ)起來的按鍵播放;函數(shù)_bofang_yinyue(void)將自帶的音樂播放出來。清除存儲(chǔ)是在程序中定義了一個(gè)全局變量,存儲(chǔ)大于50時(shí)程序認(rèn)為存儲(chǔ)器滿,清除時(shí)只需將其清零。定時(shí)器的值是由音符頻率決定的,在音樂播放中、音符播放、存儲(chǔ)播放中作

28、為決定音調(diào)。詳細(xì)程序見附件2。</p><p><b>  4. 結(jié)果與結(jié)論</b></p><p><b>  4.1結(jié)果</b></p><p>  兩周忙碌后,我們基本完成了設(shè)計(jì)的要求:畫出電路圖,流程圖,焊接電路板等一系列學(xué)生該完成的工作,最終實(shí)現(xiàn)了電源電路,其指示燈亮;復(fù)位電路,按下復(fù)位后正唱復(fù)位;按下S1~S1

29、8能發(fā)出相應(yīng)的音符并且led能響應(yīng)閃亮,按下S19后可以播放自帶音樂led能閃亮,按下S20后可以播放存儲(chǔ)音樂led能閃亮,按下S21后可以清空存儲(chǔ)。</p><p>  總之,能夠?qū)崿F(xiàn)目標(biāo)任務(wù)!</p><p><b>  4.2結(jié)論</b></p><p>  在設(shè)計(jì)過程中要緊扣主題也就是設(shè)計(jì)要求,根據(jù)要求構(gòu)思硬件電路,并一步步列出程序框圖

30、并按照程序框圖嚴(yán)格的進(jìn)行編程,整個(gè)過程需連接的天衣無縫,方能得出最后的結(jié)果。當(dāng)然這個(gè)過程肯定不會(huì)很順利,我們應(yīng)該做好迎接一切困難準(zhǔn)備并知難而進(jìn),只要按計(jì)劃堅(jiān)持下去,一定可以達(dá)到預(yù)期的結(jié)果。其中有非常重要的一個(gè)環(huán)節(jié)就是最后的故障排查與調(diào)試,同時(shí)耐性是極其重要的。帶定時(shí)功能的鬧鈴時(shí)鐘設(shè)計(jì)是單片機(jī)設(shè)計(jì)里很典型的一個(gè)課題,通過本次設(shè)計(jì)擴(kuò)展了我們的知識(shí)面,增強(qiáng)了我們的實(shí)踐能力,不論是在焊接電路,硬件設(shè)計(jì)還是編程,和對(duì)軟件的掌握都大大的提高了。&l

31、t;/p><p><b>  5. 收獲與致謝</b></p><p>  通過本次課程設(shè)計(jì),我初步掌握了單片機(jī)設(shè)計(jì)的思路和方法,就是根據(jù)設(shè)計(jì)要求,先按模塊進(jìn)行硬件電路的設(shè)計(jì)和組合分配;列出主程序流程圖,按順序一步步編程,最后將軟件程序與硬件電路結(jié)合,經(jīng)過調(diào)試,最終實(shí)現(xiàn)所要求的功能。雖然已經(jīng)實(shí)習(xí)過好幾次了,但自我感覺本次實(shí)習(xí)的意義深刻又重大,因?yàn)樗鼘⑽覀円郧八鶎W(xué)過的模電和

32、電路知識(shí)與單片機(jī)天衣無縫的結(jié)合起來,真正的達(dá)到了理論與實(shí)踐的結(jié)合,使我們受益匪淺。還有就是和同學(xué)的合作是非常重要的,在焊接電路板時(shí)如果不是兩個(gè)人合作,沒有人監(jiān)督,難免會(huì)出錯(cuò),當(dāng)我一人焊接的電路板不能工作又難檢查錯(cuò)誤時(shí),我們果斷決定了重新焊接,最終在我們的合作下焊接出了一個(gè)能夠完全達(dá)到要求的板子同時(shí)讓我們?cè)鲞M(jìn)了友誼,鍛煉了動(dòng)手能力。</p><p>  在此感謝**老師對(duì)我們的嚴(yán)格要求和指導(dǎo),還有學(xué)校給我們提供了這

33、次寶貴的實(shí)習(xí)機(jī)會(huì),這將對(duì)我們即將畢業(yè)進(jìn)入工作產(chǎn)生很大的幫助,讓我們對(duì)自己的專業(yè)有了更深的了解,為畢業(yè)設(shè)計(jì)點(diǎn)明了主題。還要感謝我身邊的同學(xué)對(duì)我的幫助和解惑。</p><p>  經(jīng)過實(shí)習(xí)設(shè)計(jì),在合作方面,我學(xué)會(huì)了要合作,一個(gè)人做東西總要出錯(cuò)的,,為以后的工作打下堅(jiān)實(shí)的基礎(chǔ);在學(xué)習(xí)方面,我更深的理解了單片機(jī),一些單片機(jī)引腳已經(jīng)知道怎么用了,至于程序這塊還是不太熟練,以后要努力彌補(bǔ)。最后感謝安陽工學(xué)院電子信息與電氣工程

34、系給我們這次機(jī)會(huì),感謝老師們不辭辛勞的為我們購買元器件,感謝丁瑩亮老師對(duì)我們的細(xì)心指導(dǎo),謝謝您們。</p><p><b>  6. 參考文獻(xiàn)</b></p><p>  [1].杜尚豐.CAN總線測(cè)控技術(shù)及其應(yīng)用.北京:電子工業(yè)出版社,2007.1</p><p>  [2].杜樹春.單片機(jī)C語言和匯編語言混合編程實(shí)例詳解.北京:北京航空航天

35、大學(xué)出版社,2006.6</p><p>  [3].張毅剛.單片機(jī)原理及應(yīng)用.北京:高等教育出版社,2003.12</p><p>  [4] 閻石, 數(shù)字電子技術(shù)基礎(chǔ)(第五版)高等教育出版社 2005</p><p>  [5].張文濤.PROTEUS仿真軟件應(yīng)用.武漢:華中科技大學(xué)出版社,2010.2</p><p>  [6].王毅.

36、單片機(jī)器件應(yīng)用手冊(cè).北京:人民郵電出版社,1994.4</p><p><b>  7. 附件</b></p><p><b>  附件1: 總電路圖</b></p><p><b>  附件2: 程序</b></p><p>  #include <reg51.h>

37、; </p><p>  //以下是C調(diào)低音的音頻宏定義</p><p>  #define L1 262 //將"L1"宏定義為低音"1"的頻率262Hz時(shí)間是1/262=3826/2 us 取半周期</p><p>  #define L2 286 //將"

38、L2"宏定義為低音"2"的頻率286Hz</p><p>  #define L3 311 //將"L3"宏定義為低音"3"的頻率311Hz</p><p>  #define L4 349 //將"L4"宏定義為低音"4"的頻率349Hz</p>&

39、lt;p>  #define L5 392 //將"L5"宏定義為低音"5"的頻率392Hz</p><p>  #define L6 440 //將"l_a"宏定義為低音"6"的頻率440Hz</p><p>  #define L7 494 //將"L7"宏

40、定義為低音"7"的頻率494Hz</p><p>  #define Z1 523 //將"Z1"宏定義為中音"1"的頻率523Hz</p><p>  #define Z2 587 //將"Z2"宏定義為中音"2"的頻率587Hz</p><

41、p>  #define Z3 659 //將"Z3"宏定義為中音"3"的頻率659Hz</p><p>  #define Z4 698 //將"Z4"宏定義為中音"4"的頻率698Hz</p><p>  #define Z5 784 //將"Z5&q

42、uot;宏定義為中音"5"的頻率784Hz</p><p>  #define Z6 880 //將"Z6"宏定義為中音"6"的頻率880Hz</p><p>  #define Z7 987 //將"Z7"宏定義為中音"7"的頻率523H </p

43、><p>  #define H1 1046 //將"H1"宏定義為高音"1"的頻率1046Hz</p><p>  #define H2 1174 //將"H2"宏定義為高音"2"的頻率1174Hz</p><p>  #define H3 1318 //將&quo

44、t;H3"宏定義為高音"3"的頻率1318Hz</p><p>  #define H4 1396 //將"H4"宏定義為高音"4"的頻率1396Hz</p><p>  #define H5 1567 //將"H5"宏定義為高音"5"的頻率1567Hz</p

45、><p>  #define H6 1760 //將"H6"宏定義為高音"6"的頻率1760Hz</p><p>  #define H7 1975 //將"H7"宏定義為高音"7"的頻率1975Hz</p><p>  #define ZR 0 //將&quo

46、t;ZR"宏定義為無音</p><p>  //以下是《天空之城》簡(jiǎn)譜 //每行對(duì)應(yīng)一小節(jié)音符</p><p>  extern unsigned int code f[]={ Z6,Z7,/**/H1,Z7,H1,H3,/**/Z7,Z3,Z3, /**/Z6,Z5,Z6,H1,/**/Z5,Z3,Z3, /**/Z4,Z3,Z4,H1, </p

47、><p>  Z3,H1,H1,H1,/**/Z7,Z4,Z4,Z7,/**/Z7,Z6,Z7, /**/H1,Z7,H1,H3,/**/Z7,Z3,Z3, /**/Z6,Z5,Z6,H1,</p><p>  Z5, Z3,/**/Z4,H1,Z7,H1,/**/H2,H2,H2,H1,/**/H1,Z6,Z7,Z5,/**/Z6,H1,H2, /**/H3,H2,H3

48、,H5,</p><p>  H2,Z5,Z5, /**/H1,Z7,H1,H3,/**/H3, /**/Z6,H1,Z7,H2,/**/H1,Z5,Z5, /**/H4,H3,H2,H1,</p><p>  H3, /**/Z3,H3, /**/H6,H5,H5, /**/H3,H2,H1,H1,/**/H2,H1,H2,H5,/*

49、*/H3,H3,</p><p>  H6,H5, /**/H3,H2,H1,H1,/**/H2,H1,H2,Z7,/**/Z6,Z6,Z7, /**/Z6, </p><p>  0xff}; //以0xff作為音符的結(jié)束標(biāo)志</p><p>  //"4"對(duì)應(yīng)4個(gè)延時(shí)單位,"2"對(duì)應(yīng)2個(gè)

50、延時(shí)單位,"1"對(duì)應(yīng)1個(gè)延時(shí)單位 </p><p>  extern unsigned char code JP[ ]={ 4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,4,12,</p><p>  20,4,4,4, /**/12,

51、4,8,8, /**/20,4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,8,8,</p><p>  32, 4, /**/8,4,6,8, /**/4,4,4,16, /**/8,4,6,8, /**/24,4,4, /**/12,4,8,8,</p><p>  24,4,4, /**

52、/4,4,8,8, /**/32,/**/4,8,8,6, /**/12,4,16, /**/8,8,8,8,</p><p>  30, /**/20,8, /**/16,8,8, /**/4,4,16,8, /**/8,4,4,8, /**/20,8,</p><p>  16,16, /**/4,20,8

53、, /**/8,4,4,8, /**/20,4,4, /**/32,</p><p><b>  };</b></p><p>  #define uchar unsigned char //宏的定義變量類型 uchar 代替 unsigned char</p><p>  #define uint unsigned

54、int //宏的定義變量類型 uint 代替 unsigned int</p><p>  sbit sound=P1^3;</p><p>  sbit led_l=P1^4;</p><p>  uchar anjian_chuchu[50]={0};</p><p>  uchar key; //鍵順

55、序碼</p><p>  uchar count; //存儲(chǔ)計(jì)數(shù)</p><p>  uchar count50; //存儲(chǔ)滿</p><p>  uint play_ma; //音符</p><p>  /*************************************************************</

56、p><p><b>  延時(shí) </b></p><p>  *************************************************************/</p><p>  void delay(uchar x)</p><p>  { uchar j;</p><p

57、>  while((x--)!=0) //CPU執(zhí)行x*100次</p><p>  { for(j=0;j<100;j++)</p><p><b>  {;}</b></p><p><b>  }</b></p><p><b>  }</b></p&

58、gt;<p>  /*********************************************************</p><p><b>  按鍵轉(zhuǎn)換音符</b></p><p>  *********************************************************/</p><p

59、>  uint _anjian_zhuanhuan(uchar fy)</p><p>  { uint ffy;</p><p><b>  if(fy!=0)</b></p><p>  switch(fy)</p><p>  { case 1: ffy=L1; break;</

60、p><p>  case 2: ffy=L2; break;</p><p>  case 3: ffy=L3; break;</p><p>  case 4: ffy=L4; break;</p><p>  case 5: ffy=L5; break;</p>&

61、lt;p>  case 6: ffy=L6; break;</p><p>  case 7: ffy=L7; break;</p><p>  case 8: ffy=Z1; break;</p><p>  case 9: ffy=Z2; break;</p><p>

62、  case 10: ffy=Z3; break;</p><p>  case 11: ffy=Z4; break;</p><p>  case 12: ffy=Z5; break;</p><p>  case 13: ffy=Z6; break;</p><p>  case

63、 14: ffy=Z7; break;</p><p>  case 15: ffy=H1; break;</p><p>  case 16: ffy=H2; break;</p><p>  case 17: ffy=H3; break;</p><p>  case 18: ff

64、y=H4; break;</p><p>  case 19: ffy=H5; break;</p><p>  case 20: ffy=H6; break;</p><p>  case 21: ffy=H7; break;</p><p>  default : ffy=0;

65、 break;</p><p><b>  }</b></p><p>  return ffy; </p><p><b>  } </b></p><p>  /************************************************************<

66、;/p><p><b>  按鍵存儲(chǔ)</b></p><p>  ************************************************************/</p><p>  void _anjian_cunchu(uchar _key)</p><p><b>  { </

67、b></p><p>  if(count<50)</p><p>  {anjian_chuchu[count]=_key;</p><p>  count=count+1;</p><p><b>  }</b></p><p><b>  else</b>&

68、lt;/p><p>  count50=1;</p><p><b>  } </b></p><p>  /****************************************************************************</p><p><b>  按鍵播放處理</

69、b></p><p>  *****************************************************************************/</p><p>  void anjian_chuli( uchar conv1_ma )</p><p>  { uchar j;</p>&l

70、t;p>  EA=1; //開總中斷</p><p>  ET0=1; //定時(shí)器T0中斷允許</p><p>  play_ma=_anjian_zhuanhuan( conv1_ma);</p><p>  if(play_ma!=0)</p><p><b>  {</b><

71、;/p><p>  P0=(uchar)play_ma; //亮燈</p><p>  TH0=(8192-play_ma)/32; //可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法 </p><p>  TL0=(8192-play_ma)%32; //可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法</p><p>  TR0=

72、1; //啟動(dòng)定時(shí)器T0</p><p>  for(j=0;j<4;j++) //控制節(jié)拍數(shù)</p><p>  delay(100); //延時(shí)1個(gè)節(jié)拍單位</p><p>  TR0=0; //關(guān)閉定時(shí)器T0</p><p><b>  }&

73、lt;/b></p><p><b>  P0=0xff;</b></p><p>  sound=0; </p><p><b>  }</b></p><p>  /***********************************************************

74、**</p><p>  鍵掃描子程序 (3*4 的矩陣) P2為列 </p><p>  *************************************************************/</p><p>  void keyscan(void)</p><p>  { uchar temp;<

75、/p><p><b>  temp = 0;</b></p><p>  lab: P2=0xFF; //高四位輸入 列為高電平 </p><p>  P1=0X00|0XF0; //P1.0 P1.1 P1.2為行p1.3 行為低電平</p><p>  d

76、elay(1); //延時(shí)</p><p>  temp=P2|0X80; //讀P2口 </p><p>  delay(1); //延時(shí)</p><p>  if(temp==P2|0X80)</p><p>  { delay(1);</p><p>  if(

77、temp==P2|0X80)</p><p>  { temp=~temp; </p><p>  switch(temp)</p><p>  { case 1: key=1; break;</p><p>  case 2: key=2; break;</p><p>  

78、case 4: key=3; break;</p><p>  case 8: key=4; break;</p><p>  case 16: key=5; break;</p><p>  case 32: key=6; break;</p><p>  case 64:

79、key=7; break;</p><p>  default : key=40; break;</p><p><b>  } </b></p><p>  P1=0XF7; //行為高電平 </p><p>  P2=0x00; //列為低

80、電平</p><p>  delay(1); //延時(shí)</p><p>  temp=P1; //讀P1口 </p><p>  temp=temp&0x03;</p><p>  temp=~(temp|0xF8);</p><p>  if(temp==1)

81、 //第一行 p1.0 被拉低</p><p>  key=key+0; </p><p>  else if(temp==2) //第二行 p1.1 被拉低</p><p>  key=key+7;</p><p>  else if(temp==4) //第三行 p1.2 被拉低</p><p> 

82、 key=key+14;</p><p><b>  else</b></p><p><b>  key = 40;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>&

83、lt;b>  goto lab;</b></p><p><b>  } </b></p><p><b>  else</b></p><p><b>  goto lab;</b></p><p><b>  }</b></p&

84、gt;<p>  /**********************************************************</p><p><b>  存儲(chǔ)播放</b></p><p>  **********************************************************/</p><p

85、>  void _cunchu_bofang(void)</p><p>  { uchar _key,ii;</p><p>  for(ii=0;ii<count;ii++)</p><p>  { _key=anjian_chuchu[ii];</p><p>  anjian_chuli(_key);</p>

86、<p><b>  }</b></p><p><b>  }</b></p><p>  /***********************************************************</p><p><b>  播放音樂</b></p><

87、p>  ************************************************************/</p><p>  void _bofang_yinyue(void)</p><p>  { unsigned char i,j;</p><p>  EA=1; //開總中斷</p><p&

88、gt;  ET0=1; //定時(shí)器T0中斷允許</p><p>  TMOD=0x00; // 使用定時(shí)器T0的模式1(13位計(jì)數(shù)器)</p><p>  i=0; //從第1個(gè)音符f[0]開始播放</p><p>  while(f[i]!=0xff) //只要沒有讀到結(jié)束標(biāo)志就繼續(xù)播放</p><

89、p><b>  { </b></p><p>  play_ma=f[i];</p><p>  P0=(uchar)play_ma; //亮燈</p><p>  if(f[i]==0x00)</p><p><b>  TR0=0;</b></p><p><

90、b>  else</b></p><p>  { TH0=(8192- play_ma)/32; //13位計(jì)數(shù)器TH0高8位的賦初</p><p>  TL0=(8192- play_ma)%32; //13位計(jì)數(shù)器TL0低5位的賦初</p><p>  TR0=1; //啟動(dòng)定時(shí)器T0</p><p>

91、;  } </p><p>  for(j=0;j<JP[i];j++) //控制節(jié)拍數(shù)</p><p>  delay(80); //延時(shí)1個(gè)節(jié)拍單位</p><p>  TR0=0; //關(guān)閉定時(shí)器T0</p><p> 

92、 i++; //播放下一個(gè)音符</p><p><b>  P0=0XFF;</b></p><p><b>  } </b></p><p>  sound=0;</p><p><b>  }</b></p>

93、<p>  /************************************************************ </p><p>  判斷鍵是否按下 </p><p>  *

94、************************************************************/</p><p>  void keydown(void)</p><p>  { uchar ii;</p><p>  P2=0xFF; //將p2位全部置1</p><p>  P1=0X00|0XF

95、0 ; //將p1.0 p1.1 p1.2清零</p><p>  if(P2!=0xFF) //判斷按鍵是否按下 如果按鈕按下 會(huì)拉低P1其中的一個(gè)端口</p><p>  { led_l=0;</p><p>  keyscan(); //調(diào)用按鍵掃描程序</p><p>  if((key<=18)&&cou

96、nt50==0) //是音符并且未滿</p><p>  {anjian_chuli( key );</p><p>  _anjian_cunchu(key);</p><p><b>  }</b></p><p><b>  else</b></p><p>  if(

97、key==19) //是播放音樂鍵</p><p>  _bofang_yinyue();</p><p><b>  else</b></p><p>  if(key==20) //是播放存儲(chǔ)鍵</p><p>  _cunchu_bofang();</p><p><b>  el

98、se</b></p><p>  if(key==21) //是清空存儲(chǔ)鍵</p><p><b>  {count=0;</b></p><p>  count50=0;</p><p>  for(ii=0;ii<50;ii++)</p><p>  anjian_chuch

99、u[ii]=0;</p><p><b>  } </b></p><p><b>  led_l=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /***

100、*********************************************************</p><p>  主程序 </p><p>  *************************************************************/ <

101、/p><p><b>  main()</b></p><p><b>  { </b></p><p>  TMOD=0x10; //t1方式1 16 t0 ,0 13 </p><p><b>  ET0=1;</b></p><p>  

102、TH0=0x4C; //定時(shí)器初始值</p><p>  TL0=0x00; </p><p>  EA=1; //開總中斷</p><p><b>  sound=0;</b></p><p>  P2=0xFF; //置P2口</p><

103、p>  P1=0X00|0XF0 ; //將p1.0 p1.1 p1.2清零p1.3</p><p>  delay(10); //延時(shí)</p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  ke

104、ydown(); //調(diào)用按鍵判斷檢測(cè)程序</p><p><b>  }</b></p><p><b>  } </b></p><p>  //**************************************************************************</p>

105、<p><b>  //定時(shí)器1</b></p><p>  //***************************************************************************</p><p>  void int_time0( ) interrupt 1 </p><p>  { soun

106、d=!sound; </p><p>  TH0=(8192-play_ma)/32; //可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法</p><p>  TL0=(8192-play_ma)%32; //可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法 </p><p><b>  }</b></p>&l

溫馨提示

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