版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第11章聲音及其控制11.1發(fā)聲器件及其驅(qū)動11.2音調(diào)與節(jié)拍11.3單片機音樂設(shè)計11.4設(shè)計課目與演練——演奏《兩只老虎》小結(jié)習(xí)題
本章首先介紹蜂鳴器發(fā)聲驅(qū)動電路,然后從單片機的角度把音樂的控制拆分成音調(diào)和節(jié)拍的控制,而后給出的電子琴設(shè)計和音樂演奏則是從不同的角度來應(yīng)用音調(diào)發(fā)聲方案,并給出實例設(shè)計。11.1發(fā)聲器件及其驅(qū)動聲音是一種音頻振動的效果,振動的頻率高則為高音,振動的頻率低則為低音。音頻的范圍為20Hz~200kHz,人耳容易辨識的聲音的頻率大概是200Hz~20kHz。11.1.1發(fā)聲器件及其分類方式
1.發(fā)聲器件單片機控制的常見的發(fā)聲器件是蜂鳴器。常見的蜂鳴器如圖11-1所示。
2.分類方式
(1)蜂鳴器按動作原理分為電磁式蜂鳴器和壓電式蜂鳴器兩種類型。
電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。
壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構(gòu)成。接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHz的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。壓電式蜂鳴器需要較高的電壓,但是功耗低;電磁式蜂鳴器在1.5V就可以達到85dB以上的音壓,但是電流較大。
(2)蜂鳴器按驅(qū)動原理又分為自激和他激兩種方式:自激式只需要通直流電即響;他激式則需要提供脈沖電壓驅(qū)動發(fā)聲。圖11-1常見的蜂鳴器11.1.2發(fā)聲驅(qū)動電路及程序
1.自激驅(qū)動電路自激式蜂鳴器驅(qū)動電路如圖11-2所示。這種電路只需要由P1.0的高、低電平來控制發(fā)聲和停止,P1.0置高,則蜂鳴器通電并以固有頻率發(fā)聲;否則停止。讓蜂鳴器連續(xù)發(fā)出“滴滴”聲的程序如下:
LOOP:SETB P1.0
;發(fā)聲
ACALL DELAY ;延時程序
CLR P1.0
;取反輸出,關(guān)閉聲音
ACALL DELAY ;延時程序
SJMP LOOP ;返回繼續(xù)驅(qū)動發(fā)聲雖然蜂鳴器具有固有頻率,但也可以加載不同頻率的方波以產(chǎn)生不同的音調(diào),從而編制一些簡單的音樂。圖11-2自激式蜂鳴器驅(qū)動電路
2.他激驅(qū)動電路他激式蜂鳴器驅(qū)動電路如圖11-3所示。這種電路需要P1.0輸出方波控制,通過調(diào)節(jié)方波的頻率可以調(diào)節(jié)音調(diào),而調(diào)節(jié)方波的占空比則可以調(diào)節(jié)音量。通常使用定時中斷產(chǎn)生驅(qū)動聲音的方波,每次中斷取反喇叭控制端,這里是取反P1.0。例如:
T0_ISR: CLRTR0 ;關(guān)定時器
CPLP1.0 ;取反,所以兩次中斷對應(yīng)一個周期
MOVTH0,#DATAH ;高8位重載
MOVTL0,#DATAL ;低8位重載
SETBTR0 ;重啟定時器
RETI ;中斷返回圖11-3他激式蜂鳴器驅(qū)動電路11.2音?調(diào)?與?節(jié)?拍利用單片機演奏的音樂基本上都是單音頻率,它不包含相應(yīng)幅度的諧波頻率,也就是說不能像電子琴那樣能奏出多種音色的聲音。因此,單片機奏樂只需弄清楚兩個概念,就是“音調(diào)”和“節(jié)拍”。
音調(diào)表示一個音符唱多高的頻率。
節(jié)拍表示一個音符唱多長的時間。11.2.1音調(diào)及其控制
1.音調(diào)在音樂中所謂的“音調(diào)”,其實就是我們常說的“音高”。在音樂中常把中音C上方的A音定為標(biāo)準(zhǔn)音高,其頻率f?=?440Hz。當(dāng)兩個聲音信號的頻率相差一倍時,也即f2=2f1時,稱f2比f1高一個倍頻程。在音樂中,1(do)與,2(來)與,…,正好相差一個倍頻程,在音樂學(xué)中稱為相差一個八度音。在一個八度音內(nèi),有12個半音。以1~八音區(qū)為例,12個半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4、#4—5、5—#5、#5—6、6—#6、#6—7、7—。由于人耳的聽覺效果,這12個音階的分度基本上是以對數(shù)關(guān)系來劃分的,只要知道了這12個音符的音高,也就是其基本音調(diào)的頻率,我們就可根據(jù)倍頻程的關(guān)系得到其他音符基本音調(diào)的頻率。知道了一個音符的頻率后,怎樣讓單片機發(fā)出相應(yīng)頻率的聲音呢?常采用的方法就是通過單片機的定時器定時中斷,將單片機上對應(yīng)蜂鳴器的I/O口反復(fù)取反,或者說反復(fù)按規(guī)律清零、置位,從而讓蜂鳴器發(fā)出聲音。為了讓單片機發(fā)出不同頻率的聲音,只需將定時器預(yù)置不同的定時值就可實現(xiàn)。
2.音調(diào)的產(chǎn)生與控制那么,怎樣確定一個頻率所對應(yīng)的定時器的定時值呢?以標(biāo)準(zhǔn)音高A為例。
A的頻率fA=440Hz,其對應(yīng)的周期為
如圖11-4所示,單片機上對應(yīng)蜂鳴器的I/O口來回取反的時間應(yīng)為 ①②圖11-4標(biāo)準(zhǔn)音高波形分析這個時間t也就是單片機定時器應(yīng)有的中斷觸發(fā)時間。一般情況下,單片機奏樂時,其定時器為工作方式1,它以振蕩器的十二分頻信號為計數(shù)脈沖。設(shè)單片機振蕩器頻率為fosc,則定時器的預(yù)置初值可由下式來確定:
將式①、②代入式③,得:變形得:③式中,N為定時器待確定的計數(shù)初值。因此,定時器的高、低計數(shù)器的初值為:
已知fA?=?440Hz,假設(shè)fosc?=?12MHz,則可求出標(biāo)準(zhǔn)音高A在單片機晶振頻率f0?=?12MHz、定時器在工作方式1下的定時器高、低計數(shù)器的預(yù)置初值為:(“/”表示整除,取高8位)(“%”表示求余,取低8位)根據(jù)上面的求解方法,我們就可求出其他音調(diào)相應(yīng)的計數(shù)器的預(yù)置初值。這里給出部分音符的頻率以及單片機晶振fosc=12MHz、定時器工作在方式1時計數(shù)器的初值設(shè)置,如表11-1所示。表11-1音調(diào)、頻率和計數(shù)器初值對照表
3.音調(diào)實例如要控制某一個音調(diào)發(fā)聲,只需設(shè)置該音調(diào)對應(yīng)的定時器初值,然后啟動定時器即可,這里采用的是中斷模式。當(dāng)然也可以采用延時方式,但是該方式會占用大量的MCU資源,讀者可以自己嘗試使用延時方式。下面這段程序可以產(chǎn)生中音Do:
ORG0000H LJMPSTART ORG000BH LJMPT0_ISR
DO_H EQU 0FCH ;Do音對應(yīng)定時器初值的高8位
DO_L EQU 43H ;Do音對應(yīng)定時器初值的低8位
SPK BITP1.0 ;對應(yīng)喇叭控制端
START: MOVSP,#60H
MOVTMOD,#01H ;T0方式1,16位
MOVTH0,#DO_H ;裝載高8位初值
MOVTL0,#DO_L ;裝載低8位初值
MOVIE,#82H ;開定時器T0中斷,開中斷
SETBTR0 ;啟動定時器
JMP$
T0_ISR: CLRTR0 ;關(guān)定時器
CPLSPK ;取反喇叭控制腳
MOVTH0,#DO_H ;重載定時器初值
MOVTL0,#DO_L SETBTR0 ;重新啟動定時器
RETI END在程序運行過程中,只需改變定時器的初值,就可以改變音調(diào)。如果需要設(shè)置的音調(diào)較多,則可把音調(diào)對應(yīng)的初值按照一定的順序放入一個表格中,然后在程序中執(zhí)行查表操作,動態(tài)地裝載初值。下面這個程序完成的功能是:間隔0.5秒,依次產(chǎn)生中音里面的Do,Re,…,Si。
ORG0000H LJMPSTART ORG000BH ;?T0中斷入口
LJMPT0_ISR ORG001BH ;?T1中斷入口
LJMPT1_ISR ORG0100H
SPK EQU P1.0
;用于喇叭電平信號控制
TONESTOPEQU 00H
;音調(diào)結(jié)束標(biāo)志
S005H EQU 15H
;?T1定時0.05秒初值高8位
S005L EQU 0A0H
;?T1定時0.05秒初值低8位
S005CT EQU 0AH
;?T1中斷10次即0.5秒
START: MOVSP,#60H
;初始化程序段
MOVTMOD,#11H
;都設(shè)置為方式1,16位計數(shù)器
MOVTH1,#S005H
;初始化T1 MOVTL1,#S005L MOVR3,#S005CT CLRA ;初始化T0 MOVR2,A MOVDPTR,#TONE MOVCA,@A+DPTR ;第一次取數(shù)
MOVTH0,A ;先高8位
MOV20H,A ;同時保存
INCR2 MOVA,R2 MOVCA,@A+DPTR ;第二次取數(shù)
MOVTL0,A ;后低8位
MOV21H,A ;同時保存
MOVIE,#8AH ;允許T0、T1的中斷,開中斷
MOVTCON,#50H ;同時啟動T0、T1 SJMP$
T0_ISR: ;用于產(chǎn)生音調(diào)方波
CLRTR0 CPLSPK MOVA,20H ;至于是哪一個音調(diào)的波形
MOVTH0,A ;則決定于20H21H單元中的值
MOVA,21H MOVTL0,A SETBTR0 RETI
T1_ISR: ;用于0.5秒的定時,每次中斷0.05秒
CLRTR1 DJNZR3,OUT ;所以需要中斷10次
MOVR3,#S005CT;時間到后,重新修改R3計數(shù)值
INCR2 ;并且也需要重新修改音調(diào)
MOVA,R2 ;對應(yīng)的T0計數(shù)器初值
MOVCA,@A+DPTR JNZCONTINUE ;判斷音調(diào)是否已經(jīng)全部讀完
MOVR2,#00H ;如果是,則重新初始化音調(diào)指針
SJMPOUT
CONTINUE:MOV20H,A ;當(dāng)前音調(diào)對應(yīng)初值的高8位
INCR2 MOVA,R2 MOVCA,@A+DPTR MOV21H,A ;當(dāng)前音調(diào)對應(yīng)初值的低8位
OUT: SETBTR1 ;重新啟動T1 RETI
TONE:
;=======================================================
DB
0FCH,43H,
0FCH,78H,
0FCH,0ABH,
0FCH,0DBH
; Do
Do#
Re
Re#
;================================================
=======
DB
0FDH,08H,
0FDH,33H,
0FDH,5BH, 0FDH,81H
; Mi Fa
Fa#
So
;=======================================================
DB
0FDH,0A5H,
0FDH,0C7H,
0FDH,0E7H,
0FEH,05H
; So# La La# Si
;================================================
=======
DBTONESTOP ;停止位
;======================================================= END進一步:
T0中斷只是負(fù)責(zé)依據(jù)20H21H的值產(chǎn)生中斷,在P1.0上生成驅(qū)動音調(diào)的方波。
T1每隔0.05秒中斷一次,所以中斷10次為0.5秒。
每隔0.5秒都要修改音調(diào)參數(shù)指針,指向下一個音調(diào),并且重新加載產(chǎn)生該音調(diào)需要的初值。
對于0.5秒的控制,也可以采用延時方式,這里不給出實例,請讀者繼續(xù)發(fā)揮。
思考:①T0和T1的中斷里面,指令CLRTRx(TR0、TR1)是必需的嗎?試作出分析。②在處理T1的isr過程中,會不會影響T0的計數(shù)?會不會影響T0的isr?對于產(chǎn)生頻率的精度會產(chǎn)生影響嗎?③如果在修改20H或者21H單元的過程中發(fā)生T0中斷,則有可能導(dǎo)致初值賦值錯誤,從而會使發(fā)聲系統(tǒng)混亂。分析本程序的安全性。11.2.2節(jié)拍及其控制
1.節(jié)拍在一張樂譜中,我們經(jīng)常會看到這樣的表達式,如1?=?C、1?=?G等。這里,1?=?C,1?=?G表示樂譜的曲調(diào),和我們前面所談的音調(diào)有很大的關(guān)聯(lián);、則用來表示節(jié)拍。以為例加以說明,它表示樂譜中以四分音符為節(jié)拍,每一小節(jié)有三拍。比如:其中,1、2為一拍,3、4、5為一拍,6為一拍,共三拍。1、2的時長分別為四分音符的一半,即為八分音符長;3、4的時長分別為八分音符的一半,即為十六分音符長;5的時長為四分音符的一半,即為八分音符長;6的時長為四分音符長。
2.節(jié)拍的產(chǎn)生與控制那么一拍到底該唱多長時間呢?一般說來,如果樂曲沒有特殊說明,則一拍的時長大約為400~500ms。以一拍的時長為400ms為例,當(dāng)以四分音符為節(jié)拍時,四分音符的時長就為400ms,八分音符的時長就為200ms,十六分音符的時長就為100ms。可見,在單片機上控制一個音符唱多長可采用循環(huán)延時的方法來實現(xiàn)。首先,我們確定一個基本時長的延時程序,比如說以十六分音符的時長為基本延時時間。那么,對于一個音符,如果它為十六分音符,則只需調(diào)用一次延時程序;如果它為八分音符,則只需調(diào)用二次延時程序;如果它為四分音符,則只需調(diào)用四次延時程序,依次類推。這種控制方法比較簡單,不再單獨給出實例,在下面的應(yīng)用中會有介紹。注:在上一節(jié)的音調(diào)產(chǎn)生實例中,我們使用定時器1產(chǎn)生0.05秒的控制時間。如果把每次中斷的時間修改為整首音樂中的最小音符時長,那么控制其它音符節(jié)拍的方法就變成了控制中斷次數(shù)的問題。因此,這里沒有單獨安排節(jié)拍的實例。11.3單片機音樂設(shè)計根據(jù)上面關(guān)于音符的音調(diào)和節(jié)拍的確定方法,我們只要把音調(diào)和節(jié)拍數(shù)據(jù)輸入給單片機,就可以在單片機上演奏音樂了。11.3.1單片機演奏音樂的方法單片機演奏音樂的具體實現(xiàn)方法為:將樂譜中的每個音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和節(jié)拍參數(shù),將這些參數(shù)作為音符參數(shù)做成數(shù)據(jù)表格,存放在存儲器中;通過程序取出一個音符的相關(guān)參數(shù),播放該音符;該音符唱完后,接著取出下一個音符的相關(guān)參數(shù),……,如此直到播放完畢最后一個音符(根據(jù)需要也可循環(huán)不停地播放整個樂曲)。對于樂曲中的休止符,一般將其音調(diào)參數(shù)設(shè)為FFH,其節(jié)拍參數(shù)與其他音符的節(jié)拍參數(shù)確定方法一致;樂曲結(jié)束用節(jié)拍參數(shù)為00H來表示。這一節(jié),我們利用簡譜編程實現(xiàn)一個音樂演奏程序,使用的電路仍如圖11-2所示,用P1.0驅(qū)動發(fā)聲。由于用到的音符較少,因此干脆把音調(diào)和節(jié)拍的定義放到了一個字節(jié)中:高4位表示音調(diào)碼,用于索引TONE地址處的音調(diào)設(shè)置初值;低4位代表節(jié)拍碼,用于表示基準(zhǔn)延時(八分之一拍)的倍數(shù)。我們研究的重點是在程序中如何配合使用音調(diào)和節(jié)拍。程序如下:
ORG0000H LJMPSTART ORG000BH ;T0中斷入口地址
LJMPT0_ISR ;跳至T0中斷子程序 ORG0100H
START: MOVSP,#60H MOVTMOD,#01H ;T0定時方式1,16位
MOVIE,#82H
;中斷使能,定時器0開中斷
GOON: MOV30H,#00 ;取簡譜碼指針初始化
NEXT: MOVA,30H ;簡譜碼指針載入A MOVDPTR,#MUSIC ;取簡譜碼
MOVCA,@A+DPTR; MOVR2,A ;簡譜碼暫存于R2 JZSTP ;是否結(jié)束碼00 ANLA,#0FH ;不是,則取低4位(節(jié)拍碼) MOVR5,A ;將節(jié)拍碼存入R5 MOVA,R2
;將取到的簡譜碼再載入A
SWAPA ;高低4位交換
ANLA,#0FH ;取出高4位(音調(diào)碼) JNZSONG ;取到的音符碼是否為0?
CLRTR0 ;為零,則不發(fā)音
SJMPD1 ;跳至D1
SONG: DECA ;取到的音調(diào)碼減1 ;因為音調(diào)碼從1開始,
;而存放音調(diào)的地址偏移量是從0開始
MOV22H,A ;存入(22H),?Temp單元
RLA ;乘2 MOVDPTR,#TONE ;至TABLE1取相對的高位字節(jié)計數(shù)值
MOVCA,@A+DPTR
MOVTH0,A ;取到的高位字節(jié)存入TH0 MOV21H,A ;取到的高位字節(jié)存入(21H) MOVA,22H ;再載入取到的音符碼
RLA ;乘2 INCA ;加1 MOVCA,@A+DPTR ;至TABLE1取相對的低位字節(jié)計數(shù)值
MOVTL0,A ;取到的低位字節(jié)存入TL0 MOV20H,A ;取到的低位字節(jié)存入(20H) SETBTR0 ;啟動TIMER0D1: LCALLDELAY ;基本單位時間1/4拍125ms DJNZR5,D1 ;節(jié)拍控制
INC30H ;取簡譜碼指針加1 JMPNEXT ;取下一個簡譜碼
STP: CLRTR0 ;停止T0 JMPGOON ;重復(fù)循環(huán)
T0_ISR: PUSHACC ;保護現(xiàn)場
PUSHPSW MOVTL0,20H ;重設(shè)計數(shù)值
MOVTH0,21H CPL P1.0 ;控制蜂鳴器發(fā)聲
POP PSW POPACC ;恢復(fù)現(xiàn)場
RETI
DELAY: MOVR7,#02H ;?1μs
D2: MOVR4,#7DH ;?1μs
D3: MOVR3,#0F8H ;?1μs DJNZR3,$ ;?2μs
DJNZR4,D3 ;?2μs DJNZR7,D2 ;?2μs RET ;?2μs
;所以這段延時程序的延時時間為
;?1+(1+(1+2*R3+2)*R4+2)*R7
;?1+(1+(1+2*0F8H+2)*7DH+2)*02H
;約為125ms,即0.125s
TONE: ;決定音調(diào)
DW0FB04H,0FB90H,0FC09H,0FC44H
DW0FCACH,0FD08H,0FD33H,0FD81H
DW0FDC8H,0FE06H,0FB22H,0FE56H
DW0FE85H,0FE9AH,0FEC1H
MUSIC: ;樂曲名稱《梁祝》
DB02H,82H,62H,52H,48H,02H,52H,32H,22H,18H
DB83H,91H,72H,62H,51H,61H,71H,61H,83H,61H
DB81H,51H,61H,71H,61H,51H,46H,82H,32H,52H
DB22H,42H,16H,21H,41H,18H,0E4H,13H,21H,43H
DB51H,21H,41H,12H,83H,81H,61H,81H,58H,53H
DB61H,31H,22H,13H,21H,42H,52H,0E2H,42H,21H
DB11H,91H,41H,18H,63H,81H,32H,52H,21H,41H
DB16H,0E4H,11H,21H,31H,51H,26H,11H,21H,43H
DB51H,82H,62H,52H,61H,51H,42H,21H,11H,0E4H
DB44H,21H,41H,21H,11H,0E1H,11H,21H,41H,18H
DB61H,81H,51H,61H,51H,41H,32H,21H,41H,18H
DB08H,0H,04H
DB00H ;樂曲結(jié)束
END進一步分析:
這個程序的節(jié)拍控制使用延時方式設(shè)計(前面的程序已經(jīng)演示了如何使用中斷方式設(shè)計節(jié)拍),而音調(diào)控制則采用中斷形式。
這里對音符碼的操作方式做一分析:首先由MUSIC表中獲得音符碼;拆分成高8位的音調(diào)碼和低8位的節(jié)拍碼;由音調(diào)碼查詢TONE表獲得對應(yīng)的音調(diào)數(shù)據(jù),設(shè)置T0開始中斷產(chǎn)生對應(yīng)音調(diào);由節(jié)拍碼控制DELAY的延時次數(shù);本次音符發(fā)聲完畢后,再取下一個音符碼,直至遇到結(jié)束碼:00H。
在這個程序中,發(fā)聲的時間是在程序內(nèi)部已經(jīng)設(shè)置好的。如要由按鍵來控制發(fā)聲的時間和音調(diào),則就變成了下一節(jié)所要介紹的內(nèi)容。11.3.2單片機彈奏音樂設(shè)計——簡易電子琴簡易電子琴的電路比較簡單,如圖11-5所示。
1.電路分析
本電路使用12MHz的晶振,機器周期為1μs。
信號輸出端是P1.0。
功率驅(qū)動采用LM386,當(dāng)SPK輸入方波時,可以給喇叭足夠的功率驅(qū)動。
P2口內(nèi)部有上拉電阻,所以排阻RESP1可以不用。
2.功能設(shè)定設(shè)計有8個按鍵S1、S2、…、S8,按鍵S1對應(yīng)中音Do,S2對應(yīng)中音Re,…,按鍵S7對應(yīng)中音Si,按鍵S8對應(yīng)高音Do,對應(yīng)關(guān)系如表11-2所示。圖11-5簡易電子琴設(shè)計電路表11-2簡易電子琴按鍵參數(shù)設(shè)置
3.程序設(shè)計按鍵采用循環(huán)掃描方式,當(dāng)檢測到有按鍵時,則對應(yīng)的裝載音調(diào)數(shù)據(jù)開始發(fā)聲;當(dāng)檢測到無按鍵時,則清除TR0,關(guān)閉聲音。音調(diào)數(shù)據(jù)(定時器初值)被放入表格TONE中,數(shù)據(jù)對應(yīng)關(guān)系如表11-2所示。讀者也可以到表11-1中查詢,并加以修改或擴展。
ORG0000H LJMPSTART ORG000BH LJMPT0_ISR ORG0100H
SPK EQUP1.0 ;喇叭控制端
KEY EQUP2 ;按鍵輸入端口
START: MOVSP,#60H MOVTMOD,#01H;T0工作于定時器方式1,
16位
MOVKEY,#0FFH;把按鍵端口設(shè)置為輸入模式
MOVDPTR,#TONE;音調(diào)對應(yīng)初值表地址初始化
CLRF0
;清除是否已經(jīng)響應(yīng)按鍵標(biāo)志
MOVIE,#82H
;開定時器0中斷,開中斷
KEY_CK: MOVA,KEY
;讀取按鍵
CPLA
;取反后
JNZKEY_PROC
;如果不全部為0,則有按鍵
CLRF0
;如果無按鍵,則清除按鍵標(biāo)志
CLRTR0 ;關(guān)閉定時器
CLRSPK ;并且關(guān)閉喇叭
SJMPKEY_CK ;重新檢測按鍵
KEY_PROC:JBF0,KEY_CK ;首先判斷是否已經(jīng)響應(yīng)該按鍵
SETBF0 ;設(shè)置已經(jīng)響應(yīng)標(biāo)志
CLRTR0 ;設(shè)置初值時先關(guān)閉定時器
MOVR0,#00H ;用于獲取對應(yīng)的音調(diào)存放指針
C_TEST: RRCA ;帶進位右移
JCGET_TONE ;判斷是否已經(jīng)找到按鍵
INCR0 ;否則繼續(xù)修改指針
SJMPC_TEST ;繼續(xù)檢測
GET_TONE:MOVA,R0 ;先要修改指針,因為按字存放
RLA ;所以要先乘以2
PUSHA ;保存當(dāng)前音調(diào)指針
MOVCA,@A+DPTR ;取高8位
MOV20H,A POPA ;恢復(fù)當(dāng)前音調(diào)指針
INCA ;指向下一個字節(jié)
MOVCA,@A+DPTR ;再取低8位
MOV21H,A SETBTR0 ;重新開定時器,開始發(fā)聲
SJMPKEY_CK ;繼續(xù)監(jiān)測按鍵狀態(tài)T0_ISR: CLRTR0 ;中斷完成音調(diào)發(fā)聲
CPLSPK ;輸出方波
MOVA,20H ;取出高8位
MOVTH0,A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 細(xì)紗機設(shè)計的課程設(shè)計
- 無線充電電動車課程設(shè)計
- 禮儀國旗大班課程設(shè)計
- 2025浙江省建筑安全員B證考試題庫
- 積極行為支持的課程設(shè)計
- 機械課程設(shè)計要做多久
- 格式化課程設(shè)計
- 簡單棉花粘貼畫課程設(shè)計
- 紅薯種植課程設(shè)計
- 研究實驗室動態(tài)課程設(shè)計
- 《中醫(yī)適宜技術(shù)》期末考試復(fù)習(xí)題庫(含答案)
- 管理英語3-國開機考答案
- 國開機考答案-工程力學(xué)(本)(閉卷)
- 碳交易與碳金融基礎(chǔ) 課件全套 第1-9章 碳交易市場形成背景-碳金融工具與創(chuàng)新
- 生物入侵與生物安全智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- 《公路工程集料試驗規(guī)程》JTG-3432-2024考核試題及答案文檔
- 常見的排序算法-冒泡排序 課件 2023-2024學(xué)年浙教版(2019)高中信息技術(shù)選修1
- 中學(xué)教師基本功培訓(xùn)講座
- 糖尿病視網(wǎng)膜病變臨床診療指南(2022)解讀
- IQC來料檢驗單范本
- (正式版)YBT 6171-2024 鋼鐵企業(yè)鏈篦機-回轉(zhuǎn)窯球團工藝煙氣脫硝技術(shù)規(guī)范
評論
0/150
提交評論