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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)字音樂盒的設(shè)計 摘 要 傳統(tǒng)音樂盒 多是機械型的 體積笨重 發(fā)音單調(diào) 水 灰塵等外在因素 容易 使內(nèi)部金屬發(fā)音條變形 從而造成發(fā)音跑調(diào) 另外 機械音樂盒放音時為了讓音色穩(wěn) 定 必須放平不能動搖 而且價格昂貴 不能實現(xiàn)大批量生產(chǎn) 本設(shè)計是一個基于 AT89C51系列單片機的音樂盒 該音樂盒主要由按鍵電路 復(fù)位電路 時鐘電路 顯 示電路以及蜂鳴器組成 使用四個按鍵控制音樂盒 其中兩個按鍵用來控制歌曲的播 放 暫停 另兩個用來控制液晶上歌曲次序的變化 本音樂盒共有三首歌曲 播放歌 曲時 相應(yīng)歌曲對應(yīng)相應(yīng)數(shù)碼管上歌曲次序及歌名的顯示 關(guān)鍵詞 AT89C51 蜂鳴器 LCD 液晶顯示 音樂盒 目 錄 1 緒論 1 1 1 課題描述 1 1 2 基本工作原理及框圖 1 2 相關(guān)芯片及硬件電路設(shè)計 1 2 1 AT89C51 芯片 2 2 1 1 AT89C51 的功能特性 2 2 1 2 AT89C51 的主要性能參數(shù) 2 2 2 時鐘電路 3 2 3 復(fù)位電路 3 2 4 按鍵電路 4 2 5 蜂鳴器電路 4 2 6 顯示電路 5 2 6 1 線段的顯示 5 2 6 2 字符的顯示 5 2 7 總體電路 6 3 系統(tǒng)軟件設(shè)計 7 3 1 程序主要流程 7 3 2 程序設(shè)計 8 4 系統(tǒng)軟件仿真 15 總 結(jié) 18 致 謝 19 參考文獻 20 1 緒論 1 1 課題描述 隨著人類社會的發(fā)展 人們對視覺 聽覺方面的享受提出了越來越高的要求 小 小的音樂盒可以給人們帶來美好的回憶 提高人們的精神文化享受 傳統(tǒng)的音樂盒大 多數(shù)是機械型的 體積笨重 發(fā)音單調(diào) 不能實現(xiàn)批量生產(chǎn) 本文設(shè)計的音樂盒是以 單片機為核心元件的電子式音樂盒 體積小 重量輕 能演奏和旋音樂 功能多 使 用方便 可以批量生產(chǎn) 具有一定的商業(yè)價值 本設(shè)計是基于單片機的數(shù)字音樂盒設(shè) 計 由單片機 AT89C51 芯片和 LED 數(shù)碼管為核心 輔以必要的電路 構(gòu)成的一個單片 機電子數(shù)字音樂盒 1 1 2 基本工作原理及框圖 本次設(shè)計是一個基于AT89C51單片機的音樂盒 該音樂盒主要由時鐘電路 復(fù)位 電路 按鍵電路 蜂鳴器以及顯示電路組成 使用其中兩個按鍵來控制播放和暫停另 外兩個按鍵用來控制換曲 利在液晶上顯示曲目的更換 共三首音樂 蜂鳴器每播放 一首歌時液晶上顯示相對應(yīng)的歌曲次序 系統(tǒng)組成框圖如圖1 圖 1 基本工作原理框圖 2 相關(guān)芯片及硬件電路設(shè)計 AT89C51 單片機 LCD 液晶顯示 蜂鳴器 時鐘電路 復(fù)位電路 按鍵電路 2 1 AT89C51 芯片 圖 2 AT89C51 引腳圖 2 1 1 AT89C51 的功能特性 AT89C51 提供以下標準功能 4K 字節(jié) Flash 閃速存儲器 128 字節(jié)內(nèi)部 RAM 32 個 I O 口線 兩個十六位定時 計數(shù)器 一個 5 向量兩級中斷結(jié)構(gòu) 一個全雙工串行通 信口 片內(nèi)振蕩器及時鐘電路 同時 AT89C51 可降至 0Hz 的靜態(tài)邏輯操作 并支持 兩種軟件可選的節(jié)電工作模式 空閑方式停止 CPU 的工作 但允許 RAM 定時 計數(shù) 器 串行通信口及中斷系統(tǒng)繼續(xù)工作 掉電方式保存 RAM 中的內(nèi)容 但振蕩器停止工 作并禁止其他所有部件工作直到下一個硬件復(fù)位 2 1 2 AT89C51 的主要性能參數(shù) AT89C51 主要性能參數(shù)如下 與 MC 51 產(chǎn)品指令系統(tǒng)完全兼容 K 字節(jié)可編程閃爍 存儲器 壽命 1000 寫 擦循環(huán) 數(shù)據(jù)保留時間 10 年 全靜態(tài)工作 0Hz 24Hz 三級程序存儲器鎖定 128 8 位內(nèi)部 RAM 32 可編程 I O 線 兩個 16 位定時器 計數(shù)器 5 個中斷源 可編程串行通道 低功耗的閑置和掉電模式 2 2 時鐘電路 時鐘電路在單片機系統(tǒng)中起著非常重要的作用 是保證系統(tǒng)正常工作的基礎(chǔ) 在 一個單片機應(yīng)用系統(tǒng)中 時鐘是保障系統(tǒng)正常工作的基準振蕩定時信號 主要由晶振 和外圍電路組成 晶振頻率的大小決定了單片機系統(tǒng)工作的快慢 2 為達到振蕩周期是 12MHZ 的要求 這里要采用 12MHZ 的晶振 另外有兩個 22PF 的電容 晶振引腳分 別連到 XTAL1 和 XTAL2 振蕩脈沖輸入引腳 時鐘電路如圖 3 圖 3 時鐘電路 2 3 復(fù)位電路 單片機在啟動時都需要進行復(fù)位 以使CPU及系統(tǒng)各部件處于確定的初始狀態(tài) 并從初態(tài)開始工作 51系列單片機的復(fù)位信號是從RST引腳輸入到芯片內(nèi)的施密特觸 發(fā)器中的 當系統(tǒng)處于正常工作狀態(tài)時 且振蕩器穩(wěn)定后 如果RST引腳上有一個高 電平并維持2個機器周期 24個振蕩周期 以上 則CPU就可以響應(yīng)并將系統(tǒng)復(fù)位 3 單 片機系統(tǒng)的復(fù)位方式有 手動按鈕復(fù)位和上電復(fù)位 復(fù)位電路如圖4 圖 4 復(fù)位電路 2 4 按鍵電路 按鍵的閉合與否 反映在行線輸出電壓上就呈現(xiàn)高電平或低電平 如果高電平表 示鍵斷開 低電平則表示鍵閉合 通過對行線電平高低狀態(tài)的檢測 便可確認按鍵按 下與否 P1 0 P1 1 P1 4 P1 5 作為控制按鍵 其中 P1 0 P1 1 掃描行 P1 4 P1 5 掃 描列 可通過功能鍵選擇樂曲 暫停 播放 按鍵電路如圖 5 圖 5 按鍵電路 2 5 蜂鳴器電路 電路中蜂鳴器是發(fā)聲元件 在其兩端施加直流電壓 有源蜂鳴器 或者方波 無 源蜂鳴器 就可以發(fā)聲 其主要參數(shù)是外形尺寸 發(fā)聲方向 工作電壓 工作頻率 工作電流 驅(qū)動方式 直流 方波 等 4 由于蜂鳴器的工作電流一般比較大 單片機的I O口是無法直接驅(qū)動的 但AVR可 以驅(qū)動小功率蜂鳴器 所以要利用放大電路來驅(qū)動 一般使用三極管來放大電流就可 以了 蜂鳴器由一個三極管 兩個電阻和一個二極管組成 蜂鳴器電路如圖6 圖 6 蜂鳴器電路 2 6 顯示電路 2 6 1 線段的顯示 點陣圖形式液晶由M N顯示單元組成 假設(shè)LCD顯示屏有64行 每行有128列 每 8列對應(yīng)1字節(jié)的8位 即每行由16字節(jié) 共16 8 128個點組成 屏上64 16個顯示單元 與顯示RAM區(qū)1024字節(jié)相對應(yīng) 每一字節(jié)的內(nèi)容和顯示屏上相應(yīng)位置的亮暗對應(yīng) 例 如屏的第一行的亮暗由RAM區(qū)的000H 00FH的16字節(jié)的內(nèi)容決定 當 000H FFH時 則屏幕的左上角顯示一條短亮線 長度為8個點 當 3FFH FFH時 則屏 幕的右下角顯示一條短亮線 當 000H FFH 001H 00H 002H 00H 00EH 00H 00FH 00H時 則在屏幕的頂部顯示一條由8段亮線和 8條暗線組成的虛線 這就是LCD顯示的基本原理 5 2 6 2 字符的顯示 用 LCD 顯示一個字符時比較復(fù)雜 因為一個字符由 6 8 或 8 8 點陣組成 要找到 和顯示屏幕上某幾個位置對應(yīng)的顯示 RAM 區(qū)的 8 字節(jié) 還要使每字節(jié)的不同位為 1 其它的為 0 為 1 的點亮 為 0 的不亮 這樣一來就組成某個字符 但由于內(nèi)帶字 符發(fā)生器的控制器來說 顯示字符就比較簡單了 可以讓控制器工作在文本方式 根 據(jù)在 LCD 上開始顯示的行列號及每行的列數(shù)找出顯示 RAM 對應(yīng)的地址 設(shè)立光標 在此送上該字符對應(yīng)的代碼即可 6 顯示電路如圖 7 圖 7 顯示電路 2 7 總體電路 總結(jié)時鐘電路 復(fù)位電路 按鍵電路 蜂鳴器以及顯示電路 把其放入一個電路 得到總體的電路 總體電路如圖 8 圖 8 總體電路圖 3 系統(tǒng)軟件設(shè)計 3 1 程序主要流程 流程圖如圖 9 所示 初始化界面 K3是否按下 K4是否按下 K1是否按下 K2是否按下 停止 切換上一首 切換下一首 播放音樂 開始計時 停止音樂 停止計時 N N N Y Y Y Y 開始 圖 9 流程圖 3 2 程序設(shè)計 對音樂do re mi fa so la si分別編碼為1 7 重音do編為8 重音re編為9 停頓編為 0 播放長度以十六分音符為單位 在本程序中為165ms 一拍即四分音符等于4個十 六分音符 編為4 其它的播放時間以此類推 音調(diào)作為編碼的高4位 而播放時間作為 低4位 如此音調(diào)和節(jié)拍就構(gòu)成了一個編碼 以0 xff作為曲譜的結(jié)束標志 7 舉例1 音 調(diào)do 發(fā)音長度為兩拍 即二分音符 將其編碼為0 x18 舉例2 音調(diào)re 發(fā)音長度為半拍 即八分音符 將其編碼為0 x22歌曲播放的設(shè)計 先將歌曲的簡譜進行編碼 儲存在一 個數(shù)據(jù)類型為unsigned char的數(shù)組中 程序從數(shù)組中取出1個數(shù) 然后分離出高4位得到 音調(diào) 接著找出相應(yīng)的值賦給定時器0 使之定時操作蜂鳴器 得出相應(yīng)的音調(diào) 接著 分離出該數(shù)的低4位 得到延時時間 接著調(diào)用軟件延時 程序 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)一調(diào)試 8 圖 10 仿真初始界面 圖 11 仿真播放第一首 圖 12 仿真播放第二首 圖 13 仿真播放第三首 總 結(jié) 經(jīng)過這段

溫馨提示

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

評論

0/150

提交評論