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

圖1

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



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

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

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


圖6單片機最小系統原理框圖
中斷技術主要用于實時監測與控制,要求單片機能及時地響應中斷請求源提出的服務請求,并作出快速響應、及時處理。這是由片內的中斷系統來實現的。當中斷請求源發出中斷請求時,如果中斷請求被允許,單片機暫時中止當前正在執行的主程序,轉到中斷服務處理程序處理中斷服務請求。中斷服務處理程序處理完中斷服務請求后,再回到原來被中止的程序之處(斷點),繼續執行被中斷的主程序。圖6為整個中斷響應和處理過程。

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

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

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

圖11按鍵模塊