找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7072|回復: 0
收起左側(cè)

基于51單片機的電子琴(高級版)設計詳細資料

[復制鏈接]
ID:610753 發(fā)表于 2019-12-12 22:15 | 顯示全部樓層 |閱讀模式
基于51單片機的電子琴(升級版)設計

作者:林宏偉     時間:2019/12/12

單片機應用與科技制作
1 任務
本課題主要是設計一個基于51單片機的開發(fā)系統(tǒng)平臺,開發(fā)平臺需包括的基礎硬件有:12864液晶顯示器、8位發(fā)光二極管指示器、TLC5616模塊、ADC0832數(shù)模轉(zhuǎn)換、蜂鳴器電路、DS18B20溫度傳感器電路、4*4矩陣電路和DS1302時鐘模塊。然后根據(jù)51單片機開發(fā)平臺自行設計一個基于51單片機電子琴設計。

首先,看一下實物圖:


51hei圖片_20191126210326.jpg

1.1 設計單片機開發(fā)硬件平臺

單片機硬件開發(fā)平臺的框圖如圖1-1所示,基礎硬件有:蜂鳴器、LED、LCD12864、TLC5615、ADC0832、DS18B20、DS1302、4*4矩陣按鍵和USB-TTL。
51hei圖片_20191126205342.jpg

USB-TTL用于下載程序和給主控供電;蜂鳴器、8位LED和LCD12864是作為開發(fā)板的指示部分,其中,蜂鳴器可提供聲音警報,LED燈提供光顯示,LCD12864顯示器可提供直觀的顯示;4*4矩陣鍵盤作為系統(tǒng)與人交互的設備;檢測模塊有:DS1302時鐘檢測模塊、DS18B20溫度檢測模塊、ADC0832數(shù)模轉(zhuǎn)換模塊以及TLC5615模數(shù)轉(zhuǎn)換模塊。
1.2 基于51單片機的電子琴設計
課題要求在單片機開發(fā)系統(tǒng)基礎上進行功能擴展,根據(jù)學號尾數(shù)選擇擴展的功能。故需要擴展功能如表1-2所示。基礎要求有:高低音的選擇功能、手動演奏功能、自動演奏功能和完美的圖形界面設計。

1-2 擴展功能基本要求

擴展功能項目
基礎要求
備注
基于51單片機的電子琴
1. 高低音選擇
2. 手動演奏
3. 自動演奏
4. 圖形界面設計
學號尾數(shù)5

2 單片機硬件電路設計2.1單片機原理圖設計
單片機原理圖如圖2-1所示,對電路進行了簡化,將LCD12864模塊通信方式由并行改成串行,將獨立按鍵和矩陣按鍵進行了整合,利用短接帽實現(xiàn)獨立按鍵和矩陣按鍵的切換。電路遵循模塊化原則,設計上盡量精簡,方便后期調(diào)試。(注:ADC0832光敏那里要串聯(lián)一個上拉電阻才行)
51hei圖片_20191126210248.jpg

2-1 原理圖設計







2.1.1 LCD12864接口電路




12864中文漢字圖形點陣液晶顯示模塊,可顯示漢字及圖形,內(nèi)置 8192 個中文漢字(16X16 點陣)、128個字符(8X16 點陣)及 64X256 點陣顯示RAM。參考LCD12864的使用手冊,常用的電路的并行接口,雖然并行傳輸數(shù)據(jù)比較快,但是在這個電路上明顯不適用,為了簡化電路,我修改了顯示器的硬件電路后,改成了串行傳輸模式。電路接口如圖2-1-1所示。從圖上知道,現(xiàn)在本來需要接近20個接口的顯示器變成了只需要5個接口的。大大簡化了電路。
51hei截圖_20191130104105.png

2-3 LCD12864接口修改

硬件說明:液晶通信方式有二種選擇,并口或串口方式。如果需要串口通信時需把產(chǎn)品PCB后面的S點短接才能正常運行。P點為并口通信,使用并口通信時可短接P點也可不短接,短接時抗干擾效果更加; 液晶自帶10K電位器可調(diào)電阻( VR1)位置處,不需再加外圍電位器,如需要接外圍可調(diào)的需要把PCB板上的JP1與JP2短接方可進行外圍可調(diào)電阻。根據(jù)LCD12864液晶顯示屏的使用手冊,作出具體修改如圖2-1-2所示。首先,將顯示器的背光電源A+和K-直接短接顯示器的供電電源,然后短接JP2接口的S,通過硬件修改串行方式。
51hei圖片_20191126210308.jpg

2-4 LCD12864硬件修改

2.1.2 獨立按鍵和矩陣按鍵電路如果把獨立按鍵接口和矩陣按鍵接口分開的話,明顯會增加電路設計上的復雜性,所以我將獨立按鍵和矩陣按鍵進行了整合,通過一個短接帽即可實現(xiàn)獨立按鍵功能和矩陣按鍵功能的切換。未接短接帽的時候,按鍵電路是矩陣按鍵模式,采用行列式掃描方式;接上短接帽是把P2.4引腳接地從而讓K1、K5、K9、K13各端接地變成獨立按鍵。具體如圖2-5所示。這樣電路就省去了部分按鍵。
51hei截圖_20191130110626.png

2-5 獨立按鍵和矩陣按鍵合并電路

2.1.3 復位電路復位電路在單片機最小系統(tǒng)起著重要的作用,單片機在可靠復位后,程序才能從0000h地址開始有序地執(zhí)行應用程序,但是復位電路很容易受到外部噪聲干擾,所以在設計復位電路的時候需要保證系統(tǒng)可靠復位和具備一定的抗干擾能力。復位電路有上電復位和手動復位兩個模式,這里采用的是上電只復位,不增加手動復位電路。在51單片機中,復位脈沖的高電平寬度必須大于2個機器周期,若系統(tǒng)選用11.0592MHZ晶振,則一個機器周期約為1.085us,那么復位脈沖寬度最小應為2us。如圖2-6所示,利用rc充電原理實現(xiàn)上電復位的電路設計。常用的復位電路是電容和電阻組成RC電路加上按鍵,把按鍵復位去掉,形成通電即復位,不需要按鍵進行復位。
51hei截圖_20191201101550.png
2-6 復位電路修改圖
2.1.4 AD和DA接口電路在單片機設計上AD和DA模塊是要求單獨分開測試的,即選用TLC5615和ADC0832兩個模塊,在電路設計上,這兩個模塊都是串行數(shù)據(jù)傳輸,即都有三條數(shù)據(jù)線接口,如果設計上把這兩個模塊的接口并行起來的話,兩個模塊6條數(shù)據(jù)線只需要占用單片機3個接口。即圖2-7中H3和H2是并接一起的。
TLC5615模塊,即數(shù)模轉(zhuǎn)換模塊,將數(shù)字量轉(zhuǎn)換為模擬量輸出。通過查找TLC5615模塊的使用手冊,了解如下:TLC5615是一個串行1O位DAC芯片,性能比早期電流型輸出的DAC要好。只需要通過 3根串行總線就可以完成1O位數(shù)據(jù)的串行輸入,易于和工業(yè)標準的微處理器或微控制器 (單片機 )接口。手冊上說明該模塊的通信時序是:當片選 S為低電平時,串行輸人數(shù)據(jù)才能被移 人 l6位移位寄存器。當S為低電平時,在每一個SCLK時鐘的上升沿將DIN的一位數(shù)據(jù)移人16位移寄存器。
ADC0832模塊,即模數(shù)轉(zhuǎn)換模塊,將模擬量轉(zhuǎn)換成數(shù)字量輸出。從改模塊的使用手冊了解:ADC0832是8腳雙列直插式雙通道A/D轉(zhuǎn)換器,能分別對兩路模擬信號實現(xiàn)!獢(shù)轉(zhuǎn)換,可以用在單端輸入方式和差分方式下工作。ADC0832采用串行通信方式,通過DI數(shù)據(jù)輸入端進行通道選擇、數(shù)據(jù)采集及數(shù)據(jù)傳送。8位的分辨率(最高分辨可達256級),可以適應一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復用,使得芯片的模擬電壓輸入在0~5V之間。具有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗,以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強。獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。工作原理:正常情況下ADC0832 與單片機的接口應為4條數(shù)據(jù)線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時并未同時使用并與單片機的接口是雙向的,所以在I/O口資源緊張時可以將DO和DI并聯(lián)在一根數(shù)據(jù)線上使用。當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK和DO/DI的電平可任意。當要進行A/D轉(zhuǎn)換時,須先將CS使能端置于低電平并且保持低電平直到轉(zhuǎn)換完全結束。此時芯片開始轉(zhuǎn)換工作,同時由處理器向芯片時鐘(CLK)輸入端輸入時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號。
51hei截圖_20191201102427.png
2-7 ADDA并接圖
2.1.5 DS1302時鐘模塊接口DS1302 模塊內(nèi)含有一個實時時鐘/日歷和31 字節(jié)靜態(tài)RAM ,通過簡單的串行接口與單片機進行通信。提供秒、分、時、日、周、月、年的信息,每月的天數(shù)和閏年的天數(shù)可自動調(diào)整。時鐘操作可通過AM/PM 指示決定采用24 或12 小時格式。DS1302 與單片機之間能簡單地采用同步串行的方式進行通信,僅需用到三個口線:(1)RES 復位(2)I/O 數(shù)據(jù)線(3)SCLK串行時鐘。設計電路如圖2-8所示。
51hei截圖_20191201103240.png
2-8 DS1302時鐘模塊電路設計
2.1.6 DS18B20溫度傳感器接口DS18B20是最常見的數(shù)字溫度傳感器,體積;精度高(12位時精度可以達到0.625攝氏度,出廠默認12位);接線簡單,無需外圍短路;封裝形式多樣,能滿足不同應用需求等。常見的電路設計如圖2-9所示。選用4.7K電阻上拉。DS18B20單線數(shù)據(jù)傳輸,直接將數(shù)字量傳送到單片機外圍接口,單片機可以直接讀取溫度的數(shù)字量。
51hei截圖_20191201104113.png
2-9 DS18B20溫度傳感器電路設計
3 基于51單片機的電子琴設計3.1 電子琴的硬件電路
根據(jù)選做設計的要求,對硬件電路進行了修改,操作更加方便。選做要求如下:按鍵演奏、自動演奏、高低音選擇。根據(jù)要求,在原有的要求上進行了擴展,在按鍵演奏的基礎上加上了電腦演奏,即電腦通過串口與單片機進行無線通信后可以實現(xiàn)演奏。如圖3-1所示,是基于電子琴修改的PCB布局的。在原有基礎上把按鍵加到擴展板,所以不需要接上芯片。其他模塊,如TLC5615、ADC0832等暫時不需要用到,即將其控制的部分刪除,無需增加進此布局中。通過PCB直觀知道此電路設計的復雜性幾乎為零,已經(jīng)十分簡化了,布線少,模塊少,布局清晰。電子琴硬件電路設計上也是遵循簡化原則。
51hei截圖_20191204204713.png
3-1 電子琴PCB設計圖
3.1.2 電子琴界面部分電子琴界面設計是遵循直觀化原則,即讓人直觀看到播放的音頻和音階,利用LCD12864顯示器顯示,如圖3-3所示,為電子琴界面設計圖。界面一共顯示四行,第一行是音階顯示,有高音、低音和中音,界面顯示依次是2、1、0;第二行是音頻,一共顯示16個,依次是0-15;第三行是電子琴的名稱“Little Dome”;第四行是本人的學號17101071035。
51hei截圖_20191204211623.png
3-3 電子琴界面設計圖
3.1.3 電腦演奏原理電腦演奏是基于兩個藍牙的無線通信,所用的界面是串口通信界面,電腦通過鍵盤輸入數(shù)字0-15,電腦通過接在USB-TTL的藍牙模塊將字符依次發(fā)送出去,單片機接收到后,串口執(zhí)行中斷程序,中斷程序就是將接收到的字符傳遞到電子琴控制程序,相當于按鍵功能。兩個藍牙的對接指令設置步驟如下:
1)AT模式:兩個藍牙模塊的PIO11接VCC,上電后即進入AT指令模式,都用USB轉(zhuǎn)TTL模塊連接到電腦的USB接口。
2)打開串口調(diào)試助手:開啟2個串口調(diào)試窗口,一個打開藍牙A的COM口,一個打開藍牙B的COM口。設置波特率,一般設置為38400
3)恢復A默認設置:串口調(diào)試助手A,將藍牙A恢復默認設置:AT+ORGL\r\n
4)設置A配對碼:串口調(diào)試助手A,配置藍牙A的配對碼:AT+PSWD=1212\r\n。注:藍牙A與藍牙B的配對碼相同,這樣才能成功配對。
5)設置A主模式:串口調(diào)試助手A,將藍牙A配置為主機模式:AT+ROLE=1\r\n
6)恢復B默認設置:串口調(diào)試助手B,將藍牙B恢復默認設置:AT+ORGL\r\n
7)設置B配對碼:串口調(diào)試助手B,配置藍牙B的配對碼與藍牙A一致:AT+PSWD=1212\r\n
8)設置B從模式:串口調(diào)試助手B,將藍牙B配置為從機模式:AT+ROLE=0\r\n
9)查詢B地址:串口調(diào)試助手B,查詢藍牙B的地址:AT+ADDR?\r\n
10)藍牙A綁定藍牙B:串口調(diào)試助手A,藍牙A綁定藍牙B地址:AT+BIND=2015,2,120758\r\n
11)常規(guī)工作模式:2個模塊的PIO11引腳都接地,重新上電后進入常規(guī)工作模式,自動完成配對。
3.2 [/size軟件設計與調(diào)試
3.2.1 電子琴的程序設計電子琴的程序設計思路如圖3-4所示,圖3-4為電子琴程序流程圖。程序運行時先判斷按鍵是否按下,即通過按鍵掃描識別按鍵是否按下,若識別到按鍵按下就執(zhí)行模式選擇程序,模式選擇有四種:音階設置模式、音頻設置模式、自動播放模式和按鍵播放模式。若檢測不到按鍵按下,即返回掃描程序,一直掃描,等待按鍵按下。電子琴程序設計上主要是控制PWM調(diào)節(jié)蜂鳴器的電壓脈寬,進而控制蜂鳴器的頻率;LCD12864顯示器主要是用于顯示按鍵模式,給用戶直觀的視覺體驗;按鍵掃描采用了行列式掃描法,其中還有狀態(tài)機法和翻轉(zhuǎn)法。三種按鍵掃描程序中最好的是狀態(tài)機法,但是需要用到定時器,電子琴中定時器用于控制中斷和PWM設置,與按鍵中斷有沖突,所以采用了行列式掃描法。
圖片1.png

3-4 電子琴程序設計圖


電子程序加入了獨立按鍵部分,用于擴展電子琴的功能,采用輪詢的方式實現(xiàn)電子琴的功能模式選擇。電子琴部分控制程序如下:
                KeyScan1();        //電子琴功能按鍵
                Keyscan();         //行列式掃描                                        switch(key)
                {
                        case 0:  time = 1;break;
                        case 1:  time = 2;break;
                        case 2:  time = 3;break;
                        case 3:  time = 4;break;
                        case 4:  time = 5;break;
                        case 5:  time = 6;break;
                        case 6:  time = 7;break;
                        case 7:  time = 8;break;        
                        case 8:  time = 9;break;
                        case 9:         time = 10;break;
                        case 10: time = 11;break;
                        case 11: time = 12;break;
                        case 12: time = 13;break;        
                        case 13: time = 14;break;        
                        case 14: time = 15;break;                                       
                        default: time = 0;        break;//無按鍵按下        
                }
                if(time==0)        TR0=0,Beep=1;
else                                                                                                                                                 high=freq[7*Music_Freq+time-1][1],
low=freq[7*Music_Freq+time-1][0],TR0=1;
        Q(Music_Freq,time);//顯示
3.2.2 電子琴測試在設計電子琴的時候,遇到的問題主要有三點:(1)蜂鳴器不響;(2)頻率不正確;(3)按鍵播放有雜音。解決方式如下。
(1)蜂鳴器不響:主要排查兩點,第一點:硬件電路問題,蜂鳴器用三極管通過放大電流驅(qū)動工作,若蜂鳴器不響,可能是三極管的集電極和發(fā)射機接反了,解決方式是對換過來;第二點:軟件設置問題,驅(qū)動蜂鳴器是用定時器中斷驅(qū)動,通過調(diào)節(jié)PWM控制蜂鳴器,解決方式是檢查程序中斷是否正常進入,檢查是否出現(xiàn)中斷異常。
(2)頻率不正確:蜂鳴器工作的頻率不對,無法形成明顯地高低音,主要是檢查程序,首先設置正確51單片機的時鐘頻率,這里選用11.0592MHZ,通過MDK5目標選擇界面設置,如圖3-5所示,接著排除定時器計數(shù)的高位和低位寄存器的計數(shù),裝載值設置正確。
3)播放有雜音:這個問題可以通過軟件延遲過濾掉,播放出現(xiàn)雜音是工作時切換過快,導致雜音產(chǎn)生,所以可以通過軟件延遲排除。

4電路調(diào)試和程序調(diào)試設計好硬件電路后一般會出現(xiàn)的問題有:
(1)無法燒錄程序:這個是十分常見的問題,一般原因有芯片電壓過低、復位電路無法復位、晶振無法起振。排查方式有:排查一下芯片是否供電正常,通電后檢查芯片VCC和GND兩端電壓,觀察是否是5V左右,如果是3V左右,就說明電路設計有問題,導致芯片電壓被分走了;檢查復位電路,最小系統(tǒng)要工作必須要復位成功一次,復位不成功很大可能性是復位電路虛焊或者電阻電容選擇問題;晶振不起振就檢測一下電容的參數(shù),選取過大也會導致起振失敗。
(2)顯示屏無法顯示:顯示屏無法顯示,檢查顯示器的使能接口和數(shù)據(jù)傳輸接口以及PSB引腳,使能失敗顯示器不會顯示,數(shù)據(jù)傳輸傳輸異常也會出現(xiàn)問題,檢查串并行數(shù)據(jù)傳輸過程是否出現(xiàn)異常;PSB引腳若被占用也會出現(xiàn)無法顯示的問題,可以直接修改顯示器的J2硬件電路即可解決。
(3)光敏電阻無法顯示:光敏電阻是要求結合ADC0832這個模塊進行數(shù)模轉(zhuǎn)換的。光敏電阻無法檢測,可能是光敏電阻沒有串聯(lián)一個上拉電阻,若光敏電阻一端接地一端直接接到ADC0832,這個是錯誤的接法,需要加上上拉電阻才能正常檢測到光敏電阻;軟件問題則是ADC0832模塊的SPI通信出現(xiàn)異常。
(4)接在TLC5615的LED指示器無法工作:查找TLC5615手冊知道,若要讓模塊正常輸出轉(zhuǎn)換的電壓需要在模塊的第6引腳接入基準電壓,若沒有接入2V-3V的基準電壓,模塊輸出的數(shù)據(jù)是無效的。
(5)蜂鳴器不響:蜂鳴器工作出現(xiàn)異常很大可能性是三極管接反了。對換過來即可。
設計好的驅(qū)動程序一般出現(xiàn)的問題有:
(1)SPI通信出現(xiàn)異常:在此課程設計中,很大模塊都用到了SPI通信,每個模塊的時序不一樣,所以驅(qū)動程序也稍微區(qū)別,模塊驅(qū)動不成功可以看一下模塊的時序圖,設置正確的時序即可
(2)中斷異常:定時器中斷出現(xiàn)問題可以檢測定時器是否開啟總中斷或者是否初始化成功,若有多個中斷則要設置好優(yōu)先級,外部中斷,定時中斷和串口中斷的優(yōu)先級是不一樣的。
(3)引腳占用:這個是程序設計過程中的通病,由于51單片機引腳少,驅(qū)動模塊有比較多,設計程序過程難免復用了引腳,但是復用時沒有設計好復用的優(yōu)先級,導致無法復用而出現(xiàn)異常。
(4)按鍵掃描程序:按鍵是人與系統(tǒng)交互的外部接口設備,在排除硬件設計問題后,檢測按鍵掃描程序是否有輪詢,掃描失敗一般是按鍵無法輪詢成功,即沒有一直循環(huán)訪問。

全部資料51hei下載地址:
MyTest.rar (103.28 KB, 下載次數(shù): 28)

原理圖和PCB.rar (2.03 MB, 下載次數(shù): 24)

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表