歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

基于51單片機(jī)的電子琴設(shè)計(jì)【附原理圖、PCB和程序】

  • 資源ID:47799969       資源大小:875KB        全文頁(yè)數(shù):36頁(yè)
  • 資源格式: DOC        下載積分:20積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要20積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

基于51單片機(jī)的電子琴設(shè)計(jì)【附原理圖、PCB和程序】

真誠(chéng)為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請(qǐng)指正。課程設(shè)計(jì)說(shuō)明書(shū)題 目: 基于單片機(jī)的電子琴設(shè)計(jì) 院 (系): 電子工程與自動(dòng)化學(xué)院 專 業(yè): 測(cè)控技術(shù)與儀器(卓越) 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 2013 年 9 月 21 日24 / 36目 錄1 摘要 12 關(guān)鍵字 13 設(shè)計(jì)任務(wù)及要求 14 方案可行性論證 15 程序框圖 26 關(guān)鍵單元電路與程序介紹 36.1 復(fù)位與震蕩電路 36.2 4x4矩陣鍵盤(pán) 36.3數(shù)碼管與LED燈 46.4 蜂鳴器 66.5 音樂(lè)相關(guān)知識(shí) 77 調(diào)試過(guò)程 118 總結(jié)與體會(huì) 119 參考文獻(xiàn) 1110 附錄 1210.1 設(shè)備與儀器 1210.2 軟件 1210.3 原件清單 1210.4原理圖與PCB圖 1310.5 總程序 1410.6 實(shí)物圖 31【摘要】:打造一個(gè)多功能電子琴,核心是一塊單片機(jī)。單片機(jī)讀取鍵值,為內(nèi)置定時(shí)器賦初值,定時(shí)器每溢出一次,驅(qū)動(dòng)蜂鳴器的引腳電平就取反一次,產(chǎn)生相應(yīng)頻率的方波,即音調(diào);設(shè)好鍵值與數(shù)碼管段碼表的對(duì)應(yīng)關(guān)系,鍵按下時(shí),數(shù)碼管顯示對(duì)應(yīng)音調(diào)。一首音樂(lè)儲(chǔ)存在一個(gè)表中,表中的數(shù)據(jù)是音調(diào)與節(jié)拍,單片機(jī)讀取音符的音調(diào)與節(jié)拍,根據(jù)音調(diào)賦予定時(shí)器初值,根據(jù)節(jié)拍決定定時(shí)器工作的時(shí)間,也就是蜂鳴器響的時(shí)間,一個(gè)接一個(gè)地讀取音符,即可播放一首歌曲。節(jié)拍用led燈的點(diǎn)亮個(gè)數(shù)表示。單片機(jī)讀取音樂(lè)表中的節(jié)拍,控制led燈的點(diǎn)亮個(gè)數(shù),達(dá)到顯示節(jié)拍的效果。特別要注意的是:該方案采用了兩個(gè)定時(shí)器,T0、T1。T0作為驅(qū)動(dòng)蜂鳴器的定時(shí)器,要給予高優(yōu)先級(jí),不然會(huì)被T1干擾,音質(zhì)變差?!娟P(guān)鍵字】:?jiǎn)纹瑱C(jī)、stc89c52、電子琴、C51、keil?!驹O(shè)計(jì)任務(wù)及要求】:1.通過(guò)按鍵能夠發(fā)出相應(yīng)的音符并播放產(chǎn)生樂(lè)音,實(shí)現(xiàn)演奏;2.演奏的同時(shí)可數(shù)字顯示當(dāng)前的音調(diào),利于培養(yǎng)樂(lè)感3.可以選定播放固定樂(lè)曲自動(dòng)演奏,演奏時(shí)LED進(jìn)行節(jié)拍指示;4.在自動(dòng)演奏和奏樂(lè)的過(guò)程中按停止鍵則中斷演奏;5.可以選擇調(diào)節(jié)音或小?!痉桨缚尚行哉撟C】:本課題采用stc89c52單片機(jī)作為核心器件,實(shí)現(xiàn)基本的音樂(lè)彈奏、音樂(lè)播放、音調(diào)顯示和音樂(lè)節(jié)拍指示的功能。1. 音樂(lè)彈奏:通過(guò)程序識(shí)別4x4矩陣鍵盤(pán)中按下的鍵的坐標(biāo)(x,y),然后根據(jù)(x,y)從計(jì)數(shù)初值表中讀取對(duì)應(yīng)的計(jì)數(shù)初值,賦值給定時(shí)器0,定時(shí)器產(chǎn)生對(duì)應(yīng)頻率的方波,達(dá)到播放對(duì)應(yīng)音調(diào)的功能。2. 音樂(lè)播放:先建立一個(gè)包含一首音樂(lè)的音調(diào)與節(jié)拍的表。其中,音調(diào)就是0x01(低音、do)、0x12(中音、re)、0x23(高音、mi)之類的數(shù);節(jié)拍就是0x02(半拍),0x04(一拍)之類的數(shù)。然后,根據(jù)音調(diào)讀取計(jì)數(shù)初值,再將計(jì)數(shù)初值賦給定時(shí)器T0 -> 開(kāi)啟定時(shí)器T0 -> 讀取節(jié)拍并延時(shí) -> 關(guān)閉定時(shí)器T0 。這樣就發(fā)出了一個(gè)音,然后再讀下一個(gè)音的初值與節(jié)拍,重復(fù)上一個(gè)操作即可。(具體實(shí)現(xiàn)方法見(jiàn)附錄總程序)3. 數(shù)碼管顯示音調(diào): 按鍵:讀出按鍵坐標(biāo)(x,y),用if語(yǔ)句來(lái)判斷(x,y)該給數(shù)碼管賦什么值,然后從uchar code num 表中讀取這個(gè)值賦給數(shù)碼管(例如P0)。 播放歌曲時(shí):讀入音調(diào),根據(jù)音調(diào)的值來(lái)判斷numi這個(gè)表中的i,再把numi賦給P0口。4.led燈的節(jié)拍指示:采用定時(shí)器1來(lái)控制,作為節(jié)拍指示。按鍵時(shí):根據(jù)按下的時(shí)長(zhǎng)來(lái)控制led的點(diǎn)亮個(gè)數(shù),并且是按一定的時(shí)間間隔逐個(gè)點(diǎn)亮;釋放按鍵時(shí),led燈按一定的時(shí)間間隔逐個(gè)熄滅,從而達(dá)到一種比較簡(jiǎn)單的節(jié)拍指示效果。播放音樂(lè)時(shí):根據(jù)音符的節(jié)拍,控制點(diǎn)亮到哪一個(gè)燈,在點(diǎn)亮那個(gè)燈之前,前面的燈逐個(gè)等時(shí)距點(diǎn)亮。音符結(jié)束后,led燈全部一起熄滅。這樣,達(dá)到了一個(gè)精確顯示節(jié)拍的效果。開(kāi)始【程序框圖】:掃描鍵盤(pán)根據(jù)音調(diào)給T0賦初值開(kāi)啟T0 T1是否停止播放讀下一個(gè)音符關(guān)閉T0 T1數(shù)碼管與led數(shù)碼管顯示音調(diào)Led指示節(jié)拍否按節(jié)拍延遲算出音符的音調(diào)、節(jié)拍是否結(jié)束符關(guān)閉定時(shí)器P0口置0否否是按鍵是否釋放開(kāi)啟定時(shí)器,并賦初值,蜂鳴器發(fā)聲算出定時(shí)器初值數(shù)碼管顯示音調(diào)識(shí)別按鍵 有矩陣鍵按下否否播放鍵按下讀取歌曲是是是 【復(fù)位與震蕩電路】:原件的參數(shù)如圖所示。C1,C2 可采用30pF 無(wú)極性陶瓷電容;C3可采用10F記性電解質(zhì)電容。值得注意的是,晶振不能隨便摸!尤其在通電工作的時(shí)候,觸摸容易損壞。自從摸過(guò)一次后,震蕩頻率變得不穩(wěn)定,蜂鳴器聲音時(shí)好時(shí)壞?!?x4矩陣鍵盤(pán)】:鍵盤(pán)掃描的基本思路是:先得出觸發(fā)按鍵的“行”,即橫坐標(biāo)x,再得出他的“列”,即縱坐標(biāo)y。以下是獲取橫坐標(biāo)x的代碼:uchar key_x() /*P1口高位接縱坐標(biāo)(P1.7 - P1.4) 低位接橫坐標(biāo)(P1.3 - P1.0)*/ uchar i; P1 = 0x0f; /*有按鍵按下后 對(duì)應(yīng)按鍵的橫坐標(biāo)電位被拉低( 注意低電位引腳不能被高電位引腳抬高,只能是低電位拉低高電位)*/if(P1_0 = 0)delayms(5); /延時(shí)5ms 去抖動(dòng)if(P1_0 = 0)i = 1;else if(P1_1 = 0)delayms(5);if(P1_1 = 0)i = 2;else if(P1_2 = 0)delayms(5);if(P1_2 = 0)i = 3;else if(P1_3 = 0)delayms(5);if(P1_3 = 0)i = 4;elsei = 0;return (i);/0表示按鍵未按下 獲取y的方法與獲取x的方法類似,具體可以參考附件總程序。得到觸發(fā)按鍵的坐標(biāo)(x,y)之后,可以通過(guò)x,y的值來(lái)確定按鍵的功能。例如 x=1,y=1時(shí)(S1按下),可以讓數(shù)碼管顯示1:if(x = 1 && y = 1)P0 = led_table1;或者更方便一點(diǎn):if(x = 1)P0 = led_tabley;就能顯示第一行的所有的數(shù)了?!緮?shù)碼管與LED燈】:數(shù)碼管:在本課題中,數(shù)碼管要顯示A - G , 1 - 7, 1. - 7. ,所以段碼比較另類。num0的值是沒(méi)用到的,起占位作用。uchar code num=0x00,/共陰極數(shù)碼管段選碼0x77,0x7c,0x39,0x5e,0x79,0x71,0x3d, /a - g0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, /1 - 70x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87 /1. - 7.;編寫(xiě)程序時(shí),要根據(jù)實(shí)際情況來(lái)編寫(xiě):比如16個(gè)按鍵不能夠把低中高音都全部表示完全,只能選取合適的部分。我讓第一行的按鍵 觸發(fā)低音 4 - 7,第二行觸發(fā)中音1 - 4,第三行觸發(fā)中音5 - 7和高音1,第四行觸發(fā)高音2 - 5。這樣設(shè)置能彈奏大部分曲目。以下是控制數(shù)碼管的代碼片段:if(x = 1)P0 = num3 + y ; /低音4 - 7else if(x = 2)P0 = num7 + y; /中音1 - 4else if(x = 3)P0 = num11 + y; /中音5 - 7 和 高音 1else if(x = 4)P0 = num15 + y; /高音2 - 5LED燈:因?yàn)長(zhǎng)ED燈要按一定的時(shí)間逐個(gè)點(diǎn)亮或者逐個(gè)熄滅,所以我用定時(shí)器1來(lái)控制它。定時(shí)器1每溢出一次并滿足一定條件時(shí)flash變量就+1或者-1,然后從led_table這個(gè)表中讀出相應(yīng)的數(shù)賦給P2口。表:uchar code led_table=0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00;/*發(fā)光二極管閃爍表*/代碼: if(x != 0 && y != 0 && flash < 8 )/最大加到8 +flash; else if(x = 0 && y = 0 && flash >0 ) /最小減到0 -flash; P2 = led_tableflash;播放音樂(lè)時(shí)又有所不同:播放音樂(lè)時(shí),led燈要精確地顯示當(dāng)前音符的節(jié)拍,所以if語(yǔ)句里加了一條限制語(yǔ)句:flash < jiepai)代碼:if(out = 1 && flash < 8 && flash < jiepai)/*out =1 表示有歌曲發(fā)聲時(shí),(flash<jiepai)使 led燈剛好指示節(jié)拍*/+flash;else if(out = 0 && flash > 0)-flash; P2 = led_tableflash;這樣做,就能看得出音符的節(jié)拍了。只是,由于led燈的個(gè)數(shù)有限,所以大于二分音符(2拍)的節(jié)拍就無(wú)法看到了。因?yàn)?個(gè)燈全亮才表示二分音符。如果當(dāng)初采用16個(gè)燈的話,就沒(méi)有這個(gè)窘境了。【蜂鳴器】:蜂鳴器采用一個(gè)s8550 NPN三極管驅(qū)動(dòng),一個(gè)可變電阻改變音量。三極管的選用要注意放大倍數(shù),放大倍數(shù)太小會(huì)導(dǎo)致蜂鳴器聲音很小。最初采用8050就造成了這個(gè)問(wèn)題。另外,采用P3.0口連接接蜂鳴器是一個(gè)錯(cuò)誤。因?yàn)镻3.0、P3.1是燒寫(xiě)程序用到的接口。倘若連接了其他器件,每次調(diào)試都要拔下燒寫(xiě)線,很不方便?!疽魳?lè)相關(guān)知識(shí)】:【表6.5.1】音符頻率對(duì)照表音符頻率(HZ)簡(jiǎn)譜碼(T值)音符頻率(HZ)簡(jiǎn)譜碼(T值)低1DO26263628 0xf88c# 4 FA#74064860#1DO#27763731中 5 SO78464898 0xfd82低2RE29463835 0xf95b# 5 SO#83164934#2 RE#31163928中 6 LA88064968 0xfdc8低 3 M33064021 0xfa15# 693264994低 4 FA34964103 0xfa67中 7 SI98865030 0xfe06# 4 FA#37064185高 1 DO104665058 0xfe22低 5 SO39264260 0xfb04# 1 DO#110965085# 5 SO#41564331高 2 RE117565110 0xfe56低 6 LA44064400 0xfb90# 2 RE#124565134# 646664463高 3 M131865157 0xfe85低 7 SI49464524 0xfc0c高 4 FA139765178 0xfe9a中 1 DO52364580 0xfc44# 4 FA#148065198# 1 DO#55464633高 5 SO156865217 0xfec1中 2 RE58764684 0xfcac# 5 SO#166165235# 2 RE#62264732高 6 LA176065252 0xfee4中 3 M65964777 0xfd09# 6186565268中 4 FA69864820 0xfd34高 7 SI196765283 0xff03音調(diào)、節(jié)拍以及編碼的確定方法:一般說(shuō)來(lái),單片機(jī)演奏音樂(lè)基本都是單音頻率,它不包含相應(yīng)幅度的諧波頻率,也就是說(shuō)不能像電子琴那樣能奏出多種音色的聲音。因此單片機(jī)奏樂(lè)只需弄清楚兩個(gè)概念即可,也就是“音調(diào)”和節(jié)拍。其中節(jié)拍表示一個(gè)音符唱多長(zhǎng)的時(shí)間。音調(diào)的確定:不同音高的樂(lè)音是用C、D、E、F、G、A、B來(lái)表示,這7個(gè)字母就是音樂(lè)的音名,它們一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成簡(jiǎn)譜的1、2、3、4、5、6、7,相當(dāng)于漢字“多來(lái)米發(fā)梭拉西”的讀音,這是唱曲時(shí)樂(lè)音的發(fā)音,所以叫“音調(diào)”,即Tone。把C、D、E、F、G、A、B這一組音的距離分成12個(gè)等份,每一個(gè)等份叫一個(gè)“半音”。兩個(gè)音之間的距離有兩個(gè)“半音”,就叫“全音”。在鋼琴等鍵盤(pán)樂(lè)器上,CD、DE、FG、GA、AB兩音之間隔著一個(gè)黑鍵,他們之間的距離就是全音;EF、BC兩音之間沒(méi)有黑鍵相隔,它們之間的距離就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它們的左上角加上號(hào)或者b號(hào)的叫變化音。叫升記號(hào),表示把音在原來(lái)的基礎(chǔ)上升高半音,b叫降記音,表示在原來(lái)的基礎(chǔ)上降低半音。例如高音DO的頻率(1046Hz)剛好是中音DO的頻率(523Hz)的一倍,中音DO的頻率(523Hz)剛好是低音DO頻率(266 Hz)的一倍;同樣的,高音RE的頻率(1175Hz)剛好是中音RE的頻率(587Hz)的一倍,中音RE的頻率(587Hz)剛好是低音RE頻率(294 Hz)的一倍。1)要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)這半個(gè)周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的I/O反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)I/O反相,就可在I/O腳上得到此頻率的脈沖。2)利用stc89c52的內(nèi)部定時(shí)器使其工作在計(jì)數(shù)器模式MODE1下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法。此外結(jié)束符和休止符可以分別用代碼00H和FFH來(lái)表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)果為FFH,則產(chǎn)生相應(yīng)的停頓效果。3)例如頻率為523Hz,其周期T=1/523=1912us,因此只要令計(jì)數(shù)器計(jì)時(shí)956us/1us=956,在每次計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO(523Hz)。計(jì)數(shù)脈沖值與頻率的關(guān)系公式如下:N=Fi2FrN:計(jì)算值;Fi:內(nèi)部計(jì)時(shí)一次為1us,故其頻率為1MHz;4) 其計(jì)數(shù)值的求法如下:T=65536-N=65536-Fi2Fr例如:設(shè)K=65536,F(xiàn)=1000000=Fi=1MHz,求低音DO(261Hz)。中音DO(523Hz)。高音的DO(1046Hz)的計(jì)算值T=65536-N=65536-Fi2Fr=65536-10000002Fr=65536-500000/Fr低音DO的T=65536-500000/262=63627中音DO的T=65536-500000/523=64580高音DO的T=65536-500000/1047=650595) C調(diào)各音符頻率與計(jì)數(shù)值T的對(duì)照表如表1.6.5.2所示。低音頻率T參數(shù)中音頻率T參數(shù)高音頻率T參數(shù)Do2621908229Do523956115Do10465757Do2771805217Do554903108Do11095454Re2941701204Re587852102Re11755151Re3111608193Re62280497Re12454848Mi3301515182Mi65975991Mi13184545Fa3491433172Fa69871686Fa13974343Fa3701351162Fa74067681Fa14804141So3921276153So78463877So15683838So4151205145So83160272So16613636La4401136136La88056868La17603434La4641078129La93253664La18653232Si4941012121Si98850661Si19763030表6.5.2 C調(diào)各音符頻率與計(jì)數(shù)值T的對(duì)照表節(jié)拍的確定:若要構(gòu)成音樂(lè),光有音調(diào)是不夠的,還需要節(jié)拍,讓音樂(lè)具有旋律(固定的律動(dòng)),而且可以調(diào)節(jié)各個(gè)音的快滿度?!肮?jié)拍”,即Beat,簡(jiǎn)單說(shuō)就是打拍子,就像我們聽(tīng)音樂(lè)不自主的隨之拍手或跺腳。若1拍實(shí)0.5s,則1/4 拍為0.125s。至于1拍多少s,并沒(méi)有嚴(yán)格規(guī)定,就像人的心跳一樣,大部分人的心跳是每分鐘72下,有些人快一點(diǎn),有些人慢一點(diǎn),只要聽(tīng)的悅耳就好。音持續(xù)時(shí)間的長(zhǎng)短即時(shí)值,一般用拍數(shù)表示。休止符表示暫停發(fā)音。一首音樂(lè)是由許多不同的音符組成的,而每個(gè)音符對(duì)應(yīng)著不同頻率,這樣就可以利用不同的頻率的組合,加以與拍數(shù)對(duì)應(yīng)的延時(shí),構(gòu)成音樂(lè)。了解音樂(lè)的一些基礎(chǔ)知識(shí),我們可知產(chǎn)生不同頻率的音頻脈沖即能產(chǎn)生音樂(lè)。對(duì)于單片機(jī)來(lái)說(shuō),產(chǎn)生不同頻率的脈沖是非常方便的,利用單片機(jī)的定時(shí)/計(jì)數(shù)器來(lái)產(chǎn)生這樣的方波頻率信號(hào)。因此,需要弄清楚音樂(lè)中的音符和對(duì)應(yīng)的頻率,以及單片機(jī)定時(shí)計(jì)數(shù)的關(guān)系。音樂(lè)的編碼:每個(gè)音符采用2個(gè)字節(jié)。第一個(gè)字節(jié)表示音調(diào),第二個(gè)字節(jié)表示節(jié)拍。音調(diào)字節(jié)中,高四位表示低中高音,0表示低音,1表示中音,2表示高音;低四位表示“音調(diào)”。比如:0x11表示中音do。節(jié)拍字節(jié)中,數(shù)值i表示代表著延遲i個(gè)十六分音符。比如:0x04,表示延時(shí)4個(gè)16分音符,即延時(shí)1個(gè)四分之一音符。在以四分音符為一拍的歌曲中,0x04就代表一拍。底下沒(méi)有橫線,右側(cè)也沒(méi)有橫線的數(shù)字(音調(diào)),就用0x04表示他的延時(shí)。底下有一橫線:0x02;右側(cè)有一橫:0x08;右側(cè)兩橫:0x0c;右側(cè)三橫:0x10;右下角有一點(diǎn):加上當(dāng)前延時(shí)的一半。由于不同的歌曲有不同的播放速度,即曲速(單位拍每分鐘)。所以音樂(lè)編碼表中的第0和第1元素用來(lái)表示曲速。我們可以找到任意歌曲的簡(jiǎn)譜圖,然后根據(jù)上述規(guī)則編寫(xiě)出單片機(jī)識(shí)別的簡(jiǎn)譜表。例如:可以翻譯成:uchar code ymt=/玉滿堂0x96,0x00, /曲速 0x96表示 150拍/分0x00,0x0a,0x05,0x02,0x15,0x02,0x12,0x02,0x13,0x04,0x13,0x02,0x15,0x02,0x12,0x04,0x12,0x02,0x13,0x02,0x12,0x10,0x13,0x04,0x13,0x02,0x12,0x02,0x13,0x04,0x15,0x02,0x16,0x02,0x15,0x0c,0x13,0x02,0x15,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x04,0x15,0x02,0x13,0x02,0x15,0x0c,0x15,0x02,0x16,0x02,0x21,0x04,0x21,0x02,0x22,0x02,0x23,0x04,0x22,0x02,0x21,0x02,0x22,0x10,0x23,0x08,0x15,0x02,0x16,0x02,0x21,0x02,0x22,0x02,0x23,0x04,0x23,0x02,0x22,0x02,0x21,0x06,0x21,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x04,0x13,0x04,0x15,0x10,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x04,0x21,0x02,0x22,0x02,0x23,0x04,0x23,0x02,0x22,0x02,0x21,0x06,0x21,0x02,0x16,0x02,0x21,0x02,0x16,0x02,0x21,0x02,0x22,0x02,0x23,0x02,0x25,0x02,0x23,0x02,0x22,0x0c,0x21,0x02,0x22,0x02,0x23,0x06,0x15,0x02,0x16,0x02,0x21,0x02,0x22,0x02,0x23,0x04,0x23,0x02,0x22,0x02,0x21,0x06,0x21,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x02,0x21,0x02,0x15,0x02,0x13,0x02,0x15,0x0c,0x13,0x02,0x15,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x22,0x04,0x22,0x02,0x23,0x02,0x22,0x04,0x22,0x02,0x23,0x02,0x25,0x02,0x26,0x02,0x23,0x02,0x25,0x02,0x22,0x02,0x23,0x02,0x21,0x02,0x16,0x02,0x21,0x10,0xff;【調(diào)試過(guò)程】:編寫(xiě)程序階段,一個(gè)功能、一個(gè)模塊地編寫(xiě)。先寫(xiě)好鍵盤(pán)掃描程序,然后再到數(shù)碼管顯示、蜂鳴器發(fā)聲、led節(jié)拍指示。分部進(jìn)行,個(gè)個(gè)擊破。【總結(jié)體會(huì)】:本課題讓我更深刻地認(rèn)識(shí)到了單片機(jī)這種器件,特別是對(duì)單片機(jī)里面的定時(shí)器收獲最多。而且這是我第一次焊雙面板,意義不同凡響。有了這次經(jīng)驗(yàn),對(duì)以后做板子定有深遠(yuǎn)的影響。制作過(guò)程中,感觸最深的是解決雜音問(wèn)題。在彈奏與播放時(shí),蜂鳴器聲音不純,有顫音,影響音樂(lè)美感。為此,我煞費(fèi)苦心,花了很多時(shí)間找原因。想到了精簡(jiǎn)定時(shí)器中斷程序里的代碼和運(yùn)算,但效果甚微。直到最后,忽然想到了定時(shí)器有優(yōu)先級(jí)的說(shuō)法。試了一下,將控制蜂鳴器的定時(shí)器T0設(shè)為高優(yōu)先級(jí)。終于問(wèn)題解決了!而且是如此的簡(jiǎn)單,但是過(guò)程卻是又如此的艱辛,讓人感覺(jué)不太值得。不過(guò),終歸是值得的!【參考文獻(xiàn)】:?jiǎn)纹C(jī)原理、匯編與C51及接口技術(shù)(朱定華 戴穎穎 李川香 著)序 號(hào)名 稱數(shù) 量備 注1四腳開(kāi)關(guān)186x6 mm212Mhz晶振1330pF陶瓷電容2410F無(wú)極性電容1510K 2.2K電阻 910K x9 ;2.2K x1 6240電阻107NPN 三極管1s85508七段共陰極數(shù)碼管29無(wú)源蜂鳴器110電位器111發(fā)光二極管10紅色 x8 黃x1 綠 x112排針3排13雙面覆銅銅板115x10 cm1440P杜邦線115單片機(jī)底座216電源開(kāi)關(guān)117Stc89c52單片機(jī)1【附錄】:設(shè)備與儀器:電腦、單片機(jī)開(kāi)發(fā)板(或者單片機(jī)燒寫(xiě)器)軟件:Keil uVision4 、DXP 09原件清單:原理圖與PCB圖:總程序:#include<reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int#define allsong 4 /歌曲總數(shù) 按實(shí)際寫(xiě)sbit P1_0 = P10;sbit P1_1 = P11;sbit P1_2 = P12;sbit P1_3 = P13;sbit P1_4 = P14;sbit P1_5 = P15;sbit P1_6 = P16;sbit P1_7 = P17;sbit beep = P30;sbit key_play = P31;uchar x = 0; /*矩陣鍵盤(pán)橫坐標(biāo) 從1開(kāi)始 0為未按下的標(biāo)志 */uchar y = 0; /*矩陣鍵盤(pán)縱坐標(biāo) 從1開(kāi)始 0為未按下的標(biāo)志 */uchar flash = 0;/控制led燈顯示的變量 */uchar f_l; /*按鍵發(fā)出音調(diào)的初值(低位)*/uchar f_h; /高位 uchar song_l;/*歌曲音調(diào)的初值(低位)*/uchar song_h;/高位 uchar out = 0;/*聲音輸出變量 1表示有輸出 0表示無(wú)輸出 */uchar yindiao;/*音調(diào) 定義為全局變量 為了在播放時(shí)數(shù)碼管能顯示當(dāng)前音調(diào)*/uchar yindiao_h;/音調(diào)的高四位uchar yindiao_l;/音調(diào)的低四位uchar jiepai;/*節(jié)拍(簡(jiǎn)而言之就是一個(gè)音調(diào)響的時(shí)間長(zhǎng)度)*/uchar song_id = 1;/歌曲序號(hào)變量uchar temp_id = 1;/歌曲臨時(shí)序號(hào)uint which = 2;/*簡(jiǎn)譜表里的第幾個(gè)音 從第2個(gè)開(kāi)始 第0個(gè)用來(lái)存曲速,第1個(gè)占位*/uchar same = 0; /*在暫停時(shí)選了同一首歌曲,用于跳出暫停循環(huán)*/uchar key_x(); /獲取鍵盤(pán)橫坐標(biāo) 函數(shù)uchar key_y();/獲取鍵盤(pán)縱坐標(biāo) 函數(shù)void play(); /播放歌曲 函數(shù)void delayms(uint ms);/延時(shí)xx ms 函數(shù)void delay(uint pai);/節(jié)拍延時(shí) 函數(shù)void key_check(); /檢查按鍵狀態(tài) 函數(shù)void display(); /數(shù)碼管顯示對(duì)應(yīng)音調(diào) 函數(shù)void speak();/*按鍵后 給定時(shí)器0賦對(duì)應(yīng)音調(diào)的初值 從而發(fā)出聲音*/uchar choose();/*播放狀態(tài)下 選歌函數(shù) 釋放按鍵后才跳出函數(shù),返回歌曲序號(hào)*/uchar choose2();/*暫停狀態(tài)下 選歌函數(shù) 不用釋放按鍵即可跳出函數(shù),返回歌曲序號(hào) */void play();/播放歌曲 函數(shù)uchar code num=0x00,/數(shù)碼管段選碼0x77,0x7c,0x39,0x5e,0x79,0x71,0x3d, /a - g0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, /1 - 70x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87 /1. - 7.;uchar code led_table=0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00;/*發(fā)光二極管閃爍表*/uchar code chuzhi= /音調(diào)對(duì)應(yīng)的計(jì)數(shù)初值 0xff,0xff,/占0位 0xf8,0x8c,/低1 (0x01)a -數(shù)碼管顯示方式 0xf9,0x5b,/ 2 b 0xfa,0x15,/ 3 c 0xfa,0x67,/ 4 d 0xfb,0x04,/ 5 e 0xfb,0x90,/ 6 f 0xfc,0x0c,/低7(0x07)g 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*占位 0x08 - 0x0b (8 - 11)*/ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,/*占位 0x0c - 0x10(12 - 16)*/ 0xfc,0x44,/中1 (0x11) (17) 0xfc,0xac,/ 2 0xfd,0x09,/ 3 0xfd,0x34,/ 4 0xfd,0x82,/ 5 0xfd,0xc8,/ 6 0xfe,0x06,/中7 (0x17) (23) 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*占位 0x18 - 0x1b (24 - 27)*/ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /*占位 0x1c - 0x20 (28 - 32)*/ 0xfe,0x22,/高1 (0x21)1. (33) 0xfe,0x56,/2 2. 0xfe,0x85,/3 3. 0xfe,0x9a,/4 4. 0xfe,0xc1,/5 5. 0xfe,0xe4,/6 6. 0xff,0x03 /高7 (0x27)7. (39) ;uchar code ymt=/玉滿堂0x96,0x00, /曲速 0x96表示 150拍/分0x00,0x0a,0x05,0x02,0x15,0x02,0x12,0x02,0x13,0x04,0x13,0x02,0x15,0x02,0x12,0x04,0x12,0x02,0x13,0x02,0x12,0x10,0x13,0x04,0x13,0x02,0x12,0x02,0x13,0x04,0x15,0x02,0x16,0x02,0x15,0x0c,0x13,0x02,0x15,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x04,0x15,0x02,0x13,0x02,0x15,0x0c,0x15,0x02,0x16,0x02,0x21,0x04,0x21,0x02,0x22,0x02,0x23,0x04,0x22,0x02,0x21,0x02,0x22,0x10,0x23,0x08,0x15,0x02,0x16,0x02,0x21,0x02,0x22,0x02,0x23,0x04,0x23,0x02,0x22,0x02,0x21,0x06,0x21,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x04,0x13,0x04,0x15,0x10,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x04,0x21,0x02,0x22,0x02,0x23,0x04,0x23,0x02,0x22,0x02,0x21,0x06,0x21,0x02,0x16,0x02,0x21,0x02,0x16,0x02,0x21,0x02,0x22,0x02,0x23,0x02,0x25,0x02,0x23,0x02,0x22,0x0c,0x21,0x02,0x22,0x02,0x23,0x06,0x15,0x02,0x16,0x02,0x21,0x02,0x22,0x02,0x23,0x04,0x23,0x02,0x22,0x02,0x21,0x06,0x21,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x02,0x21,0x02,0x15,0x02,0x13,0x02,0x15,0x0c,0x13,0x02,0x15,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x16,0x04,0x16,0x02,0x21,0x02,0x22,0x04,0x22,0x02,0x23,0x02,0x22,0x04,0x22,0x02,0x23,0x02,0x25,0x02,0x26,0x02,0x23,0x02,0x25,0x02,0x22,0x02,0x23,0x02,0x21,0x02,0x16,0x02,0x21,0x10,0xff;uchar code dl= /蝶戀 0x8c,0x00, /曲速 0x8c表示 140拍/分0x13,0x04,0x13,0x04,0x13,0x04,0x12,0x04,0x13,0x08,0x12,0x04,0x13,0x04,0x12,0x04,0x12,0x04,0x06,0x08,0x06,0x04,0x07,0x04,0x11,0x08,0x12,0x04,0x11,0x04,0x07,0x08,0x06,0x04,0x05,0x04,0x06,0x10,0x13,0x04,0x13,0x04,0x13,0x04,0x12,0x04,0x13,0x0c,0x16,0x04,0x15,0x04,0x16,0x04,0x15,0x04,0x15,0x04,0x12,0x04,0x12,0x04,0x13,0x04,0x14,0x08,0x15,0x04,0x14,0x04,0x13,0x04,0x12,0x04,0x11,0x04,0x13,0x0f,0x13,0x0c,0x13,0x04,0x16,0x08,0x17,0x04,0x16,0x04,0x15,0x0c,0x13,0x04,0x15,0x0f,0x13,0x04,0x15,0x04,0x12,0x08,0x16,0x04,0x15,0x04,0x13,0x08,0x12,0x04,0x12,0x04,0x13,0x0c,0x12,0x08,0x16,0x04,0x16,0x0c,0x11,0x08,0x16,0x04,0x16,0x08,0x16,0x04,0x17,0x04,0x21,0x08,0x17,0x04,0x16,0x04,0x17,0x08,0x16,0x04,0x17,0x04,0x13,0x08,0x13,0x0c,0x13,0x04,0x16,0x08,0x17,0x08,0x16,0x04,0x15,0x0c,0x13,0x04,0x15,0x10,0x14,0x04,0x15,0x04,0x16,0x08,0x17,0x04,0x16,0x04,0x17,0x08,0x16,0x04,0x17,0x04,0x13,0x10,0x13,0x10,0x12,0x08,0x16,0x04,0x16,0x02,0x16,0x10,0x11,0x04,0x16,0x04,0x16,0x02,0x16,0x08,0x16,0x04,0x17,0x04,0x21,0x08,0x17,0x04,0x16,0x04,0x17,0x08,0x15,0x08,0x16,0x10,0x23,0x04,0x22,0x04,0x22,0x04,0x21,0x04,0x21,0x04,0x17,0x04,0x17,0x04,0x16,0x04,0x21,0x04,0x17,0x04,0x17,0x04,0x16,0x04,0x16,0x04,0x15,0x04,0x15,0x04,0x14,0x04,0x16,0x04,0x15,0x04,0x15,0x04,0x14,0x04,0x14,0x04,0x13,0x04,0x13,0x04,0x12,0x04,0x13,0x10,0x13,0x10,0xff;uchar code srkl=/生日快樂(lè)0x78,0x00, /曲速 1200x15,0x02,0x15,0x02,0x16,0x04,0x15,0x04,0x21,0x04,0x17,0x04,0x00,0x04,0x15,0x02,0x15,0x02,0x16,0x04,0x15,0x04,0x22,0x04,0x21,0x08,0x15,0x02,0x15,0x02,0x25,0x04,0x23,0x04,0x21,0x04,0x17,0x04,0x16,0x08,0x16,0x04,0x00,0x04,0x24,0x02,0x24,0x02,0x23,0x04,0x21,0x04,0x22,0x04,0x21,0x08,0x21,0x08,0x00,0x08,0x15,0x02,0x15,0x02,/第二遍0x16,0x04,0x15,0x04,0x21,0x04,0x17,0x04,0x00,0x04,0x15,0x02,0x15,0x02,0x16,0x04,0x15,0x04,0x22,0x04,0x21,0x08,0x15,0x02,0x15,0x02,0x25,0x04,0x23,0x04,0x21,0x04,0x17,0x04,0x16,0x08,0x16,0x04,0x00,0x04,0x24,0x02,0x24,0x02,0x23,0x04,0x21,0x04,0x22,0x04,0x21,0x08,0x21,0x08,0x00,0x04,0xff;uchar code test=/測(cè)試0x78,0x00, /曲速 0x78表示 120拍/分0x01,0x04,0x02,0x04,0x03,0x04,0x04,0x04,0x05,0x04,0x06,0x04,0x07,0x04,0x00,0x04,0x11,0x08,0x12,0x07,0x13,0x06,0x14,0x05,0x15,0x04,0x16,0x03,0x17,0x02,0x00,0x01,0x21,0x01,0x22,0x02,0x23,0x03,0x24,0x04,0x25,0x05,0x26,0x06,0x27,0x07,0x00,0x08,0xff,;void delayms(uint ms) /*ms 等于1時(shí),延時(shí)1ms 等于2時(shí),延時(shí)2ms,以此類推*/uchar a,b,c; /+3while(ms-) for(c=1;c>0;c-)/ 1+2 = 3 for(b=142;b>0;b-) /1*( 1+142*2) = 285 for(a=2;a>0;a-);/ 142*(1+2*2) = 710void delay(uint pai)/*pai 是節(jié)拍 pai若定義成uchar類型,當(dāng)節(jié)拍>0x0c時(shí),會(huì)造成數(shù)據(jù)溢出,產(chǎn)生失真。*/uchar a,b,c;while(pai-)/延遲pai 個(gè) 6.25ms for(c=1;c>0;c-) /1+2=3 for(b=28;b>0;b-)/ 1*(1+28*2) =57 for(a=110;a>0;a-);/28*(1+110*2) = 6188uchar key_x() /*P1口高位接縱坐標(biāo)(P1.7 - P1.4) 低位接橫坐標(biāo)(P1.3 - P1.0)*/ uchar i; P1 = 0x0f; /*有按鍵按下后 對(duì)應(yīng)按鍵的橫坐標(biāo)電位被拉低( 注意低電位引腳不能被高電位引腳抬高,只能是低電位拉低高電位)*/if(P1_0 = 0)delayms(5); /延時(shí)5ms 去抖動(dòng)if(P1_0 = 0)i = 1;else if(P1_1 = 0)delayms(5);if(P1_1 = 0)i = 2;else if(P1_2 = 0)delayms(5);if(P1_2 = 0)i = 3;else if(P1_3 = 0)delayms(5);if(P1_3 = 0)i = 4;elsei = 0;return (i);/0表示按鍵未按下 uchar key_y() uchar j; P1 = 0xf0;if(P1_4 = 0)delayms(5);if(P1_4 = 0)j = 1;else if(P1_5 = 0)delayms(5);if(P1_5 = 0) j = 2;else if(P1_6 = 0)delayms(5);if(P1_6 = 0)j = 3;else if(P1_7 = 0)delayms(5);if(P1_7 = 0)j = 4;elsej = 0;return (j); void key_check() /*檢查矩陣按鍵坐標(biāo)、播放鍵的狀態(tài)及播放鍵狀態(tài)設(shè)置*/x = key_x();y = key_y();if(key_play = 0)key_play = 0; /*保持播放鍵引腳低電平,讓其作為歌曲正在播放的標(biāo)志*/ elsekey_play = 1; /*保持播放鍵引腳高電平,讓其作為歌曲未播放的標(biāo)志*/void display() /*數(shù)碼管顯示相應(yīng)的音調(diào)*/ if(key_play = 1) /按鍵彈奏時(shí)if(x != 0 && y != 0 )if(x = 1)P0 = num3 + y ; /低音4 - 7else if(x = 2)P0 = num7 + y; /中音1 - 4else if(x = 3)P0 = num11 + y; /中音5 - 7 和 高音 1else if(x = 4)P0 = num15 + y; /高音2 - 5elseP0 = 0x00;else /播放音樂(lè)時(shí)if(yindiao_h = 0) /* yindiao變量的高四位表示 低(0) 中(1) 高(2) 音*/P0 = numyindiao_l;/*yindiao變量的低四位表示“調(diào)”, 數(shù)碼管顯示當(dāng)前音調(diào)*/else if(yindiao_h = 1) /中音 P0 = numyindiao_l + 7;else if(yindiao_h = 2) /高音P0 = numyindiao_l + 14;void speak()/

注意事項(xiàng)

本文(基于51單片機(jī)的電子琴設(shè)計(jì)【附原理圖、PCB和程序】)為本站會(huì)員(優(yōu)***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!