版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子琴課程設(shè)計(jì)
- 課程設(shè)計(jì)--電子琴
- 電子琴課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)---模擬電子琴發(fā)聲控制系統(tǒng)
- 電子琴課程設(shè)計(jì)--模擬電子琴發(fā)聲控制系統(tǒng)
- 電子琴課程設(shè)計(jì)---電子琴的設(shè)計(jì)與實(shí)現(xiàn)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)報(bào)告
- 電子琴的課程設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)電子琴
- 接口課程設(shè)計(jì)電子琴
- 電子琴課程設(shè)計(jì)論文
- 電子琴的設(shè)計(jì) 課程設(shè)計(jì)
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)--基于單片機(jī)的電子琴設(shè)計(jì)
- 電子琴課程設(shè)計(jì)-- 基于單片機(jī)的電子琴設(shè)計(jì)
- eda課程設(shè)計(jì)---自動(dòng)電子琴
- 數(shù)電課程設(shè)計(jì)---電子琴
評(píng)論
0/150
提交評(píng)論