【正文】
簡譜進(jìn)行編碼,儲存在一個數(shù)據(jù)類型為 unsigned char 的數(shù)組中。表 簡譜對應(yīng)的簡譜碼、T 值、節(jié)拍數(shù)簡譜 發(fā)音 簡譜碼 T 值 節(jié)拍碼 節(jié)拍數(shù)5 低音 SO 1 64260 1 1/4 拍6 低音 LA 2 64400 2 2/4 拍7 低音 TI 3 64524 3 3/4 拍1 中音 DO 4 64580 4 1 拍2 中音 RE 5 64684 5 1 又 1/4 拍3 中音 MI 6 64777 6 1 又 1/2 拍4 中音 FA 7 64820 8 2 拍5 中音 SO 8 64898 A 2 又 1/2 拍6 中音 LA 9 64968 C 3 拍7 中音 TI A 65030 F 3 又 3/4 拍1 高音 DO B 650582 高音 RE C 651103 高音 MI D 651574 高音 FA E 651785 高音 SO F 65217 軟件程序設(shè)計 程序流程圖及相應(yīng)代碼塊主程序流程圖陜西理工學(xué)院畢業(yè)設(shè)計第 8 頁 共 32 頁開始初始化標(biāo)志位C o u n t = = 0標(biāo)志位C o u n t = = 1標(biāo)志位C o u n t = = 2標(biāo)志位C o u n t = = 3播放音樂Y e sN o花樣燈 1花樣燈 1花樣燈 1Y e sY e sY e sN oN oN o圖 主程序流程圖陜西理工學(xué)院畢業(yè)設(shè)計第 9 頁 共 32 頁圖 播放音樂子程序流程圖陜西理工學(xué)院畢業(yè)設(shè)計第 10 頁 共 32 頁5 調(diào)試 檢查硬件連接在 PROTUES 檢查各硬件管腳是否連接正確,線路邏輯是否正確,例如:晶振電路的連接,復(fù)位電路是否設(shè)計正確。2.將所有程序組織起來,在軟件環(huán)境下運(yùn)行,檢查程序是否正確。 測試結(jié)果如上圖所示6 總結(jié)單片機(jī)的設(shè)計至今為止已經(jīng)進(jìn)入了令人鼓舞的階段,在進(jìn)行了長達(dá)兩個多月的時間的摸索與實(shí)驗(yàn),使我不僅僅是對于單片機(jī)入門軟件與硬件的常用設(shè)計與功能,還使我對于一項設(shè)計研究的制作過程所需要的詳細(xì)步驟和具體的實(shí)現(xiàn)方法的力度的掌握。但是,光是完成了作品還是不可以自我滿足的,在從一開始的時候就懷著將作品制作得更加人性化,更加令人滿意,更加地使功能完美又方便地被應(yīng)用領(lǐng)域這個最終目的下,隨著對單片機(jī)這門學(xué)科的認(rèn)識加深,到達(dá)了拓展的程度,我想這個目的將在不遠(yuǎn)的時期內(nèi)被實(shí)現(xiàn)。真是曾經(jīng)為程序的編寫而冥思查找過,曾經(jīng)為無法找出錯誤而郁悶苦惱過,也曾經(jīng)為某一功能不能實(shí)現(xiàn)而猶豫彷徨過,但最終我成功了。sbit key1=P3^2。//按 key2 可切換歌曲sbit fm=P3^7。//矩陣鍵盤的一列uchar code huayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf}。//花樣 2uchar code huayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}。uchar count1。//歌曲標(biāo)志uchar timeh,timel,i。uchar code jmszl[]={ //寂寞沙洲冷0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,//自你走后心憔悴0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,//白色油桐風(fēng)中紛飛0xff}。uchar code lbdya[] ={//路邊的野花不要采陜西理工學(xué)院畢業(yè)設(shè)計第 12 頁 共 32 頁0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,0x20,0x1C,0xff}。uchar yinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x0,0x0}。 //延時 1MSvoid delay(uint z)。void beep()。count1=0。//唱第一首歌P34=0。//開總中斷EX0=1。//外部中斷 0 下降沿觸發(fā)方式EX1=1。//外部中斷 1 下降沿觸發(fā)方式TMOD=0x01。TL0=0。while(1){if(count1!=0){switch(count1){ case 1:for(x=0。x++){ duan=1。beep()。duan=0。}break。x16。P1=huayang3[x]。delay1(300)。if(count1!=3)break。}}else{ song()。}}}void int0() interrupt 0{ EA=0。//去抖if(key1==0){ count2=0。count1++。}EA=1。//關(guān)總中斷delay1(1)。TR0=1。//從頭開始唱陜西理工學(xué)院畢業(yè)設(shè)計第 14 頁 共 32 頁count2++。}EA=1。TL0=timel。}void song(){ uint temp。//jp 是簡譜i=0。}if(count2==1) //選曲 temp=qnzl[i]。if(count2==3) temp=znpa[i]。if(temp==0xff)break。 //取數(shù)的高 4 位duan=1。duan=0。timel=cuzhi[jp*2+1]。fm=1。 //取數(shù)的低 4 位TR0=0。delay1(10)。 陜西理工學(xué)院畢業(yè)設(shè)計第 15 頁 共 32 頁i++。fm=1。for(x=z。x) for(y=19000。y)。for(x=z。x) for(y=112。y)。for(i=0。i++){ fm=~fm。}fm