




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 目 錄1. 引言.1 1.1. 設(shè)計(jì)的目的.1 1.2. 設(shè)計(jì)的內(nèi)容與要求.12. 總體設(shè)計(jì).1 2.1. 音樂產(chǎn)生原理.1 2.2. 設(shè)計(jì)流程.33. 硬件設(shè)計(jì).8 3.1. at89c51芯片簡介 .8 3.1.1 主要特性.8 3.1.2 功能描述.8 3.1.3 引腳說明與硬件連接.9 3.2. 元器件清單.134. 系統(tǒng)工作說明.135.結(jié)束語.14 5.1 收獲與體會(huì).14 5.2 遇到的問題與解決方法.15 5.3 教程建議.156. 參考文獻(xiàn).157. 附錄.161. 引言 1.1 設(shè)計(jì)的目的 本設(shè)計(jì)的主要目的是掌握單片機(jī)系統(tǒng)的開發(fā)應(yīng)用,掌握prteus和keil c51軟件
2、的應(yīng)用,鞏固和加深已學(xué)過的知識(shí),提高動(dòng)手能力及解決實(shí)際問題的能力,同時(shí)培養(yǎng)團(tuán)隊(duì)合作精神。 1.2. 設(shè)計(jì)內(nèi)容與要求(1) 本設(shè)計(jì)以at89c52單片機(jī)為核心控制元件設(shè)計(jì)一個(gè)電子琴,與鍵盤、揚(yáng)聲 器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個(gè)彈奏按鍵、1個(gè)播 放按鍵和揚(yáng)聲器,并且按下時(shí)按鍵發(fā)聲,松開延時(shí)一段時(shí)間停止,中間再 按別的鍵則發(fā)另一音調(diào)的聲音。16個(gè)按鍵設(shè)置成4x4矩陣鍵盤,能彈奏出 16個(gè)音,添加歌曲程序同時(shí)能夠播放出歌曲。(2)利用軟件 keil c51進(jìn)行程序的調(diào)試。(3)利用proteus軟件畫電路圖,并在單片機(jī)加載程序進(jìn)行仿真。(4)根據(jù)電路圖運(yùn)用proteus軟件的布局和
3、布線功能繪制pcb圖并輸出顯 示電路的3d圖。(5)根據(jù)電路圖、pcb圖和3d圖快速地焊接電路。(6)下載程序代碼,調(diào)試(easy 51pro) 。2. 方案總體設(shè)計(jì) 2.1. 音樂產(chǎn)生設(shè)計(jì)原理 一首音樂是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對(duì)于單片機(jī)來產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器t0來產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系正確即可。若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間,每當(dāng)計(jì)時(shí)終止
4、后就將p1.0反相,然后重復(fù)計(jì)時(shí)再反相。就可在p1.0引腳上得到此頻率的脈沖。 利用at89c51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(mode1)下,改變計(jì)數(shù)值th0及tl0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523hz,其周期t1/5231912s,因此只要令計(jì)數(shù)器計(jì)時(shí)956s/1s956,每計(jì)數(shù)956次時(shí)將i/o反相,就可得到中音do(523hz)。 計(jì)數(shù)脈沖值與頻率的關(guān)系式是: n=fi2fr式中n是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12mhz時(shí),其頻率為1mhz);fr是想要產(chǎn)生的頻率。 其計(jì)數(shù)初值t的求法如下: t65536n65536fi2fr例如:設(shè)k65536,fi1m
5、hz,求低音do(261hz)、中音do(523hz)、高音do(1046hz)的計(jì)數(shù)值。t65536n65536fi2fr6553610000002fr65536500000/fr 低音do的t65536500000/26263627 中音do的t65536500000/52364580 高音do的t65536500000/104665059 單片機(jī)12mhz晶振,高中低音符與計(jì)數(shù)t0相關(guān)的計(jì)數(shù)值如表1所示:音符頻率(hz)簡譜碼(t值)音符頻率(hz)簡譜碼(t值)低1do26263628# 4 fa#74064860#1do#27763731中 5 so78464898低2re29463
6、835# 5 so#83164934#2 re#31163928中 6 la88064968低 3 m33064021# 693264994低 4 fa34964103中 7 si98865030# 4 fa#37064185高 1 do104665058低 5 so39264260# 1 do#110965085# 5 so#41564331高 2 re117565110低 6 la44064400# 2 re#124565134# 646664463高 3 m131865157低 7 si49464524高 4 fa139765178中 1 do52364580# 4 fa#1480651
7、98# 1 do#55464633高 5 so156865217中 2 re58764684# 5 so#166165235# 2 re#62264732高 6 la176065252中 3 m65964777# 6186565268中 4 fa69864820高 7 si196765283 表1 音符頻率表我們要為這個(gè)音符建立一個(gè)表格,單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù)。 低音019之間,中音在2039之間,高音在4059之間。table: dw 0,63628,63835,64021,64103,64260,64400,64524,0,0 dw 0,63731,63928,0,64185
8、,64331,64463,0,0,0 dw 0,64580,64684,64777,64820,64898,64968,65030,0,0 dw 0,64633,64732,0,64860,64934,64994,0,0,0 dw 0,65058,65110,65157,65178,65217,65252,65283,0,0 dw 0,65085,65134,0,65198,65235,65268,0,0,0 dw 0 在這個(gè)程序中,彈奏音樂的程序是用定時(shí)/計(jì)數(shù)器t0來完成的,播放音樂程序則是用定時(shí)/計(jì)數(shù)器t1來完成的。2.2. 設(shè)計(jì)流程 (1)鍵盤掃描程序: 檢測是否有鍵按下,有鍵按下則記錄
9、按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無鍵按下,則返回鍵盤掃描程序繼續(xù)檢測。 (2)功能轉(zhuǎn)移程序: 對(duì)檢測到得按鍵值進(jìn)行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,我們?cè)O(shè)計(jì)的功能程序有兩種,即音色調(diào)節(jié)功能和自動(dòng)播放樂曲功能。 (3)琴鍵處理程序: 根據(jù)檢測到得按鍵值,查詢音律表,給計(jì)時(shí)器賦值,使發(fā)出相應(yīng)頻率的聲音。 (4)自動(dòng)播放歌曲程序:檢測到按鍵按下的是自動(dòng)播放歌曲功能鍵后執(zhí)行該程序,電子琴會(huì)自動(dòng)播放事先已經(jīng)存放好的歌曲,歌曲播放完畢之后自動(dòng)返回至鍵盤掃描程序,繼續(xù)等待是否有鍵按下。 程序簡易流程圖: 開始鍵盤掃描程序t0初始化并開中斷允許t0中斷t1初始化并開中斷允許
10、t1中斷有鍵按下否 否延時(shí)去抖動(dòng)識(shí)別按鍵功能 是 是否彈奏鍵 否 播放鍵 是取相應(yīng)的音符碼裝入t1根據(jù)按鍵功能裝入相應(yīng)音符值到t0啟動(dòng)t1啟動(dòng)t0按鍵釋放成功否按鍵釋放成功否停止t0工作停止t1工作 圖1 程序簡易流程圖 彈奏程序流程圖:彈奏子程序開中斷并允許中斷設(shè)定定時(shí)器工作方式取鍵值根據(jù)鍵值查音律表給定時(shí)器t0賦值開始計(jì)時(shí)進(jìn)入中斷cpl p3.0 p3.0退出中斷延時(shí)返回鍵盤掃描程序 圖2 彈奏程序流程圖自動(dòng)播放歌曲程序流程圖:自動(dòng)播放音樂程序a 0,dptr歌譜地址開中斷,設(shè)定定時(shí)器t1工作模式取簡譜碼 取該音符的節(jié)拍碼stopa=0 y n休止符返回鍵盤掃描a=0ffh y n 查音律
11、表,給定時(shí)器賦值inc dptr 開始計(jì)時(shí)進(jìn)入中斷cpl3.0退出中斷延時(shí) 圖3 自動(dòng)播放歌曲程序流程圖3.硬件設(shè)計(jì) 3.1. at89c51芯片簡介 3.1.1 主要特性與mcs-51 兼容 4k字節(jié)可編程閃爍存儲(chǔ)器 壽命:1000寫/擦循環(huán)數(shù)據(jù)保留時(shí)間:10年全靜態(tài)工作:0hz-24hz三級(jí)程序存儲(chǔ)器鎖定128*8位內(nèi)部ram32可編程i/o線兩個(gè)16位定時(shí)器/計(jì)數(shù)器5個(gè)中斷源 可編程串行通道低功耗的閑置和掉電模式片內(nèi)振蕩器和時(shí)鐘電路 3.1.2 功能描述 (1) at89c51是一種帶4k字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(fperomfalsh programmable and erasa
12、ble read only memory)的低電壓,高性能cmos8位微處理器,俗稱單片機(jī)。at89c2051是一種帶2k字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用atmel高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的mcs-51指令集和輸出管腳相兼容。由于將多功能8位cpu和閃爍存儲(chǔ)器組合在單個(gè)芯片中,atmel的at89c51是一種高效微控制器,at89c2051是它的一種精簡版本。at89c單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。 (2)振蕩器特性: xtal1和xtal2分別為反向放大器的輸入和輸出。該反向放大器可
13、以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,xtal2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。 (3)芯片擦除: 整個(gè)perom陣列和三個(gè)鎖定位的電擦除可通過正確的控制信號(hào)組合,并保持ale管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲(chǔ)字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。此外,at89c51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,cpu停止工作。但ram,定時(shí)器,計(jì)數(shù)器,串口和中斷系統(tǒng)仍在工
14、作。在掉電模式下,保存ram的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個(gè)硬件復(fù)位為止。 3.1.3 引腳說明與硬件連接 (1) 引腳圖,如圖4: 圖4 at89c51引腳圖 (2)p1口: p1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,p1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在flash編程和校驗(yàn)時(shí),p1口作為第八位地址接收。 利用p1口為按鍵接入口,形成4x4組成具有16個(gè)按鍵矩陣的鍵盤,作為琴鍵鍵盤,設(shè)計(jì)成16個(gè)音,如下圖5: 所對(duì)應(yīng)的鍵碼 0 1 2 3 4 5 6
15、7 8 9 a b c d e f 圖5 4x4鍵盤(3) p2口: p2口為一個(gè)內(nèi)部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個(gè)ttl門電流,當(dāng)p2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),p2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。p2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),p2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),p2口輸出其特殊功能寄存器的內(nèi)容。p2口在flash編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。 利用p2.0接播放音樂鍵,如圖6: 圖6 自
16、動(dòng)播放歌曲 (4)p3口: p3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向i/o口,可接收輸出4個(gè)ttl門電流。當(dāng)p3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流(ill)這是由于上拉的緣故。p3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。 利用p3.0rxd口(串行輸入口)接1個(gè)喇叭,通過執(zhí)行相應(yīng)的功能程序使電子琴發(fā)出不同音色的聲音,如圖7: 圖7 p3.0的輸出電路 圖中喇叭處接了1個(gè)2n3906的pnp,其引腳圖如下圖8: 圖8 2n3906引腳圖 (5)rst:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持rst腳兩個(gè)機(jī)器周期的 高電平時(shí)間。 /ea
17、/vpp:當(dāng)/ea保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000h-ffffh),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/ea將內(nèi)部鎖定為reset;當(dāng)/ea端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在flash編程期間,此引腳也用于施加12v編程電源(vpp)。 當(dāng)按下按鍵,rst端口輸入高點(diǎn)平,電路進(jìn)行復(fù)位,歌曲停止播發(fā),如圖9: 圖9 復(fù)位部分 (6)xtal1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 xtal2:來自反向振蕩器的輸出。如圖10: 圖10 晶振部分 3.2. 元器件清單 如下表2: 名稱 數(shù)值 個(gè)數(shù) 單片機(jī) at89c51 1 獨(dú)立按鍵(可彈起的) 18 2n3
18、906 1 喇叭 1 電阻r1 10k 1 電阻r2 1k 1 電阻r3 200 1 電容c1、c2 16pf 各1個(gè) 電容c3 4.7uf 1 晶振 12mhz 1 表2 元器件清單4. 系統(tǒng)工作說明 接上電源,按下自動(dòng)播放歌曲按鍵b17,p2.0口此時(shí)接上低電平,作為輸出口,因?yàn)閜2.0具有輸出寄存器寄存的內(nèi)容的特殊功能,所以播放出已編好程序的歌曲。當(dāng)按下復(fù)位部分的按鍵b18時(shí),因?yàn)閺?fù)位部分是接高電平的,按下按鍵就產(chǎn)生高電平輸入進(jìn)行電路的復(fù)位,自動(dòng)播放的歌曲就馬上停止。而4x4矩陣鍵盤是接p1口作為輸入,16個(gè)鍵位產(chǎn)生不同的頻率對(duì)應(yīng)其簡譜碼而產(chǎn)生不同的音階。喇叭輸出部分接p3.0口,一直保
19、持低電平作為輸出,接上一個(gè)pnp 2n3906作為放大功能使其播放聲音。5. 結(jié)束語 5.1 收獲與體會(huì) 通過這次課程設(shè)計(jì),讓我感覺到了單片機(jī)的樂趣以及運(yùn)用單片機(jī)設(shè)計(jì)電路比較方便和簡單。在課程設(shè)計(jì)過程中,我學(xué)會(huì)了怎么通過各種方式查詢相關(guān)的資料,尤其是要充分利用互聯(lián)網(wǎng)來查找自己想要的資料。這次的課程設(shè)計(jì)涉及硬件和軟件兩方面的內(nèi)容。首先是軟件部分,我學(xué)會(huì)了運(yùn)用keil c51軟件建立工程文件來調(diào)試程序的正確性,同時(shí)也學(xué)會(huì)了運(yùn)用proteus軟件來畫電路圖,基本掌握proteus軟件的使用方法包括繪制原理圖、pcb圖、3d圖,通過這些圖與焊接硬件電路緊密的聯(lián)在一起。由于自己所學(xué)有限,所以程序的編寫事
20、件很頭疼的事,所以我們是先從網(wǎng)上下載一些類似的程序,然后對(duì)程序進(jìn)行分析修改加以利用。硬件部分,在選取單片機(jī)前必須知道我們將要制作的電路需要實(shí)現(xiàn)什么功能,根據(jù)其功能來選取我們需要的單片機(jī)。而在焊接的過程中我發(fā)現(xiàn)每個(gè)元器件的排布是十分講究的,布局得好焊接起來就方便且簡單多了。 設(shè)計(jì)好后,要將程序燒入芯片,經(jīng)過調(diào)試成功后,我們可以任意彈奏自己想要的旋律。本研究通過制作電子琴,將幾個(gè)模塊很好的融合起來,對(duì)使用單片機(jī)設(shè)計(jì)簡易電子琴進(jìn)行了分析,并介紹了基于單片機(jī)電子琴統(tǒng)硬件組成。利用單片機(jī)產(chǎn)生不同頻率來獲得我們要求的音階。說明一首音樂是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不
21、同的頻率的組合,即可構(gòu)成我們所想要的音樂了,所以我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確來,然后我們利用功放電路來將音樂聲音放大。 5.2 遇到的問題與解決方法 (1)繪制好電路總原理圖準(zhǔn)備焊接的時(shí)候,發(fā)現(xiàn)按照原理圖來焊接相當(dāng)困難,不知從何下手。于是我上網(wǎng)查了一下資料,發(fā)現(xiàn)原來proteus軟件有自動(dòng)布局和自動(dòng)布線的功能來繪制pcb圖,而且還可以輸出3d圖。根據(jù)這總原理圖、pcb圖還有3d圖來焊接電路,很快地焊接好電路而且一插上電源電路就跟仿真一樣成功了。 (2)在購買材料的時(shí)候那間店沒有at89c51單片機(jī),只好購買了stc89c52單片機(jī)。回來上網(wǎng)查了一下資料,發(fā)現(xiàn)它們的引腳都一樣,而且
22、stc89c52的容量大一些,功能更強(qiáng),所以完全可以代替at89c51來實(shí)現(xiàn)本設(shè)計(jì)的電子琴電路的功能。 5.3 教程建議 我覺得只是單純的上課來學(xué)習(xí)單片機(jī)是很難的,老師應(yīng)該多找一些電路的實(shí)例來講授單片機(jī)的知識(shí),這樣會(huì)讓學(xué)生更容易接受而且更容易明白。課程應(yīng)該多安排一些課程設(shè)計(jì)來讓學(xué)生自己動(dòng)手來提高對(duì)單片機(jī)的知識(shí)和動(dòng)手能力。6. 參考文獻(xiàn)1 李朝青 . 單片機(jī)原理與接口技術(shù).2 李光飛、樓然苗 .單片機(jī)課程設(shè)計(jì)指導(dǎo) .北京:北京航空航天大學(xué)出版 社.3 蔡朝洋 . 單片機(jī)控制實(shí)習(xí)與專題制作 .北京:北京航空航天大學(xué)出版社.4 嚴(yán)天峰 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與仿真調(diào)試 北京:北京航空航天大學(xué)出 版社 .
23、 2005年8月.7. 附錄 圖11 原理圖 圖12 實(shí)物圖 圖13 pcb圖 圖14 3d圖設(shè)計(jì)源程序:buff equ 30hsth0 equ 31hstl0 equ 32htemp equ 33h org 00h ljmp start org 0bh ljmp int_t0 org 001bh ljmp tim1start: mov tmod,#01h ;設(shè)置t0工作方式 setb et0 setb ea ;啟動(dòng)t0main: mov p1,#0ffh ;p1全置1 clr p1.4 ;開始掃描第一行 mov a,p1 anl a,#0fh ;屏蔽高四位 xrl a,#0fh ;低位 有
24、”0”則有鍵按下,否則無 jz kkey1 ; 判斷有無鍵按下,有則繼續(xù),沒有則轉(zhuǎn)移到kkey1 lcall dely10ms ;調(diào)用延時(shí)程序 mov a,p1 ;重新開始判斷有無鍵按下 anl a,#0fh xrl a,#0fh jz kkey1 mov a,p1 anl a,#0fh ;求鍵值 cjne a,#0eh,ckk1 ;相等說明該行第一列有鍵按下,不等則轉(zhuǎn)移 mov buff,#0 ;該鍵值為0 ljmp ndk1 ;跳到ndk1執(zhí)行相應(yīng)的功能程序ckk1: cjne a,#0dh,kk2;相等說明該行第二列有鍵按下,不等則轉(zhuǎn)移 mov buff,#1;該鍵值為1 ljmp nd
25、k1;跳到ndk1執(zhí)行相應(yīng)的功能程序kk2: cjne a,#0bh,kk3;相等說明該行第三列有鍵按下,不等則轉(zhuǎn)移 mov buff,#2;該鍵值為2 ljmp ndk1;跳到ndk1執(zhí)行相應(yīng)的功能程序kk3: cjne a,#07h,kk4;相等說明該行第四列有鍵按下,不等則轉(zhuǎn)移 mov buff,#3;該鍵值為2 ljmp ndk1;跳到ndk1執(zhí)行相應(yīng)的功能程序kk4: nopndk1: mov a,buff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#ta
26、ble1 movc a,a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk1a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk1a clr tr0kkey1: mov p1,#0ffh ;開始掃描第二行 clr p1.5 mov a,p1 anl a,#0fh xrl a,#0fh jz kkey2 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey2 mov a,p1
27、anl a,#0fh cjne a,#0eh,kk5 mov buff,#4 ljmp ndk2kk5: cjne a,#0dh,kk6 mov buff,#5 ljmp ndk2kk6: cjne a,#0bh,kk7 mov buff,#6 ljmp ndk2kk7: cjne a,#07h,kk8 mov buff,#7 ljmp ndk2kk8: nopndk2: mov a,buff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,
28、a+dptr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk2a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk2a clr tr0kkey2: mov p1,#0ffh ;開始掃描第三行 clr p1.6 mov a,p1 anl a,#0fh xrl a,#0fh jz kkey3 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey3 mov a,p1 anl a,#0fh c
29、jne a,#0eh,kk9 mov buff,#8 ljmp ndk3kk9: cjne a,#0dh,kk10 mov buff,#9 ljmp ndk3kk10: cjne a,#0bh,kk11 mov buff,#10 ljmp ndk3kk11: cjne a,#07h,kk12 mov buff,#11 ljmp ndk3kk12: nopndk3: mov a,buff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dp
30、tr mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk3a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk3a clr tr0kkey3: mov p1,#0ffh;開始掃描第四行 clr p1.7 mov a,p1 anl a,#0fh xrl a,#0fh jz kkey4 lcall dely10ms mov a,p1 anl a,#0fh xrl a,#0fh jz kkey4 mov a,p1 anl a,#0fh cjne a
31、,#0eh,kk13 mov buff,#12 ljmp ndk4kk13: cjne a,#0dh,kk14 mov buff,#13 ljmp ndk4kk14: cjne a,#0bh,kk15 mov buff,#14 ljmp ndk4kk15: cjne a,#07h,kk16 mov buff,#15 ljmp ndk4kk16: nopndk4: mov a,buff mov dptr,#table movc a,a+dptr mov p0,a mov a,buff mov b,#2 mul ab mov temp,a mov dptr,#table1 movc a,a+dpt
32、r mov sth0,a mov th0,a inc temp mov a,temp movc a,a+dptr mov stl0,a mov tl0,a setb tr0ndk4a: mov a,p1 anl a,#0fh xrl a,#0fh jnz ndk4a clr tr0kkey4: mov a,#0ffhmov p2,a mov a,p2jb acc.0, kkey5lcall dely10msmov a,p2jb acc.0, kkey5mov buff,#16ljmp start22start22: mov a,buffcjne a,#16,kkey5ljmp start2kk
33、ey5: ljmp main start2: mov tmod,#10h ;設(shè)t1在m1 mov ie,#88h ;中斷使能 start0: mov 30h,#00 ;取簡譜碼指針 next: mov a,30h ;簡譜碼指針載入a mov dptr,#tab ;至tab取簡譜碼 movc a,a+dptr ;mov r2,a ;渠道的簡譜碼暫存于r2 jz end0 ;是否渠道00(結(jié)束碼) anl a,#0fh ;不是,則取低4位(節(jié)拍碼) mov r5,a ;將節(jié)拍碼存入r5 mov a,r2 ;將取到的簡譜碼再載入a swap a ;高低4位交換 anl a,#0fh ;取低4位(音符
34、碼) jnz sing ;取到的音符碼是否為0? clr tr1 ;開始,則不發(fā)音 sjmp d1 ;跳至d1 sing: dec a ;取到的音符碼減1(不含0) mov 22h,a ;存入(22h) rl a ;乘2 mov dptr,#tab1 ;至table1取相對(duì)的高位字節(jié)計(jì)數(shù)值 movc a,a+dptr ; mov th1,a ;取到的高位字節(jié)存入th0 mov 21h,a ;取到的高位字節(jié)存入(21h) mov a,22h ;在載入取到的音符碼 rl a ;乘2 inc a ;加1 movc a,a+dptr ;至table1取相對(duì)的低位字節(jié)計(jì)數(shù)值 mov tl1,a ;取到的低位字節(jié)存入tl0 mov 20h,a ;取到的低位字節(jié)存入(20h) setb tr1 ;啟動(dòng)timer0d1: lcall delay ;其本單位時(shí)間1/4拍187毫秒 inc 30h ;取簡譜碼指針加1 jmp next ;取下一個(gè)簡譜碼 end0: clr tr1 ;停止timer0 ljmp main ;重復(fù)循環(huán) tim1: push acc ;將a的值暫存于堆棧 pu
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西信息職業(yè)技術(shù)學(xué)院《秘書學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州農(nóng)業(yè)職業(yè)學(xué)院《口腔探究性學(xué)習(xí)(1)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年河南省安全員《C證》考試題庫及答案
- 蘭州交通大學(xué)《建筑通風(fēng)工程安全》2023-2024學(xué)年第二學(xué)期期末試卷
- 汕頭職業(yè)技術(shù)學(xué)院《硼產(chǎn)品開發(fā)與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 珠海藝術(shù)職業(yè)學(xué)院《車輛工程專業(yè)課程設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南外貿(mào)職業(yè)學(xué)院《生物防治》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025貴州省安全員-C證考試(專職安全員)題庫及答案
- 新鄉(xiāng)醫(yī)學(xué)院《裝飾材料與構(gòu)造》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東旅游職業(yè)學(xué)院《地理信息系統(tǒng)及海洋應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 《材料工程基礎(chǔ)》教學(xué)大綱
- 介紹國家-巴西Brazil
- 國內(nèi)外材料牌號(hào)對(duì)照
- 建設(shè)工程施工合同培訓(xùn)PPT(49頁)
- 2010哈弗H5維修手冊(cè)
- (完整版)NRS數(shù)字分級(jí)法評(píng)分表
- LY∕T 2780-2016 松皰銹病菌檢疫技術(shù)規(guī)程
- 一文看懂全部變電站電氣主接線方式
- 蘇科版四年級(jí)勞動(dòng)技術(shù)下冊(cè)教學(xué)計(jì)劃
- 應(yīng)答器報(bào)文定義《運(yùn)基信號(hào)[2005]224號(hào)》
- 電網(wǎng)公司客戶資產(chǎn)接收管理細(xì)則
評(píng)論
0/150
提交評(píng)論