單片機課程設(shè)計報告數(shù)字音樂盒精品_第1頁
單片機課程設(shè)計報告數(shù)字音樂盒精品_第2頁
單片機課程設(shè)計報告數(shù)字音樂盒精品_第3頁
單片機課程設(shè)計報告數(shù)字音樂盒精品_第4頁
單片機課程設(shè)計報告數(shù)字音樂盒精品_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、沈陽航空航天大學課課 程程 設(shè)設(shè) 計計 報報 告告課程設(shè)計名稱:單片機系統(tǒng)綜合課程設(shè)計單片機系統(tǒng)綜合課程設(shè)計課程設(shè)計題目:數(shù)字音樂盒的設(shè)計與實現(xiàn)數(shù)字音樂盒的設(shè)計與實現(xiàn)院(系):計算機學院專 業(yè): 班 級: 學 號: 姓 名: 指導教師: 說明:結(jié)論(優(yōu)秀、良好、中等、及格、不及格)作為相關(guān)教環(huán)節(jié)考核必要依據(jù);格式不符合要說明:結(jié)論(優(yōu)秀、良好、中等、及格、不及格)作為相關(guān)教環(huán)節(jié)考核必要依據(jù);格式不符合要求;數(shù)據(jù)不實求;數(shù)據(jù)不實,不予通過。報告和電子數(shù)據(jù)必須作為實驗現(xiàn)象重復的關(guān)鍵依據(jù)。不予通過。報告和電子數(shù)據(jù)必須作為實驗現(xiàn)象重復的關(guān)鍵依據(jù)。沈陽航空航天大學課程設(shè)計報告 I 學術(shù)誠信聲明 本人聲明

2、本人聲明:所呈交的報告(含電子版及數(shù)據(jù)文件)是我個人在導師指導下獨立進行設(shè)計工作及取得的研究結(jié)果。盡我所知,除了文中特別加以標注或致謝中所羅列的內(nèi)容以外,報告中不包含其他人己經(jīng)發(fā)表或撰寫過的研究結(jié)果,也不包含其它教育機構(gòu)使用過的材料。與我一同工作的同學對本研究所做的任何貢獻均己在報告中做了明確的說明并表示了謝意。報告資料及實驗數(shù)據(jù)若有不實之處,本人愿意接受本教學環(huán)節(jié)“不及格”和“重修或重做”的評分結(jié)論并承擔相關(guān)一切后果。 本人簽名: 日期: 年 月 日沈陽航空航天大學課程設(shè)計報告 II 沈陽航空航天大學沈陽航空航天大學課課程程設(shè)設(shè)計計任任務(wù)務(wù)書書課程設(shè)計名稱XXXX 課課程程設(shè)設(shè)計計專業(yè)學生姓

3、名班級學號題目名稱起止日期年月日起至年月日止課設(shè)內(nèi)容和要求:參考資料: 教教研研室室審審核核意意見見: 教教研研室室主主任任簽簽字字:指導教師(簽名)指導教師(簽名)年月日學學 生(簽名)生(簽名)年月日沈陽航空航天大學課程設(shè)計報告 III 課程設(shè)計總結(jié):課程設(shè)計總結(jié):在不知不覺中兩個星期過去了,回想起來,真是一言難盡,期間既有無奈辛酸,又有成功的喜悅。學了一學期的單片機,對單片機的硬件設(shè)計,軟件設(shè)計掌握的掌握程度遠遠不夠,但經(jīng)過這段時間努力,在老師的耐心指導下,從設(shè)計、論證、修改到編程、調(diào)試,終于使我的設(shè)計完成了。使我無論在理論基礎(chǔ)知識還是在實際的操作能力上都有了較大的提高,更讓我懂得了一分

4、耕耘一分收獲的道理。通過本次音樂盒的設(shè)計,極大地激發(fā)了我對單片機的學習興趣,同時也讓我學習到了很多新的東西,比如單片機的定時器功能,LED 的數(shù)碼顯示,功能鍵盤的設(shè)計等,這些都讓我受益匪淺。這其中有以前書本上學習過的知識,也有很多未曾注意到得新知識,比如如何將樂譜轉(zhuǎn)換成機器能識別的代碼,并讓機器演奏音樂這一點,課本上并未涉及,但通過查找資料,讓我學會了如何實現(xiàn),我認為更主要的是讓我明白了如何主動學習。這些曾使我的設(shè)計出錯的問題,通過自己的努力,老師指導和同學的幫助,終于被我一個一個的克服了,順利把硬件實物順利做好,把軟件調(diào)試完成了。通過此次課程設(shè)計,讓我明白了很多,不光讓我明白了很多新的知識,

5、更讓我懂得了如何學習,讓我知道了如何做人,這一點主要感謝我的課設(shè)指導老師,是他一直在教導我,鼓勵我,才讓我順利完成了任務(wù),在這里我表示衷心的感謝。一分耕耘一分收獲,只要真心付出了,就一定會有所回報。我愿在未來的學習和研究過程中,以更加豐厚的成果來答謝曾經(jīng)幫助過我的老師,同學和朋友.沈陽航空航天大學課程設(shè)計報告 IV 目目 錄錄1 概述概述.11.1 數(shù)字音樂盒簡介 .11.2 發(fā)聲原理介紹 .12 音樂盒總體設(shè)計音樂盒總體設(shè)計.42.1 設(shè)計要求 .42.2 方案論證與設(shè)計 .42.2.1 總體方案設(shè)計.42.2.2 LED 驅(qū)動模塊設(shè)計 .52.2.3 系統(tǒng)總體結(jié)構(gòu)框圖.53 系統(tǒng)硬件設(shè)計系

6、統(tǒng)硬件設(shè)計.63.1 管腳說明 .63.2 振蕩器特性 .73.3 LED 顯示器的結(jié)構(gòu) .83.4 LED 顯示器工作原理 .83.5 鍵盤.93.6 時鐘電路模塊.93.7 音頻輸出部分 .113.8 整體電路設(shè)計 .124 子函數(shù)描述子函數(shù)描述.134.1 定時器中斷設(shè)計: .134.2 數(shù)碼管顯示模塊設(shè)計: .134.3 鍵盤控制模塊設(shè)計: .144.4 蜂鳴器演奏子函數(shù)模塊設(shè)計: .164.5 整體流程圖設(shè)計: .185 調(diào)試與結(jié)果分析調(diào)試與結(jié)果分析.195.1 調(diào)試步驟及方法 .195.2 實驗結(jié)果 .19參考文獻參考文獻.20附附 錄(關(guān)鍵部分程序清單)錄(關(guān)鍵部分程序清單).2

7、1沈陽航空航天大學課程設(shè)計報告 1 1 概述1.1 數(shù)字音樂盒簡介數(shù)字音樂盒簡介 音樂盒的起源,可追溯至中世紀歐洲文藝復興時期。當時為使教會的的鐘塔報時,而將大小的鐘表上機械裝置,被稱為 “可發(fā)出聲音的組鐘 ”。音樂盒 300 多年的產(chǎn)品發(fā)展,同時也是人類文明300 多年發(fā) 展的歷史鑒證。每個不同時期的音樂盒造型,都能折射出當時不同的社會心態(tài)和文明發(fā)展現(xiàn)狀,它也成了時代的一面鏡子。現(xiàn)今,音樂盒的制造,延襲傳統(tǒng),結(jié)合現(xiàn)代,正日益成為人們或為了典藏一段歲月,或為了收藏一份情感,或出于對音樂的追求,或?qū)τ谂f時代的懷念,或為了居室的美化,等等,而得到眾多品位人士的追求。 音樂盒的分類 :18 音,30

8、 音,這些是代表音樂盒機芯的音數(shù),其實也就是機芯里面,那一排鋼條的數(shù)量,鋼條的數(shù)量越多,也就是音數(shù)越高,奏出來的音色就越豐富,曲子也就是越好聽,同時曲子的播放時間也相應長一點。一般18 音的曲子為 25 秒左右,30 音的曲子為 35 秒左右。50 音的差不多有 60 秒。目前來說,一般市面上賣的 “愛麗絲”都是 18 音的,其次是 30 音,50 音。此次設(shè)計的目的就是運用單片機來設(shè)計一套控制系統(tǒng),來完成音樂播放的控制,并設(shè)計一套硬件來進行音調(diào)播放的實際模擬,從而有欣賞音樂的效果。1.2 發(fā)聲原理介紹發(fā)聲原理介紹 首先介紹蜂鳴器的發(fā)聲原理。眾所周知, 音調(diào)和音調(diào)的時長 是音符的主要特征,通過

9、產(chǎn)生不同的音調(diào)和音調(diào)的時長可以奏出不同的音符來。然后一個個音符串聯(lián)在一起就可以產(chǎn)生美妙的音樂來了。 音調(diào)主要由聲音的頻率決定 ,通過單片機給蜂鳴器不同的音頻脈沖來產(chǎn)生不同的音調(diào)。要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(周期 =1/頻率),然后將此周期除以 2 即為半周期的時間。利用單片機的定時器工作在計數(shù)模式MODE1 下,設(shè)定 TH0 和 TL0 的沈陽航空航天大學課程設(shè)計報告 2 值以產(chǎn)生這半個周期,每當計時到達時就將輸出脈沖的I/O(即接蜂鳴器的那個管腳)反相,然后重復計時此半個周期再對I/O 反相,就可以在 I/O 引腳上得到此頻率的脈沖。下面附上不同音調(diào)所對應的頻率表:音符頻率(Hz

10、)/初值(s)音符頻率(Hz)/初值(s)低 1DO262/63627中 1DO 523/64580高 1DO1042/65056低 2RE 294/63835中 2RE589/64687高 2RE 1245/65134低 3M330/64021中 3M 661/64780高 3M1318/65157低 4FA 350/64107中 4FA700/64822高 4FA 1397/65178低 5SO393/64264中 5SO 786/64900高 5SO1568/65217低 6LA 441/64402中 6LA882/64969高 6LA 1760/65252低 7SI495/64526中

11、 7SI 990/65031表表 1.1 C 調(diào)各音符頻率與計數(shù)初值調(diào)各音符頻率與計數(shù)初值 T 的對照表的對照表節(jié)拍的產(chǎn)生:音樂中的節(jié)拍用延時時間產(chǎn)生。例如, 1 拍=0.4s,1/4 拍=0.1s,以此類推。假設(shè) 1/4 拍執(zhí)行一次延時程序,則 1/2 拍就執(zhí)行兩次延時程序,所以只要求出 1/4 拍的延時時間,其余節(jié)拍就是它的倍數(shù)。為了方便,將節(jié)拍數(shù)也進行了編碼,并且計算了樂譜節(jié)拍編程時的延時時間。按 1/4 拍為一個延時時間的節(jié)拍編碼與節(jié)拍對應的表按 1/8 拍為一個延時時間的節(jié)拍編碼與節(jié)拍對應的表節(jié)拍編碼節(jié)拍節(jié)拍編碼節(jié)拍節(jié)拍編碼節(jié)拍節(jié)拍編碼節(jié)拍11/466/411/866/822/488

12、/422/888/833/4A10/433/8A10/844/4C12/444/8C12/855/4F15/455/8 表表 1.2 節(jié)拍數(shù)編碼表節(jié)拍數(shù)編碼表沈陽航空航天大學課程設(shè)計報告 3 樂譜節(jié)拍1/4 拍的延時時間樂譜節(jié)拍1/8 拍的延時時間4/4125 ms4/462 ms3/4187 ms3/494 ms2/4250 ms2/4125 ms表表 1.3 樂譜節(jié)拍編程時的時間延時表樂譜節(jié)拍編程時的時間延時表 如果沒有必要進行精確的計時,可以用for 循環(huán)空語句來粗略計時即可(本次課設(shè)選用此法)。當單片機使用11.0592Mhz 的晶振時,for(i=0;i115;i+);這個空循環(huán)延時

13、約為 1ms;當晶振選用 12Mhz 時,可使用 for(i=0;i125;i+);這個空循環(huán)來延時 1ms。在這個空循環(huán)外頭再進行一次循環(huán)就可以實現(xiàn)延時若干 ms。沈陽航空航天大學課程設(shè)計報告 4 2 音樂盒總體設(shè)計2.1 設(shè)計要求設(shè)計要求 本次數(shù)字音樂盒課程設(shè)計是利用 I/O 口產(chǎn)生一定頻率的方波,從而驅(qū)動蜂鳴器,發(fā)出不同的音調(diào),從而演奏樂曲因為產(chǎn)生的頻率不同,所以導致蜂鳴器發(fā)出的音調(diào)不同,由不同的音調(diào)和節(jié)拍可組成不同的音樂。演奏過程中可采用七段數(shù)碼管顯示當前播放的歌曲序號和播放時間。同時可通過鍵盤數(shù)字鍵直接選擇樂曲,也可以用功能鍵選擇上一曲和下一曲,具有暫停和播放控制功能。例如本次課設(shè)按

14、 1 鍵選擇第一首歌曲,按 2 鍵選擇第二首歌曲,按 A 鍵暫停,按 B 鍵繼續(xù)唱歌。2.2 方案論證與設(shè)計方案論證與設(shè)計2.2.1 總體方案設(shè)計總體方案設(shè)計通過單片機的定時器產(chǎn)生一定長度的方波,方波脈沖驅(qū)動蜂鳴器發(fā)聲。要產(chǎn)生音頻脈沖,只需算出某一音頻的周期(1/音頻) ,然后取半周期的時間定時。利用定時器計時這個半周期時間,每當計時到后就將輸出脈沖的 I/O 反相,然后重復計時此半周期時間再對 I/O 口反相,就可在 I/O 腳上得到此頻率的脈沖。如中音 D0,頻率為 523HZ,其周期 T=1/523=1912 微秒,因此只要令計數(shù)器定時 1912/2=956,在每計數(shù) 956 次時將 I

15、/O 口反相,就可得到中音D0(523HZ)。 當鍵盤有鍵按下時,判斷鍵值,啟動計數(shù)器 T0,產(chǎn)生一定頻率的脈沖,驅(qū)動蜂鳴器,放出樂曲。同時啟動定時器 T1,在 LED 顯示歌曲號, 。數(shù)碼管采用共陰極數(shù)碼管,實現(xiàn)歌曲序號的顯示;功能鍵盤采用按鍵開關(guān),實現(xiàn)歌曲播放順序的調(diào)換和暫停播放功能;蜂鳴器由單片機的 P3.6 口控制,實現(xiàn)歌曲播放。通過按下功能鍵實現(xiàn)上一首和下一首及暫停播放,同時有數(shù)碼管顯示當前沈陽航空航天大學課程設(shè)計報告 5 播放歌曲的序號,蜂鳴器播放出音樂。2.2.2 LED 驅(qū)動模塊設(shè)計驅(qū)動模塊設(shè)計方案一:采用靜態(tài)鎖存方式,將每一個 LED 發(fā)光管的一端接至單片機的一個I/O 口,

16、另一端通過電阻接電源。這種方法可以直接驅(qū)動 LED,原理簡單,驅(qū)動能力強,LED 的亮度也可以通過限流電阻調(diào)節(jié),非常方便,但此種方法太浪費單片機的 I/O 口,只適合于較小的系統(tǒng)。方案二:采用動態(tài)掃描方式,通過三極管驅(qū)動并聯(lián)在一起的 LED 發(fā)光管的一端(共陰極),LED 發(fā)光管的另一腳接通用 I/O 口,控制其亮滅。該方法能驅(qū)動較多的 LED,控制方式較靈活,而且節(jié)省單片機的資源。比較以上兩種方案,系統(tǒng)設(shè)計中采用方案二。2.2.3 系統(tǒng)總體結(jié)構(gòu)框圖系統(tǒng)總體結(jié)構(gòu)框圖 MCS-51單片機電源電路LED顯示復位電路晶振電路蜂鳴器電路按鍵矩陣電路沈陽航空航天大學課程設(shè)計報告 6 3 系統(tǒng)硬件設(shè)計本設(shè)

17、計中用到了 8051 單片機,4*6 鍵盤,蜂鳴器,8 段數(shù)碼管等硬件電路常用元器件。3.13.1 管腳說明管腳說明 8051 芯片如圖 3.1 所示:VCC:供電電壓。 GND:接地。P0 口,P1 口,P2 口,P3 口:四個 8 位 I/O 口P3 口也可作為 8051 的一些特殊功能口,如下所示: 管口管腳 備選功能P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷 0) P3.3 /INT1(外部中斷 1) P3.4 T0(記時器 0 外部輸入) P3.5 T1(記時器 1 外部輸入) P3.6 /WR(外部數(shù)據(jù)存儲器寫選通) P3.7 /

18、RD(外部數(shù)據(jù)存儲器讀選通)RST:復位輸入。當振蕩器復位器件時,要保持 RST 腳兩個機器周期的高電平時間。 ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。/PSEN:外部程序存儲器的選通信號。/EA/VPP:/EA 保持低電平時,在此期間為外部程序存儲器(0000H-FFFFH) ,不管是否有內(nèi)部程序存儲器。注意加密方式 1 時,/EA 將內(nèi)部鎖定為 RESET;沈陽航空航天大學課程設(shè)計報告 7 當/EA 端保持高電平時,此時為內(nèi)部程序存儲器。X1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。X2:來自反向振蕩器的輸出。圖圖 3.13.1 80518

19、051 芯片示意圖芯片示意圖 3.23.2 振蕩器特性振蕩器特性X1 和 X2 分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,X2 應不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。沈陽航空航天大學課程設(shè)計報告 8 3.33.3 LEDLED 顯示器的結(jié)構(gòu)顯示器的結(jié)構(gòu)常用的 LED 顯示器為 8 段。每一個段對應 1 個發(fā)光二極管,這種顯示器有共陽極和共陰極兩種:共陰極 LED 顯示器的發(fā)光二極管的陰極連接在一起,通常此公共陰極接地。當某個發(fā)光二極

20、管的陽極為高電平時,發(fā)光二極管點亮,相應的段被顯示。同樣,共陽極 LED 顯示器的發(fā)光二極管的陽極連接在一起,通常此公共陽極接正電壓,當某個發(fā)光二極管的陰極接低電平時,發(fā)光二極管被點亮,相應的段被顯示。為了使 LED 顯示器顯示不同的符號或數(shù)字,就要把不同段的發(fā)光二極管點亮,這樣就要為 LED 提供代碼,因為這些代碼可使 LED 相應的段發(fā)光,從而顯示不同字型,因此該代碼稱為段碼。7 段發(fā)光二極管,再加上 1 個小數(shù)點位,共計 8 位。因此提供給 LED 顯示器的段碼正好是 1B。各段與字節(jié)中各位對應關(guān)系如下表 3.2:代碼位D7D6D5D4D3D2D1D0顯示位dpgfEdcba表表 3.2

21、 8 段段 LED 結(jié)構(gòu)及外形結(jié)構(gòu)及外形3.43.4 LEDLED 顯示器工作原理顯示器工作原理由 N 個 LED 顯示塊可以拼接成 N 位的 LED 顯示器。如圖是 LED 數(shù)碼管。圖圖 3.33.3 數(shù)碼管結(jié)構(gòu)圖數(shù)碼管結(jié)構(gòu)圖沈陽航空航天大學課程設(shè)計報告 9 N 個 LED 顯示器有 N 個位選線和 8*N 位 根段碼線。段碼線控制顯示字符的字型,而位選線為各個 LED 顯示塊中各段的公共端,它控制該 LED 顯示位的亮或暗。LED 顯示器有靜態(tài)顯示和動態(tài)顯示兩種。 3.53.5 鍵盤鍵盤圖圖 3.43.4 鍵盤電路鍵盤電路鍵盤在單片機應用系統(tǒng)中能實現(xiàn)向單片機輸入數(shù)據(jù),傳送命令等功能,是人工

22、干預單片機的主要手段。鍵盤實質(zhì)上是一級按鍵開關(guān)的集合。通常,鍵盤開關(guān)利用了機械觸點的合、斷作用。鍵的閉合與否,反映在行線輸出電壓上就呈現(xiàn)高電平或低電平,如果高電平表示鍵斷開,低電平則表示鍵閉合,通過對行線電平高低狀態(tài)的檢測,便可確認按鍵按下與否。為了確保 CPU 對一次按鍵動作只確認一次按鍵有效,必須消除抖動的影響。采用軟件來消除按鍵抖動的基本思想是:在一次檢測到有鍵按下時,該鍵所對應的行線為低電平,執(zhí)行一段延時 10MS 的子程序后,確認該行線電平是不否仍為低電平,如果仍為低電平,則確認為該行確實有鍵按下。當按鍵松開時,行線的低電平變?yōu)楦唠娖剑瑘?zhí)行一段延時 10MS的子程序后,檢測該行線為高

23、電平,說明按鍵確實已經(jīng)松開。3.63.6 時鐘電路模塊時鐘電路模塊時鐘電路在單片機系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個單片機應用系統(tǒng)中,時鐘是保障系統(tǒng)正常工作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統(tǒng)工作的快慢。沈陽航空航天大學課程設(shè)計報告 10 圖圖 3.53.5 時鐘電路時鐘電路為達到振蕩周期是 12MHZ 的要求,這里要采用 12MHZ 的晶振,另外有兩個22P 的獨石電容,兩晶振引腳分別連到 X1 和 X2 振蕩脈沖輸入引腳。其中74HC244-2 表示 74HC244 芯片的 2 號引腳。沈陽航空航天大學課程設(shè)計報告 11 3.

24、73.7 音頻輸出部分音頻輸出部分 圖圖 3.63.6 音頻輸出部分音頻輸出部分音頻輸出部分主要由 NPN 三極管和蜂鳴器組成。用 P1.0 口控制蜂鳴器。沈陽航空航天大學課程設(shè)計報告 12 3.83.8 整體電路設(shè)計整體電路設(shè)計圖圖 3.73.7 整體電路設(shè)計整體電路設(shè)計沈陽航空航天大學課程設(shè)計報告 13 4 子函數(shù)描述4.1 定時器中斷設(shè)計:定時器中斷設(shè)計:在本設(shè)計中采用定時器中斷 0 方式。工作方式寄存器 TMOD 用于選擇定時器/計數(shù)器的工作方式和工作模式。其格式如下表 4.1:D7D6D5D4D3D2D1D0GATEM1M0GATEM1M0TMODT1 方式字段T0 方式字段 表表

25、4.14.1 寄存器寄存器 TMODTMOD 工作方式和工作模式工作方式和工作模式定時器初始化子函數(shù)如下:void TimerConfiguration() TMOD = 0 x01; /選擇工作方式 1 TH0 = 0 xfc; /設(shè)置初始值,定時 1ms TL0 = 0 x18; EA = 1;/打開總中斷 ET0 = 1;/打開定時器 0 中斷 TR0 = 0;/關(guān)閉定時器 04.2 數(shù)碼管顯示模塊設(shè)計:數(shù)碼管顯示模塊設(shè)計:模塊設(shè)計的重點是由顯示代碼取得相應的段碼,顯示段碼數(shù)據(jù)的并行發(fā)送,高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英沈陽航空航天大學課程設(shè)計報告

26、14 鐘都采用了石英技術(shù),因此走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校,數(shù)字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用 LED 顯示器代替顯示器代替指針顯示進而顯示時間,減小了計時誤差,這種表具有時,分,秒顯示時間的功能,還可以進行時和分的校對,片選的靈活性好。子函數(shù)如下:void DigDisplay() /顯示函數(shù)unsigned char i; unsigned char Pos; unsigned char LED; Pos = 0 x04; / 從左邊開始顯示 for (i = 0; i = 1; / 顯示下一位 4.3 鍵盤控制模塊設(shè)計:鍵盤控制模塊設(shè)計:此模塊主要由鍵

27、盤掃描程序組成,在主函數(shù)中通過 switch()語句根據(jù)鍵盤掃描函數(shù)的返回值來進入相應的功能函數(shù)中。掃描程序具體為先掃描列找出按鍵所在的列再掃描行找出按鍵所在的行,列為高四位行為低四位,因此有鍵值=列*4+行,然后等待鍵位釋放,最后根據(jù)相應的鍵碼值返回按鍵對應的值,若無按鍵則返回 0 xff。流程圖如下:沈陽航空航天大學課程設(shè)計報告 15 開始掃描列有低電平掃描行是計算鍵值結(jié)束返回鍵值下一列圖圖 4.24.2 鍵盤掃描流程圖鍵盤掃描流程圖函數(shù)代碼如下:unsigned char GetKey() unsigned char Pos; unsigned char i; unsigned char

28、 k; i = 6; Pos = 0 x20; / 找出鍵所在列 do 沈陽航空航天大學課程設(shè)計報告 16 OUTBIT = Pos; Pos = 1; k = IN & 0 x0f; while (-i != 0) & (k = 0); / 鍵值 = 列 x 4 + 行 if (k != 0) i *= 4; if (k & 2) i += 1; else if (k & 4) i += 2; else if (k & 8) i += 3; OUTBIT = 0; do Delay(1); while (TestKey(); / 等鍵釋放 return(KeyTablei); / 取出鍵碼

29、else return(0 xff);4.4 蜂鳴器演奏子函數(shù)模塊設(shè)計:蜂鳴器演奏子函數(shù)模塊設(shè)計:本模塊通過循環(huán)獲取頻率和節(jié)拍數(shù)組來使蜂鳴器發(fā)出不同的音調(diào)以及延時音調(diào)時間,子函數(shù)如下:void yanzou(unsigned char pinlv,unsigned int jiepai)/播放樂曲unsigned char pl;unsigned int jp;沈陽航空航天大學課程設(shè)計報告 17 for(jp=0;jpjiepai;jp+) KeyDown();if(flag=1)TR0=0;DisplayData0=LEDMAPKeyValue;DisplayData1=LEDMAPs/10

30、; DisplayData2=LEDMAPs%10;while(1)KeyDown();DigDisplay();if(flag=2)TR0=1;break;else if(flag=3)TR0=0; Buzzer=0; for(pl=0;plpinlv;pl+); Buzzer=1; for(pl=0;plpinlv;pl+); 沈陽航空航天大學課程設(shè)計報告 18 4.5 整體流程圖設(shè)計:整體流程圖設(shè)計:開始初始化有按鍵是鍵值為1演奏樂曲1是有按鍵獲取鍵值是暫停音樂和計時判斷鍵值鍵值為10判斷鍵值結(jié)束否關(guān)定時器否判斷按鍵鍵值11演奏樂曲2鍵值為2否結(jié)束有按鍵否是關(guān)定時器獲取鍵值是判斷鍵值暫停

31、音樂和計時鍵值為10判斷按鍵鍵值11否 圖圖 4.34.3 整體流程圖設(shè)計整體流程圖設(shè)計沈陽航空航天大學課程設(shè)計報告 19 5 調(diào)試與結(jié)果分析5.1 調(diào)試步驟及方法調(diào)試步驟及方法1.在實驗箱上連接所需要的線2.將實驗箱 LAB8000 和電腦相連接3.將程序載入實驗箱4.復位5.運行程序5.2 實驗結(jié)果實驗結(jié)果程序運行后,實驗箱的數(shù)碼管顯示三個 0,按 1 鍵蜂鳴器開始演奏第一首音樂,同時開始計時,并且顯示當前演奏音樂的序號程序運行過程中,按 A 鍵音樂暫停,同時計時暫停,再按 B 鍵,音樂繼續(xù)演奏,數(shù)碼管繼續(xù)計時,音樂結(jié)束后,可繼續(xù)選擇播放音樂序號,如此循環(huán) 。綜上,本次設(shè)計符合設(shè)計要求。沈

32、陽航空航天大學課程設(shè)計報告 20 參考文獻1 張毅剛.單片機原理及應用M.哈爾濱:哈爾濱工業(yè)大學出版社,20082 戴仙金.51 單片機及其 C 語言程序開發(fā)實例M.北京:清華大學出版社,20113 黃惟公.單片機原理及應用技術(shù)M.西安:西安電子科技大學出版社,20104 高鋒.單片微型計算機原理與接口技術(shù)M.北京:科學出版社,20075 李葉紫.MCS-51 單片機應用教程M .北京:清華大學出版社,2002 6 劉守亦.單片機應用技術(shù)M .陜西:西安電子科技大學出版社,1995沈陽航空航天大學課程設(shè)計報告 21 附 錄(關(guān)鍵部分程序清單)#include xdata unsigned ch

33、ar OUTBIT _at_ 0 x8002; / 位控制口xdata unsigned char OUTSEG _at_ 0 x8004; / 段控制口xdata unsigned char IN _at_ 0 x8001; / 鍵盤讀入口sbit Buzzer=P10; /蜂鳴器unsigned char DisplayData10; /數(shù)碼管顯示碼unsigned char code LEDMAP = / 共陰極八段管顯示碼 0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66, 0 x6d, 0 x7d, 0 x07, 0 x7f, 0 x6f, 0 x77, 0 x7c

34、, 0 x39, 0 x5e, 0 x79, 0 x71;unsigned char code wema= 0 x20,0 x10,0 x08,0 x04,0 x02,0 x01 ;/位選,0-5位數(shù)碼管 code unsigned char KeyTable = / 鍵碼定義 0 x16, 0 x15, 0 x14, 0 xff, 0 x13, 0 x12, 0 x11, 0 x10, 0 x0d, 0 x0c, 0 x0b, 0 x0a, 0 x0e, 0 x03, 0 x06, 0 x09, 0 x0f, 0 x02, 0 x05, 0 x08, 0 x00, 0 x01, 0 x04,

35、 0 x07; unsigned char code pinlv1=131,110,98, 87, 73, 87, 110,98, 131,0,110,98, 87, 73, 73, 65, 98, 87,87,87,73,65,73,65,55,58,65,73,65,87,110,98,87,73,110,131,110,98,87,65,73,73,0,87,65,65,73,82,87,98,87,73,131,110,98,0,110,98,87,73,65,55,58,65,73,87,65,65,; unsigned int code 沈陽航空航天大學課程設(shè)計報告 22 jiep

36、ai1=110,131,147,494,196,165,131,294,440,1,131,147,165,588,196,440,294,660,330,165,196,880,588,220,262,124,110,196,220,330,131,147,495,196,262,220,131,147,165,22,0,784,392,2,660,660,220,196,175,330,588,495,196,110,131,147,2,131,147,330,392,440,524,247,220,196,165,880,880;unsigned char code pinlv2=66

37、,55 ,44, 55, 49, 65, 55, 44, 37, 37, 65, 37, 41, 44, 41, 37, 29, 33, 44, 58, 65, 44;unsigned int code jiepai2=220,262,350,262,587,262,247,660,587,880,262,330,392,440,392,349,2640,698,784,492,440,660;unsigned int Num=0; /計數(shù)到 1Sunsigned int s=0,i=0;unsigned char flag=0;unsigned char KeyValue=0;unsigne

38、d char Key;unsigned char k=0;unsigned char t=0;unsigned char Pos=0 x04;void Delay(unsigned char CNT);/延時函數(shù)void DigDisplay(); /數(shù)碼管顯示函數(shù)void TimerConfiguration(); /配置定時器unsigned char GetKey(); /獲取鍵值unsigned char TestKey();void KeyDown();void yanzou(unsigned char pinlv,unsigned int jiepai);/播放音樂void Mus

39、ic_1(); /第一首樂曲沈陽航空航天大學課程設(shè)計報告 23 void Music_2(); /第二首樂曲void main() /主函數(shù) DisplayData0=LEDMAP0; DisplayData1=LEDMAP0;DisplayData2=LEDMAP0;TimerConfiguration(); while (1) DisplayData1=LEDMAPs/10;DisplayData2=LEDMAPs%10;DigDisplay();if(TestKey()TR0=1;KeyValue=GetKey();DisplayData0=LEDMAPKeyValue;switch(KeyValue) case 1 : Music_1();KeyValue=0;TR0 = 0;break; case 2 : Music_2();KeyValue=0;TR0 = 0;break;void yanzou(unsigned char pinlv,unsigned int jiepai)/播放樂曲沈陽航空航天大學課程設(shè)計報告 24 unsigned char pl;unsigned int jp;for(jp=0;jpjiepai;jp+) KeyDown();if(fl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論