單片機(jī)電子琴方案_第1頁
單片機(jī)電子琴方案_第2頁
單片機(jī)電子琴方案_第3頁
單片機(jī)電子琴方案_第4頁
單片機(jī)電子琴方案_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

方案設(shè)計(jì)1電子琴設(shè)計(jì)框圖圖1電子琴設(shè)計(jì)框圖2總體設(shè)計(jì)硬件部分采用AT89S52單片機(jī)作為主控制部件,AT89S52用上電自動(dòng)復(fù)位,12MHz的晶振和兩個(gè)電容形成晶振電路。面鍵,用于輸入音符。軟件部分軟件部分采用匯編語言編寫程序,單片機(jī)匯編語言程序設(shè)計(jì)步驟如下:第一步:分析問題。第二步:畫出程序的基本輪廓。第三步:實(shí)現(xiàn)該程序。軟硬件調(diào)試使用KEIL軟件,將程序輸入進(jìn)行編譯,編譯通過后,則將制作的電路進(jìn)行聯(lián)機(jī)仿真,檢測功能和設(shè)計(jì)任務(wù)能不能實(shí)現(xiàn)。如果不能達(dá)到預(yù)期效果,則必須重新檢查硬件或修改程序。程序固化經(jīng)過調(diào)試,實(shí)現(xiàn)了預(yù)期的成果和功能,就可以開始程序固化了。將程序燒錄到AT89S52內(nèi)部ROM中,然后將單片機(jī)放入到電路中,再進(jìn)行觀察。一.相關(guān)技術(shù)簡介用電子琴可以演奏出各種美妙的音樂,而音樂是有音符組成的。不同的音符是由相應(yīng)頻率的振動(dòng)產(chǎn)生不同頻率的聲音電信號(hào)經(jīng)揚(yáng)聲器發(fā)音后,人耳所聽到的便是不同的聲音,換言之,只要向揚(yáng)聲器中輸入不同頻率的電信號(hào)就可以產(chǎn)生不同的聲音。若將不同的音節(jié)于不同的節(jié)拍組合在一起便形成一定的曲調(diào),因此一個(gè)單片機(jī)I/O口,通過軟件,控制其輸出不同頻率的信號(hào),就可以產(chǎn)生8個(gè)基本音節(jié),將音節(jié)以一定的節(jié)拍進(jìn)行組合,便可以產(chǎn)生歌曲。樂曲中

每一音符對應(yīng)著確定的頻率,表I給出c調(diào)時(shí)各音符頻率。如果單片機(jī)某個(gè)口線輸出“高”“低”電平的頻率和某個(gè)音符的頻率一樣,那么將此口線接上喇叭就可以發(fā)出此音符。二.硬件設(shè)計(jì)1.AT89s52單片機(jī)ZIP-1-0--A1_E由運(yùn)JALE/PKOGITXIAP31(RXD}P3.0GNUMCU【3⑸P2;(AL4JP2.6(All3)R2.5(AlHJPZ.a(A.LDJE?2.2(A5)P2.1{AJSJP2.0?--?I'i(AD7)PCI7(ADG)PtJS(ADjJPO5(AD4)E*a.4(AD3)PdJ(An2)P0.2IAD1JPO1IADt5)P0D百1rppP3.4CTD)pi.scri)RSTPI出卜P3.7(.RDJ3CTAL2XTAL-I、-f”3^TTTf匚 7(SC1K5Pl.Gl:MISO)P1.5CMJ0SDPl.4Fl.3Pl.2Pl|ATE9S5Zp{q圖2AT89S52單片機(jī)<1)簡介AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。<2).引腳功能VCC:電源GND:地P0口:P0口是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)表2表2P3引腳功能動(dòng)8個(gè)TTL邏輯電平。對P0端口寫“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。在flash編程時(shí),P0口也用來接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。P1口:P1口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,pl輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對P1端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳因?yàn)閮?nèi)部電阻的原因,將輸出電流<IIL)。此外,P1.0和P1.2分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入a1.0“2)和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入<P1.1/T2EX),具體如下表所示。在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。表1P1引腳功能弓|腳號(hào)第二功能P1.0T2〈定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出P1.1T2EX<定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制)P1.5MOSI<在系統(tǒng)編程用)P1.6MISO<在系統(tǒng)編程用)P1.7SCK<在系統(tǒng)編程用)P2口:P2口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對P2端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳因?yàn)閮?nèi)部電阻的原因,將輸出電流<IIL)。在訪問外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器〈例如執(zhí)行MOVX@DPTR)時(shí),P2口送出高八位地址。在這種應(yīng)用中,P2口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8位地址〈如MOVX@RI)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。P3口:P3口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,p2輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對P3端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳因?yàn)閮?nèi)部電阻的原因,將輸出電流<IIL)。P3口亦作為AT89S52特殊功能〈第二功能)使用,如下表所示。在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。弓|腳號(hào)第二功能P3.0RXD<串行輸入)P3.1TXD<串行輸出)P3.2INT0(外部中斷0>P3.3INT0(外部中斷0>P3.4T0<定時(shí)器0外部輸入)P3.5T1<定時(shí)器1外部輸入)P3.6WR(外部數(shù)據(jù)存儲(chǔ)器寫選通》P3.7RD(外部數(shù)據(jù)存儲(chǔ)器寫選通,RST:復(fù)位輸入。晶振工作時(shí),RST腳持續(xù)2個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位??撮T狗計(jì)時(shí)完成后,RST腳輸出96個(gè)晶振周期的高電平。特殊寄存器AUXR(地址8EH>上的DISRTO位可以使此功能無效。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。ALE/PROG:地址鎖存控制信號(hào)<ALE)是訪問外部程序存儲(chǔ)器時(shí),鎖存低8位地址的輸出脈沖。在flash編程時(shí),此引腳<PROG)也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE脈沖將會(huì)跳過。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE僅在執(zhí)行MOVX或MOVC指令時(shí)有效。否則,ALE將被微弱拉高。這個(gè)ALE使能標(biāo)志位<地址為8EH的SFR的第0位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。PSEN:外部程序存儲(chǔ)器選通信號(hào)<PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng)AT89S52從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN在每個(gè)機(jī)器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN將不被激活。EA/VPP:訪問外部程序存儲(chǔ)器控制信號(hào)。為使能從0000H到FFFFH的外部程序存儲(chǔ)器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,EA也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。蜂鳴器<<2)時(shí)鐘電路圖3蜂鳴器蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī),打印機(jī),復(fù)印機(jī),報(bào)警器,電子玩具,汽車電子設(shè)備,電話機(jī),定時(shí)器等電子產(chǎn)品中做發(fā)聲器件。鍵盤圖4鍵盤本設(shè)計(jì)鍵盤模塊采用4*4矩陣鍵盤,原理圖如圖4所示。在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖4所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口<如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵<9鍵)。由此可見,在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。時(shí)鐘電路<1)振蕩電路AT89S52內(nèi)部有一個(gè)用于構(gòu)成振蕩器的可控高增益反向放大器,兩個(gè)引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端,其中匹配電容C11和C12要根據(jù)石英晶體振蕩器的要求選取,一般選用20-30PF的瓷片電容。振蕩頻率根據(jù)實(shí)際要求的工作速度,從幾百KHZ-24MHz中適當(dāng)選取。5.LED數(shù)碼管圖5定時(shí)電路心「.!I■力T5.LED數(shù)碼管圖5定時(shí)電路心「.!I■力T.■T□-S?--OUNlc'L1s才,".,-.■丁口-(■:圖6LED顯示顯示模塊是利用AT89S52單片機(jī)的P0端口的P0.0—P0.7連接到一個(gè)共陽數(shù)碼管的a—h的筆段上。在數(shù)碼管上循環(huán)顯示0—7數(shù)字,時(shí)間間隔0.2秒。LED顯示模塊七段LED數(shù)碼管內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽極型。LED數(shù)碼管的七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,表3給出了共陰極LED數(shù)碼管的字形碼表。表3共陽極LED數(shù)碼管的字形碼表顯示字符共陽極段選碼顯示字符共陽極段選碼0C0H880H1F9H990H2A4HA88H

圖7主程序流程圖1.發(fā)聲程序表4音符頻率表音符頻率簡譜碼中fa69864820低~2026263628中sao78464898低re29463835中l(wèi)a88064968低mi33064021中xi98865030低fa34964103高dao104665058低52039264260高re117565110低la4406440高mi131865157低xi中dao4945236452464580高fa高sao139715686517865217中re58764684高la176065252中mi65964777高xi196765283

圖8發(fā)聲程序流程圖。2.定時(shí)中斷圖9定時(shí)中斷程序框圖中斷是單片機(jī)適時(shí)的處理內(nèi)部或外部事件的一種內(nèi)部機(jī)制,當(dāng)某種內(nèi)部或外部事件發(fā)生時(shí),單片機(jī)中斷系統(tǒng)將迫使CPU暫停正在執(zhí)行的程序,轉(zhuǎn)而去進(jìn)行中斷事件的處理,中斷處理完畢后,又返回被中斷程序處,繼續(xù)向下執(zhí)行。AT89S52有6個(gè)中斷源:兩個(gè)外部中斷<INT0和211),三個(gè)定時(shí)中斷<定時(shí)器0、1、2)和一個(gè)串行中斷。每個(gè)中斷源都可以通過置位或清除特殊寄存器IE中的相關(guān)中斷允許控制位分別使得中斷源有效或無效。IE還包括一個(gè)中斷允許總控制位EA,它能一次禁止所有中斷。如表5所示,IE.6位是不可用的。對于AT89S52,IE.5位也是不能用的。用戶軟件不應(yīng)給這些位寫1。它們?yōu)锳T89系列新產(chǎn)品預(yù)留。定時(shí)器2可以被寄存器T2CON中的TF2和EXF2的或邏輯觸發(fā)。程序進(jìn)入中斷服務(wù)后,這些標(biāo)志位都可以由硬件清0。實(shí)際上,中斷服務(wù)程序必須判定是否是TF2或EXF2激活中斷,標(biāo)志位也必須由軟件清0。定時(shí)器0和定時(shí)器1標(biāo)志位TF0和TF1在計(jì)數(shù)溢出的那個(gè)周期的S5P2被置位。它們的值一直到下一個(gè)周期被電路捕捉下來。然而,定時(shí)器2的標(biāo)志位TF2在計(jì)數(shù)溢出的那個(gè)周期的S2P2被置位,在同一個(gè)周期被電路捕捉下來。表5中斷允許控制寄存器<MSB)EAET2中斷允許控制位=1,允許中斷允許控制位=0,禁止符號(hào)位地址功能EAIE.7中斷自的IE.6預(yù)留ET2IE.5定時(shí)ESIE.4串行ET1IE.3定時(shí)EX1IE.2外部ET0IE.1定時(shí)EX0IE.0外部五設(shè)計(jì)感受這次專業(yè)設(shè)計(jì)結(jié)束了,我對于52單片機(jī)又有了一個(gè)全新的認(rèn)識(shí),原來以前的學(xué)習(xí)還差很多,在對于學(xué)科和未來的工作上,我還有很長的一段路要走。學(xué)海無涯,這句話雖然有點(diǎn)老生常談,但卻是我現(xiàn)在最真實(shí)的心理感受,電子琴的設(shè)計(jì)其實(shí)難度并不大,而如今如此吃力的原因值得我好好反思。最后,感謝老師對于我們專業(yè)設(shè)計(jì)無私的指導(dǎo)和幫助。六附錄//簡易電子琴

#include<reg52.h>sbitP14二#include<reg52.h>sbitP14二P「4。sbitP15二P「5。sbitP16二P「6。sbitP17二P「7。unsignedcharkeyval。sbitsound=P3八6。unsignedintC。unsignedintf?!▽14位定義為P1.4引腳〃將P15位定義為P1.5引腳〃將P16位定義為P1.6引腳〃將P17位定義為P1.7引腳//定義變量儲(chǔ)存按鍵值〃將sound位定義為P3.7//全局變量,儲(chǔ)存定時(shí)器的定時(shí)常數(shù)〃以下是C調(diào)低音的音頻宏定義#definel_dao262 〃將“l(fā)#define l_re 286 〃將 “l(fā)#define l_mi 311 〃將 “l(fā)#define l_fa 349 〃將 “l(fā)#definel_sao392 〃將“l(fā)#define l_la 440 〃將 “l(fā)〃以下是C調(diào)低音的音頻宏定義#definel_dao262 〃將“l(fā)#define l_re 286 〃將 “l(fā)#define l_mi 311 〃將 “l(fā)#define l_fa 349 〃將 “l(fā)#definel_sao392 〃將“l(fā)#define l_la 440 〃將 “l(fā)#define l_xi 494 〃將 “l(fā)〃以下是C調(diào)中音的音頻宏定義#definedao523#definere587#definemi659#definefa698#definesao784#definela880#definexi987〃將“dao”宏定義為中音“1”的頻率523Hz〃將“re”宏定義為中音“2”的頻率587Hz〃將“mi”宏定義為中音“3”的頻率#definedao523#definere587#definemi659#definefa698#definesao784#definela880#definexi987〃將“xi”宏定義為中音“7”的頻率53〃以下是C調(diào)高音的音頻宏定義#defineh_dao1046#defineh_re1174#defineh_mi1318#defineh_fa1396#defineh_sao#defineh_dao1046#defineh_re1174#defineh_mi1318#defineh_fa1396#defineh_sao1567#defineh_la1760#defineh_xi1975〃將“h_mi”宏定義為高音“3”的頻率1318Hz〃將“h_fa”宏定義為高音“4”的頻率1396Hz〃將“h_sao”宏定義為高音“5”的頻率1567Hz〃將“h_la”宏定義為高音“6”的頻率1760Hz

〃將“h_xi”宏定義為高音“7”的頻率1975Hz/**************************************************************函數(shù)功能:軟件延時(shí)子程序**************************************************************/voiddelay20ms(void>{unsignedchari,j。for(i=0。i<100。i++>for(j=0。j<60。j++>}/*******************************************

函數(shù)功能:節(jié)拍的延時(shí)的基本單位,延時(shí)200ms******************************************/voiddelay(>{unsignedchari,j。for(i=0。i<250。i++>for(j=0。j<250。j++>/*******************************************函數(shù)功能:輸出音頻入口參數(shù):F******************************************/voidOutput_Sound(void>C=(46083/f>*10。TH0=(8192-C>/32。C=(46083/f>*10。TH0=(8192-C>/32。TL0=(8192-C>%32。TR0=1。delay(>。TR0=0。〃可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法〃可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法〃開定時(shí)T0〃延時(shí)200ms,播放音頻//關(guān)閉定時(shí)器sound=1。 //關(guān)閉蜂鳴器keyval=0xff。//播放按鍵音頻后,將按鍵值更改,停止播放/*******************************************函數(shù)功能:主函數(shù)******************************************/voidmain(void>{EA=1。 //開總中斷ET0=1。 〃定時(shí)器T0中斷允許ET1=1。 〃定時(shí)器T1中斷允許TR1=1。 〃定時(shí)器T1啟動(dòng),開始鍵盤掃描TMOD=0x10。 〃分別使用定時(shí)器T1的模式1,T0的模式0TH1=(65536-500>/256。 〃定時(shí)器T1的高8位賦初值TL1=(65536-500>%256。 〃定時(shí)器T1的高8位賦初值while(1> //無限循環(huán){switch(keyval>{case1:f=dao。 //如果第1個(gè)鍵按下,將中音1的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case2:f=l_xi?!ㄈ绻?個(gè)鍵按下,將低音7的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case3:f=l_la。 //如果第3個(gè)鍵按下,將低音6的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case4:f=l_sao。 //如果第4個(gè)鍵按下,將低音5的頻率賦給fOutput_Sound(> 。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case5:f=sao。〃如果第5個(gè)鍵按下,將中音5的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case6:f=fa。〃如果第6個(gè)鍵按下,將中音4的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case7:f=mi。 //如果第7個(gè)鍵按下,將中音3的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case8:f=re。 //如果第8個(gè)鍵按下,將中音2的頻率賦給fOutput_Sound(>。 //轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case9:f=h_re?!ㄈ绻?個(gè)鍵按下,將高音2的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case10:f=h_dao。〃如果第10個(gè)鍵按下,將高音1的頻率賦給f

Output_Sound(>。//Output_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case11:f=xi。 //如果第11個(gè)鍵按下,將中音7的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。TOC\o"1-5"\h\zcase12:f=la。 //如果第12個(gè)鍵按下,將中音6的頻率賦給fOutput_Sound(> //轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case13:f=h_la ?!ㄈ绻?3個(gè)鍵按下,將高音6的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case14:f=h_sao?!ㄈ绻?4個(gè)鍵按下,將高音5的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case15:f=h_fa。 //如果第15個(gè)鍵按下,將高音4的頻率賦給fOutput_Sound(>。//轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。case16:f=h_mi。 //如果第16個(gè)鍵按下,將高音3的頻率賦給fOutput_Sound(>。 //轉(zhuǎn)去計(jì)算定時(shí)常數(shù)break。}}}/**************************************************************函數(shù)功能:定時(shí)器T0的中斷服務(wù)子程序,使P3.7引腳輸出音頻方波**************************************************************/voidTime0_serve(void>interrupt1using1{TH0=(8192-C>/32。 〃可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法TL0=(8192-C>%32。 〃可證明這是13位計(jì)數(shù)器TL0低5位的賦初

值方法sound=!sound?!▽⒅捣椒╯ound=!sound?!▽3.7引腳取反,輸出音頻方波/**************************************************************函數(shù)功能:定時(shí)器T1的中斷服務(wù)子程序,進(jìn)行鍵盤掃描,判斷鍵位**************************************************************/voidtime1_serve(void>interrupt3using2 〃定時(shí)器T1的中斷編號(hào)為3,使用第2組寄存器TR1=0。 〃關(guān)閉定時(shí)器T0P1=0xf0。為高電平“1”P1=0xf0。為高電平“1”//所有行線置為低電平“0”,所有列線置if((P1&0xf0>!=0xf0> //列線中有一位為低電平“0”,說明有鍵按下{delay20ms(>。件消抖if((P1&0xf0>!=0xf0>{P1=0xfe。平“0”行1.0輸出低電平“0”)if(P14==0>P1.4引腳的列線為低電平“”keyval=1被按下if(P15==0>P1.5引腳的列線為低電平0”keyval=2被按下if(P16==0>P1.6引腳的列線為低電平0”keyval=3被按下if(P17==0>P1.7引腳的列線為低電平0”keyval=4按下P1=0oxfd“0”<P1.1輸出低電平“0”)if(P14==0>P1.4引腳的列線為低電平0”keyval=5被按下//延時(shí)一段時(shí)間、軟//確實(shí)有鍵按下//延時(shí)一段時(shí)間、軟//確實(shí)有鍵按下//第一行置為低電//如果檢測到接//可判斷是S1鍵//如果檢測到接//可判斷是S2鍵//如果檢測到接//可判斷是S3鍵//如果檢測到接可/判斷是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論