單片機課程設(shè)計 簡易電子琴 共有 0 條回復(fù)件:課程設(shè)計報告書
課程名稱: 單片機原理及應(yīng)用技術(shù)
課題名稱: 簡易電子琴
專 業(yè):
班 級:
學(xué) 號:
姓 名:
成 績:
2009年6 月17日
設(shè) 計 任 務(wù) 書
一、設(shè)計任務(wù)
1、功能及技術(shù)指標要求:
設(shè)計一簡易電子琴,按下不同按鍵,能夠發(fā)出不同的聲音。
2.設(shè)計內(nèi)容:
通過每個按鍵的控制使單片機系統(tǒng)輸出不同頻率的脈沖,經(jīng)過揚聲器發(fā)出不同頻率音調(diào)。
硬件設(shè)計:SD接單片機系統(tǒng)某一口線(如P1.0),利用P1.0輸出不同頻率的脈沖通過揚聲器發(fā)出不同頻率音調(diào)。
軟件實現(xiàn):根據(jù)功能需求與電路結(jié)構(gòu)編寫程序,然后將該程序編譯與鏈接,以生成*.HEX文件。通過程序編譯器寫入單片機,調(diào)試運行。
二、設(shè)計方案及工作原理
原理
1.音樂產(chǎn)生原理及硬件設(shè)計
由于一首音樂是許多不同的音階組成的,而每個音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對于單片機來苞生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器T0來苞生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可。本次設(shè)計中單片機晶振為12MHZ,那么定時器的計數(shù)周期為1MHZ,假如選擇工作方式1,那T值便為T=216--5﹡105/相應(yīng)的頻率,那么根據(jù)不同的頻率計算出應(yīng)該賦給定時器的計數(shù)值,列出不同音符與單片機計數(shù)T0相關(guān)的計數(shù)值如下表所示:
按鍵
音階
參數(shù)
S1
中音do
108
S2
中音re
102
S3
中音mi
91
S4
中音fa
86
S5
中音so
77
S6
中音la
68
S7
中音xi
61
S8
高音do
57
目 錄
第一章、 系統(tǒng)設(shè)計要求和解決方案
第二章、 硬件實現(xiàn)
第三章、 軟件實現(xiàn)
第四章、 實現(xiàn)的功能
第五章、 缺點及可能的解決方法
第六章、 心得體會
附錄一、參考文獻
附錄二、硬件原理圖
附錄三、程序流程圖
第一章 系統(tǒng)設(shè)計要求和解決方案
系統(tǒng)功能介紹
利用所給鍵盤的1,2,3,4,5,6,7,8八個鍵,能夠發(fā)出8個不同的音調(diào),并且要求按下按鍵發(fā)聲,松開延時一段時間停止,中間再按別的鍵則發(fā)另一音調(diào)的聲音。
具體過程:當(dāng)系統(tǒng)掃描到鍵盤上有鍵子被按下,則快速檢測出是那一個鍵子,然后單片機的定時器被啟動,發(fā)出一定頻率的脈沖,該頻率的脈沖經(jīng)喇叭驅(qū)動電路放大濾波后,就會發(fā)出相應(yīng)的音調(diào)。如果在前一個按下的鍵發(fā)聲的同時有另一個鍵被按下,則啟用中斷系統(tǒng),前面鍵的發(fā)音停止,轉(zhuǎn)到后按的鍵的發(fā)音程序,發(fā)出后按的鍵的音。
設(shè)計要求:
1. 根據(jù)課題的設(shè)計內(nèi)容,正確設(shè)計電路原理圖。
2 . 合理排布電路元器件,正確焊接硬件電路板。
3. 正確設(shè)計程序流程圖,正確編寫軟件程序,設(shè)計的軟件程序能夠在調(diào)試好的硬件電路上正常運行。
4. 寫出相應(yīng)的程序,得到相應(yīng)的結(jié)果。
第二章 硬件實現(xiàn)
1 電路框圖
硬件電路由鍵盤電路、8051單片機、8255擴展電路和揚聲器發(fā)聲電路組
具體框圖見圖2-1。
圖2-1 硬件電路框圖
主要元器件介紹
89CS51:
89C51單片機管腳圖
89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)傲除100次。該器件采用ATMEL高密度非易失存儲器制異技術(shù)制異,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的89C51是一種高效微控制器,89C2051是它的一種精簡版本。89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。
1.主要特性:
與MCS-51 兼容
4K字節(jié)可編程閃爍存儲器
壽命:1000寫/擦循環(huán)
數(shù)據(jù)保留時間:10年
全靜態(tài)工作:0Hz-24Hz
三級程序存儲器鎖定
128*8位內(nèi)部RAM
32可編程I/O線
兩個16位定時器/計數(shù)器
5個中斷源
可編程串行通道
低功耗的閑置和掉電模式
片內(nèi)振蕩器和時鐘電路
2.管腳說明:
VCC:供電電壓。
GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,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ù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3口也可作為AT89C51的一些特殊功能口,如下表所示:
口管腳 備選功能
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(記時器0外部輸入)
P3.5 T1(記時器1外部輸入)
P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)
P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。
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:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/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:來自反向振蕩器的輸出。
3.振蕩器特性:
XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。
4.芯片擦除:
整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms 來玩成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。
此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個硬件復(fù)位為止。
5.結(jié)構(gòu)特點:
8位CPU;
片內(nèi)振蕩器和時鐘電路;
32根I/O線;
外部存貯器尋址范圍ROM、RAM64K;
2個16位的定時器/計數(shù)器;
5個中斷源,兩個中斷優(yōu)先級;
全雙工串行口;
布而處理器;
第三章 軟件實現(xiàn)
/*ch9-1.c-簡易電子琴實驗*/
#include //包含reg51.h文件
Sbit speaker=P1^0; //聲明喇叭位置
Unsigned char keys; //聲明變量
/*聲明音階數(shù)組-- Do Re Mi Fa So La Si Do# */
unsigned char tone[]={108102918677686157};
void sound(unsigned char); //聲明發(fā)聲函數(shù)
void delay8us(unsigned char); //聲明延遲函數(shù)
//====主程序==================================================
main() //主程序開始
{P2=0xff; //將Port2規(guī)劃成輸入口
while(1) //while循環(huán)
{ keys=~P2; //讀取按鈕
switch(keys) //判斷
{ case 0x01:sound(0);break; //按下S1 發(fā) Do 音
case 0x02:sound(1);break; //按下S2,發(fā) Re 音
case 0x04:sound(2);break; //按下S3,發(fā) Mi 音
case 0x08:sound(3);break; //按下S4,發(fā) Fa 音
case 0x10:sound(4);break; //按下S5,發(fā) So 音
case 0x20:sound(5);break; //按下S6,發(fā) La 音 case 0x40:sound(6);break; //按下S7,發(fā) Si 音
case 0x80:sound(7);break; //按下S8,發(fā) Do#音
}
} //while循環(huán)結(jié)束
} //主程序結(jié)束
//====發(fā)聲函數(shù)============================================
void sound(unsigned char x) //發(fā)聲函數(shù)開始
{char i; //聲明變量
for(i=0;i
詳細內(nèi)容見附件
很好很強大,正好對我這次的課程設(shè)計很有幫助 謝謝啦
樓主貼出來的實驗和下的文檔不是一個程序啊。。。能否給一下實驗的電路圖參考?謝謝
樓主貼出來的實驗和下的文檔不是一個程序啊。。。能否給一下實驗的電路圖參考?謝謝
回復(fù) 4# yaomeng313
等待處理中
贊一個 {:13_780:} {:13_780:} {:13_780:}