版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、單片機課程設計實驗報告電子音調(diào)發(fā)生器姓名:日期:2009年 6 月 29 日星期一目錄(一)實驗目的.錯誤 !未定義書簽。(二)設計任務及要求.錯誤 !未定義書簽。(三)工作原理及設計思路.錯誤 !未定義書簽。(四)實現(xiàn)功能設計.錯誤 !未定義書簽。(五)軟件設計.錯誤 !未定義書簽。(六)電路設計.錯誤 !未定義書簽。(七)調(diào)試.錯誤 !未定義書簽。(八)實驗體會錯誤 !未定義書簽。(一)實驗目的1了解計算機發(fā)聲原理。2 熟悉定時器和鍵盤掃描電路的工作原理及編程方法。(二)設計任務及要求利用實驗平臺上的開關 k0-k7 和蜂鳴器設計電子音調(diào)發(fā)生器,要求:1利用實驗平臺上開關 k0-k7 進行
2、音調(diào)選擇, 即撥動不同的開關產(chǎn)生不同的音調(diào),依次撥動 K0K7,蜂鳴器發(fā)出 1234567i 八個音調(diào)。2編寫 2支歌曲,并可進行選擇播放。(三)工作原理及設計思路音節(jié)由不同頻率的方波產(chǎn)生, 音節(jié)與頻率的關系如表 1 所示。要產(chǎn)生音頻方波,只要算出某一音頻的周期( 1/ 頻率),然后將此周期除以 2,即為半周期的時間。利用計時器計時此半周期時間,每當計時到后就將輸出方波的 I/0 反相,然后重復計時此半周期時間再對 I/O 反相,就可在 I/O 腳得到此頻率的方波。 在 ZKS-03 實驗儀上,產(chǎn)生方波的 I/O 腳選用,通過跳線選擇器 JP1 將單片機的與蜂鳴器的驅(qū)動電路相連。 這樣輸出不同
3、頻率的方波, 蜂鳴器便會發(fā)出不同的聲音。另外,音樂的節(jié)拍是由延時實現(xiàn)的,如果 1 拍為秒, 1/4 拍是秒。只要設定延時時間,就可求得節(jié)拍的時間。 延時作為基本延時時間, 節(jié)拍值只能是它的整數(shù)倍,每個音節(jié)相應的定時器初值X 可按下法計算:( 1/2 ) *(1/f)=(12/fose)*(216-x) 即 x=216-(fose/24f)其中 f: 音調(diào)頻率,當晶振 fose= 時,音節(jié)“ 1”相應的定時器初值為 x, 則可得x=63777D=F921H其它的可同樣求得。表 1頻率( Hz)X(HEX)音調(diào)1262F9212294F9E13330FA8C4349FAD85392FB686440
4、FBE97494FC5Bi523FC8F(四)實現(xiàn)功能設計實現(xiàn)兩個主要功能: 電子琴與音樂播放; 一個輔助功能: 在液晶上顯示相關信息。1、電子琴: 4*4 的矩陣 16 個按鍵,按鍵 0 實現(xiàn)兩個功能的切換,其余按鍵分別發(fā)出音調(diào)低音 5、 6、 7,中音 1、 2、 3、 4、 5、 6、7,高音 1、2、3、4、5。發(fā)音的同時在液晶顯示屏上顯示出對應的音調(diào)。2、音樂播放:按鍵0 實現(xiàn)兩個功能的切換,按鍵1 實現(xiàn)播放類型選擇(單曲循環(huán)播放、所有循環(huán)播放) ,其余按鍵分別對應一首歌。目前已經(jīng)有9 首歌。播放的同時,在液晶上顯示出歌名。(五)軟件設計根據(jù)要實現(xiàn)的功能,流程圖如下:開始系統(tǒng)初始化功
5、能選擇音樂#include <>#include <>#define nop _nop_()#define uchar unsigned char#define uint unsigned int#define PAI_BASE 15#define MUSIC_NUM 9#define SCAN_CYCLE 500#define BEEP P3_3/*液晶顯示相關變量 */sbit LCD_RS = P27;sbit LCD_RW = P26;sbit LCD_EN = P25;static uchar th0_f; 0c0f0c0F0F.Record();."
6、;);break;case 2:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string("6.");Record();break;case 3:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string("7.");Record();break;case 4:disptime
7、_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string("1");Record();break;case 5:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string("2");Record();break;case 6:disptime_flag=0;th0_f=c_musicFreqk
8、ey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string("3");Record();break;case 7:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string("4");Record();break;case 8:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreq
9、key-1%256;TR0 = 1;lcd_init();lcd_string("5");Record();break;case 9:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string("6");Record();break;case 10:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_ini
10、t();lcd_string("7");Record();break;case 11:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string(".1");Record();break;case 12:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string(".2
11、");Record();break;case 13:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string(".3");Record();break;case 14:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string(".4");Record();break
12、;case 15:disptime_flag=0;P2_4=0;lcd_init();Record_flag+;if(Record_flag=1)Record_counter=0;Record_time=0;lcd_string("Record ");else if(Record_flag=2)lcd_init();lcd_string(" Record play ");Record_music+Record_counter=0x00;Music_flag=1;Rplay_flag=1;TH0=0;TL0=0;TR0=0;while(key=keysca
13、n()!=15);else if (Record_flag=3)lcd_init();lcd_string("Electone ");Music_flag=0;Rplay_flag=0;Record_flag=0;Freq_flag=1;break;case 16:P3_3=0;TR0=0;Record();break;if(key=0) P3_3=0;break;void Music(void)P2_4=0;Freq_flag=1;lcd_init();disptime_flag=1;lcd_string("Music");Music_flag=0;k
14、ey=16;delay(10);s_musicCounter=10;s_tableCounter=0;TR0=0;P3_3=0;while(1)if(s_musicCounter=1)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving(" Happy Birthday ");/ lcd_string(" Happy Birthday ");else if(s_musicCounter=2)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving(" T
15、wo Butterflies ");else if(s_musicCounter=3)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving("Mouse Loves Rice ");else if(s_musicCounter=4)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving(" Awakening ");else if(s_musicCounter=5)Music_flag=1;disptime_flag=0;lcd_init();lcd_
16、moving(" dae jang geum ");else if(s_musicCounter=6)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving("walking on Road of Life ");else if(s_musicCounter=7)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving("Most romantic thing");else if(s_musicCounter=8)Music_flag=1;dis
17、ptime_flag=0;lcd_init();lcd_moving("After 1000 years");else if(s_musicCounter=9)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving("Lonely life");else if(key>10) TR0=0;P3_3=0; while(key2=(key=keyscan() nop;TR0=1;key2=key;if(key=0)P3_3=0;Freq_flag=0;Music_flag=0;K0_flag=0;TR0=0
18、;break;else if(key=1)musicAutoFlag=musicAutoFlag;if(musicAutoFlag=1) P2_4=1;else P2_4=0;else if(key=15) disptime();else if(key>9&&key<15) nop;elses_musicCounter=key-1;s_tableCounter=0;void main(void)/*主程序入口 */IE=0;P0=0xff;P2=0xff;/*初始化 T*/TMOD=0x11;/*Timer0 、Timer1 工作在案 MODE1,16位定時器 */
19、TH1=(65536-10000)/256;/* 設定 Timer1 每 10ms中斷一次 */TL1=(65536-10000)%256;TR1=1;TH0=(65536-SCAN_CYCLE)/256; /*設定 Timer0 每隔 SCAN_CYCLEu中斷一次*/TL0=(65536-SCAN_CYCLE)%256;TR0 = 1;ET0 = 1;ET1 = 1;EA=1;P2_4=0;P3_3=0;/* 關喇叭 */while(1)if(K0_flag=0)Electone();/電子琴功能else Music();/播放音樂/ 定時中斷 0, 用于產(chǎn)生唱歌頻率void timer0
20、() interrupt 1 using 1if(Freq_flag=1)TL0=tl0_f;TH0=th0_f; /調(diào)入預定時值BEEP=BEEP;/取反音樂輸出IOelseTH0=(65536-SCAN_CYCLE)/256; /*設定 Timer0 每隔 SCAN_CYCLEu中斷一次*/TL0=(65536-SCAN_CYCLE)%256;void timer1() interrupt 3 using 2uchar ucharTemp,ucharTemp1,TH0temp,TL0temp; uint temp;static uchar paiCounter,paiNum;TH1=(65
21、536-10000)/256; /* 設定 Timer1 每 10ms中斷一次 8ms*/ TL1=(65536-10000)%256;if(Record_flag=1) Record_time+;timecounter();/時間每秒加一,正常顯示if (Music_flag=1)if(+paiCounter>=paiNum)/*音樂一拍的時間到了 */paiCounter=0;if(Rplay_flag=2) if(TR0=0) TR0=1;s_musicCounter=0x20;switch(s_musicCounter)/*根據(jù)當前音樂編號查找下一個音樂標識碼 */case 0x
22、01:ucharTemp=c_music1s_tableCounter+;break; case 0x02:ucharTemp=c_music2s_tableCounter+;break; case 0x03:ucharTemp=c_music3s_tableCounter+; break; case 0x04:ucharTemp=c_music4s_tableCounter+;break; case 0x05:ucharTemp=c_music5s_tableCounter+; break; case 0x06:ucharTemp=c_music6s_tableCounter+; break
23、; case 0x07:ucharTemp=c_music7s_tableCounter+; break; case 0x08:ucharTemp=c_music8s_tableCounter+; break; case 0x09:ucharTemp=c_music9s_tableCounter+; break;case0x20:ucharTemp=Record_musics_tableCounter+;break;case 0x00:ucharTemp=c_music0s_tableCounter+; break; default:break;if(ucharTemp=0x00)/*如果查到
24、0x00 則表示本首歌曲結束*/Freq_flag=0;paiNum=4*PAI_BASE;/*停止發(fā)聲 */*本首歌曲 結束 后停頓4*PAI_BASE*10ms=600ms再繼續(xù)播放*/P3_3=0;/*把喇叭關掉*/s_tableCounter=0;if(musicAutoFlag=1)/*如果歌曲自動循環(huán)播放功能打開則跳到下一首歌曲*/s_musicCounter+;if(s_musicCounter>(uchar)MUSIC_NUM)s_musicCounter=0x01;else/*如果查到非0x00 則表示是音樂標識碼 */paiNum=(ucharTemp&0x0
25、f)*PAI_BASE;/*音樂標識碼的低四位為節(jié)拍碼 */ucharTemp1=(ucharTemp&0xf0)>>4;/*音樂標識碼的高四位為音頻碼 */if(ucharTemp1=0)/*如果音頻碼為零則表示不發(fā)音 */P3_3=0;Freq_flag=0;temp=65536-SCAN_CYCLE;TH0temp=temp>>8;/*temp/256相當于右移 8 位*/TL0temp=temp-(temp>>8)<<8);/*temp%256*/TH0=TH0temp;TL0=TL0temp;Freq_flag=0;else/*
26、如果音頻碼不為零則按此改變Timer0的中斷周期*/Freq_flag=0;temp=c_musicFrequcharTemp1-1;TH0temp=temp>>8;/*temp/256相當于右移 8 位*/TL0temp=temp-(temp>>8)<<8);/*temp%256*/TH0=TH0temp;TL0=TL0temp;th0_f=TH0;/*保存新的代表音頻的 Timer0 周期值 */tl0_f=TL0;Freq_flag=1;程序說明:在此程序中,主要分為三大塊:1、鍵盤掃描; 2、液晶顯示; 3、音頻產(chǎn)生。程序大部分時間在掃描4*4 矩陣
27、鍵盤,通過線反轉法讀入數(shù)據(jù),判斷按鍵;若實現(xiàn)的是電子琴功能,則用1602 顯示按鍵對應的譜,若實現(xiàn)的是音樂播放功能,則顯示對應的歌名;音頻產(chǎn)生由T0、T1 兩個定時器來完成, T0 實現(xiàn) I/O/口的反轉,產(chǎn)生音頻, T1 實現(xiàn)延時,即音樂的節(jié)拍。(六)電路設計本電路由 89S52、LCD1602、16 個按鍵、復位電路、 12M晶振、 7805、 9V 電池等組成。完成單片機的基本連接即晶振及復位電路后,用 P1 口 8 個口連接并控制 4*4 ,即 16 個按鍵構成的鍵盤,由 P0 口以及、控制液晶顯示器 LCD1602,用輸出不同音調(diào)的頻率控制蜂鳴器發(fā)音。蜂鳴器電路:晶振及復位電路開關連
28、接電路:LCD1602電路連接:(七)調(diào)試此次實驗的的硬件電路很簡單,外圍電路只有一個4*4矩陣,復位電路,晶振電路,蜂鳴器。主要是軟件的編寫與調(diào)試。在沒加液晶顯示前:問題一:程序?qū)懞?,燒錄在單片機中,單片機沒有反應,經(jīng)檢查硬件電路沒有問題,最后發(fā)現(xiàn)是單片機壞了,換了一塊單片機就可以用了。問題二:當使用電子琴功能的時候,按鍵不放手,會出現(xiàn)嘟嘟聲聲音不連續(xù)改動程序,將放開按鍵設置為關定時器,這樣按鍵不放聲音就連續(xù)。問題三:功能無法切換。功能標志設定為 bit 型,判斷功能的時候用 case 語句,運行時不知什么原因無法判別,將 case 語句改用 if 語句程序可以判別,切換功能可以實現(xiàn)。問題四
29、:在播放音頻的空隙時間有一個固定的音頻雜音。檢查電路,蜂鳴器使用 NPN管來驅(qū)動,在沒有音頻的時候若輸出為高電平, 則三極管飽和導通, 蜂鳴器發(fā)聲,在無需音頻的地方加上 P3_3=0;語句,可以消除雜音。效果明顯。問題五:音樂循環(huán)播放功能無法切換。程序 if 條件出錯,無法切換,改后切換功能可以實現(xiàn)。加上液晶顯示后:問題六:按鍵不靈敏。重新寫程序,在延時程序中加入鍵盤掃描,按鍵靈敏且不影響其他功能的實現(xiàn)。(八)實驗體會硬件電路需要動腦子的地方少, 鍵盤可以買到, 只要插到 P1 口就行,但是為了鍛煉一下自己的動手能力,自己買了 16 個按鍵,一個一個焊上去,焊出 4*4 矩陣,這樣對鍵盤也有根深層次的了解。每次寫程序都有很多收獲, 每
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 坐班合同協(xié)議書范本(2篇)
- 租的民房租房合同(2篇)
- 裝修管理費合同(2篇)
- 西京學院《漢語國際教育概論》2022-2023學年第一學期期末試卷
- 西京學院《工程測量》2021-2022學年第一學期期末試卷
- 西華師范大學《中學思想政治課程標準與教材分析》2023-2024學年第一學期期末試卷
- 西華師范大學《藝術原理》2021-2022學年第一學期期末試卷
- 西華師范大學《文學理論》2022-2023學年第一學期期末試卷
- 房地產(chǎn)金融與投資概論教學課件第八章房地產(chǎn)保險
- 西華師范大學《氣象學與氣候?qū)W》2021-2022學年第一學期期末試卷
- 中端門店商務酒店運營管理HOTEL制度 亞朵人力資源部 14號 亞朵總部晉升制度-述職模板
- 呼吸衰竭課件
- 部編版五年級上冊道德與法治《期中考試試卷》(附答案解析)
- 機械加工車間低壓配電系統(tǒng)及車間變電所設計【精選文檔】
- 危重患者護理質(zhì)量檢查月度分析總結
- 砌體結構承載力計算
- 醫(yī)院科室質(zhì)量與安全管理記錄本精選
- 好餓的小蛇(繪本修改版)
- 4微笑著承受一切
- 叉車活塞連桿組的快速更換技巧
- 接種率監(jiān)測與評價ppt課件
評論
0/150
提交評論