基于51單片機(jī)簡易電子琴設(shè)計
一、引言
隨著社會的發(fā)展進(jìn)步,音樂逐漸成為我們生活中很重要的一部分,有人曾說喜歡音樂的人不會向惡。我們都會抽空欣賞世界名曲,作為對精神的洗禮。因此,我設(shè)計的是一個基于單片機(jī)的簡易電子琴。
單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活、自由度大,可用軟件編程實(shí)現(xiàn)各種算法和邏輯控制。由于其功耗低、體積較小、技術(shù)成熟和成本低等優(yōu)點(diǎn),在各個領(lǐng)域應(yīng)用廣泛。而且抗干擾性能好。
電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,已溶入現(xiàn)代人的生活中。我設(shè)計的電子琴是以AT89C51單片機(jī)為核心控制元件。電子琴使用簡單,深受廣大熱愛音樂者喜愛。
二、項(xiàng)目概述
此設(shè)計鍵盤用于彈奏音樂,八個按鍵8種音符。單片機(jī)通過輸出各種電脈沖信號開驅(qū)動控制各部分正常工作。
單片機(jī)要產(chǎn)生音頻脈沖,主要處理過程是在CPU中完成的,CPU會隨時對音符輸入信號進(jìn)行讀取數(shù)據(jù)的操作。在讀取了相應(yīng)的寄存器的值后,CPU將讀取的值進(jìn)行處理,再通過I/O口把音樂通過揚(yáng)聲器播放出來。
據(jù)設(shè)計要求,本系統(tǒng)主要由控制器模塊和輸入模塊構(gòu)成。
2.1、主要設(shè)計內(nèi)容
發(fā)生電路是這次設(shè)計電路中最重要的組成部分,他承載著把單片機(jī)所產(chǎn)生的聲音信號放大并輸出的重要作用,而我的設(shè)計中的發(fā)聲電路主要是由兩個S8550組成。S8550是一種小功率的放大管,屬于NPN型號三極管,而對三極管引腳的判斷有以下方法。
判斷三極管的基極。對于NPN型號的三極管,用黑表筆接某一個電極,紅表筆分別接另外兩個電極,若測量電阻值兩個都小,調(diào)換表筆后被測電阻值都較大,則可判斷第一次測量中黑表筆所接的是基極;如果測量值一大一小,相差很大,則第一次測量中黑表筆接的不是基極,應(yīng)該更換其他電極重測。
測量三極管發(fā)射極e和集電極c。三極管基極確定后,通過交換表筆,兩次測量e,c極間的電阻,如果兩次測量結(jié)果不相等,其中測得電阻值較小的一次為紅表筆的是e極黑表筆接的是c極。對于PNP型號的三極管,方法與NPN的相似,只是紅黑表筆的作用相反,在測量e,c極間電阻時要注意,由于三極管的V(BR)CEO很小,很容易將發(fā)射結(jié)擊穿。
當(dāng)我們?nèi)龢O管的管腳判斷結(jié)束以后,我們就可以用兩個三極管構(gòu)成一個達(dá)林頓結(jié)構(gòu)。首先當(dāng)單片機(jī)P1.0口輸出一個高電平,由兩個三極管構(gòu)成的達(dá)林頓能導(dǎo)通,導(dǎo)通后又能對電流又一定的放大作用,這樣傳到揚(yáng)聲器時信號能讓我們聽的更清楚。

圖1

圖2
鍵盤用于彈奏音樂,八個按鍵8種音符。單片機(jī)通過輸出各種電脈沖信號開驅(qū)動控制各部分正常工作。
系統(tǒng)工作過程:單片機(jī)要產(chǎn)生音頻脈沖,主要處理過程是在CPU中完成的,CPU會隨時對音符輸入信號進(jìn)行讀取數(shù)據(jù)的操作。在讀取了相應(yīng)的寄存器的值后,CPU將讀取的值進(jìn)行處理,再通過I/O口把音樂通過揚(yáng)聲器播放出來。
2.2、實(shí)施計劃
表1
2.3原理圖



圖3原理圖 pcb圖 焊接圖
三、設(shè)計方案、方法及技術(shù)路線
3.1系統(tǒng)基本設(shè)計思路
此設(shè)計是用揚(yáng)聲器播放彈奏的曲子。電路包括:鍵盤、單片機(jī)以及單片機(jī)周邊最小系統(tǒng)和晶振電路。
3.2各部分說明
(1)鍵盤用于彈奏音樂,八個按鍵8種音符。
(2)單片機(jī)通過輸出各種電脈沖信號驅(qū)動控制各部分正常工作。
3.3系統(tǒng)工作過程
單片機(jī)要產(chǎn)生音頻脈沖,主要處理過程是在CPU中完成的,CPU會隨時對音符輸入信號進(jìn)行讀取數(shù)據(jù)的操作。在讀取了相應(yīng)的寄存器的值后,CPU將讀取的值進(jìn)行處理,再通過I/O口把音樂通過揚(yáng)聲器播放出來。
3.4單元電路方案論證
根據(jù)設(shè)計要求,本系統(tǒng)主要由控制器模塊和輸入模塊構(gòu)成。為較好的實(shí)現(xiàn)各模塊的功能,我們分別設(shè)計了以下幾種方案并分別進(jìn)行了論證。
3.5控制器模塊
方案1:采用凌陽系列單片機(jī)為系統(tǒng)的控制器
凌陽系列單片機(jī)可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能,模塊大,密度高,它將所有器件集成在一塊芯片上,減少了體積,提高了穩(wěn)定性。凌陽系列單片機(jī)提高了系統(tǒng)的處理速度,適合作為大規(guī)模實(shí)時系統(tǒng)的控制核心。
方案2:采用51系列作為系統(tǒng)控制器
單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活、自由度大,可用軟件編程實(shí)現(xiàn)各種算法和邏輯控制。由于其功耗低、體積較小、技術(shù)成熟和成本低等優(yōu)點(diǎn),在各個領(lǐng)域應(yīng)用廣泛。而且抗干擾性能好。
因51單片機(jī)價格比凌陽系列低得多,且本設(shè)計不需要很高的處理速度,從經(jīng)濟(jì)和方便使用角度考慮,本設(shè)計選擇了方案2。
3.6發(fā)聲模塊
發(fā)聲模塊是本設(shè)計的最主要的部分。
基本方案:發(fā)生電路是這次設(shè)計電路中最重要的組成部分,他承載著把單片機(jī)所產(chǎn)生的聲音信號放大并輸出的重要作用,而我的設(shè)計中的發(fā)聲電路主要是由兩個S8050三極管驅(qū)動組成。S8050三極管是一種小功率的放大管,屬于NPN型號三極管,而對三極管引腳的判斷有以下方法。
1.判斷三極管的基極。對于NPN型號的三極管,用黑表筆接某一個電極,紅表筆分別接另外兩個電極,若測量電阻值兩個都小,調(diào)換表筆后被測電阻值都較大,則可判斷第一次測量中黑表筆所接的是基極;如果測量值一大一小,相差很大,則第一次測量中黑表筆接的不是基極,應(yīng)該更換其他電極重測。
2.測量三極管發(fā)射極e和集電極c。三極管基極確定后,通過交換表筆,兩次測量e,c極間的電阻,如果兩次測量結(jié)果不相等,其中測得電阻值較小的一次為紅表筆的是e極黑表筆接的是c極。對于PNP型號的三極管,方法與NPN的相似,只是紅黑表筆的作用相反,在測量e,c極間電阻時要注意,由于三極管的V(BR)CEO很小,很容易將發(fā)射結(jié)擊穿。
當(dāng)我們?nèi)龢O管的管腳判斷結(jié)束以后,我們就可以用兩個三極管構(gòu)成一個達(dá)林頓結(jié)構(gòu)。首先當(dāng)單片機(jī)P1.0口輸出一個高電平,由兩個三極管構(gòu)成的達(dá)林頓成能導(dǎo)通,導(dǎo)通后又能對電流又一定的放大作用,這樣傳到揚(yáng)聲器時信號能讓我們聽的更清楚。

圖4聲音驅(qū)動電路
3.7編程軟件模塊
方案1:采用匯編語言編程
匯編語言指令是用一些具有相應(yīng)含義的助憶符來表達(dá)的,所以,它要比機(jī)器語言容易掌握和運(yùn)用,但另一方面,它要直接使用CPU的資源,相對高級程序設(shè)計語言來說,它又顯得難掌握。
方案2:采用C語言編程
C語言與其他高級語言相比,具有運(yùn)算符的豐富性、語法表述的靈活性、對軟硬件操作的兼容性、輸入輸出方式的新穎性等主要特征.深入分析研究這些特征,可以加深對C語言的認(rèn)識;正確應(yīng)用這些特征,可以靈活高效地解決各種實(shí)際問題.
因?yàn)槲以诖髮W(xué)期間對匯編語言沒有深入的了解,而且在編程時一直用C語言,所以我選擇了方案2。
3.8最終方案
經(jīng)過反復(fù)論證,最終確定了如下方案:
(1)采用STC89C51單片機(jī)作為主控制器。
(2)采用達(dá)林頓效應(yīng)使音樂信號放大。
(3)采用C語言編程。
STC89C51是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C51為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,512字節(jié)RAM,32位I/O口線,看門狗定時器,內(nèi)置4KBEEPROM,MAX810復(fù)位電路,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。另外STC89X51可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。

圖5STC89C51單片機(jī)引腳圖
單片機(jī)是美國STC公司最新推出的一種新型51內(nèi)核的單片機(jī)。片內(nèi)含有Flash程序存儲器、SRAM、UART、SPI、PWM等模塊。
STC89C51主要功能、性能參數(shù)如下
(1)內(nèi)置標(biāo)準(zhǔn)51內(nèi)核,機(jī)器周期:增強(qiáng)型為6時鐘,普通型為12時鐘;
(2)工作頻率范圍:0~40MHZ,相當(dāng)于普通8051的0~80MHZ;
(3)STC89C51RC對應(yīng)Flash空間:4KB;
(4)內(nèi)部存儲器(RAM):512B;
(5)定時器\計數(shù)器:3個16位;
(6)通用異步通信口(UART)1個;
(7)中斷源:8個;
(8)有ISP(在系統(tǒng)可編程)\IAP(在應(yīng)用可編程),無需專用編程器\仿真器;
(9)通用I\O口:32\36個;
(10)工作電壓:3.8~5.5V;
(11)外形封裝:40腳PDIP、44腳PLCC和PQFP等。
STC89C51單片機(jī)的引腳說明:
VCC:供電電壓。
GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時,P1口作為第八位地址接收。
P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3.0RXD(串行輸入口)
P3.1TXD(串行輸出口)
P3.2/INT0(外部中斷0)
P3.3/INT1(外部中斷1)
P3.4T0(記時器0外部輸入)
P3.5T1(記時器1外部輸入)
P3.6/WR(外部數(shù)據(jù)存儲器寫選通)
P3.7/RD(外部數(shù)據(jù)存儲器讀選通)
P3口同時為閃爍編程和編程校驗(yàn)接收一些控制信號。
I/O口作為輸入口時有兩種工作方式,即所謂的讀端口與讀引腳。讀端口時實(shí)際上并不從外部讀入數(shù)據(jù),而是把端口鎖存器的內(nèi)容讀入到內(nèi)部總線,經(jīng)過某種運(yùn)算或變換后再寫回到端口鎖存器。只有讀端口時才真正地把外部的數(shù)據(jù)讀入到內(nèi)部總線。上面圖中的兩個三角形表示的就是輸入緩沖器CPU將根據(jù)不同的指令分別發(fā)出讀端口或讀引腳信號以完成不同的操作。這是由硬件自動完成的,不需要我們操心,1然后再實(shí)行讀引腳操作,否則就可能讀入出錯,為什么看上面的圖,如果不對端口置1端口鎖存器原來的狀態(tài)有可能為0Q端為0Q^為1加到場效應(yīng)管柵極的信號為1,該場效應(yīng)管就導(dǎo)通對地呈現(xiàn)低阻抗,此時即使引腳上輸入的信號為1,也會因端口的低阻抗而使信號變低使得外加的1信號讀入后不一定是1。若先執(zhí)行置1操作,則可以使場效應(yīng)管截止引腳信號直接加到三態(tài)緩沖器中實(shí)現(xiàn)正確的讀入,由于在輸入操作時還必須附加一個準(zhǔn)備動作,所以這類I/O口被稱為準(zhǔn)雙向口。89C51的P0/P1/P2/P3口作為輸入時都是準(zhǔn)雙向口。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。
ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。
/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
STC89C51單片機(jī)最小系統(tǒng):
最小系統(tǒng)包括單片機(jī)及其所需的必要的電源、時鐘、復(fù)位等部件,能使單片機(jī)始終處于正常的運(yùn)行狀態(tài)。電源、時鐘等電路是使單片機(jī)能運(yùn)行的必備條件,可以將最小系統(tǒng)作為應(yīng)用系統(tǒng)的核心部分,通過對其進(jìn)行存儲器擴(kuò)展、A/D擴(kuò)展等,使單片機(jī)完成較復(fù)雜的功能。
STC89C51是片內(nèi)有ROM/EPROM的單片機(jī),因此,這種芯片構(gòu)成的最小系統(tǒng)簡單﹑可靠。用STC89C52單片機(jī)構(gòu)成最小應(yīng)用系統(tǒng)時,只要將單片機(jī)接上時鐘電路和復(fù)位電路即可,結(jié)構(gòu)如圖2-3所示,由于集成度的限制,最小應(yīng)用系統(tǒng)只能用作一些小型的控制單元。


圖6單片機(jī)最小系統(tǒng)原理框圖
中斷技術(shù)主要用于實(shí)時監(jiān)測與控制,要求單片機(jī)能及時地響應(yīng)中斷請求源提出的服務(wù)請求,并作出快速響應(yīng)、及時處理。這是由片內(nèi)的中斷系統(tǒng)來實(shí)現(xiàn)的。當(dāng)中斷請求源發(fā)出中斷請求時,如果中斷請求被允許,單片機(jī)暫時中止當(dāng)前正在執(zhí)行的主程序,轉(zhuǎn)到中斷服務(wù)處理程序處理中斷服務(wù)請求。中斷服務(wù)處理程序處理完中斷服務(wù)請求后,再回到原來被中止的程序之處(斷點(diǎn)),繼續(xù)執(zhí)行被中斷的主程序。圖6為整個中斷響應(yīng)和處理過程。

圖7中斷響應(yīng)和處理過程
如果單片機(jī)沒有中斷系統(tǒng),單片機(jī)的大量時間可能會浪費(fèi)在查詢是否有服務(wù)請求發(fā)生的定時查詢操作上。采用中斷技術(shù)完全消除了單片機(jī)在查詢方式中的等待現(xiàn)象,大大地提高了單片機(jī)的工作效率和實(shí)時性。
四、電路系統(tǒng)設(shè)計
4.1硬件電路設(shè)計系統(tǒng)總體框圖
本設(shè)計采用STC89C51單片機(jī)作為主控制器,外部加上三極管驅(qū)動放音設(shè)備。系統(tǒng)總體框圖如下:
圖8系統(tǒng)總體框圖
4.2最小系統(tǒng)設(shè)計
最小系統(tǒng)包括單片機(jī)及其所需的必要的電源、時鐘、復(fù)位等部件,能使單片機(jī)始終處于正常的運(yùn)行狀態(tài)。電源、時鐘等電路是使單片機(jī)能運(yùn)行的必備條件,可以將最小系統(tǒng)作為應(yīng)用系統(tǒng)的核心部分,通過對其進(jìn)行存儲器擴(kuò)展、A/D擴(kuò)展等,使單片機(jī)完成較復(fù)雜的功能。
4.3時鐘電路
STC89C51內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,引腳RXD和TXD分別是此放大器的輸入端和輸出端。時鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。內(nèi)部時鐘在此不做詳細(xì)介紹。外部方式的時鐘電路如圖3所示,RXD接地,TXD接外部振蕩器。對外部振蕩信號無特殊要求,只要求保證脈沖寬度,一般采用頻率在12MHz或11.0592MHZ晶振。

圖9 89c51內(nèi)部時鐘電路
4.4復(fù)位電路
當(dāng)在89C51單片機(jī)的RST引腳引入高電平并保持2個機(jī)器周期時,單片機(jī)內(nèi)部就執(zhí)行復(fù)位操作(若該引腳持續(xù)保持高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài))。
復(fù)位電路通常采用上電自動復(fù)位和按鈕復(fù)位兩種方式。
最簡單的上電自動復(fù)位電路中上電自動復(fù)位是通過外部復(fù)位電路的電容充放電來實(shí)現(xiàn)的。只要Vcc的上升時間不超過1ms,就可以實(shí)現(xiàn)自動上電復(fù)位。
除了上電復(fù)位外,有時還需要按鍵手動復(fù)位。本設(shè)計就是用的按鍵手動復(fù)位。按鍵手動復(fù)位有電平方式和脈沖方式兩種。其中電平復(fù)位是通過RST(9)端與電源Vcc接通而實(shí)現(xiàn)的。按鍵手動復(fù)位電路見圖4。時鐘頻率用11.0592MHZ時C取10uF,R取10kΩ。

圖10 89C51復(fù)位電路
4.5按鍵控制模塊
電子琴設(shè)有8個按鍵,8個按鍵分別代表8個音符,包括中音段的全部音符,通過軟硬件設(shè)計。
如下圖:

圖11按鍵模塊