單片機實驗報告(基于51單片機)
《單片機實驗報告(基于51單片機)》由會員分享,可在線閱讀,更多相關《單片機實驗報告(基于51單片機)(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、精選優(yōu)質文檔-----傾情為你奉上 濱江學院 微機原理與接口技術綜合實驗報告 題 目 簡易電子琴設計 學 號 學生姓名 王興江 院 系 濱江學院 專
2、 業(yè) 指導教師 二O一二 年 月 日 【摘要】 由于音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用單片定時/計數(shù)器T產(chǎn)生不同的頻率的組合,從而構成音樂。本次設計實現(xiàn)的大體功能:當系統(tǒng)掃描到鍵盤上有鍵子被按下,則快速檢測出是那一個鍵子,然后單片機的定時就會發(fā)出相應的音調。定時器被啟動,發(fā)出一定頻率的脈沖,該頻率的脈沖通過P3串口并驅動喇叭發(fā)音。同時鍵值顯示在LED顯示器上。 【關鍵詞】 單片機
3、 電子琴 AT89C51 一、引言 1.1 電子琴設計的背景 隨著電子科技的飛速發(fā)展,電子技術正在逐漸改善著人們的學習、生活、工作,因此開發(fā)本系統(tǒng)希望能夠給人們多帶來一點生活上的樂趣。 基于當前市場上的玩具市場需求量大,其中電子琴就是一個很好的應用方面。單片機技術使我們可以利用軟硬件實現(xiàn)電子琴的功能,從而實現(xiàn)電子琴的微型化,可以用作玩具琴、音樂轉盤以及音樂童車等等。并且可以進行一定的功能擴展。鑒于傳統(tǒng)電子琴可以用鍵盤上的“k0”到“k16”鍵演奏從低So到高DO等16個音,從而可以用來彈奏喜歡的樂曲。 1.2 電子琴設計的意義 該設計具有以下優(yōu)點: (1)可以隨意彈奏想要表
4、達的音樂; (2)制作簡單,成本低。 (3)比傳統(tǒng)電子琴功能更完善。 1.3 電子琴設計的目標 由于本設計主要用于人們娛樂方面,因此在設計上盡量使其安全以及簡單易操作。其次,在這次設計可行性上進行分析如下: 1、經(jīng)濟可行性: 所謂經(jīng)濟可行性,即在這次設計上需要投入資金的多少,由于課程設計是提高我們的動手能力以及資金有限。因此在經(jīng)濟上必須能夠承受,比較理想化的對于我們課程設計來說是不可行的。通過分析后,無論是在器件價格或是常見度上均是可行的。 2、技術可行性: 技術可行性主要是分析技術條件上是否能夠順利開展并完成課程設計的主要問題,硬件、軟件能否滿足設計者的需要等。通過分析
5、各種軟件環(huán)境,硬件仿真環(huán)境等均已經(jīng)具備。 綜上所述,本系統(tǒng)設計目標已經(jīng)明確,在經(jīng)濟與技術上均可行,因此本系統(tǒng)的開發(fā)是完全可行的。 二.系統(tǒng)整體設計 1.設計任務 基于MCS系列單片機AT89C51。設計一個簡易電子琴 2.功能描述 1)利用所給鍵盤的1,2,3,4,5,6,7,8八鍵,能夠發(fā)出8個不同的音符。 2)并且要求按下按鍵發(fā)聲,松開延時一段時間停止,中間再按別的鍵則發(fā)出另一音符的聲音。 3)使用LED數(shù)碼管顯示8個不同的音調。 4)如果在一個按下的鍵發(fā)聲的同時有另一鍵被按下,前面鍵的發(fā)音停止,轉到后按的鍵的發(fā)音。 5)@增加變調鈕“UP1”,“UP2”,“DN1
6、”,“DN2”,在按下“0—8”音符時,變調鍵,產(chǎn)生相應的變調,使用LED數(shù)碼管顯示變調情況。 6)☆其它功能 3.軟硬件描述 該課題主要由軟件及其硬件兩個基本部分共同完成。硬件主要部分:4x4矩陣式鍵盤(主要用于音符的輸入以及變調的鍵值輸入,其與單片機的P0口連接). MCS51-AT89單片機芯片. 兩位LED數(shù)碼管顯示器.以及一些基本外圍電路。軟件主要部分:運用c語言進行相應的編程,其主要包括控制按鍵掃描程序,發(fā)聲主程序,以及顯示程序。 4.模塊描述 總體方案:本系統(tǒng)采用單片機AT89C51為電子琴的控制核心,系統(tǒng)主要包括播放模塊.按鍵控制模塊以及顯示模塊。 電路設
7、計總體框圖 AT89C51 矩陣式按鍵輸入電路 LED數(shù)碼管 揚聲器 電源時鐘電路 2步驟: A. 根據(jù)設計題目的具體要求及題目的設計提示, B. 利用Proteus軟件來畫原理圖(硬件)。 C. 利用Keil軟件進行程序的編寫,執(zhí)行,及仿真。從而生成HEX文件調 D. 將HEX文件導入原理圖的AT89C51中進行仿真 E. 試并實現(xiàn)相應的功能 三 . 硬件電路設計及描述 總體原理圖: 1. 4x4矩陣鍵盤控制模塊 其與單片機的具體連接方式如下: (1)矩陣式鍵盤的結構與工作原理 在中按鍵數(shù)量較多時,為了
8、減少I/O口的占用,通常將按鍵排列成形式,如圖所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口P1就可以構成4*4=16個按鍵。矩陣式結構的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識別及方法如下所述。 (2)矩陣式鍵盤的按鍵識別方法 行掃描法 行掃描法又稱為逐行
9、(或列)掃描查詢法,是一種最常用的按鍵識別方法,如上圖所示鍵盤,介紹過程如下。 a.判斷鍵盤中有無鍵按下 將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。 b.判斷閉合鍵所在的位置 在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。 程序掃描法就是調用鍵盤掃
10、描程序,查詢鍵盤并給予處理的方法。 1)查詢是否有鍵盤按下 2)延時去除抖動 3)確定下來按鍵所在的行. 列位置 具體框圖如下 開始 判斷是否有鍵按下? 確定按下哪個鍵 否 是 確定鍵值 調用顯示程序 調用發(fā)聲程序 2. 發(fā)聲模塊 揚聲器與單片機的連接方式如圖 揚聲器連接在P3.0口,當有鍵盤按下時候,單片機會通過程序調用相應鍵值,由P3.0輸出對應的頻率信號,從而驅動揚聲器發(fā)聲。 具體框圖如下: P3.0 檢測到頻率信號 揚聲器發(fā)聲 驅動 3. 顯示模塊 2位LED數(shù)碼管與單片機的連接圖 圖中:1、2是公共端,
11、控制位碼,控制那個數(shù)碼管亮(左右),如果是共陰的則接低電平,若為供陽的則相反。,a-g、dp是控制斷碼,控制9個二極管的亮暗,可以直接接51的輸出口(P0要加上拉電阻),如果是共陰的則接高電平來使數(shù)碼管亮,若為供陽的則相反。用8位碼控制,用16進制表示!二極管從最上面順時針分別為a,b,c,d,e,f中間橫線為g,點為dp。 4 設計的核心部件及其外圍基本電路 AT89C51簡介 AT89C51是一種帶4K字節(jié)FLASH(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱。A
12、T89C2051是一種帶2K字節(jié)閃存可編程可擦除的單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多提供了一種靈活性高且價廉的方案。外形及引腳排列 VCC:供電電壓。 GND:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為輸入。P0能夠用于外部
13、程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸
14、入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89C51的一些特殊功
15、能口,口管腳 備選功能 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 /RD(外部數(shù)據(jù)存儲器讀選通) P3口同時為閃爍編程和編程校驗接收一些控制信號。 RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖
16、存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)
17、。 /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。 四. 軟件設計思想及流程 在程序中根據(jù)相應的音符只做一個頻率表,當單片機檢測到鍵值的時候,主程序將自動調用表格中的程序,發(fā)出相應的信號驅動揚聲器發(fā)聲,同時LED數(shù)碼管顯示其鍵值(音調)。本設計的題目
18、包括,按鍵程序,主程序等幾個部分組成。具體流程圖如下: 執(zhí)行程序 掃描P1外接的鍵盤程序 調用主程序 發(fā)聲 顯示 返回 開始 是否有按鍵按下? Y N 放開按鍵 五.硬件的調試過程及調試方法 1)由于本次設計并沒有進行實際硬件的實做,所以我們本次對硬件的調試過程僅僅局限于電路圖的修改調試。一開始仿照題目進行畫圖仿真,我們并沒得到相應的結果。 2)對于軟件我們便是不斷檢查并修改C程序,從而形成合格的HEX文件。驅動單 片機實現(xiàn)相應的功能。 六.重要程序及源代碼 /****************
19、*********************************************
程序功能 : 對4×4矩陣鍵盤進行掃描,顯示鍵值和輸出聲音
**************************************************************/
#include
20、Temp; unsigned int code Key[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned int code Freqtab[] = { //定時半周期的初始值 64021,64103,64260,64400, //低音3 4 5 6 64524,64580,64684,64777, //低音7,中音1 2 3 64820,64898,64968,65030, //中音
21、4 5 6 7 65058,65110,65157,65178}; //高音1 2 3 4 /************************************************************* * 函數(shù)功能 : 用掃描法讀 P1 外接 4×4 鍵盤 * 函數(shù)返回 : 按下鍵:返回0~15、如無鍵按下:返回0 **************************************************************/ uchar Keyscan(void) { uchar i, j, temp, Buffer
22、[4] = {0xfe, 0xfd, 0xfb, 0xf7}; for(j = 0; j <4 ; j++) { //循環(huán)四次,掃描四行 P1 = Buffer[j]; //在低四位分別輸出一個低電平 temp = 0x80; //計劃先讀出P1.7位 for(i = 0; i < 4; i++) { //循環(huán)四次,檢查四列 if(!(P1 & temp)) { //從高四位,截取1位 return (i + j *4 ); //返回取得的按鍵值
23、 } temp >>= 1; //換右邊一位 } } return 16; //沒有鍵按下就返回16 作為誤判動作 } /************************************************************** * 名稱: Display(uchar k) * 功能:顯示鍵值(音調或者音符) * 輸入: k (鍵盤數(shù)值) * 輸出: P0口輸出七段碼,P2口輸出位選碼(根據(jù)要求這里只輸出一位) ***************
24、************************************************/ void Display(uchar k) { P0 = Key[k]; } /************************************************************** * 主函數(shù) ***************************************************************/ void Main(void) { uchar Key_Value = 16, Key_Temp1, K
25、ey_Temp2;//讀出的鍵值 TMOD = 0x01; //T0定時方式1 ET0 = 1; //允許T0中斷 EX0 = 1; //允許X0中斷 EA = 1; while(1) { TR0 = 0; //暫不發(fā)音 Key_Temp1 = Keyscan(); //讀入按鍵 if(Key_Temp1 != 16) {
26、//有鍵按下 Display(Key_Value); //顯示鍵值、延時消抖 Key_Temp2 = Keyscan(); //再讀一次 if (Key_Temp1 == Key_Temp2) {//兩次相等 Key_Value = Key_Temp1; //就確認下來 FreqTemp = Freqtab[Key_Value]; //根據(jù)鍵值,取出定時半周期的初始值 Display(Key_Value); //顯示 TR0 = 1;
27、 //啟動定時器,發(fā)音 while (Keyscan() < 16); //等待釋放 SPK = 1; //停止發(fā)音 } } } } //============================================================== void T0_INT(void) interrupt 1 { TL0 = FreqTemp; //載入定時半周期的初始值 TH0 = FreqTemp >> 8;
28、 SPK = ~SPK; //發(fā)音 } 七. 課程設計體會 兩個周的實訓時間很快就結束了,比起一個學期的單片機學習。真的很短很短!但這期間的學習及其收獲卻很多很多。說句實話,我們這組的兩個成員單片機基礎只是不是很好。因此選題時都不敢選太難的,但是通過這幾天的不斷學習不斷探索。雖然最后的結果部是太令我們滿意,但是我們通過這次,加深了對單片機理論的理解,將理論很好地應用到實際當中去,而且我還學會了如何去查閱所需的資料。這個過程中,我們花費了大量的時間和精力,更重要的是,我們在學會創(chuàng)新的基礎上,同時還懂得合作精神的重要性,學會了與他人合作。 另外很感謝學
29、校和老師給我們安排了這次課程設計,通過這次實訓我們發(fā)現(xiàn)現(xiàn)在書本上的知識與實際的應用存在著不小的差距,書本上的知識很多都是理想化后的結論,忽略了很多實際的因素,或者涉及的不全面,可在實際的應用時這些是不能被忽略的,我們不得不考慮這方的問題,這讓我們無法根據(jù)書上的理論就輕易得到預想中的結果,有時結果甚至很差別很大。通過這次實踐使我更深刻的體會到了理論聯(lián)系實際的重要性,我們在今后的學習工作中會更加的注重實際,努力提高自己的動手能力。 八.參考文獻 1.周向紅. 51單片機課程設計。武漢:華中科技大學出版社,2011. 2.吳亦鋒. 單片機原理與接口技術。北京:電子工業(yè)出版社,2010. 3.杜洋. 愛上單片機。北京:人民郵電出版社,2010. 4.王守中. 51單片機開發(fā)入門與典型實例。北京:人民郵電出版社. 5.唐浩強. C程序設計。 北京:清華大學出版社,2005. 專心---專注---專業(yè)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。