單片機應用與設計 實驗報告-綜合應用設計_第1頁
單片機應用與設計 實驗報告-綜合應用設計_第2頁
單片機應用與設計 實驗報告-綜合應用設計_第3頁
單片機應用與設計 實驗報告-綜合應用設計_第4頁
單片機應用與設計 實驗報告-綜合應用設計_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實 驗 報 告 課程名稱: 單片機應用與設計 實驗項目名稱: 綜合應用設計 學院: 信息工程學院 專業: 電子信息專業 指導教師: 報告人: 學號: 班級: 電3 實驗時間: 2015.12 實驗報告提交時間: 2015.12 教務部制設計內容:超聲波音樂機器人要求: 1、 掌握用單片機驅動無源蜂鳴器播放音樂。 2、 掌握用單片機驅動超聲波模塊進行測距,測到的距離用數碼管顯示。3、 結合以上兩者,做出一份利用測到不同距離播放不同曲子的作品。實驗原理:單片機演奏音符原理:單片機演奏一個音符,是通過引腳,周期性的輸出一個特定頻率的方波。這就需要單片機,在半個周期內輸出低電平、另外半個周期輸出高電平

2、,周而復始。半個周期的時間是多長呢?眾所周知,周期為頻率的倒數,可以通過音符的頻率計算出半周期。演奏時,要根據音符頻率的不同,把對應的、半個周期的定時時間初始值,送入定時器,再由定時器按時輸出高低電平。演奏樂曲時,就根據音符的不同數值,從半周期數據表中找到定時時間初始值,送入定時器即可控制發音的音調。比如把表中的0 xF2和0 x42送到定時器,定時器按照這個初始值來產生中斷,輸出的方波,人們聽起來,這就是低音1。2超聲波測距原理: 實驗過程及內容: 將程序燒錄進入單片機后,用手擋住單片機的超聲波模塊,根據超聲波模塊測得的實時距離,隨時切換播放不同的曲子,并且測到的相關距離用數碼管顯示出來。

3、本實驗中,我們共寫了世上只有媽媽好,送別,青花瓷三首曲子。當超聲波模塊測的距離為0至10cm時,單片機演奏世上只有媽媽好;當超聲波模塊測的距離為10至20cm時,單片機演奏青花瓷;當超聲波模塊測的距離為20至30cm時,單片機演奏送別;當超聲波模塊測的距離為30cm以上時,單片機不播放曲子; 數據處理分析:程序代碼:#include #include#define uint unsigned int#define uchar unsigned charsbit trig=P10;sbit echo=P11;sbit speaker = P14;sbit wela = P26;/定義 P2.6為

4、 位選sbit dula = P27;/定義 P2.7為 段選uchar code table = 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07, 0 x7f, 0 x6f, 0 x77, 0 x7c, 0 x39, 0 x5e, 0 x79, 0 x71;uint timer0H, timer0L, time0,timer1H, timer1L, time1;uint flag=0;/ 頻率-半周期數據表 高八位 本軟件共保存了四個八度的28個頻率數據code unsigned char FREQH = 0 xF2, 0 xF3

5、, 0 xF5, 0 xF5, 0 xF6, 0 xF7, 0 xF8, /低音1234567 0 xF9, 0 xF9, 0 xFA, 0 xFA, 0 xFB, 0 xFB, 0 xFC, 0 xFC,/1,2,3,4,5,6,7,i 0 xFC, 0 xFD, 0 xFD, 0 xFD, 0 xFD, 0 xFE, /高音 234567 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFF; /超高音 1234567/ 頻率-半周期數據表 低八位code unsigned char FREQL = 0 x42, 0 xC1, 0 x17, 0 x

6、B6, 0 xD0, 0 xD1, 0 xB6, /低音1234567 0 x21, 0 xE1, 0 x8C, 0 xD8, 0 x68, 0 xE9, 0 x5B, 0 x8F, /1,2,3,4,5,6,7,i 0 xEE, 0 x44, 0 x6B, 0 xB4, 0 xF4, 0 x2D, /高音 234567 0 x47, 0 x77, 0 xA2, 0 xB6, 0 xDA, 0 xFA, 0 x16; /超高音 1234567void t1int() interrupt 3 /T1中斷程序,控制發音的音調 TR1 = 0; /先關閉T1 speaker = !speaker;

7、/輸出方波, 發音 TH1 = timer1H; /下次的中斷時間, 這個時間, 控制音調高低 TL1 = timer1L; TR1 = 1; /啟動T1/-void delay(unsigned char t) /延時程序,控制發音的時間長度 uchar t1; unsigned long t2; for(t1 = 0; t1 t; t1+) /雙重循環, 共延時t個半拍 for(t2 = 0; t2 8000; t2+); /延時期間, 可進入T1中斷去發音 TR1 = 0; /關閉T1, 停止發音void delayms(uint m) int i,j;for(i=0;im;i+) fo

8、r(j=0;j110;j+); void song() /演奏一個音符 TH1 = timer1H; /控制音調 TL1 = timer1L; TR1 = 1; /啟動T1, 由T1輸出方波去發音 delay(time1); /控制時間長度 /顯示數據轉換程序 void display(uint temp) uchar ge,shi,bai; bai=temp/100; shi=(temp%100)/10; ge=temp%10; wela=1; P0=0 xf7; wela=0; dula=1; P0=tablebai; dula=0; delayms(1); dula=1; P0=0 x0

9、0; /關位碼 dula=0; wela=1; P0=0 xef; wela=0; dula=1; P0=tableshi; dula=0; delayms(1); dula=1; P0=0 x00; /關位碼 dula=0; dula=1; P0=tablege; dula=0; wela=1; P0=0 xdf; wela=0; delayms(1); dula=1; P0=0 x00; /關位碼 dula=0; void start() uchar a ; trig=1; for(a=0;a0&distance10&distance20&distance=30) flag=3; else

10、 flag=0; void ceju() TMOD =0X11; TH0=0; TL0=0; trig=0; echo=0; start(); while(!echo); TR0=1; while(echo); TR0=0; count();void sszymmh() /世上只有媽媽好數據表 code unsigned char music = 6, 2, 2, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, /一個音符有三個數字。前為第幾個音、中為第幾個八度、后為時長(以半拍為單位)。/6, 2, 3 分別代表:, 中音, 個半拍

11、;/5, 2, 1 分別代表:, 中音, 個半拍;/3, 2, 2 分別代表:, 中音, 個半拍;/5, 2, 2 分別代表:, 中音, 個半拍;/1, 3, 2 分別代表:, 高音, 個半拍;/6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,2, 2, 1, 1, 2, 1

12、, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0;/- uchar k, i; TMOD =0X11; /置T1定時工作方式1 EA = 1; /開CPU中斷 ET1 = 1; /開T1中斷i = 0; time1 = 1; while(time1) if(flag=1) k = musici + 7 * musici + 1 - 1; /第i個是音符, 第i+1個是第幾個八度 timer1H = FREQHk; /從數據表中讀出頻率數值 timer1L = FREQLk; /實際上, 是定時的時間長度 time1 = musici + 2; /讀出時間長度數值 i +

13、= 3; song(); /發出一個音符ceju();delayms(5); else break; void ctw()/送別 code unsigned char music = 5, 2, 2, 3, 2, 1, 5, 2, 1, 1, 3, 4, 6, 2, 2, 1, 3, 1, 6, 2, 1, 5, 2, 4,5, 2, 2, 1, 2, 1, 2, 2, 1, 3, 2, 2, 2, 2, 1, 1, 2, 1, 2, 2, 4, 5, 2, 2, 3, 2, 1, 5, 2, 1, 1, 3, 3, 7, 2, 1, 6, 2, 2, 1, 3, 2, 5, 2, 4, 5,

14、 2, 2, 2, 2, 1, 3, 2, 1, 4, 2, 3, 7, 2, 1, 1, 2, 4, 0, 0, 0 ;unsigned char k, i; TMOD =0X11; /置T1定時工作方式1 EA = 1; /開CPU中斷ET1 = 1; /開T1中斷 i = 0; time1 = 1; while(time1) if(flag=3) k = musici + 7 * musici + 1 - 1; /第i個是音符, 第i+1個是第幾個八度 timer1H = FREQHk; /從數據表中讀出頻率數值 timer1L = FREQLk; /實際上, 是定時的時間長度 time

15、1 = musici + 2; /讀出時間長度數值 i += 3; song(); /發出一個音符ceju();delayms(5); else break; void qhc()/青花瓷 code unsigned char music = 5, 3, 1, 5, 3, 1, 3, 3, 1, 2, 3, 1,3, 3, 1, 6, 3, 2, 2, 3, 1, 3, 3, 1,5, 3, 1, 3, 3, 1, 2, 3, 4, 5, 3, 1, 5, 3, 1, 3, 3, 1, 2, 3, 1, 3, 3, 1, 5, 3, 2, 2, 3, 1, 3, 3, 1, 5, 3, 2,

16、2, 3, 1, 1, 3, 4, 1, 3, 1, 2, 3, 1, 3, 3, 1, 5, 3, 1, 6, 3, 1, 5, 3, 1, 4, 3, 1, 5, 3, 1,3, 3, 1, 3, 3, 1, 2, 3, 1, 2, 3, 4,1, 3, 1, 2, 3, 1, 1, 3, 1, 1, 3, 1,2, 3, 1, 1, 3, 1, 2, 3, 1, 3, 3, 2,5, 3, 1, 3, 3, 1, 3, 3, 2, 0, 0, 0 ;unsigned char k, i; TMOD =0X11; /置T1定時工作方式1 EA = 1; /開CPU中斷ET1 = 1; /開

17、T1中斷 i = 0; time1 = 1; while(time1) if(flag=2) k = musici + 7 * musici + 1 - 1; /第i個是音符, 第i+1個是第幾個八度 timer1H = FREQHk; /從數據表中讀出頻率數值 timer1L = FREQLk; /實際上, 是定時的時間長度 time1 = musici + 2; /讀出時間長度數值 i += 3; song(); /發出一個音符ceju();delayms(5); else break; void main(void) while(1) ceju(); delayms(10); if(flag=1) sszymmh(); if(flag=2) qhc(); if(flag=3) ctw(); 實物圖:超聲波模塊:無源蜂鳴器:總體構圖:實驗結論:在做這個作品之前,我分別對單片機蜂鳴器播放音樂和單片機超聲波測距兩個部分都有過相關的了解,于是我想,能不能把這兩者結合起來做一個作品?讓單片機根據測到的不同的距離播放不同的曲子?光想也沒用,于是我便和我的伙伴開始動手查資料啊,不停地嘗試,下了好一番功夫,終于實現了這個效果。期間,我們解決了如何安排這兩個定時器協同工作的問題,解決了程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論