




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目 錄1 引言21.1 目的和意義21.2 本系統主要研究內容22. 總體方案論證與設計32.1主控模塊32.1.3 STC89C52單片機的中斷系統62.1.4 STC89C52單片機的定時/計數器62.2數碼管模塊設計62.2.1 數碼管原理介紹62.2.1 數碼管電路設計72.3鍵盤模塊設計8矩陣鍵盤原理介紹8矩陣鍵盤電路設計82.4功率放大模塊設計9內部原理92.4.2 LM386使用注意事項103.系統軟件設計113.1系統軟件總體設計113.2定時器產生音樂信號原理114.系統調試134.1硬件調試134.2軟件調試134.3調試結果135.結論15附錄17系統整體原理圖17系統P
2、CB設計圖17系統源程序18基于單片機的電子琴摘要:隨著社會的發展進步,音樂逐漸成為我們生活中很重要的一部分,有人曾說喜歡音樂的人不會向惡。我們都會抽空欣賞世界名曲,作為對精神的洗禮。本論文設計一個基于單片機的簡易電子琴。電子琴是現代電子科技與音樂結合的產物,是一種新型的鍵盤樂器。它在現代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現特性,它已經溶入現代人們的生活中,成為不可替代的一部分。本系統是以51系列單片機STC89C52為主控制器,附有矩陣鍵盤、LED顯示管、揚聲器組成。系統完成顯示輸入信息、播放相應音符等基本功能。本系統運行穩定,其優點是硬件電路簡單,軟件功能完善,控
3、制系統可靠,性價比較高等,具有一定的實用和參考價值。關鍵詞:STC89C52,矩陣鍵盤,LED顯示管,揚聲器。1 引言1.1 目的和意義單片微型計算機是大規模集成電路技術發展的產物,屬第四代電子計算機,它具有高性能、高速度、體積小、價格低廉、穩定可靠、應用廣泛的特點。它的應用必定導致傳統的控制技術從根本上發生變革。因此,單片機的開發應用已成為高科技和工程領域的一項重大課題。 電子琴是現代電子科技與音樂結合的產物,是一種新型的鍵盤樂器。它在現代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現特性,它已經溶入現代人們的生活中,成為不可替代的一部分。本文的主要內容是用STC89C52單
4、片機為核心控制元件,設計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器等模塊組成核心主控制模塊,在主控模塊上設有16個按鍵和揚聲器。 本文主要對使用單片機設計簡易電子琴進行了分析,并介紹了基于單片機電子琴統硬件組成。利用單片機產生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調試來詳細闡述。本系統是簡易電子琴的設計,按下鍵盤矩陣中的按鍵會使數碼管顯示當前按鍵,揚聲器播放器對應的音符。通過設計本系統可了解單片機的基本功能。對單片機的了解有一個小的飛躍。1.2 本系統主要研究內容本系統設計制作一個可演奏的電子琴。綜合應用了兩
5、項設計。(1)鍵盤矩陣識別。即矩陣掃描,顯示當前按鍵。(2)不同頻率音符播放。可以通過按鍵控制15種發音。(3)設有一個按鍵,按下后可以播放預設的歌曲。2. 總體方案論證與設計本系統以STC89C52單片機為控制核心,對系統進行初始化,主要完成對鍵盤的響應、數碼管顯示等功能的控制,起到總控和協調各模塊之間工作的作用。單片機通過檢測鍵盤輸出對應頻率的方波,后級通過LM386對功率進行擴大從而驅動揚聲器發響。圖2-1系統結構框圖本系統結構如圖2-1所示,本設計可分為以下模塊:單片機主控模塊、鍵盤模塊、功率放大模塊、鬧鈴模塊、按鍵設置模塊。下面對各個模塊的設計方案逐一進行論證分析。2.1主控模塊ST
6、C89C52單片機最初是由Intel 公司開發設計的,但后來Intel 公司把51 核的設計方案賣給了幾家大的電子設計生產商,譬如 SST、Philip、Atmel 等大公司。如是市面上出現了各式各樣的但均以51 為內核的單片機,倒是Intel 公司自己的單片機卻顯得遜色了。這些各大電子生產商推出的單片機都兼容51 指令、并在51 的基礎上擴展一些功能而內部結構是與51 一致的。STC89C52有40個引腳,4個8位并行I/O口,1個全雙工異步串行口,同時內含5個中斷源,2個優先級,2個16位定時/計數器。STC89C52的存儲器系統由4K的程序存儲器(掩膜ROM),和128B的數據存儲器(R
7、AM)組成。STC89C52單片機的基本組成框圖見圖2-2。圖2-2 STC89C52單片機結 STC89C52單片機主要特性1. 一個8 位的微處理器(CPU)。2. 片內數據存儲器RAM(128B),用以存放可以讀寫的數據,如運算的中間結果、最終結果以及欲顯示的數據等,SST89 系列單片機最多提供1K 的RAM。3. 片內程序存儲器ROM(4KB),用以存放程序、一些原始數據和表格。但也有一些單片機內部不帶ROM/EPROM,如8031,8032,80C31 等。目前單片機的發展趨勢是將RAM 和ROM 都集成在單片機里面,這樣既方便了用戶進行設計又提高了系統的抗干擾性。SST 公司推出
8、的89 系列單片機分別集成了16K、32K、64K Flash 存儲器,可供用戶根據需要選用。4. 四個8 位并行IO 接口P0P3,每個口既可以用作輸入,也可以用作輸出。5. 兩個定時器計數器,每個定時器計數器都可以設置成計數方式,用以對外部事件進行計數,也可以設置成定時方式,并可以根據計數或定時的結果實現計算機控制。為方便設計串行通信,目前的52 系列單片機都會提供3 個16 位定時器/計數器。6. 五個中斷源的中斷控制系統。現在新推出的單片機都不只5 個中斷源,例如SST89E58RD 就有9 個中斷源。7. 一個全雙工UART(通用異步接收發送器)的串行IO 口,用于實現單片機之間或單
9、機與微機之間的串行通信。8. 片內振蕩器和時鐘產生電路,但石英晶體和微調電容需要外接。最高允許振蕩頻率為12MHz。SST89V58RD 最高允許振蕩頻率達40MHz,因而大大的提高了指令的執行速度。2.1.2 STC89C52單片機管腳圖圖2-3 89S52單片機管腳圖部分引腳說明:1. 時鐘電路引腳XTAL1 和XTAL2:XTAL2(18 腳):接外部晶體和微調電容的一端;在8051 片內它是振蕩電路反相放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時鐘電路時,該引腳輸入外部時鐘脈沖。要檢查8051/8031 的振蕩電路是否正常工作,可用示波器查看XTAL2 端是否有脈沖信
10、號輸出。XTAL1(19 腳):接外部晶體和微調電容的另一端;在片內它是振蕩電路反相放大器的輸入端。在采用外部時鐘時,該引腳必須接地。2. 控制信號引腳RST,ALE,PSEN 和EA:RST/VPD(9 腳):RST 是復位信號輸入端,高電平有效。當此輸入端保持備用電源的輸入端。當主電源Vcc 發生故障,降低到低電平規定值時,將5V 電源自動兩個機器周期(24個時鐘振蕩周期)的高電平時,就可以完成復位操作。RST 引腳的第二功能是VPD,即接入RST 端,為RAM 提供備用電源,以保證存儲在RAM 中的信息不丟失,從而合復位后能繼續正常運行。ALE/PROG(30 腳):地址鎖存允許信號端。
11、當8051 上電正常工作后,ALE 引腳不斷向外輸出正脈沖信號,此頻率為振蕩器頻率fOSC 的1/6。CPU 訪問片外存儲器時,ALE 輸出信號作為鎖存低8 位地址的控制信號。平時不訪問片外存儲器時,ALE 端也以振蕩頻率的1/6 固定輸出正脈沖,因而ALE 信號可以用作對外輸出時鐘或定時信號。如果想確定8051/8031 芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出。如有脈沖信號輸出,則8051/8031 基本上是好的。ALE 端的負載驅動能力為8 個LS 型TTL(低功耗甚高速TTL)負載。此引腳的第二功能PROG 在對片內帶有4KB EPROM 的8751 編程寫入(固化程序)時
12、,作為編程脈沖輸入端。PSEN(29 腳):程序存儲允許輸出信號端。在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引肢接EPROM 的OE 端(見后面幾章任何一個小系統硬件圖)。PSEN 端有效,即允許讀出EPROMROM 中的指令碼。PSEN 端同樣可驅動8 個LS 型TTL 負載。要檢查一個8051/8031 小系統上電后CPU 能否正常到EPROMROM 中讀取指令碼,也可用示波器看PSEN 端有無脈沖輸出。如有則說明基本上工作正常。EA/Vpp(31 腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。當EA 引腳接高電平時,CPU只訪問片內EPROM/R
13、OM并執行內部程序存儲器中的指令,但當PC(程序計數器)的值超過0FFFH(對8751/8051 為4K)時,將自動轉去執行片外程序存儲器內的程序。當輸入信號EA 引腳接低電平(接地)時,CPU 只訪問外部EPROM/ROM 并執行外部程序存儲器中的指令,而不管是否有片內程序存儲器。對于無片內ROM 的8031 或8032,需外擴EPROM,此時必須將EA 引腳接地。此引腳的第二功能是Vpp 是對8751 片內EPROM固化編程時,作為施加較高編程電壓(一般12V21V)的輸入端。3. 輸入/輸出端口P0/P1/P2/P3:P0口(P0.0P0.7,3932 腳):P0口是一個漏極開路的8 位
14、準雙向I/O口。作為漏極開路的輸出端口,每位能驅動8 個LS 型TTL 負載。當P0 口作為輸入口使用時,應先向口鎖存器(地址80H)寫入全1,此時P0 口的全部引腳浮空,可作為高阻抗輸入。作輸入口使用時要先寫1,這就是準雙向口的含義。在CPU 訪問片外存儲器時,P0口分時提供低8 位地址和8 位數據的復用總線。在此期間,P0口內部上拉電阻有效。P1口(P1.0P1.7,18 腳):P1口是一個帶內部上拉電阻的8 位準雙向I/O口。P1口每位能驅動4 個LS 型TTL 負載。在P1口作為輸入口使用時,應先向P1口鎖存地址(90H)寫入全1,此時P1口引腳由內部上拉電阻拉成高電平。P2口(P2.
15、0P2.7,2128 腳):P2口是一個帶內部上拉電阻的8 位準雙向I/O口。P口每位能驅動4個LS 型TTL 負載。在訪問片外EPROM/RAM 時,它輸出高8 位地址。P3口(P3.0P3.7,1017 腳):P3口是一個帶內部上拉電阻的8 位準雙向I/O口。P3口每位能驅動4個LS型TTL負載。P3口與其它I/O 端口有很大的區別,它的每個引腳都有第二功能,如下:P3.0:(RXD)串行數據接收。P3.1:(RXD)串行數據發送。P3.2:(INT0#)外部中斷0輸入。P3.3:(INT1#)外部中斷1輸入。P3.4:(T0)定時/計數器0的外部計數輸入。P3.5:(T1)定時/計數器1
16、的外部計數輸入。P3.6:(WR#)外部數據存儲器寫選通。P3.7:(RD#)外部數據存儲器讀選通。2.1.3 STC89C52單片機的中斷系統STC89C52系列單片機的中斷系統有5個中斷源,2個優先級,可以實現二級中斷服務嵌套。由片內特殊功能寄存器中的中斷允許寄存器IE控制CPU是否響應中斷請求;由中斷優先級寄存器IP安排各中斷源的優先級;同一優先級內各中斷同時提出中斷請求時,由內部的查詢邏輯確定其響應次序。2.1.4 STC89C52單片機的定時/計數器在單片機應用系統中,常常會有定時控制需求,如定時輸出、定時檢測、定時掃描等;也經常要對外部事件進行計數。89C52單片機內集成有兩個可編
17、程的定時/計數器:T0和T1,它們既可以工作于定時模式,也可以工作于外部事件計數模式,此外,T1還可以作為串行口的波特率發生器。2.2數碼管模塊設計2.2.1 數碼管原理介紹數碼管按段數分為七段數碼管和八段數碼管,八段數碼管比七段數碼管多一個發光二極管單元(多一個小數點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數碼管;按發光二極管單元連接方式分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極(COM)的數碼管,共陽數碼管在應用時應將公共極COM接到+5V,當某一字段發光二極管的陰極為低電平時,相應字段就點亮,當某一字段的陰極為高電平時,相應字段
18、就不亮。共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極(COM)的數碼管,共陰數碼管在應用時應將公共極COM接到地線GND上,當某一字段發光二極管的陽極為高電平時,相應字段就點亮,當某一字段的陽極為低電平時,相應字段就不亮。數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出我們要的數字,因此根據數碼管的驅動方式的不同,可以分為靜態式和動態式兩類。靜態驅動也稱直流驅動。靜態驅動是指每個數碼管的每一個段碼都由一個單片機的I/O端口進行驅動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅動。靜態驅動的優點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅動5個數碼管靜態顯示
19、則需要5×8=40根I/O端口來驅動,要知道一個89S51單片機可用的I/O端口才32個呢:),實際應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。數碼管動態顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態驅動是將所有數碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數碼管的選通控制打開,該位就顯
20、示出字形,沒有選通的數碼管就不會亮。通過分時輪流控制各個數碼管的的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。在輪流顯示過程中,每位數碼管的點亮時間為12ms,由于人的視覺暫留現象及發光二極管的余輝效應,盡管實際上各位數碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感,動態顯示的效果和靜態顯示是一樣的,能夠節省大量的I/O端口,而且功耗更低。圖2-4 數碼管內部結構圖2.2.1 數碼管電路設計如下圖所示為一位共陽數碼管的硬件電路連接圖,由于數碼管內部實際為8個LED燈,如果把LED的陰級直接單片機的IO的口,會使LED通過的電流過大從而把數碼管
21、燒毀,因此在設計的時候在LED的陰級和單片機的IO之間加上了限流電阻從而起到限流作用。根據經驗,這里選取了1K電阻。程序編寫的時候我們預先根據要顯示的字符,編寫了個對應要顯示的數組,這樣可以使程序更加簡化。圖2-5共陽數碼管硬件電路連接圖 2.3鍵盤模塊設計2.3.1矩陣鍵盤原理介紹矩陣式鍵盤模式以N個端口連接控制N*N個按鍵,實時在LED數碼管上顯示按鍵信息。顯示按鍵信息,省下了很多的I/O端口為他用,相反,獨立式按鍵雖編程簡單,但占用I/O口資源較多,不適合在按鍵較多的場合應用。并且在實際應用中經常要用到輸入數字、字母、符號等操作功能,如電子密碼鎖、電話機鍵盤、計算器按鍵等,至少都需要12
22、到16個按鍵。矩陣式鍵盤簡介:矩陣式鍵盤又稱行列鍵盤,它是用N條I/O線作為行線,N條I/O線作為列線組成的鍵盤。在行線和列線的每個交叉點上設置一個按鍵。這樣鍵盤上按鍵的個數就為N*N個。這種行列式鍵盤結構能有效地提高單片機系統中I/O口的利用率。最常見的鍵盤布局如圖1所示。一般由16個按鍵組成,在單片機中正好可以用一個P口實現16個按鍵功能,這也是在單片機系統中最常用的形式,本設計就采用這個鍵盤模式。圖2-6鍵盤布局 矩陣式鍵盤提高效率進行按鍵操作管理有效方法,它可以提高系統準確性,有利于資源的節約,降低對操作者本身素質的要求。2.3.2矩陣鍵盤電路設計圖2-7矩陣鍵盤電路圖硬件電路設計圖如
23、上圖所示。把單片機的P2.0P2.7端口通過8聯撥動撥碼開關連接到“4*4行列式鍵盤”,其中P2.0-P2.3作為列線,P2.4-P2.7作為行線,系統首先通過CPU對全部鍵盤進行掃描,即把第一根行線置為“0”狀態,其余行線置于“1”狀態,讀入輸入緩沖器的狀態,若其狀態全為“1”表明該行無鍵按下,再將第二根行線置為“0”狀態,同樣讀入輸入緩沖器的狀態,如其狀態也全為“1”,則置第一根行線置為“0”狀態,以此類推5。如讀入輸入緩沖器的狀態不全為“1”,確定哪一根列線為“0”狀態,當某個鍵的行線和列線都為“0”狀態時,表明該鍵按下。2.4功率放大模塊設計功率放大模塊我們選用了LM386作為功率放大
24、模塊的主要芯片,LM386是美國國家半導體公司生產的音頻功率放大器,主要應用于低電壓消費類產品。為使外圍元件最少,電壓增益內置為20。但在1腳和8腳之間增加一只外接電阻和電容,便可將電壓增益調為任意值,直至 200。輸入端以地位參考,同時輸出端被自動偏置到電源電壓的一半,在6V電源電壓下,它的靜態功耗僅為24mW,使得LM386特別適用于電池供電的場合。2.4.1LM386內部原理圖2-8 LM386內部結構圖LM386內部電路原理圖如圖所示。與通用型集成運放相類似,它是一個三級放大電路。第一級為差分放大電路,T1和T3、T2和T4分別構成復合管,作為差分放大電路的放大管;T5和T6組成鏡像電
25、流源作為T1和T2的有源負載;T3和T4信號從管的基極輸入,從T2管的集電極輸出,為雙端輸入單端輸出差分電路。使用鏡像電流源作為差分放大電路有源負載,可使單端輸出電路的增益近似等于雙端輸出電容的增益。第二級為共射放大電路,T7為放大管,恒流源作有源負載,以增大放大倍數。第三級中的T8和T9管復合成PNP型管,與NPN型管T10構成準互補輸出級。二極管D1和D2為輸出級提供合適的偏置電壓,可以消除交越失真。引腳2為反相輸入端,引腳3為同相輸入端。電路由單電源供電,故為OTL電路。輸出端(引腳5)應外接輸出電容后再接負載。電阻R7從輸出端連接到T2的發射極,形成反饋通路,并與R5和R6構成反饋網絡
26、,從而引入了深度電壓串聯負反饋,使整個電路具有穩定的電壓增益。圖2-9 LM386管腳圖LM386的外形和引腳的排列如上圖所示。引腳2為反相輸入端,3為同相輸入端;引腳5為輸出端;引腳6和4分別為電源和地;引腳1和8為電壓增益設定端;使用時在引腳7和地之間接旁路電容,通常取10F。查LM386的datasheet,電源電壓4-12V或5-18V(LM386N-4);靜態消耗電流為4mA;電壓增益為20-200;在1、8腳開路時,帶寬為300KHz;輸入阻抗為50K;音頻功率0.5W。2.4.2 LM386使用注意事項盡管LM386的應用非常簡單,但稍不注意,特別是器件上電、斷電瞬間,甚至工作穩
27、定后,一些操作(如插拔音頻插頭、旋音量調節鈕)都會帶來的瞬態沖擊,在輸出喇叭上會產生非常討厭的噪聲。(1)通過接在1腳、8腳間的電容(1腳接電容+極)來改變增益,斷開時增益為20。因此用不到大的增益,電容就不要接了,不光省了成本,還會帶來好處-噪音減少,何樂而不為?(2)PCB設計時,所有外圍元件盡可能靠近LM386;地線盡可能粗一些;輸入音頻信號通路盡可能平行走線,輸出亦如此。這是死理,不用多說了吧。(3)好調節音量的電位器。質量太差的不要,否則受害的是耳朵;阻值不要太大,10K最合適,太大也會影響音質,轉那么多圈圈,不煩那!(4)可能采用雙音頻輸入/輸出。好處是:“+”、“”輸出端可以很好
28、地抵消共模信號,故能有效抑制共模噪聲。(5)7腳(BYPASS)的旁路電容不可少!實際應用時,BYPASS端必須外接一個電解電容到地,起濾除噪聲的作用。工作穩定后,該管腳電壓值約等于電源電壓的一半。增大這個電容的容值,減緩直流基準電壓的上升、下降速度,有效抑制噪聲。在器件上電、掉電時的噪聲就是由該偏置電壓的瞬間跳變所致,這個電容可千萬別省啊!(6)少輸出耦合電容。此電容的作用有二:隔直+耦合。隔斷直流電壓,直流電壓過大有可能會損壞喇叭線圈;耦合音頻的交流信號。它與揚聲器負載構成了一階高通濾波器。減小該電容值,可使噪聲能量沖擊的幅度變小、寬度變窄;太低還會使截止頻率(fc=1/(2*RL*Cou
29、t))提高。分別測試,發現10uF/4.7uF最為合適,這是我的經驗值。(7)源的處理,也很關鍵。如果系統中有多組電源,太好了!由于電壓不同、負載不同以及并聯的去耦電容不同,每組電源的上升、下降時間必有差異。非常可行的方法:將上電、掉電時間短的電源放到+12V處,選擇上升相對較慢的電源作為LM386的Vs,但不要低于4V,效果確實非常不錯!3.系統軟件設計3.1系統軟件總體設計圖3-1系統流程圖3.2定時器產生音樂信號原理一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產生不同的頻率非常方便,我們可以利
30、用單片機的定時/計數器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系正確即可。利用AT89C51的內部定時器使其工作計數器模式(MODE1)下,改變計數值TH0及TL0以產生不同頻率的方法產生不同音階,例如,頻率為523Hz,其周期T1/5231912s,因此只要令計數器計時956s/1s956,每計數956次時將I/O反相,就可得到中音DO(523Hz)。 計數脈沖值與頻率的關系式(如式2-1所示)是:
31、 Nfi÷2÷fr 2-1式中,N是計數值;fi是機器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產生的頻率。其計數初
32、值T的求法如下: T65536N65536fi÷2÷fr 例如:設K65536,fi1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計數值。 T65536N65536fi÷2÷
33、;fr655361000000÷2÷fr65536500000/fr 低音DO的T65536500000/26263627 中音DO的T65536500000/52364580 高音DO的T65536500000/1046650594.系統調試4.1硬件調試電子琴的電路系統較大,對于焊接方面更是不可輕視,龐大的電路系統中只要出于一處的錯誤,則會對檢測造成很大的不便,而且電路的交線較多,對于各種鋒利的引腳要注意處理,否則會刺破帶有包皮的導線,則會對電路造成短路現象。在本
34、電子琴的設計調試中遇到了很多的問題。回想這些問題只要認真多思考都是可以避免的,以下為主要的問題:(1)數碼管選用的時候沒有注意采用的是共陰還是共陽,導致調試的時候數碼管一直不能顯示。解決:把共陰數碼管換成數碼管。(2)最開始的時候以為單片機IO口直接可以驅動喇叭發聲,后來調試的時候久久不能出聲音。解決:經過查找相關資料,知道揚聲器需要功率放大器來驅動,后來把功率放大器加上系統便可以正常工作。4.2軟件調試電子琴是多功能的數字型,可以根據用戶按下的按鍵發出對應頻率的聲音。電子琴功能很多,所以對于它的程序也較為復雜,所以在編寫程序和調試時出現了相對較多的問題。最后經過多次的模塊子程序的修改,一步一
35、步的完成,最終解決了軟件。在軟件的調試過程中主要遇到的問題如下:1燒入程序后,LED數碼管顯示閃動,而且亮度不均勻。解決:首先對調用的延時進行逐漸修改,可以解決顯示閃動問題。其次,由于本作品使作動態掃描方式顯示的數字,動態掃描很快,人的肉眼是無法看出,但是調用的顯示程序時,如果不在反回時屏蔽掉最后的附值,則會出現很亮的現象,所以在顯示的后面加了屏蔽子令,最后解決了此問題。2當用戶按下按鍵的時候,定時器設置的頻率跟設計的不對應。解決:由于定時器中,有大量需要處理的語句使設置定時器的頻率不準,為了解決這個問題,我把不太相關的語句放大定時器外部使用。4.3調試結果(1)在測試中遇到LED數碼管為不顯
36、示時,首先使用試測儀對電路進行測試,觀察是否存在漏焊,虛焊,或者元件損壞.(2)LED 數碼管顯示不正常,還有亮度不夠,首先使用試測儀對電路進行測試,觀察電路是否存在短路現象。查看燒寫的程序是否正確無誤,對程序進行認真修改。經過一系列的問題查找后系統最終能正常工作,并完成所有的功能。以下為系統仿真圖: 圖4-1系統仿真圖5.結論通過這次畢業設計,我學到了不少課本上沒有的知識,也鍛煉了自己的動手能力,將以前學過的零散的知識串到一起。經過我長時間的設計及調試,本系統基本能實現按下鍵盤矩陣中的按鍵會使數碼管顯示當前按鍵,揚聲器播放對應的音符。但由于仿真系統原因,本設計音頻效果不是很好。不足之處有:1
37、.可彈奏的音符數較少,只能在一定范圍內滿足用戶需要。可通過改進鍵盤識別模塊和發生模塊來增加其復雜度2.音量不可調。我的綜合設計主要涉及硬件和軟件兩方面的內容,通過這些我的硬件和軟件開發能力都獲得了提高。首先硬件方面,基本了解了電子產品的開發流程和所要做的工作。基本掌握了Protel99SE原理圖的方法,并設計了一個單片機最小系統。通過開發板的設計和硬件搭建的過程,使我對51系單片機的接口有了更深層次的理解,熟悉了一些單片機常用的外圍電路引腳和連接方法,如LED數碼管,鍵盤等。并且我學會了分析問題解決問題的能力,加深了對所學理論知識的理解和運用。我的動手能力得到了很大的提高,創新意識得到了鍛煉。
38、參考文獻1 彭偉.單片機C語言程序設計實訓100例.電子工業出版社.2009年2 吳運昌模擬電子線路基礎廣州:華南理工大學出版社,2004年3 閻石數字電子技術基礎北京:高等教育出版社,1997年4 張曉麗等數據結構與算法北京:機械工業出版社,2002年5 馬忠梅等 ARM&Linux嵌入式系統教程北京:北京航空航天大學出版社,2004年6 李建忠單片機原理及應用西安:西安電子科技大學,2002年7 韓志軍等.單片機應用系統設計M.機械工業出版社,20048 周潤景等. Proteus在MCS-51&ARM7系統中的應用百例M.電子工業出版社,20069 馬忠梅等.單片機的C語
39、言應用程序設計M.北京航空航天大學出版社,200610 劉樹中,孫書膺,王春平.單片機和液晶顯示驅動器串行接口的實現J.微計算機信息,2007附錄系統整體原理圖系統PCB設計圖系統源程序#include <reg52.h>#include <intrins.h>/本程序是電子琴的程序,能夠實現單獨演奏和放一首歌曲的功能。其中,按鍵115是用于單獨演奏的,按鍵16是用于播放歌曲的/播放歌曲的時候需要按復位鍵才能夠停止。/共陰極數碼管段碼表,最后一字節為黑屏unsigned char code DSY_CODE=0x28,0xee,0x34,0xa4,0xe2,0xa1,0
40、x21,0xec,0x20,0xa0,0x60,0x23,0x39,0x26,0x31,0x71,0xbf;/各音符對應的延時表unsigned int code tone_delay_table=64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178;/蜂鳴器的位定義sbit beep=P30;#define SOUND_SPACE 4/5 /定義普通音符演奏的長度分率,/每4分音符間隔/同一首歌 的譜子unsigned char code Music= 0
41、x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02, 0x1B
42、,0x02, 0x1B,0x70, 0x1A,0x03, 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C, 0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x
43、66, 0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03, 0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02,
44、 0x15,0x03, 0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C, 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00, 0x00,0x00 ;unsigned int code FreTab12 = 262,27
45、7,294,311,330,349,369,392,415,440,466,494 ; /原始頻率表unsigned char code SignTab7 = 0,2,4,5,7,9,11 ; /17在頻率表中的位置unsigned char code LengthTab7= 1,2,4,8,16,32,64 ;unsigned char Sound_Temp_TH0,Sound_Temp_TL0;/音符定時器初值暫存 unsigned char Sound_Temp_TH1,Sound_Temp_TL1;/音長定時器初值暫存void delay_1ms(unsigned int ms) un
46、signed char i; while(ms-) for(i=0;i<120;i+); /延時1ms/播放音樂的子函數void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)unsigned int NewFreTab12;/新的頻率表unsigned char i,j; /定義一些中間變量unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;unsigne
47、d char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i<12;i+) / 根據調號及升降八度來生成新的頻率表 j = i + Signature;if(j > 11)j = j-12;NewFreTabi = FreTabj*2;/計算新的頻率elseNewFreTabi = FreTabj;if(Octachord = 1)NewFreTabi>>=2;else if(Octachord = 3)NewFreTabi<<=2;SoundLength = 0;while(SoundSoundLength != 0x0
48、0)/計算歌曲長度SoundLength+=2;Point = 0;Tone = SoundPoint;Length = SoundPoint+1; / 讀出第一個音符和它時時值LDiv0 = 12000/Speed;/ 算出1分音符的長度(幾個10ms) LDiv4 = LDiv0/4; / 算出4分音符的長度 LDiv4 = LDiv4-LDiv4*SOUND_SPACE; / 普通音最長間隔標準 TR0 = 0;TR1 = 1;while(Point < SoundLength)SL=Tone%10; /計算出音符 SM=Tone/10%10; /計算出高低音 SH=Tone/10
49、0; /計算出是否升半 CurrentFre = NewFreTabSignTabSL-1+SH; /查出對應音符的頻率 if(SL!=0)if (SM=1) CurrentFre >>= 2; /低音 if (SM=3) CurrentFre <<= 2; /高音Temp_T = 65536-(50000/CurrentFre)*10;/計算計數器初值Sound_Temp_TH0 = Temp_T/256; Sound_Temp_TL0 = Temp_T%256; TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0 + 12; /加12是對中斷延時的補償 SLen=LengthTabLength%10; /算出是幾分音符XG=Length/10%10; /算出音符類型(0普通1連音2頓音) FD=Length/100;LDiv=LDiv0/SLen; /算出連音音符演奏的長度(多少個10ms)if (FD=1) LDiv=LDi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025河南省農村土地經營權流轉合同
- 2025年探討物業租賃合同發展趨勢
- 2025機械制造外包合同書
- 2025年深入探討我國合同解除制度相關問題
- 2025【機械設備購銷合同】機械設備購銷合同范本
- 2025年碲鎘汞(MCT)紅外探測器項目發展計劃
- 2025年會議電視圖像保密機項目合作計劃書
- 2025年碾磨谷物及谷物加工品合作協議書
- 2025年溫控儀表項目建議書
- 2025年城市規劃與設計專業考試試題及答案
- DB12-537-2014企業事業單位內部治安保衛規范
- 胃腸外科考試試題及答案
- 1立方米砼模板含量表
- 紫藤蘿瀑布的說課稿
- 部編教材八年級歷史上冊第四單元第13課《五四運動》教學設計
- 無菌GMP 操作指南:無菌醫療器械生產過程確認
- 海因環氧樹脂的制備及其應用
- 羅甸縣從里水庫管道輸水工程施工方案
- UWI海威清創機使用說明書
- 《一元一次不等式與一次函數》第課時示范教案
- 刮板式花生脫殼機設計
評論
0/150
提交評論