數字音樂盒的課程設計.doc_第1頁
數字音樂盒的課程設計.doc_第2頁
數字音樂盒的課程設計.doc_第3頁
數字音樂盒的課程設計.doc_第4頁
數字音樂盒的課程設計.doc_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數字音樂盒的設計 摘 要 傳統(tǒng)音樂盒 多是機械型的 體積笨重 發(fā)音單調 水 灰塵等外在因素 容易 使內部金屬發(fā)音條變形 從而造成發(fā)音跑調 另外 機械音樂盒放音時為了讓音色穩(wěn) 定 必須放平不能動搖 而且價格昂貴 不能實現大批量生產 本設計是一個基于 AT89C51系列單片機的音樂盒 該音樂盒主要由按鍵電路 復位電路 時鐘電路 顯 示電路以及蜂鳴器組成 使用四個按鍵控制音樂盒 其中兩個按鍵用來控制歌曲的播 放 暫停 另兩個用來控制液晶上歌曲次序的變化 本音樂盒共有三首歌曲 播放歌 曲時 相應歌曲對應相應數碼管上歌曲次序及歌名的顯示 關鍵詞 AT89C51 蜂鳴器 LCD 液晶顯示 音樂盒 目 錄 1 緒論 1 1 1 課題描述 1 1 2 基本工作原理及框圖 1 2 相關芯片及硬件電路設計 1 2 1 AT89C51 芯片 2 2 1 1 AT89C51 的功能特性 2 2 1 2 AT89C51 的主要性能參數 2 2 2 時鐘電路 3 2 3 復位電路 3 2 4 按鍵電路 4 2 5 蜂鳴器電路 4 2 6 顯示電路 5 2 6 1 線段的顯示 5 2 6 2 字符的顯示 5 2 7 總體電路 6 3 系統(tǒng)軟件設計 7 3 1 程序主要流程 7 3 2 程序設計 8 4 系統(tǒng)軟件仿真 15 總 結 18 致 謝 19 參考文獻 20 1 緒論 1 1 課題描述 隨著人類社會的發(fā)展 人們對視覺 聽覺方面的享受提出了越來越高的要求 小 小的音樂盒可以給人們帶來美好的回憶 提高人們的精神文化享受 傳統(tǒng)的音樂盒大 多數是機械型的 體積笨重 發(fā)音單調 不能實現批量生產 本文設計的音樂盒是以 單片機為核心元件的電子式音樂盒 體積小 重量輕 能演奏和旋音樂 功能多 使 用方便 可以批量生產 具有一定的商業(yè)價值 本設計是基于單片機的數字音樂盒設 計 由單片機 AT89C51 芯片和 LED 數碼管為核心 輔以必要的電路 構成的一個單片 機電子數字音樂盒 1 1 2 基本工作原理及框圖 本次設計是一個基于AT89C51單片機的音樂盒 該音樂盒主要由時鐘電路 復位 電路 按鍵電路 蜂鳴器以及顯示電路組成 使用其中兩個按鍵來控制播放和暫停另 外兩個按鍵用來控制換曲 利在液晶上顯示曲目的更換 共三首音樂 蜂鳴器每播放 一首歌時液晶上顯示相對應的歌曲次序 系統(tǒng)組成框圖如圖1 圖 1 基本工作原理框圖 2 相關芯片及硬件電路設計 AT89C51 單片機 LCD 液晶顯示 蜂鳴器 時鐘電路 復位電路 按鍵電路 2 1 AT89C51 芯片 圖 2 AT89C51 引腳圖 2 1 1 AT89C51 的功能特性 AT89C51 提供以下標準功能 4K 字節(jié) Flash 閃速存儲器 128 字節(jié)內部 RAM 32 個 I O 口線 兩個十六位定時 計數器 一個 5 向量兩級中斷結構 一個全雙工串行通 信口 片內振蕩器及時鐘電路 同時 AT89C51 可降至 0Hz 的靜態(tài)邏輯操作 并支持 兩種軟件可選的節(jié)電工作模式 空閑方式停止 CPU 的工作 但允許 RAM 定時 計數 器 串行通信口及中斷系統(tǒng)繼續(xù)工作 掉電方式保存 RAM 中的內容 但振蕩器停止工 作并禁止其他所有部件工作直到下一個硬件復位 2 1 2 AT89C51 的主要性能參數 AT89C51 主要性能參數如下 與 MC 51 產品指令系統(tǒng)完全兼容 K 字節(jié)可編程閃爍 存儲器 壽命 1000 寫 擦循環(huán) 數據保留時間 10 年 全靜態(tài)工作 0Hz 24Hz 三級程序存儲器鎖定 128 8 位內部 RAM 32 可編程 I O 線 兩個 16 位定時器 計數器 5 個中斷源 可編程串行通道 低功耗的閑置和掉電模式 2 2 時鐘電路 時鐘電路在單片機系統(tǒng)中起著非常重要的作用 是保證系統(tǒng)正常工作的基礎 在 一個單片機應用系統(tǒng)中 時鐘是保障系統(tǒng)正常工作的基準振蕩定時信號 主要由晶振 和外圍電路組成 晶振頻率的大小決定了單片機系統(tǒng)工作的快慢 2 為達到振蕩周期是 12MHZ 的要求 這里要采用 12MHZ 的晶振 另外有兩個 22PF 的電容 晶振引腳分 別連到 XTAL1 和 XTAL2 振蕩脈沖輸入引腳 時鐘電路如圖 3 圖 3 時鐘電路 2 3 復位電路 單片機在啟動時都需要進行復位 以使CPU及系統(tǒng)各部件處于確定的初始狀態(tài) 并從初態(tài)開始工作 51系列單片機的復位信號是從RST引腳輸入到芯片內的施密特觸 發(fā)器中的 當系統(tǒng)處于正常工作狀態(tài)時 且振蕩器穩(wěn)定后 如果RST引腳上有一個高 電平并維持2個機器周期 24個振蕩周期 以上 則CPU就可以響應并將系統(tǒng)復位 3 單 片機系統(tǒng)的復位方式有 手動按鈕復位和上電復位 復位電路如圖4 圖 4 復位電路 2 4 按鍵電路 按鍵的閉合與否 反映在行線輸出電壓上就呈現高電平或低電平 如果高電平表 示鍵斷開 低電平則表示鍵閉合 通過對行線電平高低狀態(tài)的檢測 便可確認按鍵按 下與否 P1 0 P1 1 P1 4 P1 5 作為控制按鍵 其中 P1 0 P1 1 掃描行 P1 4 P1 5 掃 描列 可通過功能鍵選擇樂曲 暫停 播放 按鍵電路如圖 5 圖 5 按鍵電路 2 5 蜂鳴器電路 電路中蜂鳴器是發(fā)聲元件 在其兩端施加直流電壓 有源蜂鳴器 或者方波 無 源蜂鳴器 就可以發(fā)聲 其主要參數是外形尺寸 發(fā)聲方向 工作電壓 工作頻率 工作電流 驅動方式 直流 方波 等 4 由于蜂鳴器的工作電流一般比較大 單片機的I O口是無法直接驅動的 但AVR可 以驅動小功率蜂鳴器 所以要利用放大電路來驅動 一般使用三極管來放大電流就可 以了 蜂鳴器由一個三極管 兩個電阻和一個二極管組成 蜂鳴器電路如圖6 圖 6 蜂鳴器電路 2 6 顯示電路 2 6 1 線段的顯示 點陣圖形式液晶由M N顯示單元組成 假設LCD顯示屏有64行 每行有128列 每 8列對應1字節(jié)的8位 即每行由16字節(jié) 共16 8 128個點組成 屏上64 16個顯示單元 與顯示RAM區(qū)1024字節(jié)相對應 每一字節(jié)的內容和顯示屏上相應位置的亮暗對應 例 如屏的第一行的亮暗由RAM區(qū)的000H 00FH的16字節(jié)的內容決定 當 000H FFH時 則屏幕的左上角顯示一條短亮線 長度為8個點 當 3FFH FFH時 則屏 幕的右下角顯示一條短亮線 當 000H FFH 001H 00H 002H 00H 00EH 00H 00FH 00H時 則在屏幕的頂部顯示一條由8段亮線和 8條暗線組成的虛線 這就是LCD顯示的基本原理 5 2 6 2 字符的顯示 用 LCD 顯示一個字符時比較復雜 因為一個字符由 6 8 或 8 8 點陣組成 要找到 和顯示屏幕上某幾個位置對應的顯示 RAM 區(qū)的 8 字節(jié) 還要使每字節(jié)的不同位為 1 其它的為 0 為 1 的點亮 為 0 的不亮 這樣一來就組成某個字符 但由于內帶字 符發(fā)生器的控制器來說 顯示字符就比較簡單了 可以讓控制器工作在文本方式 根 據在 LCD 上開始顯示的行列號及每行的列數找出顯示 RAM 對應的地址 設立光標 在此送上該字符對應的代碼即可 6 顯示電路如圖 7 圖 7 顯示電路 2 7 總體電路 總結時鐘電路 復位電路 按鍵電路 蜂鳴器以及顯示電路 把其放入一個電路 得到總體的電路 總體電路如圖 8 圖 8 總體電路圖 3 系統(tǒng)軟件設計 3 1 程序主要流程 流程圖如圖 9 所示 初始化界面 K3是否按下 K4是否按下 K1是否按下 K2是否按下 停止 切換上一首 切換下一首 播放音樂 開始計時 停止音樂 停止計時 N N N Y Y Y Y 開始 圖 9 流程圖 3 2 程序設計 對音樂do re mi fa so la si分別編碼為1 7 重音do編為8 重音re編為9 停頓編為 0 播放長度以十六分音符為單位 在本程序中為165ms 一拍即四分音符等于4個十 六分音符 編為4 其它的播放時間以此類推 音調作為編碼的高4位 而播放時間作為 低4位 如此音調和節(jié)拍就構成了一個編碼 以0 xff作為曲譜的結束標志 7 舉例1 音 調do 發(fā)音長度為兩拍 即二分音符 將其編碼為0 x18 舉例2 音調re 發(fā)音長度為半拍 即八分音符 將其編碼為0 x22歌曲播放的設計 先將歌曲的簡譜進行編碼 儲存在一 個數據類型為unsigned char的數組中 程序從數組中取出1個數 然后分離出高4位得到 音調 接著找出相應的值賦給定時器0 使之定時操作蜂鳴器 得出相應的音調 接著 分離出該數的低4位 得到延時時間 接著調用軟件延時 程序 include include define uchar unsigned char define uint unsigned int uchar m n uchar i timecount 0 timesec 0 timemin 0 timecheck 0 char r0 2 sbit beepIO P3 0 typedef unsigned char BYTE typedef unsigned int WORD typedef bit BOOL sbit rs P2 0 sbit rw P2 1 sbit ep P2 2 sbit pausekey P1 1 uchar k q f uchar code dis1 1 ji mo sha zhou uchar code dis2 2 tong hua uchar code dis3 3 qian nian lian uchar code T 49 2 0 0 0 xF8 0 x8B 0 xF8 0 xF2 0 xF9 0 x5B 0 xF9 0 xB7 0 xFA 0 x14 0 xFA 0 x66 0 x FA 0 xB9 0 xFB 0 x03 0 xFB 0 x4A 0 xFB 0 x8F 0 xFB 0 xCF 0 xFC 0 x0B 0 xFC 0 x43 0 xFC 0 x78 0 xFC 0 xAB 0 xFC 0 xDB 0 xFD 0 x08 0 xFD 0 x33 0 xFD 0 x5B 0 xFD 0 x81 0 xFD 0 xA5 0 xFD 0 xC7 0 xFD 0 xE7 0 xFE 0 x05 0 xFE 0 x21 0 xFE 0 x3C 0 xFE 0 x55 0 xFE 0 x6D 0 xFE 0 x84 0 xFE 0 x99 0 x FE 0 xAD 0 xFE 0 xC0 0 xFE 0 x02 0 xFE 0 xE3 0 xFE 0 xF3 0 xFF 0 x02 0 xFF 0 x10 0 xFF 0 x1D 0 xFF 0 x2A 0 xFF 0 x36 0 xFF 0 x42 0 xFF 0 x4C 0 x FF 0 x56 0 xFF 0 x60 0 xFF 0 x69 0 xFF 0 x71 0 xFF 0 x79 0 xFF 0 x81 uchar code music1 2 0 4 22 4 22 4 17 4 15 4 15 4 17 12 15 4 15 2 17 2 15 4 13 4 13 4 15 12 0 4 20 4 20 4 20 4 17 4 20 4 20 4 20 4 17 4 22 4 17 4 17 4 15 4 15 4 17 12 22 4 22 4 17 4 15 4 15 4 17 12 15 4 15 2 17 2 15 4 13 4 13 4 15 12 20 4 20 4 20 2 17 2 17 4 20 4 20 4 20 2 17 2 17 2 17 2 24 4 20 4 20 2 17 2 17 4 20 4 22 12 17 4 22 4 25 4 25 4 17 4 22 4 25 8 24 4 22 2 24 2 22 4 20 4 15 4 17 12 15 4 15 4 15 4 10 4 15 4 17 4 20 8 17 4 24 4 24 4 20 4 15 4 17 12 17 4 22 4 25 4 25 4 17 4 22 4 25 8 29 4 27 2 29 2 27 4 25 4 25 4 27 12 29 4 29 2 27 4 25 4 27 6 27 2 25 4 24 4 20 4 20 2 17 2 20 4 20 2 22 2 22 16 0 xFF 0 xFF uchar code music2 2 0 4 16 6 19 2 19 6 16 2 14 6 0 10 16 6 19 2 19 6 16 2 14 8 0 8 26 8 21 6 24 2 23 6 21 2 19 8 21 16 0 8 16 6 19 2 19 6 16 2 14 8 0 8 26 8 21 6 23 2 21 14 24 6 23 2 21 6 19 2 16 6 14 2 13 8 14 16 0 4 19 6 19 2 21 6 21 2 23 8 21 4 0 4 19 6 19 2 16 6 19 2 16 8 1 4 6 0 4 19 6 19 2 21 6 21 2 23 8 21 4 0 4 19 6 19 2 16 6 19 2 16 8 1 4 6 0 4 26 16 21 4 26 4 21 4 26 16 21 4 26 16 0 4 16 8 16 8 14 8 16 8 21 4 26 4 21 4 26 4 0 8 16 8 16 8 14 8 1 6 8 21 4 26 4 21 4 26 4 0 8 19 8 19 6 21 2 16 8 0 8 19 6 21 2 19 6 21 2 16 8 0 8 21 8 26 8 21 4 24 12 23 6 21 2 19 8 21 16 14 4 21 4 14 4 19 4 16 6 14 2 13 8 14 16 0 xFF 0 xFF uchar code music3 2 0 4 27 4 19 4 19 4 27 4 26 4 26 2 27 2 24 8 22 4 17 4 24 4 22 4 19 16 15 4 12 4 12 4 15 4 17 8 19 8 26 6 26 2 26 4 24 4 24 4 19 4 19 8 27 4 19 4 19 4 27 4 26 4 26 2 27 2 24 6 24 2 22 4 17 4 24 4 22 4 19 16 15 4 12 4 12 4 15 4 17 8 19 8 19 6 19 2 19 4 17 4 14 4 14 4 14 4 7 4 12 24 0 xFF 0 xFF uchar timetable 00 00 void delay uchar p uchar i j for p 0 p for i 181 i 0 i for j 181 j 0 j BOOL lcd bz BOOL result rs 0 rw 1 ep 1 nop nop nop nop result BOOL P0 ep 0 return result void lcd wcmd BYTE cmd while lcd bz rs 0 rw 0 ep 0 nop nop P0 cmd nop nop nop nop ep 1 nop nop nop nop ep 0 void lcd pos BYTE pos lcd wcmd pos 0 x80 void lcd wdat BYTE dat while lcd bz rs 1 rw 0 ep 0 P0 dat nop nop nop nop ep 1 nop nop nop nop ep 0 void lcd init lcd wcmd 0 x38 delay 1 lcd wcmd 0 x0c delay 1 lcd wcmd 0 x06 delay 1 lcd wcmd 0 x01 delay 1 void pause uchar i j for i 150 i 0 i for j 150 j 0 j void timecount init interrupt 3 TH1 65535 45872 256 TL1 65535 45872 256 timecount if timecount 20 timesec timecount 0 if timesec 60 timesec 0 timemin void adfa interrupt 0 timesec 0 timemin 0 r0 delay 5 if r0 11 r0 11 void adfii interrupt 2 if pausekey 0 beepIO 0 while pausekey 0 while pausekey 1 while pausekey 0 delay 8 else timesec 0 timemin 0 r0 delay 5 if r0 0 r0 1 void T0 int interrupt 1 beepIO beepIO TH0 T m 0 TL0 T m 1 void zhuanhuan timetable 3 timesec 10 0 timetable 4 timesec 10 0 timetable 2 timetable 0 timemin 10 0 timetable 1 timemin 10 0 void timedis if timecheck timesec timecheck timesec zhuanhuan lcd pos 0 x49 lcd wdat timetable 0 lcd wdat timetable 1 lcd wdat timetable 2 lcd wdat timetable 3 lcd wdat timetable 4 void main uchar i 0 lcd check 0 TMOD 0 x11 TH1 65535 45872 256 TL1 65535 45872 256 PX0 1 PX1 1 EX0 1 EX1 1 EA 1 ET0 1 ET1 1 TR1 1 pausekey 1 lcd init while 1 if r0 0 delay 1 lcd pos 0 i 0 while dis1 i 0 lcd wdat dis222 i i if r0 1 timedis if lcd check r0 lcd wcmd 0 x01 delay 1 lcd check r0 lcd pos 0 i 0 while dis1 i 0 lcd wdat dis1 i i m music1 i 0 n music1 i 1 if m 0 x00 TR0 0 delay n i else if m 0 xFF TR0 0 delay 30 i 0 timesec 0 timemin 0 else if m music1 i 1 0 TR0 1 delay n TR0 0 pause i else TR0 1 delay n i if r0 2 timedis if lcd check r0 lcd wcmd 0 x01 delay 1 lcd check r0 lcd pos 0 i 0 while dis2 i 0 lcd wdat dis2 i i m music2 i 0 n music2 i 1 if m 0 x00 TR0 0 delay n i else if m 0 xFF TR0 0 delay 30 i 0 timesec 0 timemin 0 else if m music2 i 1 0 TR0 1 delay n TR0 0 pause i else TR0 1 delay n i 4 系統(tǒng)軟件仿真 在這里系統(tǒng)仿真我們使用實驗室常用的 Protues 仿真軟件 把總電路畫入 ISIS 軟件 把程序加入 Keil 軟件 然后進行軟件和硬件的統(tǒng)一調試 8 圖 10 仿真初始界面 圖 11 仿真播放第一首 圖 12 仿真播放第二首 圖 13 仿真播放第三首 總 結 經過這段

溫馨提示

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

評論

0/150

提交評論