項目四 音樂演奏器設計_第1頁
項目四 音樂演奏器設計_第2頁
項目四 音樂演奏器設計_第3頁
項目四 音樂演奏器設計_第4頁
項目四 音樂演奏器設計_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

知識歸納,練習題,項目導讀,任務二、音樂演奏器的設計與實現(xiàn),項目小結(jié),任務一、音樂門鈴的分析與仿真,項目四音樂演奏器設計,項目目標導讀,學習目標,熟練掌握51單片機的定時/計數(shù)器的內(nèi)部結(jié)構、工作原理。掌握延時程序、發(fā)音程序的編寫。掌握獨立式鍵盤和矩陣式鍵盤的使用方法,按鍵的識別方法。通過學習定時器的過程,誘導學生思考快速掌握新知識點的方法。,會運用定時器的幾種工作方式編寫延時程序,能用定時器查詢方式和中斷兩種方式編寫控制程序。能利用定時器的定時功能產(chǎn)生不同頻率的音符和音調(diào)。會按照歌譜編寫演奏程序。會用獨立式鍵盤和矩陣式鍵盤。能采用查詢或中斷方式編寫鍵盤程序。,1.單片機定時器/計數(shù)器的概念,定時器/計數(shù)器工作方式的設置方法。2.獨立式鍵盤和矩陣式鍵盤的使用方法(采用查詢或中斷方式)。,知識教學點,項目目標導讀,方法切入點,通過音樂門鈴和音樂演奏器的分析與設計,從簡到繁實現(xiàn)學習目標,了解單片機定時/計數(shù)器和鍵盤的實際應用。,參考學時:10學時12學時,任務一音樂門鈴的分析與仿真,聲音是由物體振動產(chǎn)生的,振動的頻率不同,發(fā)出的聲音也就不同,有規(guī)律的振動發(fā)出的聲音叫“樂音”。如何用單片機技術來實現(xiàn)音樂門鈴呢?,任務分析,門鈴按鍵從P1.0端口輸入,聲音信號從P1.7端口輸出到放大電路,經(jīng)過放大后送入揚聲器發(fā)聲;首先實現(xiàn)“滴、滴”報警聲,要求產(chǎn)生頻率為500Hz,揚聲器響0.25s,停0.25s,反復循環(huán);實現(xiàn)“滴、滴”報警門鈴;再實現(xiàn)“叮咚”門鈴,產(chǎn)生“叮咚”聲;最后實現(xiàn)音樂門鈴,要求由單片機演奏任意一首樂曲。,任務一音樂門鈴的分析與仿真,1、定時器0和定時器1,(1)定時/計數(shù)器的組成框圖,圖4-18051定時器/計數(shù)器邏輯結(jié)構圖,任務一音樂門鈴的分析與仿真,由圖4-1可知,8051單片機定時器/計數(shù)器由定時器0(T0)、定時器1(T1)、定時器方式寄存器TMOD和定時器控制寄存器TCON組成。,16位的加1計數(shù)器(高8位、低8位)T0、T1TMOD-定時/計數(shù)器方式寄存器,工作方式設置;TCON-定時/計數(shù)器控制寄存器,啟動、停止及設置溢出標志。,任務一音樂門鈴的分析與仿真,(2)定時/計數(shù)器的工作原理,由TMOD中的控制位(CT)來決定T0和T1是工作在定時器方式還是計數(shù)器方式。,1.定時功能-計數(shù)脈沖信號:內(nèi)部振蕩電路經(jīng)12分頻后輸出的脈沖進行加1計數(shù)。計數(shù)頻率是振蕩頻率的1/12fc=1/12*fosc。,2.計數(shù)功能-計數(shù)脈沖信號:來自外部輸入引腳-(T0為P3.4,T1為P3.5)的負跳變信號進行加1計數(shù)fc=1/24*fosc。,任務一音樂門鈴的分析與仿真,(3)定時/計數(shù)器的方式寄存器和控制寄存器,1)定時/計數(shù)器控制寄存器TCON(88H),中斷請求標志,觸發(fā)方式選擇,啟動定時/計數(shù)器,0低電平1下降沿,0停止1啟動,任務一音樂門鈴的分析與仿真,2)工作方式控制寄存器TMOD(89H),T1控制,T0控制,GATE門控位。GATE=0啟動由TR0(或TR1)一位控制;GATE=1啟動受TR0和/INT0(或TR1和/INT1)兩位控制。,C/T外部計數(shù)器/定時器方式選擇位C/T=0定時方式;C/T=1計數(shù)方式。,M1M0工作模式選擇位(編程可決定四種工作模式)。,任務一音樂門鈴的分析與仿真,任務一音樂門鈴的分析與仿真,表4-1定時器方式選擇,計數(shù)脈沖輸入,(1)方式013位方式,13位計數(shù)器,定時器,計數(shù)器,中斷,TCON,0,1,1,1,0,定時時間:t=(213-定時器初值)12/fosc(s),2、定時器計數(shù)器的工作方式,任務一音樂門鈴的分析與仿真,任務一音樂門鈴的分析與仿真,例4-1假設晶振頻率是12MHz,用定時器1方式0實現(xiàn)1s的延時。解:因方式0采用13位計數(shù)器,其最大定時時間為:2131s=81921s=8.192ms,因此,可選擇定時時間為5ms,再循環(huán)200次。定時時間選定后,再確定計數(shù)值為5000,則定時器1的初值為:X=M計數(shù)值=81925000=3192=C78H=0110001111000B因13位計數(shù)器中TL1的高3位未用,應填寫0,TH1占高8位,所以,X的實際填寫值應為:X=0110001100011000B=6318H即:TH1=63H,TL1=18H,又因采用方式0定時,故TMOD=00H。,任務一音樂門鈴的分析與仿真,可編得1s延時子程序如下:,DELAY:MOVR3,#200;置5ms計數(shù)循環(huán)初值MOVTMOD,#00H;設定時器1為方式0MOVTH1,#63H;置定時器初值MOVTL1,#18HSETBTR1;啟動T1LP1:JBCTF1,LP2;查詢計數(shù)溢出SJMPLP1;未到5ms繼續(xù)計數(shù)LP2:MOVTH1,#63H;重新置定時器初值MOVTL1,#18HDJNZR3,LP1;未到1s繼續(xù)循環(huán)RET,(2)方式116位方式,定時時間:t=(216-定時器初值)12/fosc(s),任務一音樂門鈴的分析與仿真,(3)方式28位自動裝入時間常數(shù)方式,中斷,定時時間:t=(28-定時器初值)12/fosc(s),任務一音樂門鈴的分析與仿真,任務一音樂門鈴的分析與仿真,例4-2假設晶振頻率是12MHz,試用定時器1方式2實現(xiàn)1s的延時。解:因為方式2是8位計數(shù)器,其最大定時時間為:2561s=256s,為實現(xiàn)1s延時,可選擇定時時間為250s,再循環(huán)4000次。定時時間選定后,可確定計數(shù)值為250,則定時器1的初值為:X=M計數(shù)值=256250=6=6H。采用定時器1方式2工作,因此,TMOD=20H。,任務一音樂門鈴的分析與仿真,可編得1s延時子程序如下:,DELAY:MOVR5,#28H;置25ms計數(shù)循環(huán)初值MOVR6,#64H;置250s計數(shù)循環(huán)初值MOVTMOD,#20H;置定時器1為方式2MOVTH1,#06H;置定時器初值MOVTL1,#06HSETBTR1;啟動定時器LP1:JBCTF1,LP2;查詢計數(shù)溢出SJMPLP1;無溢出則繼續(xù)計數(shù)LP2:DJNZR6,LP1;未到25ms繼續(xù)循環(huán)MOVR6,#64HDJNZR5,LP1;未到1s繼續(xù)循環(huán)RET,(4)方式32個8位計數(shù)器方式,僅T0可以工作在方式3此時T0分成2個獨立的計數(shù)器TL0和TH0:前者用原來T0的控制信號(TR0、TF0),后者用原來T1的控制信號(TR1、TF1)。,P3.4,P3.2,定時/計數(shù)器,固定為定時器,任務一音樂門鈴的分析與仿真,二者的定時時間分別是:,TL0:t=(28-TL0初值)12/fosc(s),TL1:t=(28-TL1初值)12/fosc(s),此時定時器T1仍然可設置成方式0、1或2,但TR1和TF1被定時器T0占用,一般用作串行口波特率發(fā)生器或不需要中斷的場合。,任務一音樂門鈴的分析與仿真,任務一音樂門鈴的分析與仿真,例4-3假設晶振頻率是12MHz,用定時器T0方式3實現(xiàn)1s的延時。解:根據(jù)題意,定時器T0中的TH0只能為定時器,定時時間可設為250s;TL0設置為計數(shù)器,計數(shù)值可設為200。TH0計滿溢出后,用軟件復位的方法使T0(P3.4)引腳產(chǎn)生負跳變,TH0每溢出一次,T0引腳便產(chǎn)生一個負跳變,TL0便計數(shù)一次。TL0計滿溢出時,延時時間應為50ms,循環(huán)20次便可得到1s的延時。由上述分析可知,TH0計數(shù)初值為:X=(256250)=6=06HTL0計數(shù)初值為:X=(256200)=56=38HTMOD=00000111B=07H,任務一音樂門鈴的分析與仿真,可編得1s延時子程序如下:,DELAY:MOVR3,#14H;置100ms計數(shù)循環(huán)初值MOVTMOD,#07H;置定時器0為方式3計數(shù)MOVTH0,#06H;置TH0初值MOVTL0,#38H;置TL0初值SETBTR0;啟動TL0SETBTR1;啟動TH0LP1:JBCTF1,LP2;查詢TH0計數(shù)溢出SJMPLP1;未到500s繼續(xù)計數(shù)LP2:MOVTH0,#06H;重置TH0初值CLRP3.4;T0引腳產(chǎn)生負跳變NOP;負跳變持續(xù)NOPSETBP3.4;T0引腳恢復高電平JBCTF0,LP3;查詢TH0計數(shù)溢出SJMPLP1;100ms未到繼續(xù)計數(shù)LP3:MOVTL0,#38H;重置TL0初值DJNZR3,LP1;未到1s繼續(xù)循環(huán)RET,3、定時器計數(shù)器的編程和應用,任務一音樂門鈴的分析與仿真,例4-4用單片機定時器/計數(shù)器設計方波發(fā)生器,方波周期為10ms,有P3.0引腳輸出。解:取晶振頻率為12MHz。方波周期為10ms,則半周期為5ms。定時器T1工作于定時方式1,產(chǎn)生5ms的定時。按上述設計思路可知:方式寄存器TMOD的控制字應為:10H定時器T1的初值應為:655365000=60536=EC78H分別采用查詢方式和中斷方式實現(xiàn)。,任務一音樂門鈴的分析與仿真,1)采用查詢方式,其源程序可設計如下:,;程序功能:在P3.0引腳上產(chǎn)生周期為10ms的方波-T1方式1,查詢方式ORG0000HMOVTMOD,#10H;采用T1方式1MOVTH1,#0ECH;裝入初值MOVTL1,#78HSETBTR1;啟動定時器WAIT:JBCTF1,NX;查詢TF1,是否計滿溢出SJMPWAITNX:CPLP3.0;P3.0引腳電平取反MOVTH1,#0ECH;重裝初值MOVTL1,#78HSJMPWAITEND,任務一音樂門鈴的分析與仿真,2)采用采用中斷方式,其源程序可設計如下:,;程序功能:在P3.0引腳上產(chǎn)生周期為10ms的方波-T1方式1,中斷方式ORG0000HMOVTMOD,#10H;采用T1方式1MOVTH1,#0ECH;裝入初值MOVTL1,#78HMOVIE,#88H;設定ET1=1,EA=1SETBTR1;啟動定時器SJMP$ORG001BH;中斷服務程序CPLP3.0;P3.0引腳電平取反MOVTH1,#0ECH;重裝初值MOVTL1,#78HRETIEND,1、確定設計方案,選用AT89C51單片機芯片、時鐘電路、復位電路、電源和按鍵和一個揚聲器構成門鈴電路控制的最小系統(tǒng)。,并行接口,AT89C51單片機,電源,時鐘電路,復位電路,揚聲器,圖4-7系統(tǒng)方案設計框圖,任務一音樂門鈴的分析與仿真,按鍵,2、硬件電路設計,圖4-8門鈴電路原理圖,電路所用仿真元器件:AT89C51:單片機RES:電阻CRYSTAL:晶振CAP:電容CAP-ELEC:電解電容BUTTON:按鈕SPEAKER:揚聲器,任務一音樂門鈴的分析與仿真,2、硬件電路設計,圖4-9實用門鈴電路原理圖,任務一音樂門鈴的分析與仿真,3、源程序設計,任務一音樂門鈴的分析與仿真,(1)實現(xiàn)“滴、滴”報警聲,要求:產(chǎn)生頻率為500Hz,揚聲器響0.25s,停0.25s,反復循環(huán)。1)步驟1:定時參數(shù)的計算要產(chǎn)生頻率為500Hz的方波信號,方波信號的周期為2ms。電路采用12MHz的晶振,利用定時器T0的方式1,產(chǎn)生1ms的定時,在P1.7上輸出周期為2ms的方波。a)T0的方式控制字TMOD:M1M0=01,GATE=0,C/T=0,可取方式控制字為01Hb)計算計數(shù)初值X由于晶振為12MHz,機器周期T=,要產(chǎn)生產(chǎn)生1ms的定時,計數(shù)初值為將FCH、18H分別預置給TH0、TL0?;蛉缦掠嬎悖篢H0=(65536-1000)/256=0FCH(整數(shù)取商)TL0=(65536-1000)MOD256=18H(取模)揚聲器響0.25s,停0.25s。1次定時中斷時間為1ms,0.25s為250次中斷時間。因此0.25s計時計數(shù)值為250。,3、源程序設計,圖4-10實現(xiàn)“滴、滴”報警聲流程圖,任務一音樂門鈴的分析與仿真,步驟2:流程圖設計,3、源程序設計,;*報警聲控制程序*;程序名:報警聲控制程序xm4_1.asm;程序功能:實現(xiàn)“滴、滴”報警聲TCOUNTEQU30HFLAGBIT00HORG0000HSJMPSTART;跳轉(zhuǎn)到主程序ORG000BH;T0的中斷入口地址LJMPINT_T0;轉(zhuǎn)向中斷服務程序;-主程序-START:CLRFLAG;標志位清零MOVTCOUNT,#00H;計時計數(shù)值清零MOVTMOD,#01H;置T0工作于方式1MOVTH0,#(65536-1000)/256;裝入計數(shù)初值MOVTL0,#(65536-1000)MOD256MOVIE,#82H;開中斷SETBTR0;啟動T0定時器SJMP$;等待中斷,任務一音樂門鈴的分析與仿真,步驟3:源程序編寫,;-T0中斷服務程序-INT_T0:MOVTH0,#(65536-1000)/256;重新裝入計數(shù)值MOVTL0,#(65536-1000)MOD256INCTCOUNT;計時計數(shù)值+1MOVA,TCOUNTCJNEA,#250,I1;是否計滿0.25秒CPLFLAG;計時計數(shù)值取反MOVTCOUNT,#00H;計時計數(shù)值清零I1:JBFLAG,I2;檢查標志位CPLP1.7;聲音輸出SJMPRETUNEI2:CLRP1.7;關聲音RETUNE:RETI;中斷返回END,任務一音樂門鈴的分析與仿真,3、源程序設計,任務一音樂門鈴的分析與仿真,(2)實現(xiàn)“滴、滴”報警門鈴,要求:在(1)的基礎上增加按鈕動作。按鈕按下一次,“滴、滴”聲持續(xù)約3秒。1)步驟1:定時參數(shù)的計算同前面相同。2)步驟2:流程圖設計3)步驟3:源程序編寫,圖4-11實現(xiàn)“滴、滴”報警門鈴主程序流程圖,;*報警門鈴控制程序*;程序名:報警門鈴控制程序xm4_2.asm;程序功能:按下門鈴按鍵,發(fā)出“滴、滴”報警聲TCOUNTEQU30HFLAGBIT00HORG0000HSJMPSTART;跳轉(zhuǎn)到主程序ORG000BH;T0的中斷入口地址LJMPINT_T0;轉(zhuǎn)向中斷服務程序;-主程序-START:CLRFLAG;標志位清零MOVTCOUNT,#00H;計時計數(shù)值清零MOVTMOD,#01H;置T0工作于方式1MOVTH0,#(65536-1000)/256;裝入計數(shù)初值MOVTL0,#(65536-1000)MOD256MOVIE,#82H;開中斷LOOP:JBP1.0,STOP;判斷P1.0是否按下SETBTR0;啟動T0定時器ACALLDELAY;等中斷約3.2sSTOP:CLRP1.7;關聲音CLRTR0;關閉T0定時器SJMPLOOP;反復,任務一音樂門鈴的分析與仿真,;-T0中斷服務程序-INT_T0:MOVTH0,#(65536-1000)/256;重新裝入計數(shù)值MOVTL0,#(65536-1000)MOD256INCTCOUNT;計時計數(shù)值+1MOVA,TCOUNTCJNEA,#250,I1;是否計滿0.25秒CPLFLAG;計時計數(shù)值取反MOVTCOUNT,#00H;計時計數(shù)值清零I1:JBFLAG,I2;檢查標志位CPLP1.7;聲音輸出SJMPRETUNEI2:CLRP1.7;關聲音RETUNE:RETI;中斷返回DELAY:MOVR1,#0FFH;延時約3.2秒DEL1:MOVR2,#0FFHDEL2:MOVR3,#09HDEL3:NOPNOPNOPDJNZR3,DEL3DJNZR2,DEL2DJNZR1,DEL1RETEND,任務一音樂門鈴的分析與仿真,3、源程序設計,任務一音樂門鈴的分析與仿真,要求:按下一次按鈕,產(chǎn)生一次“叮咚”聲?!岸!焙汀斑恕甭曇舾髡加?.5秒1)步驟1:定時參數(shù)的計算“?!焙汀斑恕甭暦謩e為667HZ和500HZ的頻率,即聲音信號周期為1.5ms和2.0ms,P1.7腳輸出信號的高或低電平的寬度為0.75ms(1.5ms/2)和1.0ms(2.0ms/2)。電路采用12MHz的晶振,利用定時器T0的方式2,產(chǎn)生250us的定時。因此,“叮”聲667HZ的頻率要經(jīng)過3次250us的定時,而“咚”聲500HZ的頻率要經(jīng)過4次250us的定時。a)T0的方式控制字TMOD:M1M0=10,GATE=0,C/T=0,可取方式控制字為02H(定時器T0為工作方式2)b)計算計數(shù)初值X由于晶振為12MHz,機器周期T=,要產(chǎn)生產(chǎn)生250的定時,計數(shù)初值為只有當按下按鈕KEY之后,才啟動T0開始工作,當T0工作完畢,回到最初狀態(tài)?!岸!焙汀斑恕甭曇舾髡加?.5秒,因此定時/計數(shù)器T0要完成0.5秒的定時,對于以250us為基準定時2000次才可以。,(3)實現(xiàn)“叮咚”門鈴,任務一音樂門鈴的分析與仿真,2)步驟2:流程圖設計,圖4-12實現(xiàn)“叮咚”門鈴主程序流程圖,圖4-13實現(xiàn)“叮咚”門鈴中斷服務程序流程圖,;*門鈴控制程序*;程序名:門鈴控制程序xm4_3.asm;程序功能:實現(xiàn)“叮咚”門鈴聲TDONGDATA30H;“咚”計時(0-4)4*250us=1msTDINGDATA31H;“?!庇嫊r(0-3)4*250us=0.75msT05SADATA32H;0.5s計數(shù)1:0-100T05SBDATA33H;0.5s計數(shù)2:0-20100*20*250us=0.5sFLAGBIT00H;聲音標志,0:發(fā)“?!甭?;1:發(fā)“咚”聲STOPBIT01H;完成標志,1:一次“叮咚”完成KEYBITP1.0;按鍵SPEAKERBITP1.7;喇叭;-主程序-ORG0000HLJMPSTARTORG000BH;T0中斷矢量LJMPINT_T0START:MOVTMOD,#02H;置T0工作于方式2MOVTH0,#06H;裝入計數(shù)初值(250us定時)MOVTL0,#06HSETBET0SETBEA;開中斷,任務一音樂門鈴的分析與仿真,3)步驟3:源程序編寫,NSP:CLRSPEAKER;靜音JBKEY,NSP;如果按鈕沒按下,等待LCALLDELY10MS;10ms延時(防抖處理)JBKEY,NSP;如果按鈕沒按下,等待SETBTR0;啟動T0MOVTDONG,#00H;咚計時清零MOVTDING,#00H;叮計時清零MOVT05SA,#00H;0.5s計數(shù)1清零MOVT05SB,#00H;0.5s計數(shù)2清零CLRFLAG;聲音標志清零CLRSTOP;停止標志清零JNBSTOP,$;若一次“叮咚”沒完成,等待中斷LJMPNSP;-延時子程序-DELY10MS:MOVR6,#20;延時10msD1:MOVR7,#248DJNZR7,$DJNZR6,D1RET;-T0中斷服務程序-INT_T0:INCT05SAMOVA,T05SA;0.5s計數(shù)1+1CJNEA,#100,NEXTMOVT05SA,#00H,任務一音樂門鈴的分析與仿真,INCT05SB;0.5s計數(shù)2+1MOVA,T05SBCJNEA,#20,NEXT;0.5s沒到,到NEXTMOVT05SB,#00H;0.5s計數(shù)2清零JBFLAG,STP;若FLAG=1,到STPCPLFLAG;否則FLAG翻轉(zhuǎn)LJMPNEXTSTP:SETBSTOP;STOP=1CLRTR0;T0停止LJMPRETURNNEXT:JBFLAG,DONG;發(fā)叮聲INCTDING;“叮”計時+1MOVA,TDINGCJNEA,#03H,RETURN;若“?!庇嫊r沒到3,返回MOVTDING,#00H;“?!庇嫊r清零CPLSPEAKER;聲音輸出LJMPRETURN;發(fā)咚聲DONG:INCTDONG;“咚”計時+1MOVA,TDONGCJNEA,#04H,RETURN;若“咚”計時沒到3,返回MOVTDONG,#00H;“咚”計時清零CPLSPEAKER;聲音輸出RETURN:RETIEND,任務一音樂門鈴的分析與仿真,4、實物制作,任務一音樂門鈴的分析與仿真,待在Proteus中仿真調(diào)試結(jié)果正常后,用實際硬件搭建電路。,表4-3元器件清單,控制要求:實現(xiàn)音樂門鈴,由單片機演奏任意一首樂曲要求:采用單片機,演奏軍港之夜樂曲,如圖4-14所示。1)步驟1:定時參數(shù)的計算T0的方式控制字TMOD:M1M0=01,GATE=0,C/T=0,可取方式控制字為01H(定時器T0為工作方式1)計算計數(shù)初值X晶振為12MHz,軍港之夜為C調(diào),按表4-4各音符確定定時器T0初值。節(jié)拍時間計算軍港之夜為C調(diào)2/4,最小為1/4拍,最小延時為250ms。采用延時子程序來完成節(jié)拍延時。延時子程序延時25ms,則:1/8拍:125ms,5次延時;1/4拍:250ms,10次延時;1/2拍:500ms,20次延時;3/4拍:725ms,30次延時;1拍:1000ms,40次延時;1又1/2拍:1500ms,60次延時;2拍:2000ms,80次延時;4拍:4000ms,160次延時。只有當按下按鈕KEY之后,才啟動演奏。,任務一音樂門鈴的分析與仿真,圖4-14“軍港之夜”樂譜,任務一音樂門鈴的分析與仿真,任務一音樂門鈴的分析與仿真,2)步驟2:流程圖設計,圖4-15實現(xiàn)音樂門鈴主程序流程圖,圖4-16實現(xiàn)音樂門鈴中斷服務程序流程圖,任務一音樂門鈴的分析與仿真,1、調(diào)號,音樂上指用以確定樂曲主音高度的符號。用CDEFGAB這些字母來表示固定的音高。比如,A這個音,標準的音高為每秒鐘振動440周,十二平均律各音的頻率見表4-4。,表4-4十二平均律各音的頻率,任務一音樂門鈴的分析與仿真,2、音調(diào)與節(jié)拍,在音樂中所謂“音調(diào)”,其實就是我們常說的“音高”。當兩個聲音信號的頻率相差一倍時,也即f2=2f1時,則稱f2比f1高一個倍頻程,在音樂學中稱它相差一個八度音。在一個八度音內(nèi),有12個半音。這12個音階的分度基本上是以對數(shù)關系來劃分的。如果我們只要知道了這十二個音符的音高,也就是其基本音調(diào)的頻率,我們就可根據(jù)倍頻程的關系得到其他音符基本音調(diào)的頻率。知道了一個音符的頻率后,要產(chǎn)生相應頻率的聲音信號,只要計算出該音頻的半周期(1/(2頻率)),常采用的方法就是通過單片機的定時器定時中斷,來得到這個半周期時間。為了讓單片機發(fā)出不同頻率的聲音,我們只需將定時器預置不同的定時值就可實現(xiàn)。,任務一音樂門鈴的分析與仿真,表4-5C調(diào)各音符、頻率和定時初值的關系,任務一音樂門鈴的分析與仿真,表4-6各節(jié)拍與時間的設定,返回,任務二音樂演奏器的設計與實現(xiàn),上一節(jié)中,應用定時器的工作原理,實現(xiàn)了固定樂曲的播放。那么,這一節(jié)再加上鍵盤來實現(xiàn)音樂演奏。,在音樂門鈴電路基礎上,修改增加硬件(獨立式或矩陣式鍵盤)和軟件程序,利用定時器,完成音樂演奏器(簡易電子琴)的設計和實現(xiàn):首先采用獨立式鍵盤,完成簡易電子琴的設計和實現(xiàn);在采用矩陣式鍵盤,完成簡易電子琴的設計和實現(xiàn)。,1、鍵盤工作原理,任務二音樂演奏器的設計與實現(xiàn),(1)按鍵的分類,1)按鍵按照結(jié)構原理可分為兩類:觸點式開關按鍵,如機械式開關、導電橡膠式開關等;無觸點開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,后者壽命長。目前,單片機系統(tǒng)中最常見的是觸點式開關按鍵。2)按鍵按照接口原理可分為:編碼鍵盤。編碼鍵盤主要是用硬件來實現(xiàn)對鍵的識別。非編碼鍵盤。非編碼鍵盤主要是由軟件來實現(xiàn)鍵盤的定義與識別。,任務二音樂演奏器的設計與實現(xiàn),(2)鍵輸入原理,1)鍵盤接口的基本功能鍵掃描:監(jiān)測有無鍵按下。判別是否有鍵按下的方式有中斷方式和查詢方式兩種:中斷方式:當鍵按下時,就向CPU發(fā)出中斷請求。CPU響應后,對鍵盤掃描,進行識別,取出鍵值,作相應處理。查詢方式:每隔一定時間,CPU掃描鍵盤一次,查詢有無鍵按下。若有鍵按下,則再查鍵值,作相應處理。去抖動:一個電壓信號通過機械觸點的開/關過程中,由于機械觸點的彈性作用,在開關瞬間均有抖動過程,會出現(xiàn)一系列的負脈沖,,圖4-18機械觸點的開/關過程,任務二音樂演奏器的設計與實現(xiàn),a)硬件去抖硬件消抖可以采用R-S觸發(fā)器或單穩(wěn)電路構成去抖電路,分別如圖4-18所示。硬件消抖因為要增加硬件開銷,造成電路復雜,除了在數(shù)字電路里使用外,在單片機系統(tǒng)中不太采用。b)軟件去抖在檢測到有鍵按下時,執(zhí)行一個10ms的延時程序后,再確認該鍵是否保持閉合狀態(tài)。另外一種方法是連續(xù)判斷按鍵所在線路的電平,如果連續(xù)100次(甚至更多)都出現(xiàn)低電平(一般按鍵都是低電平表示按下),就認為按鍵已經(jīng)穩(wěn)定,可以進行識別,這是企業(yè)實際開發(fā)產(chǎn)品中常用的方法。,圖4-19硬件去抖電路,任務二音樂演奏器的設計與實現(xiàn),鍵識別:確定是哪一個鍵按下,取出鍵值。每一個按鍵都要確定一個鍵值,以便實現(xiàn)按鍵功能的轉(zhuǎn)移。散轉(zhuǎn)指令就是要根據(jù)這個鍵值來轉(zhuǎn)移。其它可靠的邏輯處理辦法:一次鎖定:不管一次按鍵的時間有多長,僅作一次處理。2)鍵輸入操作的基本框圖,圖4-20鍵輸入框圖,任務二音樂演奏器的設計與實現(xiàn),(1)獨立式按鍵結(jié)構,圖4-21獨立式按鍵電路,2、獨立式鍵盤,特點:一線一鍵,按鍵識別(編程)簡單;但占用較多口線,適合8鍵以下使用。,任務二音樂演奏器的設計與實現(xiàn),(2)獨立式按鍵的軟件結(jié)構,獨立式按鍵的軟件可采用中斷方式和查詢方式,本項目中按鍵程序的編寫采用的就是中斷方式。,ORG0000HLJMPSTARTORG0100HSTART:MOVP1,#0FFH;設置P1為輸入口LOOP1:MOVA,P1;讀入P1口的狀態(tài)CJNEA,#0FFH,LOOP2;沒有鍵按下的話,等待SJMPLOOP1LOOP2:LCALLDELY10MS;延時,防抖MOVB,P1;讀入P1口的狀態(tài)CJNEA,B,LOOP1;兩次檢測P1口不同的話,重新檢測JNBACC.0,KEY0;ACC.0=0?若為0則P1.0對應的鍵按下,轉(zhuǎn)KEY0JNBACC.7,KEY7;ACC.7=0?若為0則P1.7對應的鍵按下,轉(zhuǎn)KEY7SJMPSTARTKEY0:;0#鍵功能程序LJMPSTART;返回主程序開始,繼續(xù)查詢按鍵狀態(tài)KEY1:;1#鍵功能程序LJMPSTARTKEY7:;7#鍵功能程序LJMPSTART,任務二音樂演奏器的設計與實現(xiàn),(1)矩陣式鍵盤的結(jié)構及原理,圖4-22矩陣鍵盤電路圖,3、矩陣式按鍵,特點:按鍵識別應采用掃描法或線路反轉(zhuǎn)法編程較為復雜,節(jié)省口資源,8鍵以上使用,任務二音樂演奏器的設計與實現(xiàn),(2)矩陣式鍵盤按鍵的識別,識別按鍵的方法很多,其中,最常見的方法是掃描法,其中一種是“行掃描法”。行掃描法又稱為逐行(或列)掃描查詢法,是最常用的按鍵識別方法。,(3)鍵盤的編碼,對于矩陣式鍵盤,按鍵的位置由行號和列號唯一確定,因此可分別對行號和列號進行二進制編碼,然后將兩值合成一個字節(jié),高4位是行號,低4位是列號。鍵盤編碼可采用依次排列鍵號的方式對安排進行編碼。,(4)鍵盤的工作方式,在單片機應用系統(tǒng)中,鍵盤掃描只是CPU的工作內(nèi)容之一。通常,鍵盤的工作方式有三種,即編程掃描、定時掃描和中斷掃描。,1、確定設計方案,選用AT89C51單片機芯片、時鐘電路、復位電路、電源和8個按鍵,按鍵采用獨立式鍵盤,8個按鍵代表do,rui,mi,fa,so,la,xi,do8個音階,采用查詢方式,可彈奏不同聲音。,并行接口,AT89C51單片機,電源,時鐘電路,復位電路,8鍵查詢式鍵盤,圖4-25系統(tǒng)方案設計框圖,揚聲器,任務二音樂演奏器的設計與實現(xiàn),2、硬件電路設計,圖4-26獨立式鍵盤簡易電子琴電路原理圖,電路所用仿真元器件:AT89C51:單片機RES:電阻CRYSTAL:晶振CAP:電容CAP-ELEC:電解電容BUTTON:按鍵SPEAKER:揚聲器OSCILLOSCOPE:示波器,任務二音樂演奏器的設計與實現(xiàn),圖4-27獨立式鍵盤簡易電子琴主程序流程圖,步驟1:流程圖設計,3、源程序設計,任務二音樂演奏器的設計與實現(xiàn),圖4-28簡易電子琴演奏子程序流程圖,步驟1:流程圖設計,圖4-29簡易電子琴中斷服務程序流程圖,任務二音樂演奏器的設計與實現(xiàn),3、源程序設計,;*獨立式鍵盤建議電子琴*;程序名:電子琴控制程序xm4_5.asm;程序功能:采用查詢式鍵盤,8個按鍵代表do(中音),rui,mi,fa,so,la,xi,;do(高音)8個音階,可彈奏不同聲音;采用定時器T0工作方式1TUNEDATA22H;22H:暫存音調(diào)的定時初值表的地址偏移值KEY_1BITP1.0;按鍵1do,0:按下KEY_2BITP1.1;按鍵2rui,0:按下KEY_3BITP1.2;按鍵3mi,0:按下KEY_4BITP1.3;按鍵4fa,0:按下KEY_5BITP1.4;按鍵5so,0:按下KEY_6BITP1.5;按鍵6la,0:按下KEY_7BITP1.6;按鍵7xi,0:按下KEY_8BITP1.7;按鍵8do(高),0:按下SPEAKERBITP3.4;喇叭;-主程序-ORG0000HLJMPMAINORG000BH;T0中斷矢量LJMPINT_T0ORG0030HMAIN:MOVSP,#50HMOVTMOD,#01H;置T0工作于方式1SETBET0SETBEA;開中斷MOVP1,#0FFH;設置P1為輸入口,步驟2:源程序編寫,任務二音樂演奏器的設計與實現(xiàn),START:CLRSPEAKER;靜音CLRTR0;定時器T0停止LOOP1:MOVA,P1;讀入P1口的狀態(tài)CJNEA,#0FFH,LOOP2;沒有鍵按下的話,等待SJMPLOOP1LOOP2:LCALLDELY2MS;延時,防抖MOVB,P1;讀入P1口的狀態(tài)CJNEA,B,LOOP1;兩次檢測P1口不同的話,重新檢測JNBACC.0,KEY1;ACC.0=0?若為0則P1.0對應的鍵按下,轉(zhuǎn)KEY1JNBACC.1,KEY2;ACC.1=0?若為0則P1.1對應的鍵按下,轉(zhuǎn)KEY2JNBACC.2,KEY3;ACC.2=0?若為0則P1.2對應的鍵按下,轉(zhuǎn)KEY3JNBACC.3,KEY4;ACC.3=0?若為0則P1.3對應的鍵按下,轉(zhuǎn)KEY4JNBACC.4,KEY5;ACC.4=0?若為0則P1.4對應的鍵按下,轉(zhuǎn)KEY5JNBACC.5,KEY6;ACC.5=0?若為0則P1.5對應的鍵按下,轉(zhuǎn)KEY6JNBACC.6,KEY7;ACC.6=0?若為0則P1.6對應的鍵按下,轉(zhuǎn)KEY7JNBACC.7,KEY8;ACC.7=0?若為0則P1.7對應的鍵按下,轉(zhuǎn)KEY8SJMPSTARTKEY1:MOVTUNE,#0;do(1)音調(diào)的定時初值表的地址偏移值LCALLSONG;演奏JNBKEY_1,$;等待鍵松開LJMPSTART;返回,繼續(xù)查詢按鍵KEY2:MOVTUNE,#2;rui(2)音調(diào)的定時初值表的地址偏移值LCALLSONG;演奏JNBKEY_2,$;等待鍵松開LJMPSTART;返回,繼續(xù)查詢按鍵,任務二汽車轉(zhuǎn)向燈控制,KEY3:MOVTUNE,#4;mi(3)音調(diào)的定時初值表的地址偏移值LCALLSONG;演奏JNBKEY_3,$;等待鍵松開LJMPSTART;返回,繼續(xù)查詢按鍵KEY4:MOVTUNE,#6;fa(4)音調(diào)的定時初值表的地址偏移值LCALLSONG;演奏JNBKEY_4,$;等待鍵松開LJMPSTART;返回,繼續(xù)查詢按鍵KEY5:MOVTUNE,#8;so(5)音調(diào)的定時初值表的地址偏移值LCALLSONG;演奏JNBKEY_5,$;等待鍵松開LJMPSTART;返回,繼續(xù)查詢按鍵KEY6:MOVTUNE,#10;la(6)音調(diào)的定時初值表的地址偏移值LCALLSONG;演奏JNBKEY_6,$;等待鍵松開LJMPSTART;返回,繼續(xù)查詢按鍵KEY7:MOVTUNE,#12;xi(7)音調(diào)的定時初值表的地址偏移值LCALLSONG;演奏JNBKEY_7,$;等待鍵松開LJMPSTART;返回,繼續(xù)查詢按鍵KEY8:MOVTUNE,#14;do高(1)音調(diào)的定時初值表的地址偏移值LCALLSONG;演奏JNBKEY_8,$;等待鍵松開LJMPSTART;返回,繼續(xù)查詢按鍵,任務二音樂演奏器的設計與實現(xiàn),;-演奏子程序-SONG:MOVA,TUNE;音調(diào)的定時初值表的地址偏移值MOVDPTR,#TABLE;音調(diào)的定時初值表MOVCA,A+DPTRMOVR1,A;音符定時值高位INCDPTRMOVA,TUNEMOVCA,A+DPTRMOVR0,A;音符定時值低位MOVTH0,R1;定時器初值MOVTL0,R0SETBTR0;啟動定時器T0RET;返回;-延時子程序-DELY2MS:MOVR6,#4;延時2msD1:MOVR7,#248DJNZR7,$DJNZR6,D1RET,任務二音樂演奏器的設計與實現(xiàn),;-T0中斷服務程序-INT_T0:PUSHACC;保護現(xiàn)場PUSHPSWMOVTH0,R1;定時器初值MOVTL0,R0CPLSPEAKER;聲音輸出POPPSW;恢復現(xiàn)場POPACCRETI;中斷返回;決定音調(diào)的定時初值TABLE:DW0FC44H,0FCACH,0FD09H,0FD34H;中音1,2,3,4DW0FD82H,0FDC8H,0FE06H,0FE22H;中音5,6,7,高音1END,任務二音樂演奏器的設計與實現(xiàn),4、實物制作,任務一音樂門鈴的分析與仿真,待在Proteus中仿真調(diào)試結(jié)果正常后,用實際硬件搭建電路。,表4-8元器件清單,自己動手:擴展到44矩陣式鍵盤,采用編程掃描或定時中斷方式編程,16個按鍵按下分別演奏C調(diào)的低音的3,4,5,6,7,中音的1,2,3,4,5,6,7,高音的1,2,3,4;并用數(shù)碼管顯示按下的鍵值。,圖4-30矩陣式鍵盤簡易電子琴電路原理圖,返回,任務二音樂演奏器的設計與實現(xiàn),返回,項目四音樂演奏器設計,MCS-51單片機內(nèi)部有兩個可編程定時器/計數(shù)器T0和T1,每個定時器/計數(shù)器有四種工作方式:方式0方式3。方式0是13位的定時器/計數(shù)器,方式1是16位的定時器/計數(shù)器,方式2是初值重載的8位定時器/計數(shù)器,方式3只適用于T0,將T0分為兩個獨立的定時器/計數(shù)器,同時T1可以作為串行接口波特率發(fā)生器。不同位數(shù)的定時器/計數(shù)器其最大計數(shù)值也不同。52系列單片機內(nèi)部還有程定時器/計數(shù)器T2,定時器2有三種工作方式:捕獲方式、自動重載(向下或向上計數(shù))方式和波特率發(fā)生器方式。對于定時器/計數(shù)器的編程包括設置方式寄存器、初值及控制寄存器(可位尋址)。初值由定時時間及定時器/計數(shù)器的位數(shù)決定。按鍵按

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論