版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、. . . . 方案設(shè)計(jì)電子琴設(shè)計(jì)框圖晶振控制模塊顯示模塊發(fā)聲模塊圖電子琴設(shè)計(jì)框圖2 總體設(shè)計(jì)2.1 硬件部分采用AT89S52 單片機(jī)作為主控制部件,AT89S52 用上電自動(dòng)復(fù)位,12MHZ 的晶振和兩個(gè)電容形成晶振電路。 面鍵,用于輸入音符。2.2 軟件部分軟件部分采用匯編語(yǔ)言編寫(xiě)程序,單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)步驟如下:第一步:分析問(wèn)題。第二步:畫(huà)出程序的基本輪廓。第三步:實(shí)現(xiàn)該程序。2.3 軟硬件調(diào)試使用 KEIL 軟件,將程序輸入進(jìn)行編譯,編譯通過(guò)后,則將制作的電路進(jìn)行聯(lián)機(jī)仿真,檢測(cè)功能和設(shè)計(jì)任務(wù)能不能實(shí)現(xiàn)。 如果不能達(dá)到預(yù)期效果,則必須重新檢查硬件或修改程序。2.4 程序固化經(jīng)過(guò)調(diào)試
2、,實(shí)現(xiàn)了預(yù)期的成果和功能,就可以開(kāi)始程序固化了。 將程序燒錄到 AT89S52 部ROM 中,然后將單片機(jī)放入到電路中,再進(jìn)行觀察。一 相關(guān)技術(shù)簡(jiǎn)介用電子琴可以演奏出各種美妙的音樂(lè),而音樂(lè)是有音符組成的。不同的音符是由相應(yīng)頻率的振動(dòng)產(chǎn)生不同頻率的聲音電信號(hào)經(jīng)揚(yáng)聲器發(fā)音后,人耳所聽(tīng)到的便是不同的聲音,換言之,只要向揚(yáng)聲器中輸入不同頻率的電信號(hào)就可以產(chǎn)生不同的聲音。若將不同的音節(jié)于不同的節(jié)拍組合在一起便形成一定的曲調(diào),因此一個(gè)單片機(jī)I/O口,通過(guò)軟件,控制其輸出不同頻率的信號(hào),就可以產(chǎn)生8個(gè)基本音節(jié),將音節(jié)以一定的節(jié)拍進(jìn)行組合,便可以產(chǎn)生歌曲。樂(lè)曲中每一音符對(duì)應(yīng)著確定的頻率,表1 給出C 調(diào)時(shí)各音
3、符頻率。如果單片機(jī)某個(gè)口線輸出“高”“低”電平的頻率和某個(gè)音符的頻率一樣,那么將此口線接上喇叭就可以發(fā)出此音符。二 硬件設(shè)計(jì)1. AT89S52單片機(jī)圖2 AT89S52單片機(jī)()簡(jiǎn)介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)提供高靈活、超有效的解決方案。AT8
4、9S52 具有以下標(biāo)準(zhǔn)功能:8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門(mén)狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè) 16 位定時(shí)器/計(jì)數(shù)器,一個(gè) 6 向量 2 級(jí)中斷結(jié)構(gòu),全雙工串行口,片晶振與時(shí)鐘電路。另外,AT89S52 可降至 0Hz 靜態(tài)邏輯操作,支持 2 種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許 RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM 容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。()引腳功能1.VCC : 電源2.GND: 地3.P0 口:P0 口是一個(gè) 8 位漏極開(kāi)路的雙向 I/O 口。作為輸
5、出口,每位能驅(qū)動(dòng) 8 個(gè) TTL 邏輯電平。對(duì) P0 端口寫(xiě)“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0 口也被作為低 8 位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0 具有部上拉電阻。在 flash 編程時(shí),P0 口也用來(lái)接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。4.P1 口:P1 口是一個(gè)具有部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅(qū)動(dòng) 4 個(gè)TTL 邏輯電平。對(duì) P1 端口寫(xiě)“1”時(shí),部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL)。此外,P1.0 和 P1.2
6、分別作定時(shí)器/計(jì)數(shù)器 2 的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器 2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在 flash 編程和校驗(yàn)時(shí),P1 口接收低 8 位地址字節(jié)。表引腳功能引腳號(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)編程用)5.P2 口:P2 口是一個(gè)具有部上拉電阻的 8 位雙向 I/O 口,P2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè)TTL 邏輯電平。對(duì) P2 端口寫(xiě)“1”時(shí),部上拉電阻把端口
7、拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或用 16 位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行 MOVX DPTR)時(shí),P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的部上拉發(fā)送 1。在使用8 位地址(如 MOVX RI)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2 口輸出 P2 鎖存器的容。在 flash 編程和校驗(yàn)時(shí),P2 口也接收高 8 位地址字節(jié)和一些控制信號(hào)。6.3 口:P3 口是一個(gè)具有部上拉電阻的 8 位雙向 I/O 口,p2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè)TTL 邏輯電平。對(duì) P3 端口寫(xiě)“1”時(shí),部上拉電阻把端口拉高,
8、此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,將輸出電流(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ǔ)器寫(xiě)選通)P3.7RD(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)7.RST: 復(fù)位輸入。晶振工作時(shí),RST 腳持續(xù) 2 個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位。看門(mén)
9、狗計(jì)時(shí)完成后,RST 腳輸出 96 個(gè)晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能無(wú)效。DISRTO 默認(rèn)狀態(tài)下,復(fù)位高電平有效。8.ALE/PROG:地址鎖存控制信號(hào)(ALE)是訪問(wèn)外部程序存儲(chǔ)器時(shí),鎖存低 8 位地址的輸出脈沖。在 flash 編程時(shí),此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來(lái)作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE 脈沖將會(huì)跳過(guò)。如果需要,通過(guò)將地址為 8EH 的 SFR 的第 0 位置 “1”,ALE 操作將無(wú)效。這一位置 “1”,A
10、LE 僅在執(zhí)行 MOVX 或 MOVC 指令時(shí)有效。否則,ALE 將被微弱拉高。這個(gè) ALE 使能標(biāo)志位(地址為 8EH 的 SFR 的第 0 位)的設(shè)置對(duì)微控制器處于外部執(zhí)行模式下無(wú)效。9.PSEN:外部程序存儲(chǔ)器選通信號(hào)(PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng) AT89S52 從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN 在每個(gè)機(jī)器周期被激活兩次,而在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN 將不被激活。10.EA/VPP:訪問(wèn)外部程序存儲(chǔ)器控制信號(hào)。為使能從 0000H 到 FFFFH 的外部程序存儲(chǔ)器讀取指令,EA 必須接 GND。為了執(zhí)行部程序指令,EA 應(yīng)該接 VCC。在 flash 編程期間,
11、EA 也接收 12 伏 VPP電壓。11.XTAL1:振蕩器反相放大器和部時(shí)鐘發(fā)生電路的輸入端。12.XTAL2:振蕩器反相放大器的輸出端。2.蜂鳴器圖3 蜂鳴器蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī),打印機(jī),復(fù)印機(jī),報(bào)警器,電子玩具,汽車電子設(shè)備,機(jī),定時(shí)器等電子產(chǎn)品中做發(fā)聲器件。3.鍵盤(pán)圖4 鍵盤(pán)本設(shè)計(jì)鍵盤(pán)模塊采用 4*4 矩陣鍵盤(pán),原理圖如圖 所示。在鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少 I/O 口的占用,通常將按鍵排列成矩陣形式,如圖 4 所示。 在矩陣式鍵盤(pán)中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。 這樣,一個(gè)端口(如 P1 口)就
12、可以構(gòu)成4*4=16 個(gè)按鍵,比之直接將端口線用于鍵盤(pán)多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成 20 鍵的鍵盤(pán),而直接用端口線則只能多出一鍵(9 鍵)。由此可見(jiàn),在鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少 I/O 口的占用,通常將按鍵排列成矩陣形式。4. 時(shí)鐘電路 (1)振蕩電路部有一個(gè)用于構(gòu)成振蕩器的可控高增益反向放大器,兩個(gè)引腳和XTAL2分別是該放大器的輸入端和輸出端,其中匹配電容和要根據(jù)石英晶體振蕩器的要求選取,一般選用PF的瓷片電容。振蕩頻率根據(jù)實(shí)際要求的工作速度,從幾百中適當(dāng)選取。()時(shí)鐘電路圖5定時(shí)電路5 .LED數(shù)碼管圖6 顯示顯示模塊是利用 AT89S52 單片
13、機(jī)的 P0 端口的 P0.0P0.7 連接到一個(gè)共陽(yáng)數(shù)碼管的 ah 的筆段上。在數(shù)碼管上循環(huán)顯示 07 數(shù)字,時(shí)間間隔 0.2 秒。LED 顯示模塊七段 LED 數(shù)碼管部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽(yáng)極型。LED 數(shù)碼管的七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,表給出了共陰極 LED 數(shù)碼管的字形碼表。表 共陽(yáng)極 LED 數(shù)碼管的字形碼表顯示字符共陽(yáng)極段選碼顯示字符共陽(yáng)極段選碼C0H80HF9H90HA4H88HB0H83H99HC6H92HA1H82H86HF
14、8H8EH三 軟件設(shè)計(jì)開(kāi)始初始化是否有按鍵按下發(fā)聲程序鍵盤(pán)程序結(jié)束圖7主程序流程圖1發(fā)聲程序表4音符頻率表音符頻率簡(jiǎn)譜碼中69864820低26263628中78464898低29463835中88064968低33064021中98865030低34964103高104665058低39264260高117565110低4406440高131865157低49464524高139765178中52364580高156865217中58764684高176065252中65964777高196765283中斷入口重置取反圖 8 發(fā)聲程序流程圖。2定時(shí)中斷定時(shí)中斷保護(hù)現(xiàn)場(chǎng)停止計(jì)時(shí)輸入音頻脈沖電平
15、音頻脈沖電平反轉(zhuǎn)中斷返回恢復(fù)現(xiàn)場(chǎng)圖9定時(shí)中斷程序框圖中斷是單片機(jī)適時(shí)的處理部或外部事件的一種部機(jī)制,當(dāng)某種部或外部事件發(fā)生時(shí),單片機(jī)中斷系統(tǒng)將迫使暫停正在執(zhí)行的程序,轉(zhuǎn)而去進(jìn)行中斷事件的處理,中斷處理完畢后,又返回被中斷程序處,繼續(xù)向下執(zhí)行。AT89S52 有 6 個(gè)中斷源:兩個(gè)外部中斷(INT0 和 INT1),三個(gè)定時(shí)中斷(定時(shí)器 0、1、2)和一個(gè)串行中斷。每個(gè)中斷源都可以通過(guò)置位或清除特殊寄存器 IE 中的相關(guān)中斷允許控制位分別使得中斷源有效或無(wú)效。IE 還包括一個(gè)中斷允許總控制位 EA,它能一次禁止所有中斷。如表 5 所示,IE.6 位是不可用的。對(duì)于 AT89S52,IE.5 位也
16、是不能用的。用戶軟件不應(yīng)給這些位寫(xiě) 1。它們?yōu)?AT89 系列新產(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è)周期被電路捕捉下來(lái)。然而,定時(shí)器 2 的標(biāo)志位 TF2 在計(jì)數(shù)溢出的那個(gè)周期的 S2P2 被置位,在同一個(gè)周期被電路捕捉下來(lái)。表5中斷允許控制寄存器(MSB) (LSB)EAET2ESET
17、1EX1ET0EX0中斷允許控制位1,允許中斷中斷允許控制位0,禁止中斷符號(hào)位地址功能EAIE.7中斷總允許控制位。EA=0,中斷總禁止;EA=1,各中斷由各自的控制位設(shè)定-IE.6預(yù)留ET2IE.5定時(shí)器 2 中斷允許控制位ESIE.4串行口中斷允許控制位ET1IE.3定時(shí)器 1 中斷允許控制位EX1IE.2外部中斷 1 允許控制位ET0IE.1定時(shí)器 0 中斷允許控制位EX0IE.0外部中斷 1 允許控制位五 設(shè)計(jì)感受這次專業(yè)設(shè)計(jì)結(jié)束了,我對(duì)于單片機(jī)又有了一個(gè)全新的認(rèn)識(shí),原來(lái)以前的學(xué)習(xí)還差很多,在對(duì)于學(xué)科和未來(lái)的工作上,我還有很長(zhǎng)的一段路要走。學(xué)海無(wú)涯,這句話雖然有點(diǎn)老生常談,但卻是我現(xiàn)在
18、最真實(shí)的心理感受,電子琴的設(shè)計(jì)其實(shí)難度并不大,而如今如此吃力的原因值得我好好反思。最后,感老師對(duì)于我們專業(yè)設(shè)計(jì)無(wú)私的指導(dǎo)和幫助。六 附錄/簡(jiǎn)易電子琴#include<reg52.h> /包含51單片機(jī)寄存器定義的頭文件sbit P14=P14; /將P14位定義為P1.4引腳sbit P15=P15; /將P15位定義為P1.5引腳sbit P16=P16; /將P16位定義為P1.6引腳sbit P17=P17; /將P17位定義為P1.7引腳unsigned char keyval; /定義變量?jī)?chǔ)存按鍵值sbit sound=P36; /將sound位定義為P3.7unsign
19、ed int C; /全局變量,儲(chǔ)存定時(shí)器的定時(shí)常數(shù)unsigned int f; /全局變量,儲(chǔ)存音階的頻率/以下是C調(diào)低音的音頻宏定義#define l_dao 262 /將“l(fā)_dao”宏定義為低音“1”的頻率262Hz#define l_re 286 /將“l(fā)_re”宏定義為低音“2”的頻率286Hz#define l_mi 311 /將“l(fā)_mi”宏定義為低音“3”的頻率311Hz#define l_fa 349 /將“l(fā)_fa”宏定義為低音“4”的頻率349Hz#define l_sao 392 /將“l(fā)_sao”宏定義為低音“5”的頻率392Hz#define l_la 440
20、/將“l(fā)_a”宏定義為低音“6”的頻率440Hz#define l_xi 494 /將“l(fā)_xi”宏定義為低音“7”的頻率494Hz /以下是C調(diào)中音的音頻宏定義#define dao 523 /將“dao”宏定義為中音“1”的頻率523Hz#define re 587 /將“re”宏定義為中音“2”的頻率587Hz#define mi 659 /將“mi”宏定義為中音“3”的頻率659Hz#define fa 698 /將“fa”宏定義為中音“4”的頻率698Hz#define sao 784 /將“sao”宏定義為中音“5”的頻率784Hz#define la 880 /將“l(fā)a”宏定義為
21、中音“6”的頻率880Hz#define xi 987 /將“xi”宏定義為中音“7”的頻率53/以下是C調(diào)高音的音頻宏定義#define h_dao 1046 /將“h_dao”宏定義為高音“1”的頻率1046Hz#define h_re 1174 /將“h_re”宏定義為高音“2”的頻率1174Hz#define h_mi 1318 /將“h_mi”宏定義為高音“3”的頻率1318Hz#define h_fa 1396 /將“h_fa”宏定義為高音“4”的頻率1396Hz#define h_sao 1567 /將“h_sao”宏定義為高音“5”的頻率1567Hz#define h_la 1
22、760 /將“h_la”宏定義為高音“6”的頻率1760Hz#define h_xi 1975 /將“h_xi”宏定義為高音“7”的頻率1975Hz/*函數(shù)功能:軟件延時(shí)子程序*/ void delay20ms(void) unsigned char i,j;for(i=0;i<100;i+) for(j=0;j<60;j+) ; /*函數(shù)功能:節(jié)拍的延時(shí)的基本單位,延時(shí)200ms*/void delay() unsigned char i,j; for(i=0;i<250;i+) for(j=0;j<250;j+) ; /*函數(shù)功能:輸出音頻入口參數(shù):F*/void
23、Output_Sound(void) C=(46083/f)*10; /計(jì)算定時(shí)常數(shù) TH0=(8192-C)/32; /可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法 TL0=(8192-C)%32; /可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法 TR0=1; /開(kāi)定時(shí)T0 delay(); /延時(shí)200ms,播放音頻 TR0=0; /關(guān)閉定時(shí)器 sound=1; /關(guān)閉蜂鳴器 keyval=0xff; /播放按鍵音頻后,將按鍵值更改,停止播放/*函數(shù)功能:主函數(shù)*/void main(void) EA=1; /開(kāi)總中斷 ET0=1; /定時(shí)器T0中斷允許ET1=1; /定時(shí)器T1中斷允
24、許TR1=1; /定時(shí)器T1啟動(dòng),開(kāi)始鍵盤(pán)掃描 TMOD=0x10; /分別使用定時(shí)器T1的模式1,T0的模式0 TH1=(65536-500)/256; /定時(shí)器T1的高8位賦初值 TL1=(65536-500)%256; /定時(shí)器T1的高8位賦初值 while(1) /無(wú)限循環(huán) switch(keyval) case 1:f=dao; /如果第1個(gè)鍵按下,將中音1的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 2:f=l_xi; /如果第2個(gè)鍵按下,將低音7的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 3
25、:f=l_la; /如果第3個(gè)鍵按下,將低音6的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 4:f=l_sao; /如果第4個(gè)鍵按下,將低音5的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 5:f=sao; /如果第5個(gè)鍵按下,將中音5的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 6:f=fa; /如果第6個(gè)鍵按下,將中音4的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 7:f=mi; /如果第7個(gè)鍵按下,將中音3的頻率賦給
26、f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 8:f=re; /如果第8個(gè)鍵按下,將中音2的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 9:f=h_re; /如果第9個(gè)鍵按下,將高音2的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 10:f=h_dao; /如果第10個(gè)鍵按下,將高音1的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 11:f=xi; /如果第11個(gè)鍵按下,將中音7的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算
27、定時(shí)常數(shù) break; case 12:f=la; /如果第12個(gè)鍵按下,將中音6的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 13:f=h_la; /如果第13個(gè)鍵按下,將高音6的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 14:f=h_sao; /如果第14個(gè)鍵按下,將高音5的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 15:f=h_fa; /如果第15個(gè)鍵按下,將高音4的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case
28、16:f=h_mi; /如果第16個(gè)鍵按下,將高音3的頻率賦給f Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; /*函數(shù)功能:定時(shí)器T0的中斷服務(wù)子程序,使P3.7引腳輸出音頻方波*/ void Time0_serve(void ) interrupt 1 using 1 TH0=(8192-C)/32; /可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法 TL0=(8192-C)%32; /可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法 sound=!sound; /將P3.7引腳取反,輸出音頻方波 /*函數(shù)功能:定時(shí)器T1的中斷服務(wù)子程序,進(jìn)行鍵盤(pán)掃描,判斷鍵位*/ vo
29、id time1_serve(void) interrupt 3 using 2 /定時(shí)器T1的中斷編號(hào)為3,使用第2組寄存器 TR1=0; /關(guān)閉定時(shí)器T0 P1=0xf0; /所有行線置為低電平“0”,所有列線置為高電平“1” if(P1&0xf0)!=0xf0) /列線中有一位為低電平“0”,說(shuō)明有鍵按下 delay20ms(); /延時(shí)一段時(shí)間、軟件消抖 if(P1&0xf0)!=0xf0) /確實(shí)有鍵按下 P1=0xfe; /第一行置為低電平“0”(P1.0輸出低電平“0”) if(P14=0) /如果檢測(cè)到接P1.4引腳的列線為低電平“0” keyval=1; /可判斷是S1鍵被按下 if(P15=0) /如果檢測(cè)到接P1.5引腳的列線為低電平“0” keyval=2; /可判斷是S2鍵被按下 if(P16=0) /如果檢測(cè)到接P1.6引腳的列線為低電平“0” keyval=3; /可判斷是S3鍵被按下 if(P17=0) /如果檢測(cè)到接P1.7引腳的列線為低電平“0” keyval=4; /可判斷是S4鍵被按下 P1=0xfd; /第二行置為低電平“0”(P1.1輸出低電平“0”) if(P14=0) /如果檢測(cè)到接P1.4引腳的列線為低電平“0” keyval=5; /可判斷是S5鍵被按下 if(P15=0) /如果檢測(cè)到接P1.5
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版三項(xiàng)資金支付合作合同版B版
- 伊索寓言讀書(shū)筆記15篇
- 護(hù)士個(gè)人離職報(bào)告
- 電力專業(yè)練習(xí)卷含答案
- 隱患判定標(biāo)準(zhǔn)習(xí)題復(fù)習(xí)測(cè)試有答案
- 大學(xué)生珍愛(ài)生命演講稿6篇
- 電子商務(wù)實(shí)習(xí)報(bào)告模板集錦七篇
- 省級(jí)產(chǎn)業(yè)園區(qū)基礎(chǔ)設(shè)施項(xiàng)目環(huán)境影響評(píng)估
- 2024年精簡(jiǎn)型服裝銷售協(xié)議模板版B版
- 2024年標(biāo)準(zhǔn)鉆機(jī)施工承包合同范本版B版
- 第12課《詞四首》課件+2023-2024學(xué)年統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
- 合伙開(kāi)公司股份分配協(xié)議書(shū)
- 2023年聊城市人民醫(yī)院招聘?jìng)浒钢乒ぷ魅藛T考試真題
- 2024年R1快開(kāi)門(mén)式壓力容器操作證考試題庫(kù)及答案
- 儺戲面具制作課程設(shè)計(jì)
- 2024中國(guó)華電集團(tuán)限公司校招+社招高頻難、易錯(cuò)點(diǎn)練習(xí)500題附帶答案詳解
- 智能工廠梯度培育行動(dòng)實(shí)施方案
- 保護(hù)性約束完整版本
- 23J916-1 住宅排氣道(一)
- AD域控規(guī)劃方案
- 院前急救護(hù)士理論考核參考題及答案
評(píng)論
0/150
提交評(píng)論