基于AT89C51的電子琴設(shè)計(jì)_第1頁
基于AT89C51的電子琴設(shè)計(jì)_第2頁
基于AT89C51的電子琴設(shè)計(jì)_第3頁
基于AT89C51的電子琴設(shè)計(jì)_第4頁
基于AT89C51的電子琴設(shè)計(jì)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、等級(jí):湖南工程學(xué)院課 程 設(shè) 計(jì)課程名稱 單片機(jī)原理與應(yīng)用 課題名稱 電子琴 專 業(yè) 電氣工程 班 級(jí) 1005班 學(xué) 號(hào) 姓 名 指導(dǎo)教師 2013 年 6 月 21 日湖南工程學(xué)院課 程 設(shè) 計(jì) 任 務(wù) 書課程名稱 單片機(jī)原理與應(yīng)用 課 題 電子琴 專業(yè)班級(jí) 電氣工程1005 學(xué)生姓名 學(xué) 號(hào) 指導(dǎo)老師 審 批 任務(wù)書下達(dá)日期 2013 年 6 月 8 日任務(wù)完成日期 2013 年 6 月 21 日設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求設(shè)計(jì)內(nèi)容:本課題以單片機(jī)為核心,設(shè)計(jì)和制作一個(gè)電子琴。要求由4x4組成16個(gè)按鈕矩陣,設(shè)計(jì)成16個(gè)音,可隨意彈奏想要表達(dá)的音樂。設(shè)計(jì)要求:1. 設(shè)計(jì)方案要合理、正確;2. 系統(tǒng)

2、硬件設(shè)計(jì);3. 完成必要元器件選擇;4. 系統(tǒng)軟件設(shè)計(jì)及調(diào)試;5. 寫出設(shè)計(jì)報(bào)告。主 要 設(shè) 計(jì) 條 件1. mcs-51單片機(jī)實(shí)驗(yàn)操作臺(tái)1臺(tái);2. pc機(jī)及單片機(jī)調(diào)試軟件;3. 單片機(jī)應(yīng)用系統(tǒng)板1套;4. 制作工具1套;5. 系統(tǒng)設(shè)計(jì)所需的元器件。說 明 書 格 式1. 封面2. 課程設(shè)計(jì)任務(wù)書3. 目錄4. 系統(tǒng)總體方案設(shè)計(jì)5. 系統(tǒng)硬件設(shè)計(jì)6. 軟件設(shè)計(jì)(包括流程圖)7. 系統(tǒng)的安裝調(diào)試說明8. 總結(jié) 9. 參考文獻(xiàn)10. 附錄11. 課程設(shè)計(jì)成績(jī)?cè)u(píng)分表。 進(jìn) 度 安 排第一周星期一、上午:布置課題任務(wù),課題介紹及講課。 下午:借閱有關(guān)資料,總體方案討論。星期二、確定總體方案,學(xué)習(xí)與設(shè)計(jì)

3、相關(guān)內(nèi)容。星期三、各部分方案設(shè)計(jì)。星期四、各部分設(shè)計(jì)。星期五、設(shè)計(jì)及上機(jī)調(diào)試。第二周星期一:設(shè)計(jì)及上機(jī)調(diào)試。星期二:調(diào)試,中期檢查。星期三:調(diào)試、寫說明書。星期四-星期五上午:寫說明書、完成電子版并打印成稿。 星期五下午:答辯。參 考 文 獻(xiàn)1.單片機(jī)原理與應(yīng)用 王迎旭等編 機(jī)械工業(yè)出版社2.51系列單片機(jī)設(shè)計(jì)實(shí)例 樓然苗等編 北京航空航天大學(xué)出版社3.計(jì)算機(jī)硬件技術(shù)基礎(chǔ)實(shí)驗(yàn)教程 黃勤等編 重慶大學(xué)出版社4.微型計(jì)算機(jī)接口技術(shù)及應(yīng)用 劉樂善主編 華中科技大學(xué)出版社5.單片微型計(jì)算機(jī)原理及接口技術(shù)陳光東等 華中科技大學(xué)出版社目 錄第1章 課題設(shè)計(jì)的背景、要求及目的11.1課題設(shè)計(jì)的背景11.2課

4、題設(shè)計(jì)的要求11.3課題設(shè)計(jì)的目的2第2章 系統(tǒng)總體方案選擇與說明22.1 系統(tǒng)方案綜述22.2 系統(tǒng)設(shè)計(jì)思路32.3 系統(tǒng)設(shè)計(jì)方案3第3章 系統(tǒng)框圖與工作原理及芯片介紹43.1 系統(tǒng)硬件電路設(shè)計(jì)框圖43.2 工作原理43.3 芯片介紹5第4章 各硬件電路的設(shè)計(jì)說明64.1 按鍵模塊的設(shè)計(jì)74.2 蜂鳴器模塊的設(shè)計(jì)84.3電源部分及其他附屬模塊的設(shè)計(jì)8第5章 系統(tǒng)軟件設(shè)計(jì)95.1 系統(tǒng)軟件方案的設(shè)計(jì)95.2 系統(tǒng)程序的設(shè)計(jì)10設(shè)計(jì)總結(jié)15參考文獻(xiàn)16附錄a 系統(tǒng)硬件電路原理圖17附錄b 程序設(shè)計(jì)數(shù)據(jù)18第1章 課題設(shè)計(jì)的背景、要求及目的1.1課題設(shè)計(jì)的背景 電子計(jì)算機(jī)的發(fā)展經(jīng)歷了從電子管、晶體

5、管、中小規(guī)模集成電路到大規(guī)模集成電路四個(gè)階段,尤其是隨著大規(guī)模的集成電路技術(shù)的飛速發(fā)展,在20世紀(jì)70年代初誕生的單片微型計(jì)算機(jī),使得計(jì)算機(jī)應(yīng)用日益廣泛。而單片微型計(jì)算機(jī)(簡(jiǎn)稱單片機(jī))的問世,更進(jìn)一步推動(dòng)了計(jì)算機(jī)應(yīng)用技術(shù)的發(fā)展,標(biāo)志著計(jì)算機(jī)系統(tǒng)兩大部分的正式形成,即通用計(jì)算機(jī)系統(tǒng)和嵌入式計(jì)算機(jī)系統(tǒng)。前者主要以發(fā)展海量、高速數(shù)值計(jì)算為趨勢(shì),后者則主要實(shí)現(xiàn)面向?qū)ο蟮膶?shí)時(shí)控制。 單片微型計(jì)算機(jī)是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,屬于第四代電子計(jì)算機(jī)它具有高性能、高速度、體積小、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。他的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機(jī)的開發(fā)應(yīng)用已成為高科技和工程領(lǐng)域

6、的一項(xiàng)重大課題。 電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器。它在現(xiàn)代音樂扮演重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本文的主要內(nèi)容是用at89c51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)電子琴。以單片機(jī)作為主控核心,與鍵盤揚(yáng)聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個(gè)按鍵,設(shè)計(jì)成16個(gè)音,可隨意彈奏想要表達(dá)的音樂。因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系編寫正確就可以達(dá)到我們想要的曲目。1.2課題設(shè)計(jì)的要求 本課題以單片機(jī)為核心,設(shè)計(jì)和制作一個(gè)電子琴。要求由4x4組成16個(gè)按鈕矩陣,設(shè)計(jì)成16個(gè)音,可隨意彈

7、奏想要表達(dá)的音樂。1.3課題設(shè)計(jì)的目的 1、能夠?qū)﹄娮与娐?、電子元器件、印制電路板等方面的知識(shí)有進(jìn)一步的認(rèn)識(shí),獨(dú)立對(duì)其進(jìn)行測(cè)試與檢查。 2、熟悉at89c51單片機(jī)的內(nèi)部結(jié)構(gòu)和功能,合理使用其內(nèi)部寄存器,能夠完成相關(guān)軟件編程設(shè)計(jì)工作。 3、為實(shí)現(xiàn)預(yù)期功能,能夠?qū)ο到y(tǒng)進(jìn)行快速的調(diào)試,并能夠?qū)Τ霈F(xiàn)的功能故障進(jìn)行分析,及時(shí)修改相關(guān)軟硬件。 4、對(duì)軟件編程、排錯(cuò)調(diào)試、相關(guān)軟件的使用技能等方面得到較全面的鍛煉和提高。 5、理解音樂產(chǎn)生的原理和編碼鍵盤掃描方法以及單片機(jī)內(nèi)部定時(shí)器的溢出中斷編程方法。 6、本次課程設(shè)計(jì)從硬件和軟件兩個(gè)方面入手,全面具體地掌握設(shè)計(jì)思路、方法和過程,使理論與實(shí)際相結(jié)合,充分地鍛

8、煉了動(dòng)手能力和思維擴(kuò)展能力。第2章 系統(tǒng)總體方案選擇與說明2.1 系統(tǒng)方案綜述 從系統(tǒng)實(shí)現(xiàn)的功能上來看,簡(jiǎn)易電子琴的課程設(shè)計(jì)主要是手動(dòng)按鍵彈奏樂曲。手動(dòng)彈奏樂曲是根據(jù)具體的硬件鍵盤設(shè)置功能鍵實(shí)現(xiàn)音譜的各個(gè)音。 從系統(tǒng)硬件結(jié)構(gòu)上來看,我們主要使用到51系列單片機(jī)、矩陣16鍵輸入電路、蜂鳴器以及電源電路等等。將這些硬件電路有機(jī)地結(jié)合起來使之滿足簡(jiǎn)易電子琴的實(shí)現(xiàn)硬件需要。 從系統(tǒng)軟件設(shè)計(jì)角度來看,將簡(jiǎn)易電子琴的課程設(shè)計(jì)采用程序模塊化設(shè)計(jì)方法,將程序分為主程序、鍵盤掃描程序模塊、音樂產(chǎn)生模塊等等。此外,采用程序設(shè)計(jì)思想、外部按鍵方式,來實(shí)現(xiàn)可手動(dòng)彈奏樂曲。 因此,我們可以綜合上述的方案設(shè)計(jì)原理,從軟件

9、和硬件兩部分進(jìn)行有計(jì)劃有步驟的系統(tǒng)分析和設(shè)計(jì)。2.2 系統(tǒng)設(shè)計(jì)思路 1、手動(dòng)彈奏樂曲用編碼的矩形鍵盤來實(shí)現(xiàn),手動(dòng)彈奏樂曲中矩陣鍵盤的16個(gè)鍵分別設(shè)置不同的音符。 2、軟件的設(shè)計(jì)主要包括無符號(hào)音符的定義、矩形鍵盤鍵值的讀取和手動(dòng)彈奏樂曲控制程序。 3、此次程序設(shè)計(jì)主要是手動(dòng)彈奏樂曲程序控制。而音符的在程序的開始就被定義好了,只要在控制程序中調(diào)用即可。2.3 系統(tǒng)設(shè)計(jì)方案2.3.1 播放模塊 播放模塊是由擴(kuò)音器接單片機(jī)控制引腳p3.7構(gòu)成,中間接限流電阻以及pnp三極管,且它幾乎不存在噪聲,音響效果較好,而且由于所需驅(qū)動(dòng)功率較小,且價(jià)格低廉,所以,被廣泛應(yīng)用。2.3.2 按鍵控制模塊 電子琴設(shè)有1

10、6個(gè)按鍵, 16個(gè)按鍵分別代表16個(gè)音符,包括中音段的全部音符,通過軟硬件設(shè)計(jì),然后通過查詢電子琴所按下的按鍵,讀取電子琴按鍵的輸入狀態(tài),跳轉(zhuǎn)到對(duì)應(yīng)的程序入口,實(shí)現(xiàn)自編歌曲的。2.3.3 鍵盤掃描程序 檢測(cè)是否有鍵按下,有鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無鍵按下,則返回鍵盤掃描程序繼續(xù)檢測(cè)。2.3.4 功能轉(zhuǎn)移程序 對(duì)檢測(cè)到得按鍵值進(jìn)行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,我們?cè)O(shè)計(jì)的功能程序有兩種,即音色調(diào)節(jié)功能。第3章 系統(tǒng)框圖與工作原理及芯片介紹3.1 系統(tǒng)硬件電路設(shè)計(jì)框圖 基于單片機(jī)系統(tǒng)電子琴的基本結(jié)構(gòu)如下圖圖3.1 系統(tǒng)框圖3.2 工作原理

11、1、演奏音樂原理:通過控制單片機(jī)程序首先設(shè)置的音符,通過控制程序調(diào)用,以及通過程序判斷是否有按鍵按下來經(jīng)放大后驅(qū)動(dòng)蜂鳴器是否發(fā)出不同音節(jié)的聲音。用軟件延時(shí)來控制發(fā)音時(shí)間的長(zhǎng)短,控制節(jié)拍。把樂譜的音符和相應(yīng)的節(jié)拍變換為定時(shí)常數(shù)和延時(shí)常數(shù),作為數(shù)據(jù)表格存放在存儲(chǔ)器中,由程序到這量常數(shù)和延時(shí)常數(shù)。另單片機(jī)晶振頻率為12mhz。 2、鍵盤掃描原理:先將44矩陣鍵盤的行和列全部置為高電平,然后再逐行置為低電平,當(dāng)有鍵按下時(shí)p1口的值會(huì)發(fā)生相應(yīng)的改變,通過與給定數(shù)的比較,判定是否有鍵按下和是否鍵已松開。并給定列號(hào),根據(jù)所給的列號(hào)的值,一方面給單片機(jī)送入確定好的數(shù)值,即發(fā)出相應(yīng)音符音,從而來達(dá)到譜樂譜的目的

12、。3.3 芯片介紹 (1)在本次電子琴設(shè)計(jì)中,我所用的單片機(jī)芯片選用了at89c51型號(hào)的芯片, 89c51系列的兼容性也比較好。p3口也可作為at89c51的一些特殊功能口,如下表所示:p3口引腳特殊功能p3.0rxd(串行輸入口)p3.1txd(串行輸出口)p3.2(外部中斷0)p3.3(外部中斷1)p3.4t0(定時(shí)器0外部輸入)p3.5t1(定時(shí)器1外部輸入)p3.6wr(外部數(shù)據(jù)存儲(chǔ)器寫選通)p3.7rd(外部數(shù)據(jù)存儲(chǔ)器讀先通)(2)p3.7口音頻輸出,接一個(gè)喇叭。(3)復(fù)位電路我們本來在方案選擇的時(shí)候有兩種選擇的,上電復(fù)位和按扭復(fù)位,上電復(fù)位是利用電容充電來實(shí)現(xiàn)的,而按扭復(fù)位是電源

13、對(duì)外節(jié)電容的充電使rst為高電平,復(fù)位松開后,電容通過下拉電阻放電,使rst恢復(fù)低電平。為了功能的完美我還是選擇用上電自動(dòng)復(fù)位,因?yàn)樗容^方便,不需要人另外去操作。第4章 各硬件電路的設(shè)計(jì)說明由于時(shí)間原因,本次所設(shè)計(jì)硬件電路以及程序只經(jīng)過了仿真軟件測(cè)試,而沒有去單片機(jī)實(shí)驗(yàn)室去用單片機(jī)試驗(yàn)箱去測(cè)試程序。4.1 按鍵模塊的設(shè)計(jì)圖4.1.1 按鍵電路上圖為硬件系統(tǒng)的16鍵44的矩陣式鍵盤電路邏輯圖,鍵盤的行線連接到p1.0-p1.3口上,列線連接到p1.4-p1.7口上,單片機(jī)通過逐行掃描的方法對(duì)鍵盤進(jìn)行掃描,讀取判斷有無鍵被按下以及按鍵的位置。為了判斷有沒有鍵被按下,可先經(jīng)輸出口向所有列線輸出高電

14、平然后在輸出各行狀態(tài)。若行線狀態(tài)皆為高電平則表明無鍵被按下;若行線狀態(tài)中有低電平就表示有鍵被按下,然后再根據(jù)接通的行線和列線判定按鍵的位置。當(dāng)經(jīng)掃描表明有鍵被按下后,緊接著就是進(jìn)行去抖動(dòng)處理,抖動(dòng)時(shí)間的長(zhǎng)短與鍵的機(jī)械特性有關(guān),一般為10-20ms。4.2 蜂鳴器模塊的設(shè)計(jì)圖4.2.1擴(kuò)音電路 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)。振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。本系統(tǒng)設(shè)計(jì)的蜂鳴器通過驅(qū)動(dòng)電路與單片機(jī)的p3.7連接,單片機(jī)就可以通過p3.7的輸出信號(hào)進(jìn)行控制。4.3電源部分及其他附屬

15、模塊的設(shè)計(jì)圖4.3.1 上電復(fù)位電路 對(duì)輸入電路產(chǎn)生的電源我們的要求是穩(wěn)定在5v左右,保證單片機(jī)的正常工作。 復(fù)位是單片機(jī)的初始化操作,其作用是使cpu和系統(tǒng)中其他部件都處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。本系統(tǒng)采用上電與按鍵復(fù)位電路,為了防止干擾串?dāng)_復(fù)位端,所以再接一個(gè)去耦電容。 晶振電路的設(shè)計(jì)可以兩個(gè)電容與一個(gè)晶振即可,用來產(chǎn)生一個(gè)約等于12mhz的穩(wěn)定的頻率。第5章 系統(tǒng)軟件設(shè)計(jì)5.1 系統(tǒng)軟件方案的設(shè)計(jì) 進(jìn)行應(yīng)用軟件設(shè)計(jì)時(shí)可采用模塊化設(shè)計(jì),其優(yōu)點(diǎn)是:(1)每個(gè)模塊的程序結(jié)構(gòu)簡(jiǎn)單,任務(wù)明確,易于編寫、調(diào)試和修改;(2)程序可讀性好,對(duì)程序的修改可局部進(jìn)行,其他部分可以保持不變,

16、便于功能的擴(kuò)充和版本的升級(jí);(3)對(duì)于使用頻繁的子程序可以建立子程序庫,便于多個(gè)模塊調(diào)用;(4)便于進(jìn)行程序的編寫和修改調(diào)試工作,加快軟件的研制進(jìn)度。 根據(jù)設(shè)計(jì)要求,首先要確定軟件設(shè)計(jì)方案,即確定該軟件應(yīng)該完成哪些功能;其次是規(guī)劃這些功能需要分成多少個(gè)功能模塊,以及每一個(gè)程序模塊的具體任務(wù)是什么。其系統(tǒng)的軟件設(shè)計(jì)的模塊應(yīng)該遵循下述原則: (1) 每個(gè)模塊應(yīng)具備獨(dú)立的功能,能產(chǎn)生一個(gè)明確的結(jié)果。 (2) 模塊之間的控制參數(shù)應(yīng)盡量簡(jiǎn)單,數(shù)據(jù)參數(shù)應(yīng)盡量少??刂茀?shù)是指模塊進(jìn)入和退出的條件及方式,數(shù)據(jù)參數(shù)是指模塊間信息的交換方式、交換量的多少及交換的頻繁程度。 (3) 模塊的長(zhǎng)度適中。模塊語句的長(zhǎng)度要

17、始終,模塊太長(zhǎng),調(diào)試和分析會(huì)有難度;模塊太短,信息交換太過頻繁,不利于模塊功能的體現(xiàn) 系統(tǒng)的結(jié)構(gòu)模塊圖如下所示:主程序模塊手動(dòng)彈奏樂曲模塊功能轉(zhuǎn)換模塊音樂播放模塊5.2 系統(tǒng)程序的設(shè)計(jì) 系統(tǒng)主程序的功能是進(jìn)行端口定義,以及各個(gè)音符的無符號(hào)定義,這樣方便程序的調(diào)用.5.2.1主程序設(shè)計(jì)如下#include#include soundplay.h#define uchar unsigned char#define uint unsigned int#define cnt_delay_cnt1 25 /按鍵去抖動(dòng)延時(shí)閥值#define cnt_delay_cnt2 5 /按鍵行輸出信號(hào)穩(wěn)定的小延時(shí)閥

18、值unsigned int dleay_time1;/*各個(gè)按鍵的音調(diào)*/unsigned char code music_code_1= 0x15,0x02, 0x00,0x00;unsigned char code music_code_2= 0x16,0x02, 0x00,0x00;unsigned char code music_code_3= 0x17,0x02, 0x00,0x00;unsigned char code music_code_4= 0x18,0x02, 0x00,0x00;unsigned char code music_code_5= 0x19,0x02, 0x0

19、0,0x00;unsigned char code music_code_6= 0x1a,0x02, 0x00,0x00;unsigned char code music_code_7= 0x1b,0x02, 0x00,0x00;unsigned char code music_code_8= 0x0b,0x02, 0x00,0x00;unsigned char code music_code_9= 0x0c,0x02, 0x00,0x00;unsigned char code music_code_10=0x0d,0x02, 0x00,0x00;unsigned char code musi

20、c_code_11=0x0e,0x02, 0x00,0x00;unsigned char code music_code_12=0x0f,0x02, 0x00,0x00;unsigned char code music_code_13=0x10,0x02, 0x00,0x00;unsigned char code music_code_14=0x11,0x02, 0x00,0x00;unsigned char code music_code_15=0x15,0x03, 0x00,0x00;unsigned char code music_code_16=0x16,0x03, 0x00,0x00

21、;unsigned char key_step=1;/按鍵掃描步驟變量,在switch()語句的括號(hào)里unsigned int delay_cnt2=0; /延時(shí)計(jì)數(shù)器的變量unsigned char key_lock1=0; /按鍵自鎖標(biāo)志unsigned int delay_cnt1=0; /延時(shí)計(jì)數(shù)器的變量uchar key_sec;sbit key_dr1= p10; /4x4按鍵行輸出sbit key_dr2= p11; /4x4按鍵行輸出sbit key_dr3= p12; /4x4按鍵行輸出sbit key_dr4= p13; /4x4按鍵行輸出sbit key_sr1= p14

22、; /4x4按鍵行輸入sbit key_sr2= p15; /4x4按鍵行輸入sbit key_sr3= p16 ; /4x4按鍵行輸入sbit key_sr4= p17; /4x4按鍵行輸入5.2.2主函數(shù)程序的設(shè)計(jì)/*主函數(shù)*/void main() initialsound(); /初始化播發(fā)器 key_lock1=0; while(1) key_scan(); switch(key_sec) case 1: play(music_code_1,0,3,360); key_sec=0; break; case 2: play(music_code_2,0,3,360); key_sec=

23、0; break; case 3: play(music_code_3,0,3,360); key_sec=0; break;case 4: play(music_code_4,0,3,360); key_sec=0; break; case 5: play(music_code_5,0,3,360); key_sec=0; break; case 6: play(music_code_6,0,3,360); key_sec=0; break; case 7: play(music_code_7,0,3,360); key_sec=0; break;case 8: play(music_cod

24、e_8,0,3,360); key_sec=0; break;case 9: play(music_code_9,0,3,360); key_sec=0; break; case 10: play(music_code_10,0,3,360); key_sec=0; break;case 11: play(music_code_11,0,3,360); key_sec=0; break; case 12: play(music_code_12,0,3,360); key_sec=0; break; case 13: play(music_code_13,0,3,360); key_sec=0;

25、 break;case 14: play(music_code_14,0,3,360); key_sec=0; break; case 15: play(music_code_15,0,3,360); key_sec=0; break; case 16: play(music_code_16,0,3,360); key_sec=0; break; 設(shè)計(jì)總結(jié) 由于我以前??齐A段上過c語言版的單片機(jī)課程,相對(duì)于本學(xué)期的所學(xué)的匯編語言,我覺得c語言版的更容易接受,所以本次課程設(shè)計(jì)我選用c編程。 經(jīng)過這兩周的單片機(jī)課程設(shè)計(jì)對(duì)我獲益匪淺,讓我重新系統(tǒng)性地認(rèn)識(shí)和掌握了單片機(jī)技術(shù),讓我將平常學(xué)的c語言和編程

26、方法學(xué)以致用,使我的c語言能力有了很大提高和進(jìn)步,讓我對(duì)單片機(jī)外圍接口設(shè)備有了深入細(xì)致的了解。 由于課程設(shè)計(jì)安排跟我個(gè)人的很多事情安排起沖突,所以課程設(shè)計(jì)的主要完成是在第二周。一開始,我在網(wǎng)上尋找有關(guān)的資料和仔細(xì)讀懂老師設(shè)計(jì)任務(wù)書從而研究設(shè)計(jì)方案,進(jìn)行設(shè)計(jì)的總體規(guī)劃,理清課程設(shè)計(jì)思路。但是將這些具體的方案落實(shí)到每一個(gè)設(shè)計(jì)環(huán)節(jié)和步驟中,難免會(huì)出現(xiàn)意想不到錯(cuò)誤,這就需要我們?cè)谶M(jìn)行設(shè)計(jì)的過程中利用所掌握的知識(shí)認(rèn)真排查錯(cuò)誤原因,多方面的思考問題的關(guān)鍵不斷地改正自己的設(shè)計(jì)不足之處和錯(cuò)誤。 此外,對(duì)硬件電路的工作原理和單片機(jī)知識(shí)的掌握是進(jìn)行下一步的軟件設(shè)計(jì)的關(guān)鍵。這次課程設(shè)計(jì)能順利的完成任務(wù)很大程度上是因

27、為在軟件設(shè)計(jì)之前對(duì)硬件的設(shè)計(jì)及工作原理有了細(xì)致的了解。 在進(jìn)入了軟件設(shè)計(jì)方案和具體的編程和調(diào)試運(yùn)行階段。在這個(gè)階段中,對(duì)系統(tǒng)的需求分析和如何采用模塊化設(shè)計(jì)思想是設(shè)計(jì)方案主要解決的問題,通過不斷地設(shè)計(jì)嘗試和反復(fù)地設(shè)計(jì)調(diào)試初步解決了問題。但是也存在了設(shè)計(jì)上的不足之處,即如何實(shí)現(xiàn)自動(dòng)音樂播放的暫停和斷點(diǎn)播放,在在我設(shè)計(jì)初期,希望能另外實(shí)現(xiàn)16個(gè)音樂的播放的自我播放和按鍵暫停,在采用了這樣的設(shè)計(jì)方法上在原理上可以行得通,但是由于難度太大,以及個(gè)人的水平問題,最后放棄了這個(gè)設(shè)想。最后,現(xiàn)在經(jīng)過兩周后,經(jīng)過實(shí)踐的操作和調(diào)試,對(duì)單片機(jī)軟件都有了更深的了解。通過設(shè)計(jì),鞏固之前所學(xué)課程,使所學(xué)知識(shí)牢固掌握并靈活

28、運(yùn)用。在整個(gè)課程設(shè)計(jì)中,我的指導(dǎo)老師尋大勇老師給予很多指導(dǎo)性的意見。軟件設(shè)計(jì)和仿真過程中,劉其濤同學(xué)也幫助我解決了一些實(shí)際問題。本次課程設(shè)計(jì)必將成為自己以后學(xué)習(xí)道路上的寶貴的實(shí)踐經(jīng)驗(yàn)。參考文獻(xiàn)1、王迎旭編單片機(jī)原理與應(yīng)用機(jī)械工業(yè)出版社.2、周向紅 編51系列單片機(jī)應(yīng)用與實(shí)踐教程北航出版社3、樓然苗編51系列單片機(jī)設(shè)計(jì)實(shí)例 北航出版社.4、黃勤編計(jì)算機(jī)硬件技術(shù)基礎(chǔ)實(shí)驗(yàn)教程重慶大學(xué)出版社5、劉樂善編微型計(jì)算機(jī)接口技術(shù)及應(yīng)用華中科技大學(xué)出版社.6、陳光東編單片微型計(jì)算機(jī)原理及接口技術(shù)華中科技大學(xué)出版社。附錄a 系統(tǒng)硬件電路原理圖附錄b 程序設(shè)計(jì)數(shù)據(jù)#include#include soundplay

29、.h#define uchar unsigned char#define uint unsigned int#define cnt_delay_cnt1 25 /按鍵去抖動(dòng)延時(shí)閥值#define cnt_delay_cnt2 5 /按鍵行輸出信號(hào)穩(wěn)定的小延時(shí)閥值unsigned int dleay_time1;/*各個(gè)按鍵的音調(diào)*/unsigned char code music_code_1= 0x15,0x02, 0x00,0x00;unsigned char code music_code_2= 0x16,0x02, 0x00,0x00;unsigned char code music_

30、code_3= 0x17,0x02, 0x00,0x00;unsigned char code music_code_4= 0x18,0x02, 0x00,0x00;unsigned char code music_code_5= 0x19,0x02, 0x00,0x00;unsigned char code music_code_6= 0x1a,0x02, 0x00,0x00;unsigned char code music_code_7= 0x1b,0x02, 0x00,0x00;unsigned char code music_code_8= 0x0b,0x02, 0x00,0x00;u

31、nsigned char code music_code_9= 0x0c,0x02, 0x00,0x00;unsigned char code music_code_10=0x0d,0x02, 0x00,0x00;unsigned char code music_code_11=0x0e,0x02, 0x00,0x00;unsigned char code music_code_12=0x0f,0x02, 0x00,0x00;unsigned char code music_code_13=0x10,0x02, 0x00,0x00;unsigned char code music_code_1

32、4=0x11,0x02, 0x00,0x00;unsigned char code music_code_15=0x15,0x03, 0x00,0x00;unsigned char code music_code_16=0x16,0x03, 0x00,0x00;unsigned char key_step=1;/按鍵掃描步驟變量,在switch()語句的括號(hào)里unsigned int delay_cnt2=0; /延時(shí)計(jì)數(shù)器的變量unsigned char key_lock1=0; /按鍵自鎖標(biāo)志unsigned int delay_cnt1=0; /延時(shí)計(jì)數(shù)器的變量uchar key_sec

33、;sbit key_dr1= p10; /4x4按鍵行輸出sbit key_dr2= p11; /4x4按鍵行輸出sbit key_dr3= p12; /4x4按鍵行輸出sbit key_dr4= p13; /4x4按鍵行輸出sbit key_sr1= p14; /4x4按鍵行輸入sbit key_sr2= p15; /4x4按鍵行輸入sbit key_sr3= p16 ; /4x4按鍵行輸入sbit key_sr4= p17; /4x4按鍵行輸入/*/*/void delayus(unsigned char us)/delay us unsigned char uscnt; uscnt=us

34、1;/* crystal frequency in 12mhz*/ while(-uscnt);/*/void delayms(unsigned char ms)/delay ms while(-ms) delayus(250); delayus(250); delayus(250); delayus(250); void key_scan() /按鍵掃描函數(shù) /補(bǔ)充說明:如果中斷一次就把所有的按鍵都掃描完,中斷占用的時(shí)間片就會(huì)太多,勢(shì)/必會(huì)影響main函數(shù)里其他子程序的運(yùn)行,為了避免一口氣把所/的按鍵都掃描完,此/處用switch語句把4個(gè)按鍵分成2等分,一次中斷只掃描2個(gè)按鍵switch(

35、key_step) /按鍵掃描步驟, case 1: /掃描1號(hào)鍵,2號(hào)鍵 key_dr1=0; /按鍵行掃描輸出第一行低電平 key_dr2=1;key_dr3=1;key_dr4=1; delay_cnt2=0; /延時(shí)計(jì)數(shù)器清零 key_step+; /切換到下一個(gè)運(yùn)行步驟 break; case 2: delay_cnt2+; if(delay_cnt2cnt_delay_cnt2) /小延時(shí),但不是去抖動(dòng)延時(shí),替代一直受網(wǎng)友爭(zhēng)議的delay1(40) delay_cnt2=0; key_step+; /切換到下一個(gè)運(yùn)行步驟 break; case 3: if(key_sr1=1&ke

36、y_sr2=1&key_sr3=1&key_sr4=1) /如果沒有按鍵按下,則2個(gè)io輸入都是高電平 key_step+; /如果沒有按鍵按下,下一個(gè)中斷掃描下2個(gè)/按鍵key_lock1=0; /按鍵自鎖標(biāo)志清零 delay_cnt1=0; /按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器清零,此行非常巧妙 else if(key_sr1=0&key_sr2=1&key_sr3=1&key_sr4=1&key_lock1=0) / key_lock1按鍵自鎖,避免按鍵一直觸發(fā),下降沿有效 +delay_cnt1; /延時(shí)計(jì)數(shù)器 if(delay_cnt1cnt_delay_cnt1) /延時(shí)計(jì)數(shù)器超過一定的數(shù)值 d

37、elay_cnt1=0;key_lock1=1; /自鎖按鍵置位,避免一直觸發(fā),只有松開按鍵,/此標(biāo)志位才會(huì)被清零(經(jīng)典) key_sec=1; /觸發(fā)1號(hào)鍵dleay_time1 = 0; / 自鎖計(jì)數(shù)延時(shí)/led1 = 0; / 有按鍵按下,打開背光燈/dleay_time3 =0; / 背光燈延時(shí)計(jì)數(shù)器 清零 else if(key_sr1=1&key_sr2=0&key_sr3=1&key_sr4=1&key_lock1=0) +delay_cnt1; if(delay_cnt1cnt_delay_cnt1) delay_cnt1=0;key_lock1=1; /自鎖按鍵置位,避免一直

38、觸發(fā) key_sec=2; /觸發(fā)2號(hào)鍵dleay_time1 = 0; / 自鎖計(jì)數(shù)延時(shí) / led1 = 0; / 有按鍵按下,打開背光燈 /dleay_time3 =0; / 背光燈延時(shí)計(jì)數(shù)器 清零 else if(key_sr1=1&key_sr2=1&key_sr3=0&key_sr4=1&key_lock1=0) +delay_cnt1; if(delay_cnt1cnt_delay_cnt1) delay_cnt1=0;key_lock1=1; /自鎖按鍵置位,避免一直觸發(fā) key_sec=3; /觸發(fā)3號(hào)鍵dleay_time1 = 0; / 自鎖計(jì)數(shù)延時(shí) / led1 = 0

39、; / 有按鍵按下,打開背光燈 /dleay_time3 =0; / 背光燈延時(shí)計(jì)數(shù)器 清零 else if(key_sr1=1&key_sr2=1&key_sr3=1&key_sr4=0&key_lock1=0) +delay_cnt1; if(delay_cnt1cnt_delay_cnt1) delay_cnt1=0;key_lock1=1; /自鎖按鍵置位,避免一直觸發(fā) key_sec=4; /觸發(fā)4號(hào)鍵dleay_time1 = 0; / 自鎖計(jì)數(shù)延時(shí) / led1 = 0; / 有按鍵按下,打開背光燈 /dleay_time3 =0; / 背光燈延時(shí)計(jì)數(shù)器 清零 break; ca

40、se 4: /掃描/掃描3號(hào)鍵,4號(hào)鍵 key_dr1=1; key_dr2=0; /按鍵行掃描輸出第二行低電平key_dr3=1;key_dr4=1; delay_cnt2=0; /延時(shí)計(jì)數(shù)器清零 key_step+; /切換到下一個(gè)運(yùn)行步驟 break; case 5: delay_cnt2+; if(delay_cnt2cnt_delay_cnt2) /小延時(shí),但不是去抖動(dòng)延時(shí),替代一直受網(wǎng)友爭(zhēng)議的delay1(40) delay_cnt2=0; key_step+; /切換到下一個(gè)運(yùn)行步驟 break; case 6: if(key_sr1=1&key_sr2=1&key_sr3=1&key_sr4=1) /如果沒有按鍵按下,則2個(gè)io輸入都是高電平 key_step+; /如果沒有按鍵按下,下一個(gè)中斷掃描下2個(gè)按鍵key_lock1=0; /按鍵自鎖標(biāo)志清零 delay_cnt1=0; /按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器清零,此行非常巧妙 else if(key_sr1=0&key_sr2=1&key_sr3=1&key_sr4=1&key_lock1=0) / key_lock1按鍵自鎖,避免按鍵一直觸發(fā),下降沿有效 +delay_cnt1; /延時(shí)計(jì)數(shù)器 if(delay_cnt1cnt_delay_cnt1) /延時(shí)計(jì)數(shù)器超過一定的數(shù)值 delay_cnt1=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論