版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGEII課程設(shè)計(jì)報(bào)告(20--20年度第一學(xué)期)名稱:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)題目:基于AVR單片機(jī)的音樂(lè)盒播放器學(xué)號(hào):學(xué)生姓名:指導(dǎo)教師:成績(jī):日期:摘要利用單片機(jī)演奏音樂(lè)大概是單片機(jī)愛好者感興趣的問(wèn)題之一。利用單片機(jī)控制音樂(lè)播放也多不勝舉.音樂(lè)芯片也相當(dāng)之多,而利用單片機(jī)存儲(chǔ)音樂(lè),控制播放最為廣泛。它有功能多﹑價(jià)格優(yōu)﹑外圍電路簡(jiǎn)單的特點(diǎn),備受音樂(lè)愛好者及音樂(lè)芯片制造商的青睞。本題設(shè)計(jì)的系統(tǒng)以ATmega16單片機(jī)為核心,本文應(yīng)用單片機(jī)和音樂(lè)發(fā)聲的相關(guān)知識(shí)設(shè)計(jì)了一個(gè)簡(jiǎn)單的音樂(lè)播放器。所謂音樂(lè)播放器,由單片機(jī)進(jìn)行信息處理,再經(jīng)過(guò)信號(hào)放大,由耳機(jī)或揚(yáng)聲器(喇叭)放出樂(lè)曲聲。我們知道,振動(dòng)產(chǎn)生聲音,振動(dòng)頻率不同,所發(fā)出的聲音也就不同,有規(guī)律的振動(dòng)發(fā)出的聲音叫“樂(lè)音”,音樂(lè)由音頻和節(jié)拍構(gòu)成,音頻即發(fā)聲的頻率,節(jié)拍即延時(shí)的長(zhǎng)短,因此利用單片機(jī)的定時(shí)器/計(jì)數(shù)器產(chǎn)生一定頻率的方波,本文比較詳細(xì)地介紹了音樂(lè)播放器的原理、設(shè)計(jì)思路、硬件的選擇及相關(guān)作用、軟件的實(shí)現(xiàn)方法及詳細(xì)的程序清單、還包括進(jìn)行了軟、硬件調(diào)試和測(cè)試,耳熟能詳?shù)母枨囊来?、輪回播放。關(guān)鍵詞:?jiǎn)纹瑱C(jī),中斷,頻率,鍵盤,音樂(lè)播放器目錄1系統(tǒng)方案 11.1 控制器系統(tǒng)模塊 11.2 揚(yáng)聲器模塊 21.3 數(shù)碼管模塊 21.4 按鍵模塊 32系統(tǒng)原理分析 42.1單片機(jī)發(fā)聲原理 43硬件設(shè)計(jì) 43.1單片機(jī)硬件資源的設(shè)計(jì) 43.2功能模塊硬件設(shè)計(jì) 54軟件設(shè)計(jì) 54.1數(shù)碼管的設(shè)計(jì) 54.2鍵盤的設(shè)計(jì) 64.3音樂(lè)播放 75設(shè)計(jì)體會(huì) 8附錄1:電路原理圖 9附錄2:源程序 10PAGEPAGE191系統(tǒng)方案本系統(tǒng)主要利用單片機(jī)的定時(shí)器/計(jì)數(shù)器產(chǎn)生一定頻率的方波,利用延時(shí)來(lái)實(shí)現(xiàn)方波的延時(shí),從而實(shí)現(xiàn)“1~7”的頻率的高、中、低音的發(fā)音,而后把每首歌曲編碼編程并結(jié)合單片機(jī)硬件再通過(guò)外接的揚(yáng)聲器來(lái)實(shí)現(xiàn)歌曲的播放。再利用4*4鍵盤與單片機(jī)相連接,通過(guò)對(duì)4*4鍵盤的捕捉,實(shí)現(xiàn)換曲、播放、暫停等功能。另外,我們又外加一個(gè)電機(jī)模塊,驅(qū)動(dòng)一個(gè)小女孩在為音樂(lè)盒上舞動(dòng),實(shí)現(xiàn)了音樂(lè)盒的美觀性。4*4鍵盤數(shù)碼管顯示AVR單片機(jī)音樂(lè)播放電路圖1系統(tǒng)總體設(shè)計(jì)圖本系統(tǒng)主要由按鍵模塊、揚(yáng)聲器模塊、數(shù)碼管模塊、控制器模塊組成,下面分別論證這幾個(gè)模塊。控制器系統(tǒng)模塊方案一:采用51系列8位單片機(jī),這種處理器處理速度相對(duì)緩慢,功能簡(jiǎn)單,外圍電路電路比較復(fù)雜。方案二:采用196系列16位單片機(jī),這種處理器處理速度較快,但由于內(nèi)部外設(shè)模塊不夠豐富,需要接一定的外圍電路,實(shí)現(xiàn)較為復(fù)雜。方案三:ATMEGA16作為CPU來(lái)控制,性價(jià)比較高,我們平時(shí)運(yùn)用得多也較為熟悉。而且ATMEGA16能夠產(chǎn)生我們所需要的控制信號(hào),能連接鍵盤。硬件結(jié)構(gòu)適合C語(yǔ)言編程,功能齊全,不容易解密??垢蓴_能力強(qiáng)。本實(shí)踐活動(dòng)用其即可很好的實(shí)現(xiàn)。綜合以上本題要求和以上三種方案的分析,最終選擇方案三。圖2ATMEGA16最小系統(tǒng)揚(yáng)聲器模塊采用音頻功率放大器LM386來(lái)進(jìn)行對(duì)音頻的放大。LM386是一種音頻集成功放,具有自身功耗低、更新內(nèi)鏈增益可調(diào)整、電源電壓范圍大、外接元件少和總諧波失真小等優(yōu)點(diǎn)的功率放大器,廣泛應(yīng)用于錄音機(jī)和收音機(jī)之中。通過(guò)揚(yáng)聲器即可實(shí)現(xiàn)對(duì)音樂(lè)盒音樂(lè)的播放。圖3揚(yáng)聲器模塊數(shù)碼管模塊數(shù)碼管由8個(gè)發(fā)光二極管構(gòu)成。其按按發(fā)光二極管單元連接方式分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)數(shù)碼管是指將所有發(fā)光二極管的陽(yáng)極接到一起形成公共陽(yáng)極(COM)的數(shù)碼管,共陽(yáng)數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽(yáng)極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽(yáng)極為低電平時(shí),相應(yīng)字段就不亮??紤]系統(tǒng)的實(shí)際要求及易操作性,我們采用的是共陰極八段數(shù)碼管,來(lái)實(shí)現(xiàn)對(duì)歌曲的播放曲目第幾首的顯示。圖48段數(shù)碼管原理按鍵模塊通過(guò)單片機(jī)相應(yīng)程序控制,實(shí)現(xiàn)對(duì)4乘4鍵盤信息的采集。圖54乘4按鍵模塊2系統(tǒng)原理分析2.1單片機(jī)發(fā)聲原理我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制單處機(jī)某個(gè)口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制“高”“低”電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào)。音符的節(jié)拍我們可以用定時(shí)器來(lái)控制,送入不同的初值,就可以產(chǎn)生不同的定時(shí)時(shí)間。但是,由于定時(shí)器的最大定時(shí)時(shí)間有限,因此不可能直接用改變的時(shí)間初值來(lái)實(shí)現(xiàn)不同節(jié)拍。我們可以設(shè)置一個(gè)中斷計(jì)數(shù)器,通過(guò)判別中斷計(jì)數(shù)器的值來(lái)控制節(jié)拍時(shí)間的長(zhǎng)短。我們將每一音符的時(shí)間常數(shù)和其相應(yīng)的節(jié)拍常數(shù)作為一組,按順序?qū)?lè)曲中的所有常數(shù)排列成一個(gè)表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就可以實(shí)現(xiàn)演奏效果。節(jié)拍碼節(jié)拍數(shù)11/4拍22/4拍33/4拍41拍51又1/4拍61又1/2拍82拍A2又1/2拍C3拍F3又3/4拍表13硬件設(shè)計(jì)3.1單片機(jī)硬件資源的設(shè)計(jì)A口PA0—PA7:用于八段數(shù)碼管的顯示??紤]到電路不會(huì)用到太多口,資源配置還比較充裕。故我們采用的是靜態(tài)顯示驅(qū)動(dòng),故需要用到其八個(gè)口。B口PB0-PB7:用以對(duì)四乘四鍵盤掃描信號(hào)的采集以及控制。D口PD5:接相應(yīng)揚(yáng)聲器電路,控制音樂(lè)播放。3.2功能模塊硬件設(shè)計(jì)數(shù)碼管模塊:靜態(tài)顯示驅(qū)動(dòng)與單片機(jī)相應(yīng)B口相聯(lián)系。鍵盤模塊:采用紙質(zhì)4乘4鍵盤輸出線與單片機(jī)直接相對(duì)接的方式。揚(yáng)聲器模塊:用擴(kuò)展版來(lái)實(shí)現(xiàn)揚(yáng)聲器的功能,并與單片機(jī)PD5口,接地接高等處相連接。4軟件設(shè)計(jì)4.1數(shù)碼管的設(shè)計(jì)字形hgfedcba共陰極共陽(yáng)極0001111113FHC0H10000011006HF9H2010110115BHA4H3010011114FHB0H40110011066H99H5011011016DH92H6011100107DH82H70000011107HF8H8011111117FH80H9011011116FH90HA0111011177H868B011111007CH83HC0110100139HC6HD010111105EHA1HE0111100179H86HF0111000171H8EH表2為了獲得0-9十個(gè)不同的字型符號(hào),數(shù)碼管各段所加電平不同,所以IO口輸出的編碼也不同。因此必須建立一個(gè)字型與字段7段碼的編碼表,(見上表2)。有了字段碼對(duì)照表。可以實(shí)現(xiàn)對(duì)8段碼的譯碼。若要顯示字型1,PA口輸出值為0x06;若要顯示字型A,PA口顯示輸出值0x77。如此,程序中定義了如下數(shù)組:flashunsignedcharshu[10]={0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}通過(guò)對(duì)數(shù)組元素,利用一個(gè)變量,在其中因不同狀況而進(jìn)行改變這樣的設(shè)定,實(shí)現(xiàn)實(shí)時(shí)顯示歌曲播放曲目讀取這樣的功能。4.2鍵盤的設(shè)計(jì)按鍵掃描問(wèn)題:將全部行線設(shè)置為低電平,然后讀入輸入列線有無(wú)低電平出現(xiàn)。如果有低電平出現(xiàn),則說(shuō)明有按鍵按下,如果讀到的都是高電平,則表示無(wú)按鍵按下。在確認(rèn)有按鍵按下后,需要進(jìn)入確定具體哪一個(gè)鍵閉合的過(guò)程,依次將行線設(shè)置為低電平,并檢測(cè)列線的輸入,進(jìn)而確認(rèn)具體按鍵位置。按鍵的防抖問(wèn)題:按鍵的抖動(dòng)時(shí)間:5~20ms,正常時(shí)間:300~500ms則需要保證兩次讀鍵值的時(shí)間大于抖動(dòng)時(shí)間,小于最小正常時(shí)間的1/2,取讀鍵值時(shí)間為100ms。保證了在一次按鍵過(guò)程中至少可以檢測(cè)到2次按鍵閉合,任意兩次按鍵檢測(cè)不會(huì)落在1個(gè)抖動(dòng)區(qū)內(nèi)。主要程序如下:switch(key_state) { case0: key_line=0b00010000; for(i=1;i<=4;i++) //掃描鍵盤 { PORTB=~key_line; //輸出行線電平 PORTB=~key_line; //必須送2次?。?!key_value=Key_mask&PINB; //讀列電平 if(key_value==Key_mask) key_line<<=1; //沒(méi)有按鍵,繼續(xù)掃描 else { key_state++; //有按鍵,停止掃描 break; //轉(zhuǎn)消抖確認(rèn)狀態(tài) } } break; case1: if(key_value==(Key_mask&PINB)) //再次讀列電平, { switch(key_line|key_value) //與狀態(tài)0的相同,確認(rèn)按鍵 { //鍵盤編碼,返回編碼值 case0b00011110: key_return=K4_1; break; case0b00011101: key_return=K4_2;…case2: PORTB=0b00001111; PORTB=0b00001111; if((Key_mask&PINB)==Key_mask) key_state=0; break; } returnkey_return;}4.3音樂(lè)播放軟件采用T/C1比較匹配模式。系統(tǒng)時(shí)鐘1Mhz,8分頻。一個(gè)時(shí)鐘周期為1微秒,寄存器OCR1A中為音符的半周期值,所以2次匹配中斷的匹配比較輸出在0C1A上,輸出一個(gè)完整的方波。通過(guò)變量記錄中斷的次數(shù),用于控制音符脈沖的各抒,實(shí)際上就是音符輸出的時(shí)間,代表了節(jié)拍的長(zhǎng)度。在T/C1中的OC1A會(huì)自動(dòng)判別整個(gè)音樂(lè)是否全部播放完成,如果音樂(lè)沒(méi)有全部播完,將取出下一個(gè)音符的節(jié)拍和音調(diào)面繼續(xù)播放。利用設(shè)置T/C1技術(shù)脈沖源的方法來(lái)啟動(dòng)和停止T/C1的工作。一旦按鍵A鍵播放鍵被按下就會(huì)開始觸發(fā)外部中斷,進(jìn)行工作。B鍵被按下即可暫停工作。再通過(guò)揚(yáng)聲器放大電路把它播放出去。D口相應(yīng)初值設(shè)置如下:PORTD=0xFF; DDRD=0x20;//PD5音樂(lè)播放輸出 OCR0=0xF9; //OCR0=0xF9(249),(249+1)/125=2ms TCCR0=0x0A; //內(nèi)部時(shí)鐘,8分頻(1M/8=125KHz),CTC模式 TCCR1A=0x40;TCCR1B=0x08; TIMSK=0x12; //允許T/C1比較匹配A中斷,允許T/C0比較匹配中斷 ;5設(shè)計(jì)體會(huì)通過(guò)這次實(shí)踐設(shè)計(jì)活動(dòng)深該體會(huì)到單片機(jī)技術(shù)應(yīng)用領(lǐng)域的廣泛,不僅使我對(duì)學(xué)過(guò)的單片機(jī)知識(shí)有了很多的鞏固,同時(shí)也對(duì)單片機(jī)這一門課程產(chǎn)生了更大的興趣。當(dāng)看到自己設(shè)計(jì)的小音樂(lè)盒發(fā)聲播放,上面的小女孩旋轉(zhuǎn)的時(shí)候,那種喜悅的感覺不言而喻。在本次課程設(shè)計(jì)過(guò)程中,自己懂得單片機(jī)知識(shí)運(yùn)用比較重要,要想把這門課程學(xué)好需要不但課本上的知道,關(guān)鍵還是親手實(shí)踐鍛煉自己的動(dòng)手能力,只有在實(shí)踐中才能夠?qū)W到更多東西,從不知道到知道這個(gè)東西啊,知識(shí)來(lái)于課本理論與實(shí)踐相結(jié)合的產(chǎn)物啊,我們只有把理論更好的運(yùn)動(dòng)到實(shí)踐中學(xué)到了真正的知識(shí)經(jīng)過(guò)這幾周,我知道書本和實(shí)際操作還是很有差距的,而且自己的動(dòng)手能力還是很差,而且電子這一行還要求的細(xì)心仔細(xì)和耐心,在這三周中暴露出來(lái)很多自己的不足,以后要多加練習(xí),多鍛煉自己的這些方面的能力。希望能夠成為更加全面立體的電子類人才。附錄1:電路原理圖附錄2:源程序#include<mega16.h>#include<delay.h>flashunsignedcharshu[10]={0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};flashunsignedintt[16]={0,1908,1700,1516,1433,1276,1136,1012,956,865,759,716,638,568,506,470};flashunsignedintd[16]={0,52,59,66,70,78,88,99,105,116,132,140,157,176,198,209};flashunsignedcharmusic1[150]={5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8,5,2,8,2,5,2,4,2,3,2,5,2,2,4,4,2,3,2,2,2,6,2,5,4,2,2,3,2,1,8,5,4,3,2,6,4,8,4,7,4,6,2,7,2,5,4,3,4,9,2,9,2,9,2,8,2,7,4,6,2,8,2,5,8,5,4,3,2,6,4,8,4,7,2,6,2,7,2,8,2,9,6,5,2,6,2,7,2,8,3,8,4,5,4,8,8};flashunsignedcharmusic2[100]={5,2,5,2,6,4,5,4,8,4,7,8,5,2,5,2,6,4,5,4,9,4,8,8,5,2,5,2,12,4,10,4,8,4,7,4,6,8,11,2,11,2,10,4,8,4,9,4,8,8};flashunsignedcharmusic3[100]={1,4,1,4,5,4,5,4,6,4,6,4,5,8,4,4,4,4,3,4,3,4,2,4,2,4,1,8,5,4,5,4,4,4,4,4,3,4,3,4,2,8,5,4,5,4,4,4,4,4,3,4,3,4,2,8,1,4,1,4,5,4,5,4,6,4,6,4,5,8,4,4,4,4,3,4,3,4,2,4,2,4,1,8};flashunsignedcharmusic4[100]={5,2,3,2,5,2,3,2,5,2,3,2,1,4,2,2,4,2,3,2,2,2,5,8,5,2,3,2,5,2,3,2,5,2,3,2,1,4,2,2,4,2,3,2,2,2,1,8,2,2,2,2,4,2,4,2,3,2,1,2,5,4,2,2,4,2,3,2,1,2,5,8,5,2,3,2,5,2,3,2,5,2,3,2,1,4,2,2,4,2,3,2,2,2,1,8};flashunsignedcharmusic5[150]={3,2,3,2,4,2,5,2,5,2,4,2,3,2,2,2,1,2,1,2,2,2,3,2,3,2,2,1,2,8,3,2,3,2,4,2,5,2,5,2,4,2,3,2,2,2,1,2,1,2,2,2,3,2,2,2,1,1,1,8,2,2,2,2,3,2,1,2,2,2,30,1,4,1,3,2,1,2,2,2,3,1,4,1,3,2,2,2,1,2,2,2,2,4,3,2,3,2,4,2,5,2,5,2,4,2,3,2,2,2,1,2,1,2,2,2,3,2,2,2,1,1,1,8};flashunsignedcharmusic6[100]={3,2,3,2,3,4,3,2,3,2,3,4,3,2,5,2,1,2,2,2,3,8,4,2,4,2,4,2,4,2,4,2,3,2,3,2,3,2,3,2,2,2,2,2,1,2,2,4,5,4,3,2,3,2,3,4,3,2,3,2,3,4,3,2,5,2,1,2,2,2,3,8,4,2,4,2,4,2,4,2,4,2,3,2,3,2,3,2,5,2,5,2,3,2,2,2,1,8};flashunsignedcharmusic7[150]={1,2,2,2,3,2,4,2,5,2,5,2,5,1,4,1,3,1,4,2,4,2,4,1,3,1,2,1,1,2,3,2,5,4,1,2,2,2,3,2,4,2,5,2,5,2,5,1,4,1,3,1,4,2,4,2,4,1,3,1,2,1,1,2,3,2,1,4,6,2,6,2,6,1,5,1,4,1,5,2,5,2,5,1,4,1,3,1,4,2,4,2,4,1,3,1,2,1,1,2,3,2,5,4,6,2,6,2,6,1,5,1,4,1,5,2,5,2,5,1,4,1,3,1,4,2,4,2,4,1,3,1,2,1,1,2,3,2,1,4};flashunsignedcharmusic8[150]={1,4,1,2,2,2,3,4,3,2,4,2,5,4,6,2,5,2,3,8,5,4,4,2,3,2,2,8,4,4,3,2,2,2,1,8,1,4,1,2,2,2,3,4,3,2,4,2,5,4,6,2,5,2,3,8,5,4,4,2,3,2,2,4,3,2,2,2,1,16,5,4,4,2,3,2,2,4,1,2,1,2,4,4,3,2,2,2,1,8,5,4,4,2,3,2,2,4,1,2,1,2,4,4,3,2,2,2,1,8,1,4,1,2,2,2,3,4,3,2,4,2,5,4,6,2,5,2,3,8,5,4,4,2,3,2,2,4,3,2,2,2,1,8};flashunsignedcharmusic9[200]={8,2,8,2,8,2,10,2,13,2,10,2,12,4,12,2,13,2,12,2,10,2,11,2,10,2,19,4,9,2,9,2,9,2,11,2,14,2,14,2,13,2,12,2,12,2,12,2,12,2,11,2,7,4,8,4,9,8,8,2,8,2,8,2,10,2,13,2,10,2,12,4,12,2,13,2,12,2,10,2,11,2,10,2,19,4,9,2,9,2,9,2,11,2,14,2,14,2,13,2,12,2,12,2,12,2,12,2,11,2,7,4,9,4,8,8,13,4,13,2,12,2,11,1,12,1,13,1,12,2,9,2,10,2,11,2,9,2,12,4,13,4,12,4,11,8,9,4,14,2,13,2,12,2,13,2,12,2,11,4,12,2,13,2,10,4,9,4,8,8};flashunsignedcharmax[9]={128,50,84,96,124,98,140,146,172};intnum=0,kai=1,pp;unsignedcharnote_n=0;unsignedintint_n=1;bitplay_on,key_stime_ok;intkey_stime_counter;interrupt[TIM0_COMP]voidtimer0_comp_isr(void){ if(++key_stime_counter>=5) { key_stime_counter=0; key_stime_ok=1; }}interrupt[TIM1_COMPA]voidtimer1_compa_isr(void){if(!play_on){if(--int_n==0){TCCR1B=0x08;if(note_n<max[pp-1]){switch(pp){case1:OCR1A=t[music1[note_n]];int_n=d[music1[note_n]];note_n++;int_n=int_n*music1[note_n]*4;note_n++;TCCR1B=0x09;break;case2:OCR1A=t[music2[note_n]];int_n=d[music2[note_n]];note_n++;int_n=int_n*music2[note_n]*4;note_n++;TCCR1B=0x09;break;case3:OCR1A=t[music3[note_n]];int_n=d[music3[note_n]];note_n++;int_n=int_n*music3[note_n]*4;note_n++;TCCR1B=0x09;break;case4:OCR1A=t[music4[note_n]];int_n=d[music4[note_n]];note_n++;int_n=int_n*music4[note_n]*4;note_n++;TCCR1B=0x09;break;case5:OCR1A=t[music5[note_n]];int_n=d[music5[note_n]];note_n++;int_n=int_n*music5[note_n]*5;note_n++;TCCR1B=0x09;break;case6:OCR1A=t[music6[note_n]];int_n=d[music6[note_n]];note_n++;int_n=int_n*music6[note_n]*5;note_n++;TCCR1B=0x09;break;case7:OCR1A=t[music7[note_n]];int_n=d[music7[note_n]];note_n++;int_n=int_n*music7[note_n]*5;note_n++;TCCR1B=0x09;break;case8:OCR1A=t[music8[note_n]];int_n=d[music8[note_n]];note_n++;int_n=int_n*music8[note_n]*5;note_n++;TCCR1B=0x09;break;case9:OCR1A=t[music9[note_n]];int_n=d[music9[note_n]];note_n++;int_n=int_n*music9[note_n]*5;note_n++;TCCR1B=0x09;break;}}else{play_on=0;int_n=1;note_n=0;}}}}#defineNo_key 17#defineK1_1 1#defineK1_2 2#defineK1_3 3#defineK1_4 4#defineK2_1 5#defineK2_2 6#defineK2_3 7#defineK2_4 8#defineK3_1 9#defineK3_2 10#defineK3_3 11#defineK3_4 12#defineK4_1 17#defineK4_2 17#defineK4_3 17#defineK4_4 17#defineKey_mask 0b00001111unsignedcharread_key(){ staticunsignedcharkey_state=0,key_value,key_line;unsignedcharkey_return=No_key,i; switch(key_state) { case0: key_line=0b00010000; for(i=1;i<=4;i++) //掃描鍵盤 { PORTB=~key_line; //輸出行線電平 PORTB=~key_line; //必須送2次?。?!key_value=Key_mask&PINB; //讀列電平 if(key_value==Key_mask) key_line<<=1; //沒(méi)有按鍵,繼續(xù)掃描 else { key_state++; //有按鍵,停止掃描 break; //轉(zhuǎn)消抖確認(rèn)狀態(tài) } } break; case1: if(key_value==(Key_mask&PINB)) //再次讀列電平, { switch(key_line|key_value) //與狀態(tài)0的相同,確認(rèn)按鍵 { //鍵盤編碼,返回編碼值 case0b00011110: key_return=K4_1; break; case0b00011101: key_return=K4_2; break; case0b00011011: key_return=K4_3; break; case0b00010111: key_return=K4_4; break; case0b00101110: key_return=K3_1; break; case0b00101101: key_return=K3_2; break; case0b00101011: key_return=K3_3; break; case0b00100111: key_return=K3_4; break; case0b01001110: key_return=K2_1; break; case0b01001101: key_return=K2_2; break; case0b01001011: key_return=K2_3; break; case0b01000111: key_return=K2_4; break; case0b10001110: key_return=K1_1; break; case0b10001101: key_return=K1_2; break; case0b10001011: key_return=K1_3; break; case0b10000111: key_return=K1_4; break; } key_state++; } else key_state--; //兩次列電平不同返回狀態(tài)0 break; case2: PORTB=0b00001111; PORTB=0b00001111; if((Key_mask&PINB)==Key_mask) key_state=0; break; } returnkey_return;}//Declareyourglobalvariablesherevoidmain(void){PORTA=0x3f;
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版土地流轉(zhuǎn)承包項(xiàng)目合作開發(fā)投資合同范本3篇
- 2025年代理費(fèi)用協(xié)議范本
- 2025年銷售人員任職協(xié)議書:互聯(lián)網(wǎng)銷售團(tuán)隊(duì)建設(shè)協(xié)議2篇
- 2025年度風(fēng)力發(fā)電場(chǎng)建設(shè)與運(yùn)營(yíng)合同范本4篇
- 二零二五年藝術(shù)品鑒定兼職人員保密責(zé)任書3篇
- 基于2025年度房產(chǎn)政策的商品房銷售合同
- 2025年度跨境電子商務(wù)稅收風(fēng)險(xiǎn)擔(dān)保協(xié)議4篇
- 二零二五年度直播主播與影視作品合作合同
- 2025年度供應(yīng)鏈金融貨物沖抵貨款風(fēng)險(xiǎn)控制協(xié)議
- 二零二五年度門面房房屋租賃押金合同
- 寒潮雨雪應(yīng)急預(yù)案范文(2篇)
- 垃圾車駕駛員聘用合同
- 2024年大宗貿(mào)易合作共贏協(xié)議書模板
- 變壓器搬遷施工方案
- 單位轉(zhuǎn)賬個(gè)人合同模板
- 八年級(jí)語(yǔ)文下冊(cè) 成語(yǔ)故事 第十五課 諱疾忌醫(yī) 第六課時(shí) 口語(yǔ)交際教案 新教版(漢語(yǔ))
- 2024年1月高考適應(yīng)性測(cè)試“九省聯(lián)考”數(shù)學(xué) 試題(學(xué)生版+解析版)
- EPC項(xiàng)目采購(gòu)階段質(zhì)量保證措施
- T-NAHIEM 101-2023 急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)
- 四川2024年專業(yè)技術(shù)人員公需科目“數(shù)字經(jīng)濟(jì)與驅(qū)動(dòng)發(fā)展”參考答案(通用版)
- 煤炭裝卸服務(wù)合同
評(píng)論
0/150
提交評(píng)論