版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)課程設(shè)計(jì)可存儲(chǔ)式電子琴姓 名: 班 級(jí):學(xué) 號(hào):指導(dǎo)老師:組 長(zhǎng):小組成員:摘要電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演著重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。我們?cè)O(shè)計(jì)的這個(gè)簡(jiǎn)易電子琴以單片機(jī)作為主控核心,與鍵盤、蜂鳴器等模塊組成核心主控制模塊,在主控模塊上設(shè)有4*4的矩陣鍵盤設(shè)計(jì)成16個(gè)音。本系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點(diǎn)是硬件電路簡(jiǎn)單,軟件功能完善,控制系統(tǒng)可靠,性價(jià)比較高等,具有一定的實(shí)用和參考價(jià)值。 根據(jù)使用者的操作隨意彈奏想要表達(dá)的音樂。一首音樂是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)
2、著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對(duì)于單片機(jī)來產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來產(chǎn)生這樣方波頻率信號(hào)。此外,本系統(tǒng)還實(shí)現(xiàn)了實(shí)時(shí)存儲(chǔ),能將演奏的音律存儲(chǔ)起來并一塊演奏出來。 關(guān)鍵詞:?jiǎn)纹瑱C(jī);按鍵;蜂鳴器;音階;電子琴;可存儲(chǔ) 目錄1 概述11.1電子琴設(shè)計(jì)目的及意義11.2設(shè)計(jì)任務(wù)11.3設(shè)計(jì)項(xiàng)目與功能簡(jiǎn)介11.31 設(shè)計(jì)項(xiàng)目簡(jiǎn)介11.32 系統(tǒng)功能簡(jiǎn)介22 硬件設(shè)計(jì)及說明32.1 硬件系統(tǒng)設(shè)計(jì)32.2 元件簡(jiǎn)介32.21 STC89C5232.22 蜂鳴器42.23 矩陣鍵盤52.24 LCD160263 軟件程序設(shè)計(jì)
3、73.1 軟件系統(tǒng)設(shè)計(jì)73.2音樂相關(guān)知識(shí)93.3 產(chǎn)生音頻脈沖93.4 識(shí)別矩陣鍵盤103.5 LCD實(shí)時(shí)顯示113.6實(shí)時(shí)存儲(chǔ)音律信息134 系統(tǒng)調(diào)試134.1 硬件調(diào)試134.2軟件調(diào)試135 課程設(shè)計(jì)個(gè)人分工及心得體會(huì)155.1個(gè)人分工155.2心得體會(huì)15致謝15參考文獻(xiàn)16附錄171 概述1.1 電子琴設(shè)計(jì)目的及意義 隨著當(dāng)代科學(xué)技術(shù)的發(fā)展,電子產(chǎn)品在人們的日常生活中占據(jù)著越來越重要的地位。電子琴作為其中的一個(gè)典型代表,引領(lǐng)著許多孩子進(jìn)入音樂的殿堂。因此電子琴的設(shè)計(jì)不僅能夠提高我的實(shí)踐動(dòng)手能力,還與實(shí)際生活有著緊密地聯(lián)系。單片機(jī)是一門實(shí)踐性很強(qiáng)的課程,而此次課程設(shè)計(jì)依據(jù)的理論基礎(chǔ)是
4、單片機(jī)的相關(guān)知識(shí)。其主要目的是通過本課程的培養(yǎng),啟發(fā)學(xué)生的創(chuàng)造性思維,進(jìn)一步理解數(shù)字系統(tǒng)的概念,掌握小型數(shù)字系統(tǒng)的設(shè)計(jì)方法,掌握小型數(shù)字系統(tǒng)的組裝和調(diào)試技術(shù),掌握查閱有關(guān)資料的技能。單片機(jī)又稱單片微控制器,它不是完成某一個(gè)邏輯功能的芯片,而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。概括的講:一塊芯片就成了一臺(tái)計(jì)算機(jī)。它的體積小、質(zhì)量輕、價(jià)格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時(shí),學(xué)習(xí)使用單片機(jī)是了解計(jì)算機(jī)原理與結(jié)構(gòu)的最佳選擇。1.2 設(shè)計(jì)任務(wù)本設(shè)計(jì)要求利用8051單片機(jī)的控制程序結(jié)合LCD,設(shè)計(jì)一臺(tái)數(shù)字式可存儲(chǔ)式電子琴。其基本要求為:(1)使用LCD顯示器來顯示音階輸入的相關(guān)信息;(2)當(dāng)按下
5、鍵盤組相對(duì)按鍵,壓電喇叭會(huì)發(fā)出相對(duì)音階單音,共有2個(gè)8度音階;(3)所有單音會(huì)存入8051內(nèi)而保存起來;(4)至多可以輸入64個(gè)單音,可以一起演奏出來;(5)演奏時(shí)可以按鍵中斷;(6)可以實(shí)時(shí)顯示目前正演奏的單音碼。1.3 設(shè)計(jì)項(xiàng)目與功能簡(jiǎn)介1.31 設(shè)計(jì)項(xiàng)目簡(jiǎn)介 本項(xiàng)目設(shè)計(jì)是采用 STC89C52 單片機(jī)作為核心,利用單片機(jī)技術(shù)、無源蜂鳴器、4x4 鍵盤、SPEAKER、以及LCD顯示屏實(shí)現(xiàn)原理圖設(shè)計(jì)到電路板設(shè)計(jì)開發(fā),并用 C51 高級(jí)語言進(jìn)行鍵盤識(shí)別程序設(shè)計(jì)和音頻脈沖輸出程序與音頻存儲(chǔ)程序的設(shè)計(jì)。最終能夠?qū)崿F(xiàn)樂曲演奏和音律存儲(chǔ)以及自動(dòng)播放,并且可以通過LCD顯示屏顯示音符。1.32 系統(tǒng)功
6、能簡(jiǎn)介(1)能實(shí)現(xiàn)基本的琴鍵功能。 即按下每一個(gè)琴鍵,單片機(jī)能夠檢測(cè)到鍵盤的按鍵,并通過鍵盤的位置,通過程序來控制,使蜂鳴器發(fā)出不同頻率的聲音。(2)能夠?qū)崿F(xiàn)LCD顯示按鍵。 每按下一個(gè)按鍵時(shí),單片機(jī)能夠檢測(cè)到所按下的按鍵,然后通過按鍵的位置通過程序控制來實(shí)現(xiàn)在LCD中顯示相應(yīng)按鍵。(3)能夠?qū)崿F(xiàn)實(shí)時(shí)存儲(chǔ)。 每按下一個(gè)按鍵時(shí),發(fā)出一個(gè)單音并能將其存儲(chǔ)起來。然后,通過一個(gè)播放鍵將所存儲(chǔ)的音樂播放出來。(4)能夠?qū)崿F(xiàn)按鍵中斷。 在播放音樂時(shí)可以按下中斷鍵使音樂暫停與播放。 2 硬件設(shè)計(jì)及說明2.1 硬件系統(tǒng)設(shè)計(jì)硬件設(shè)計(jì)的任務(wù)是根據(jù)總體設(shè)計(jì)要求,在選擇的機(jī)型的基礎(chǔ)上,具體確定系統(tǒng)中所要使用的元器件,
7、設(shè)計(jì)出系統(tǒng)的結(jié)構(gòu)圖。該設(shè)計(jì)要實(shí)現(xiàn)一種由單片機(jī)控制可存儲(chǔ)式電子琴,因?yàn)檫@是一個(gè)比較簡(jiǎn)單的系統(tǒng),而STC89C52單片機(jī)經(jīng)濟(jì)實(shí)惠,也有很多優(yōu)點(diǎn),其性能完全可以滿足設(shè)計(jì)的需求,所以我們選擇STC89C52來作為此設(shè)計(jì)項(xiàng)目的核心。電子琴首先必須要有按鍵,又要求輸出16個(gè)音階,所以我們采用了4X4矩陣鍵盤。另外LCD顯示器件具有工作電流小、重量輕、功耗低、壽命長(zhǎng)、字跡清晰美觀等優(yōu)點(diǎn),在便攜式儀表、低功耗應(yīng)用的儀器儀表中得到了廣泛應(yīng)用,所以我們選用了LCD1602來實(shí)現(xiàn)顯示相應(yīng)音符,其總體框圖設(shè)計(jì)如下:圖2.1 系統(tǒng)結(jié)構(gòu)圖2.2 元件簡(jiǎn)介2.21 STC89C52STC89C52是一種帶 8K字節(jié)閃爍可編
8、程可擦除只讀存儲(chǔ)器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能 CMOS8 位微處理器,俗稱單片機(jī)。該器件采用高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的 MCS-51 指令集和輸出管腳相兼容。由于將多功能 8位CPU 和閃爍存儲(chǔ)器組合在單個(gè)芯片中,STC89C52是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。STC89C52的主要特征:·8K字節(jié)可編程閃爍存儲(chǔ)器壽命:1000寫/擦循環(huán)數(shù)據(jù)保留時(shí)間:10年 ·全靜態(tài)工作:0Hz-24Hz ·三級(jí)程序存儲(chǔ)器
9、鎖定 ·128*8位內(nèi)部RAM ·32可編程 I/O線 ·兩個(gè)16位定時(shí)器/計(jì)數(shù)器 ·6個(gè)中斷源 ·可編程串行通道 ·低功耗的閑置和掉電模式 ·片內(nèi)振蕩器和時(shí)鐘電路STC89C52的芯片圖:圖2.2 STC89C52芯片圖2.22 蜂鳴器蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型1壓電式蜂鳴器 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組
10、成。有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管。多諧振蕩器由晶體管或集成電路構(gòu)成。當(dāng)接通電源后(1.515V直流工作電壓),多諧振蕩器起振,輸出1.52.5kHZ的音頻信號(hào),阻抗匹配器推動(dòng)壓電蜂鳴片發(fā)聲。 壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。在陶瓷片的兩面鍍上銀電極,經(jīng)極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。 2電磁式蜂鳴器 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。 2.23 矩陣鍵盤單片機(jī)系統(tǒng)中,若使用按鍵的數(shù)量比較多時(shí),通常選用用矩陣式鍵盤。矩陣式鍵由行線和列線構(gòu)成,按鍵位于行、列線的交叉點(diǎn)上, 鍵盤矩陣是由四行四列構(gòu)成,矩陣的四列和 P1 口的低四位相
11、連,四行與 P1 口的高四位相連。其鍵盤識(shí)別方法如下:(1) 判斷鍵盤中有無鍵按下 將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。(2) 判斷閉合鍵所在的位置 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。圖2.3矩陣式鍵盤結(jié)構(gòu)2.24 LCD1602LCD160
12、2是以點(diǎn)陣字符型為顯示方式的液晶顯示器,每行可以顯示16個(gè)字符,一共可以顯示2行。它由LCD顯示屏、擴(kuò)展驅(qū)動(dòng)器HD44100和控制器HD44780組成,其主要參數(shù)如下:3 軟件程序設(shè)計(jì)3.1 軟件系統(tǒng)設(shè)計(jì) 軟件設(shè)計(jì)實(shí)際上就是程序編程,根據(jù)項(xiàng)目設(shè)計(jì)要求,我們把軟件,設(shè)計(jì)部分大體分為了四個(gè)模塊:音頻脈沖產(chǎn)生程序設(shè)計(jì)、鍵盤掃描識(shí)別程序、實(shí)時(shí)存儲(chǔ)程序與LCD顯示程序。其設(shè)計(jì)圖如下:圖3.1 軟件系統(tǒng)設(shè)計(jì)圖其總體流程圖如下:圖3.2 總體流程圖3.2音樂相關(guān)知識(shí)樂音聽起來有的高,有的低,這就叫音高,音高是由發(fā)音物體振動(dòng)頻率的高低決定的,頻率高聲音就高,頻率低聲音就低,不同音樂的樂音是用C、D、E、F、G
13、、A、B表示的,這7個(gè)字母就是樂音的音名,它們一般依次唱成DO、RE、MI、FA、SO、LA、SI,這是唱曲時(shí)樂音的發(fā)音,所以叫唱名。音持續(xù)時(shí)間的長(zhǎng)短即時(shí)值,一般用拍數(shù)表示,休止符表示暫停發(fā)音。一首音樂是由許多不同的音符組成的,而每個(gè)音符對(duì)應(yīng)著不同的頻率,這樣就可以利用不同頻率的組合,加以與拍數(shù)對(duì)應(yīng)的延時(shí),構(gòu)成音樂。3.3 產(chǎn)生音頻脈沖在本實(shí)驗(yàn)中,單片機(jī)工作于12MHZ時(shí)鐘頻率,使用其定時(shí)/計(jì)數(shù)器T0,工作模式為1,改變計(jì)數(shù)值TH0和TL0可以產(chǎn)生不同頻率的脈沖信號(hào),在此情況下,C調(diào)的各音符頻率與計(jì)數(shù)值T的對(duì)照如下表:音符頻率(HZ)計(jì)數(shù)值(T值)音符頻率(HZ)計(jì)數(shù)值(T值)低1DO2626
14、3628#4FA#74064860#1DO#27763737中5SO78464898低2RE29463835#5SO#83194934#2RE#31163928中6LA88064968低3MI33064021#6LA#93264994低4FA34964103中7SI96865030#4FA#37064185低1DO104665058低SO39264260#1DO#110965085#5SO#41564331高2RE117565110低6LA44064400#2RE#124565134#6LA#46664463高3MI131865157低7SI49464524高4FA139765178中1DO5
15、2364580#4FA#149065198#1DO#55464633高5SO156865217中2RE58764633#5SO#166165235#2RE#62264884高6LA176065252中3MI65964732#6LA#186565268中4FA69864820高7SI196765283 表3-1 音符頻率與計(jì)數(shù)值T的對(duì)照表T的值決定了TH0和TL0的值,其關(guān)系為:TH0=T/256,TL0=T%256。3.4 識(shí)別矩陣鍵盤在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤的工作方式主要有兩種,即編程掃描與定時(shí)掃描。編程掃描即行掃描法。行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法,介紹過
16、程如下: (1) 檢測(cè)當(dāng)前是否有鍵被按下。(2) 去除鍵抖動(dòng)。(3) 若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。方法是對(duì)鍵盤的行線進(jìn)行逐行掃描。(4)為了保證鍵每閉合一次CPU僅作一次處理,必須卻除鍵釋放時(shí)的抖動(dòng)。定時(shí)掃描是利用單片機(jī)內(nèi)部的定時(shí)器產(chǎn)生一定時(shí)間的定時(shí)間隔,當(dāng)定時(shí)時(shí)間到就產(chǎn)生定時(shí)器溢出中斷,CPU響應(yīng)中斷時(shí)對(duì)鍵盤進(jìn)行行掃描取鍵值,以響應(yīng)鍵輸入請(qǐng)求。因?yàn)榫幊虙呙鐲PU需不停地掃描鍵盤,影響其他功能的執(zhí)行,工作效率低,所以我們采用了第二種鍵盤掃描識(shí)別方法。其程序如下:void timer1()interrupt 3 TL1 =0x18 ; TH1 =0xfc ; KeyScan();此語句
17、實(shí)現(xiàn)了每1ms進(jìn)行一次鍵盤掃描工作。函數(shù)名稱:鍵盤掃描子程序函數(shù)功能:按鍵狀態(tài)的采集,定時(shí)1ms和消抖掩碼實(shí)現(xiàn)每個(gè)按鍵20ms的消抖延時(shí)void KeyScan() uint8 i; static uint8 iKeyOut=0; static uint8 KeyScanBuff44;KeyScanBuffiKeyOut0 = (KeyScanBuffiKeyOut0<<1) | KEY_IN_1) & DEBOUNCE_MASK; KeyScanBuffiKeyOut1 = (KeyScanBuffiKeyOut1<<1) | KEY_IN_2) &
18、DEBOUNCE_MASK; KeyScanBuffiKeyOut2 = (KeyScanBuffiKeyOut2<<1) | KEY_IN_3) & DEBOUNCE_MASK; KeyScanBuffiKeyOut3 = (KeyScanBuffiKeyOut3<<1) | KEY_IN_4) & DEBOUNCE_MASK; for (i=0; i<4; i+) if (KeyScanBuffiKeyOuti = DEBOUNCE_MASK) KeyStaiKeyOuti = KEY_UP; else if (KeyScanBuffiKeyO
19、uti = 0) KeyStaiKeyOuti = KEY_DOWN; iKeyOut = (iKeyOut+1) & 0x3; switch (iKeyOut) case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break; case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break; default: break; 3.5 LCD實(shí)時(shí)顯示 LCD160
20、2的控制器HD44780的主要功能部件有:DDRAM顯示數(shù)據(jù)RAM、CGROM字符產(chǎn)生器ROM、CGRAM字形產(chǎn)生器RAM、IR指令寄存器、DR數(shù)據(jù)寄存器、BF忙碌標(biāo)志信號(hào)和AC地址計(jì)數(shù)器,七大部分組成。另外,HD44780還提供了清屏指令、讀取狀態(tài)指令、寫數(shù)據(jù)指令、讀數(shù)據(jù)指令等11條指令對(duì)DDRAM的內(nèi)容和地址進(jìn)行具體操作,這些指令足以完成我們的設(shè)計(jì)目標(biāo),具體相關(guān)程序如下:函數(shù)名稱:LCD1602讀繁忙標(biāo)志位子程序void Lcd1602WaitReady() uint8 sta; P0 = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; do LCD1602_E
21、 = 1; _nop_(); sta = P0; LCD1602_E = 0; while (sta&0x80) != 0); 函數(shù)名稱:LCD1602寫命令子函數(shù)void Lcd1602WriteCmd(uint8 cmd) Lcd1602WaitReady(); LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_E = 1; P0 = cmd; nop_(); LCD1602_E = 0;函數(shù)名稱:LCD1602寫數(shù)據(jù)子函數(shù)void Lcd1602WriteDat(uint8 dat) Lcd1602WaitReady(); LCD1602_RS =
22、1; LCD1602_RW = 0; LCD1602_E = 1; P0 = dat;_nop_(); LCD1602_E = 0;函數(shù)名稱:LCD1602初始化子程序void Lcd1602Init() Lcd1602WriteCmd(0x38); Lcd1602WriteCmd(0x0C); Lcd1602WriteCmd(0x06); 3.6實(shí)時(shí)存儲(chǔ)音律信息 設(shè)計(jì)要求要把所彈奏的音律實(shí)時(shí)存儲(chǔ)起來,所以編程時(shí)我們定義了一個(gè)數(shù)組來實(shí)現(xiàn)存儲(chǔ)。我們把鍵值與該鍵所代表的音律脈沖一對(duì)應(yīng),在按下某個(gè)鍵時(shí),把它代表的音律脈沖通過查詢數(shù)組的方式存入另一個(gè)數(shù)組中,在連續(xù)播放時(shí)再調(diào)用這個(gè)數(shù)組。例如music_
23、savesave_count = i*4+j;這條語句用來儲(chǔ)存鍵值,music_timesave_count = key_time;這條語句用來儲(chǔ)存按鍵按下時(shí)間的長(zhǎng)短,if(play_count<save_count)STH0 = music_tabmusic_saveplay_count/256;STL0 = music_tabmusic_saveplay_count%256;這些語句用于播放時(shí)查找存儲(chǔ)的音律信息。4 系統(tǒng)調(diào)試4.1 硬件調(diào)試硬件調(diào)試主要是針對(duì)單片機(jī)部分進(jìn)行調(diào)試,自行制作了電路板。硬件調(diào)試我們先采用了普中HC6800-EM3開發(fā)板進(jìn)行調(diào)試,后自行制作了電路板,在上電前,
24、先確保電路中不在斷路或短路情況,這一工作是整個(gè)調(diào)試工作的第一步,也是非常重要的一個(gè)步驟。在確保硬件電路正常,無異常情況(斷路或短路)方可上電調(diào)試,上電調(diào)試的目的是檢驗(yàn)電路是否接錯(cuò),同時(shí)還要檢驗(yàn)原理是否正確,在本次設(shè)計(jì)中,上電調(diào)試主要鍵盤單片機(jī)控制部分、LCD顯示部分、和音頻轉(zhuǎn)換電路硬件調(diào)試。1、鍵盤單片機(jī)控制部分調(diào)試:上電后,隨機(jī)按動(dòng)鍵盤可以發(fā)現(xiàn)各個(gè)按鍵對(duì)應(yīng)的正確。2、LCD電路調(diào)試:接通電源,隨機(jī)按下按鈕可以看到LCD液晶顯示數(shù)字。4.2軟件調(diào)試軟件調(diào)試主要方法和技巧:通常一個(gè)調(diào)試程序應(yīng)該具備至少四種性能:跟蹤、斷點(diǎn)、查看變量、更改數(shù)值。整個(gè)程序是一個(gè)主程序調(diào)用各個(gè)子程序?qū)崿F(xiàn)功能的過程,要使
25、主程序和整個(gè)程序都能平穩(wěn)運(yùn)行,各個(gè)模塊的子程序的正確與平穩(wěn)運(yùn)行必不可少,所以在軟件調(diào)試的最初階段就是把各個(gè)子程序模塊進(jìn)行分別調(diào)試。我們調(diào)試日志如下:(1)編寫了鍵盤掃描程序,初步實(shí)現(xiàn)彈奏。(2)放棄原來鍵盤掃描程序,編寫新的鍵盤掃描程序。(3)實(shí)現(xiàn)彈奏和播放儲(chǔ)存音樂功能。(4)初步編寫LCD1602的驅(qū)動(dòng)程序。(5)繼續(xù)編寫LCD1602程序,實(shí)現(xiàn)顯示彈奏的音符和頻譜圖。(6)編寫播放暫停功能。(7)完成在普中HC6800-EM3開發(fā)板調(diào)試。5 課程設(shè)計(jì)個(gè)人分工及心得體會(huì)5.1個(gè)人分工主程序的編寫與整合、鍵盤掃描及按鍵動(dòng)作程序的編寫、電路板的加工與調(diào)試。5.2心得體會(huì)通過理論設(shè)計(jì),到仿真軟件仿
26、真,再到確定具體方案,再到安裝實(shí)際電路,最后到調(diào)試電路、成型,整個(gè)過程都需要我們充分利用所學(xué)的知識(shí)進(jìn)行思考、借鑒??梢哉f,本次課程設(shè)計(jì)是針對(duì)前面所學(xué)的知識(shí)進(jìn)行的一次比較綜合的檢驗(yàn),讓我們所學(xué)到的知識(shí)更加深刻,同時(shí)把理論與實(shí)際充分的結(jié)合起來??偟膩碚f,這次課程設(shè)計(jì)雖然累,但非常充實(shí)。另外,這次課程設(shè)計(jì)也讓我們懂得了團(tuán)結(jié)的重要性,我們小組5人分工明確,同時(shí)也互幫互助,同心協(xié)力才出色的完成了這次任務(wù)。 在這次實(shí)習(xí)中,正確的思路是很重要的,只有你的設(shè)計(jì)思路是正確的,那你的設(shè)計(jì)才有可能成功。因此我們?cè)谠O(shè)計(jì)前必須做好充分的準(zhǔn)備,認(rèn)真查找詳細(xì)的資料,為我們?cè)O(shè)計(jì)的成功打下堅(jiān)實(shí)的基礎(chǔ)。要做好本次的課程設(shè)計(jì),熟練
27、地掌握課本上的理論知識(shí)是前提,這樣才能對(duì)試驗(yàn)中出現(xiàn)的問題進(jìn)行一定的分析和解決。另外,還要學(xué)會(huì)互相幫助,在自己走入困境無法走出時(shí),這時(shí)別人的幫助可能會(huì)使你豁然開朗。此外在學(xué)習(xí)單片機(jī)知識(shí)的時(shí)候?qū)τ谶@個(gè)領(lǐng)域有了更新更全面的認(rèn)識(shí)。作為21世紀(jì)的工科大學(xué)生,學(xué)好單片機(jī),一方面可以加深對(duì)計(jì)算機(jī)原理和結(jié)構(gòu)的認(rèn)識(shí),另一方面也為自身在專業(yè)上的深入發(fā)展構(gòu)筑了一個(gè)很好的平臺(tái)其重要性怎么強(qiáng)調(diào)都不為過。致謝這次課程設(shè)計(jì)能夠得以順利完成,是所有指導(dǎo)過我們的老師,幫助過我們的同學(xué)的結(jié)果。我們小組在這里對(duì)他們表示深深的謝意! 首先,要特別感謝我們的指導(dǎo)老師。老師豐富的專業(yè)知識(shí),嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,精益求精的工作作風(fēng),誨人不倦的高
28、尚師德,樸實(shí)無華、平易近人的人格魅力對(duì)我們影響深遠(yuǎn)。 其次,要感謝所有曾經(jīng)教我們單片機(jī)的任課老師劉鵬老師,他教會(huì)我們的不僅僅是專業(yè)知識(shí),更多的是對(duì)待學(xué)習(xí)、對(duì)待生活的態(tài)度。 再次,感謝我們的同學(xué),因?yàn)橛心銈兊膸椭覀兊捻?xiàng)目才得以順利完成。 參考文獻(xiàn)【1】黃鑫,馬善農(nóng),趙永科.基于CPLD的電子琴研究與設(shè)計(jì)J.科技廣場(chǎng),2007【2】吳金戌,沈慶陽,郭庭吉,8051單片機(jī)實(shí)踐與應(yīng)用M清華大學(xué)出版社,2001【3】龍威林,楊冠聲,胡山.單片機(jī)應(yīng)用入門:AT89S51和AVRM.北京:化學(xué)工業(yè)出版社,2008.【4】張毅剛,MCS-51單片機(jī)應(yīng)用設(shè)計(jì)M哈爾濱工業(yè)大學(xué)出版社,2004【5】李朝青. 單
29、片機(jī)原理及接口技術(shù)M. 北京:北京航天航空大學(xué)出版色,2001【6】胡漢才. 單片機(jī)原理及其接口技術(shù)M. 北京:清華大學(xué)出版社,2004【7】陳明熒8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材M北京:清華大學(xué)出版社,2003年9月【8】徐新艷單片機(jī)原理、應(yīng)用與實(shí)踐M北京:高等教育出版社,2005年3月【9】楊恢先,黃輝先.單片機(jī)原理及應(yīng)用M.北京:人民郵電出版社,2006【10】張虹.單片機(jī)原理及應(yīng)用M.北京:中國(guó)電力出版社,2009【11】趙亮,侯國(guó)銳.單片機(jī)C語言編程與實(shí)例M.北京:人民郵電出版社,2003附錄附錄1:程序清單C程序(非程序文字)/*說明:*/#include<reg52.h>
30、;#include <intrins.h>#include"config.h"/程序設(shè)置頭文件uint16 code music_tab=63628, 63835, 64021, 64103, /低音音階 64260, 64400, 64524, 64580, 64580, 64633, 64732, 64820, /高音音階 64898, 64968, 65030, 65058;uint8 code Ledshow_mus_tab='1', '2', '3', '4', '5',
31、'6', '7', '1', /低音音階字符 '1', '2', '3', '4', /高音音階字符 '5', '6', '7', '1'uint8 code Ledshow_pic_tab= 1, 2, 3, 4, /低音音階頻譜圖 5, 6, 7, 8, 8, 9, 10, 11,/高音音階頻譜圖 12, 13, 14, 15; volatile uint8 KeySta44; /當(dāng)前的按鍵狀態(tài)uint8 xdata
32、 music_save80; /保存音樂的音符uint16 xdata music_time80;/保存音樂的時(shí)間uint16 key_time;/音符時(shí)間計(jì)數(shù)uint8 save_count;/保存計(jì)數(shù)uint8 play_count;/播放計(jì)數(shù)uint8 play_flag;/播放標(biāo)志位uint8 pause_flag;/暫停標(biāo)志位uint16 STL0; /重裝T0值uint16 STH0;void KeyScan();/鍵盤掃描子程序void KeyHandle();/鍵盤按鍵動(dòng)作判斷子程序void play();/音樂播放子程序void Lcd1602WaitReady();/LCD
33、1602讀繁忙標(biāo)志位子程序void Lcd1602WriteCmd(uint8 cmd);/LCD1602寫命令子程序void Lcd1602WriteDat(uint8 dat);/LCD1602寫數(shù)據(jù)子程序void Lcd1602Init();/LCD1602初始化子程序void Lcd1602_show_L1(uint8 dat);/LCD1602第一行顯示子程序void Lcd1602_show_L2(uint8 dat);/LCD1602第二行顯示子程序void play_pause();/音樂播放暫停子程序void delay_ms(uint8 i);/延時(shí)1ms子程序/*函數(shù)名稱
34、:主函數(shù)函數(shù)功能:實(shí)現(xiàn)對(duì)個(gè)子函數(shù)的掃描調(diào)用*/void main()TMOD |= 0x11;/定時(shí)器0,方式1 驅(qū)動(dòng)蜂鳴器 0001 0001TMOD &= 0xdd;/定時(shí)器1,方式1 用于鍵盤掃描 1101 1101ET0 = 1;/ XX01 XX01ET1 = 1;EA = 1;TR1 = 1;while(1)KeyHandle();play_pause();if(PLAYER)play_flag=1;if(play_flag)play();/*函數(shù)名稱:定時(shí)器0中斷子程序函數(shù)功能:定時(shí)不同時(shí)間,產(chǎn)生不同頻率的方波,產(chǎn)生音符*/void timer0()interrupt 1
35、/Timer0定時(shí)產(chǎn)生特定頻率的波形驅(qū)動(dòng)蜂鳴器TH0 =STH0;TL0 =STL0;SPEAKER=SPEAKER;key_time+;/*函數(shù)名稱:定時(shí)器1中斷子程序函數(shù)功能:定時(shí)1ms,調(diào)用鍵盤掃描子程序?qū)崿F(xiàn)按鍵狀態(tài)的采集和按鍵的消抖*/void timer1()interrupt 3/Timer1定時(shí)1ms,用于按鍵的檢測(cè)和消抖 TL1 =0x18 ; TH1 =0xfc ; KeyScan();/*函數(shù)名稱:鍵盤掃描子程序函數(shù)功能:按鍵狀態(tài)的采集,定時(shí)1ms和消抖掩碼實(shí)現(xiàn)每個(gè)按鍵20ms的消抖延時(shí)*/void KeyScan() uint8 i; static uint8 iKeyO
36、ut=0; static uint8 KeyScanBuff44; / 掃描按鍵輸入 KeyScanBuffiKeyOut0 = (KeyScanBuffiKeyOut0<<1) | KEY_IN_1) & DEBOUNCE_MASK; KeyScanBuffiKeyOut1 = (KeyScanBuffiKeyOut1<<1) | KEY_IN_2) & DEBOUNCE_MASK; KeyScanBuffiKeyOut2 = (KeyScanBuffiKeyOut2<<1) | KEY_IN_3) & DEBOUNCE_MASK;
37、 KeyScanBuffiKeyOut3 = (KeyScanBuffiKeyOut3<<1) | KEY_IN_4) & DEBOUNCE_MASK;/ 消抖后更新按鍵狀態(tài) for (i=0; i<4; i+) if (KeyScanBuffiKeyOuti = DEBOUNCE_MASK) KeyStaiKeyOuti = KEY_UP; else if (KeyScanBuffiKeyOuti = 0) KeyStaiKeyOuti = KEY_DOWN; / 逐行拉低行輸出 iKeyOut = (iKeyOut+1) & 0x3;/&0x3的作
38、用使iKeyOut在03之間循環(huán) switch (iKeyOut) case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break; case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break; default: break; /*函數(shù)名稱:鍵盤按鍵動(dòng)作判斷子程序函數(shù)功能:實(shí)判斷按鍵的按下和彈起動(dòng)作,及執(zhí)行相關(guān)操作*/void KeyHandle() uint8 i
39、, j; static uint8 bkKey44; / 檢索按鍵狀態(tài)的變化 for (i=0; i<4; i+) for (j=0; j<4; j+) if (bkKeyij != KeyStaij) /按鍵按下時(shí)的操作 if (bkKeyij = KEY_UP) /按鍵按下時(shí)播放音樂 STH0 = music_tabi*4+j/256;STL0 = music_tabi*4+j%256;TR0 = 1;/顯示頻譜和音符Lcd1602WriteCmd(0x01); /清屏 Lcd1602_show_L1(Ledshow_pic_tabi*4+j);Lcd1602_show_L2(
40、Ledshow_mus_tabi*4+j);/儲(chǔ)存鍵值music_savesave_count = i*4+j; else /按鍵彈起時(shí)的操作/關(guān)閉音樂 TR0 = 0;/儲(chǔ)存按鍵按下的時(shí)間music_timesave_count = key_time;save_count+;key_time = 0; /時(shí)間計(jì)數(shù)清零 bkKeyij = KeyStaij; /*函數(shù)名稱:音樂播放子程序函數(shù)功能:播放一個(gè)音符,和調(diào)用LCD1602顯示子程序*/void play()if(PLAYER) /播放初始時(shí)清屏 Lcd1602WriteCmd(0x01); if(play_count=save_cou
41、nt) /判斷是否播放完成, /若播放完成清除各標(biāo)志和計(jì)數(shù)save_count=0;play_count=0;play_flag =0;if(play_count<save_count)/播放音樂 STH0 = music_tabmusic_saveplay_count/256;STL0 = music_tabmusic_saveplay_count%256;if(pause_flag) /判斷是否暫停播放TR0 =1;/LCD顯示頻譜和音符Lcd1602_show_L1(Ledshow_pic_tabmusic_saveplay_count);Lcd1602_show_L2(Ledshow_mus_tabmusic_saveplay_count);if(music_timeplay_count < key_time)TR0 =0;key_time=0;play_count+;if(pause_flag) /暫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 甜菜種植合同法院判決書
- 《藍(lán)田股份分析案例》課件
- 2025年南寧貨運(yùn)從業(yè)資格證模擬考試題庫(kù)及答案解析
- 2025年鹽城道路運(yùn)輸從業(yè)資格證考哪些項(xiàng)目
- 2025年許昌貨運(yùn)從業(yè)資格證模擬考試系統(tǒng)
- 2025年云南貨運(yùn)從業(yè)資格證考試題及答案詳解
- 健身房環(huán)境衛(wèi)生保潔員招聘合同
- 城市景觀照明施工合同范本
- 智能家居網(wǎng)絡(luò)安全操作規(guī)程
- 印刷行業(yè)安全規(guī)程
- 高三英語二輪復(fù)習(xí)寫作專項(xiàng)讀后續(xù)寫人物情緒描寫方法課件
- 殯儀館物業(yè)服務(wù)方案
- 電廠缺陷分析報(bào)告
- 化工裝備的選型與設(shè)計(jì)
- 外賣小哥培訓(xùn)道路安全管理
- 上市公司投資報(bào)告分析報(bào)告
- 中醫(yī)診療設(shè)備種類目錄
- (完整)馬克思主義政治經(jīng)濟(jì)學(xué)習(xí)題及參考答案
- 醫(yī)院預(yù)防保健科工作制度及職責(zé)范本
- 分離工程課件
- 中國(guó)風(fēng)古詩(shī)詞詩(shī)歌朗讀比賽大會(huì)唐詩(shī)宋詞含內(nèi)容課件兩篇
評(píng)論
0/150
提交評(píng)論