版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、山東建筑大學信息與電氣工程學院學院課程設計說明書目 錄目 錄I摘 要I1設計目的及要求12總體設計內(nèi)容12.1 原理簡介12.2 方案設計思想12.3 相關芯片說明22.3.1芯片AT89C5122.3.2 芯片LCD1286432.4 電路各模塊說明32.4.1 時鐘振蕩電路、復位電路32.4.2 蜂鳴電路42.4.3 鍵盤電路42.4.4 顯示電路52.5 系統(tǒng)的設計62.6 軟件設計62.7 仿真、安裝和調(diào)試8總結與致謝9參考文獻10附錄11附錄一:音樂程序11附錄二:基于單片機的數(shù)字音樂盒總電路圖19摘 要本設計是基于單片機的數(shù)字音樂盒設計,由單片機AT89C51芯片和LCD顯示器為核
2、心,輔以必要的電路,構成的一個單片機電子數(shù)字音樂盒。要求利用I/O口產(chǎn)生一定頻率的方波,驅動蜂鳴器,發(fā)出不同的音調(diào)并采用LCD顯示信息,從而演奏樂曲(最少三首樂曲,每首不少于30秒),開機時有英文歡迎提示字符,播放時顯示歌曲序號(或名稱),可通過功能鍵選擇樂曲,暫停,播放。本設計采用4*4鍵盤,用Protel來畫系統(tǒng)硬件圖,采用匯編語言進行編程,編程后利用KEIL C51來進行編譯,再生成的HEX文件裝入芯片中,采用proteus軟件來仿真,檢驗功能得以正常實現(xiàn)。該音樂盒的設計可以通過按鍵選擇不同的曲目,播放和暫停,并通過LCD顯示歌曲號及播放時間。關鍵詞:音樂盒;AT89C51;LCD顯示器
3、 Protel軟件;4*4鍵盤 I 1設計目的及要求設計目的:運用單片機設計數(shù)字音樂盒設計要求:1、利用I/O口產(chǎn)生一定頻率的方波,驅動蜂鳴器,發(fā)出不同的音調(diào),從而演奏樂曲(最少儲存三首樂曲,每首不少于30秒)2、采用LCD顯示信息3、開機時有英文歡迎提示字符,播放時顯示歌曲序號(或名稱)4、可通過功能鍵選擇樂曲,暫停,播放 5、顯示樂曲播放時間或剩余時間2總體設計內(nèi)容 2.1 原理簡介當鍵盤有鍵按下時,判斷鍵值,啟動計數(shù)器T0,產(chǎn)生一定頻率的脈沖,驅動蜂鳴器,放出樂曲。同時啟動定時器T1,顯示樂曲播放的時間,并驅動LCD,顯示歌曲號。2.2 方案設計思想用AT89S52單片機的I/O口產(chǎn)生一
4、定頻率的方波,驅動蜂鳴器,發(fā)出不同的音調(diào),從而演奏樂曲。共有4樂曲,每首樂曲都由相應的按鍵控制,并且有開關鍵、暫停鍵、上一曲以及下一曲控制鍵。其組成框圖如2.2所示圖2.22.3 相關芯片說明2.3.1芯片AT89C51AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM)的低電壓,高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在
5、單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖2.3所示 圖2.32.3.2 芯片LCD12864帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為128×64, 內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面??梢燥@示8×4行16
6、5;16點陣的漢字.也可完成圖形顯示2.4 電路各模塊說明2.4.1 時鐘振蕩電路、復位電路時鐘電路在單片機系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎。在一個單片機應用系統(tǒng)中,時鐘是保障系統(tǒng)正常工作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統(tǒng)工作的快慢。為達到振蕩周期是12MHZ的要求,這里要采用12MHZ的晶振,另外有兩個22P的獨石電容,兩晶振引腳分別連到XTAL1和XTAL2振蕩脈沖輸入引腳。其電路圖如2.4.1所示圖2.4.12.4.2 蜂鳴電路利用PNP管(9012)放大驅動?;鶚O接10K歐姆的電阻,發(fā)射極接蜂鳴器,集電極接電源。其電路圖如圖2
7、.4.2所示圖2.4.22.4.3 鍵盤電路 鍵盤在單片機應用系統(tǒng)中能實現(xiàn)向單片機輸入數(shù)據(jù),傳送命 圖3令等功能,是人工干預單片機的主要手段。鍵盤模塊采用4*4按鍵模式(S1-S16),接在單片機的P0口上。當用手按下一個鍵時,往往按鍵在閉合位置和斷開位置之間跳幾下才穩(wěn)定到閉合狀態(tài)的情況;在釋放一個鍵時,也回會出現(xiàn)類似的情況。這就是抖動。抖動的持續(xù)時間隨鍵盤材料和操作員而異,不過通??偸遣淮笥?0ms。很容易想到,抖動問題不解決就會引起對閉合鍵的識別。用軟件方法可以很容易地解決抖動問題,這就是通過延遲10ms來等待抖動消失,這之后,在讀入鍵盤碼。其電路如圖2.4.3所示圖2.4.32.4.4
8、顯示電路顯示電路采用LCD模塊,LCD顯示模塊采用LCD12864。LCD顯示模塊電路圖和驅動模塊電路如圖2.4.4所示。圖2.4.42.5 系統(tǒng)的設計其系統(tǒng)總電路圖見附錄一2.6 軟件設計主模塊是系統(tǒng)軟件的主框架。結構化程序設計一般有“自上而下”和“自下而上”兩種方式,“自上而下”法的核心就是主框架的構建。它的合理與否關系到程序最終的功能的多少和性能的好壞。本程序可以實現(xiàn)課程設計的基本要求,并可以通過按鍵播放多首歌曲,主程序流程圖和顯示子程序的流程圖如圖2.6所示。數(shù)字音樂盒主程序流程圖顯示子程序流程圖2.7 仿真、安裝和調(diào)試仿真部分采用Keil軟件,進行編程和仿真,修改編程錯誤以及連接錯誤
9、??偨Y與致謝學了一學期的單片機,對單片機的硬件設計,軟件設計掌握的深度不夠,但通過此次課程設計,卻改變了很多,首先對于硬件電路的工作原理有了進一步的學習,同樣就有了進一步的認識;其次軟件方面,在程序的設計,程序的調(diào)試方面都學到了很多東西,這是第一次編寫單片機的大程序,很有成就感。在此次單片機的課程設計中,我不但對單片機的基礎知識掌握的更牢固,而且對其硬件和軟件方面有了更深一層的認識。在做數(shù)字音樂盒的課程設計時,我掌握了AT89C51單片機的內(nèi)部振蕩方式及振蕩頻率和單片機的復位電路形式。此次設計的軟件編程采用的是我們所學的匯編語言,通過對數(shù)字音樂盒的編程,我更熟悉了鍵盤掃描和動態(tài)顯示的編程以及定
10、時計數(shù)器和中斷的編程。鞏固了對AT89C51的內(nèi)部結構和接口擴展的知識。本次設計中,我用到了protel99畫圖軟件,keil C51編程軟件。以前雖然對protel99有一定的認識,能運用其畫圖,不缺不熟練,這次設計是我對其的熟練程度提高了不少。參考文獻1 許珉.單片機原理及應用M.北京:中國電力出版社,2007.08 2 John Markus.電子電路大全M.北京:計量出版社,19953 閻石.數(shù)字電子技術基礎M.北京:高等教育出版社,1998.12,第4版4 鄧元慶.數(shù)字電路與邏輯設計M.北京:電子工業(yè)出版社,2001 5 高鋒,單片微型計算機原理與接口技術.科學出版社,2003年.
11、6 三恒星科技.MCS-51單片機原理與應用實例M. 北京:電子工業(yè)出版社,2008.017 王為青,程國鋼.單片機Keil Cx51應用開發(fā)技術M. 北京:人民郵電出版社,2007.02 8 李傳軍,單片機原理及應用(第一版).河南科學技術出版社,2006年.9 楊志忠.數(shù)字電子技術.高等教育出版社(第二版)M.2003年.10 張友德.單片微型機原理應用與實驗.上海復旦大學出版社,2000附錄附錄一:音樂程序#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit BEEP = P14;
12、 /蜂鳴器sbit k0=P20;sbit k1=P21;sbit k2=P22;sbit k3=P23;sbit k4=P24;sbit k5=P25;sbit k6=P26;uint code Tone_Delay_Table = 64021,64103,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110,65157,65178 ;uchar code Song1_Tone=1, 1, 5, 5, 6, 6, 5,4, 4, 3 ,3, 2, 2, 1,5, 5, 4, 4, 3, 3, 2, 5
13、, 5, 4, 4, 3, 3, 2,1,1, 5, 5, 6, 6 ,5,4 ,4, 3, 3, 2, 2, 1,0xff;uchar code Song1_Time=2,2,2,2,2,3,4,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,5,2,2,2,2,2,2,5,2,2,2,2,2,2,5,0xff;uchar code Song2_Tone=1,2,3,1,1,2,3,1,3,4,5,3,4,5, 5,6,5,4,3,1, 5,6,5,4,3,1 ,1,5,1,0xff;uchar code Song2_Time=2,2,3,2,2,2,3,2,
14、2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,0xff; uchar code Song3_Tone = 1,3,3,3,3,5,4,2,5,3,7,6,5,5,7,4,4,3,6,7,2,1,0xFF; uchar code Song3_Time = 2,1,1,2,1,1,1,2,1,1,3,2,1,1,2,4,1,1,2,1,1,1,0xFF; uchar code Song4_Tone = 8,9,2,3,7,6,2,3,10,11,1,2,3,1,2,3,3,4,5,6,5,3,5,6,5,3,5,3,2,1,1,2,3,0xFF; uc
15、har code Song4_Time = 3,6,7,2,4,5,8,1,2,2,5,5,1,9,1,1,1,1,6,1,1,2,4,1,1,2,1,1,1,1,1,2,2,1,0xFF;uchar Song_Index = 0, Tone_Index = 0; /音樂片段索引,音符索引uchar *Song_Tone_Pointer, *Song_Time_Pointer; /音符指針,延時指針uchar i = 0; uchar j=0,k=0,m=0; /從當前數(shù)組中取音符的位置 void DelayMS(uint ms) /延時 uchar t; while(ms-) for (t
16、= 0; t < 120; t+); void play0() /按鍵產(chǎn)生的INT0 ET0=1; TR0 = 0;k0=1; Song_Index = ( Song_Index + 1) % 4; /切換到下一音樂 switch (Song_Index) case 0: Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; break; case 1: Song_Tone_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: So
17、ng_Tone_Pointer = Song3_Tone; Song_Time_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break; /從下一段音樂的第0個音符開始 i = 0; while (k0=1&&k1=1&&k2=1&&k3=1&&k4=1&&k5=1&&k6=1) Tone_Index = Song_Tone_Pointeri;
18、if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結束后停頓一段時間 continue; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play1() ET0=1; TR0 = 0;k1=1; Song_Index = ( Song_Index + 3) % 4; /切換到上一段音樂 switch (Song_Index) case 0: Song_Tone_Pointer = Song1_Tone; Song
19、_Time_Pointer = Song1_Time; break; case 1: Song_Tone_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer = Song3_Tone; Song_Time_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break; i = 0; /從上一段音樂的第0個音符開始 while
20、(k0=1&&k1=1&&k2=1&&k3=1&&k4=1&&k5=1&&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結束后停頓一段時間 continue; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play2() m=!m; T
21、R0 = 0;k2=1;if(m=0) j=1; TR0=0;ET0=0; if(m=1) ET0=1; k=1;if(j=1) /播放被暫停的音樂 switch (Song_Index) case 0: Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; break; case 1: Song_Tone_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer = Song3_Tone; Song_Ti
22、me_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break; /從本一段音樂的第i個音符開始 while (k0=1&&k1=1&&k2=1&&k3=1&&k4=1&&k5=1&&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000
23、); /每段音樂播放結束后停頓一段時間 Song_Index = ( Song_Index + 1) % 4; /播放下一首音樂 switch (Song_Index) case 0: Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; break; case 1: Song_Tone_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer = Song3_Tone; Song_Time_Pointer
24、 = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break;continue; TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; if (j=0)j=1; Song_Tone_Pointer = Song1_Tone; /開始播放音樂 Song_Time_Pointer = Song1_Time; i = 0; while (k0=1&&k1=1&&
25、amp;k2=1&&k3=1&&k4=1&&k5=1&&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結束后停頓一段時間 Song_Index = ( Song_Index + 1) % 4; /播放下一段音樂 switch (Song_Index) case 0: Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time;
26、break; case 1: Song_Tone_Pointer = Song2_Tone; Song_Time_Pointer = Song2_Time; break; case 2: Song_Tone_Pointer = Song3_Tone; Song_Time_Pointer = Song3_Time; break;case 3: Song_Tone_Pointer = Song4_Tone; Song_Time_Pointer = Song4_Time; break; continue; TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index
27、* 240); TR0 = 0; i+; return; void play3() ET0=1; TR0 = 0; k3=1;/切換到第一段音樂 Song_Tone_Pointer = Song1_Tone; Song_Time_Pointer = Song1_Time; Song_Index=0; /從第一段音樂的第0個音符開始 i = 0; while (k0=1&&k1=1&&k2=1&&k3=1&&k4=1&&k5=1&&k6=1) Tone_Index = Song_Tone_Pointe
28、ri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結束后停頓一段時間 continue; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play4() ET0=1; TR0 = 0;k4=1;Song_Tone_Pointer = Song2_Tone;/切換到第二段音樂 Song_Time_Pointer = Song2_Time; Song_Index=1 ; i=0; /從第二段音樂的第0個音符開
29、始 while (k0=1&&k1=1&&k2=1&&k3=1&&k4=1&&k5=1&&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結束后停頓一段時間 continue; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0; i+; return; void play5()
30、 ET0=1; TR0 = 0;k5=1;Song_Tone_Pointer = Song3_Tone; /切換到第三段音樂 Song_Time_Pointer = Song3_Time; Song_Index=2; /從第三段音樂的第0個音符開始 i = 0; while (k0=1&&k1=1&&k2=1&&k3=1&&k4=1&&k5=1&&k6=1) Tone_Index = Song_Tone_Pointeri; if ( Tone_Index = 0xFF ) i = 0; DelayMS(2000); /每段音樂播放結束后停頓一段時間 continue; /繼續(xù)播放 TR0 = 1; DelayMS( Song_Time_Pointer Tone_Index * 240); TR0 = 0
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版板車運輸與物流設備租賃合同3篇
- 2025年度個人商鋪轉讓合同范本4篇
- 二零二五白蟻防治與建筑安全評估與隱患排查服務合同2篇
- 2025版企業(yè)間無利息貸款合同范本3篇
- 二零二五版國防信息安全保密責任書2篇
- 2025年度綠色苗圃場技術員專項技能聘用協(xié)議4篇
- 二零二五年攪拌站混凝土生產(chǎn)過程監(jiān)控與優(yōu)化合同3篇
- 2025年度網(wǎng)絡安全代理合作保密協(xié)議書3篇
- 2025版信托投資公司教育產(chǎn)業(yè)借款合同3篇
- 2025年度個人現(xiàn)金貸合同模板3篇
- 消防產(chǎn)品目錄(2025年修訂本)
- 地方性分異規(guī)律下的植被演替課件高三地理二輪專題復習
- 光伏項目風險控制與安全方案
- 《行政職業(yè)能力測驗》2023年公務員考試新疆維吾爾新疆生產(chǎn)建設兵團可克達拉市預測試題含解析
- 醫(yī)院投訴案例分析及處理要點
- 練習20連加連減
- 五四制青島版數(shù)學五年級上冊期末測試題及答案(共3套)
- 商法題庫(含答案)
- 鋼結構用高強度大六角頭螺栓連接副 編制說明
- 溝通與談判PPT完整全套教學課件
- 移動商務內(nèi)容運營(吳洪貴)項目四 移動商務運營內(nèi)容的傳播
評論
0/150
提交評論