基于單片機(jī)ATC電子琴課程設(shè)計(完整資料)_第1頁
基于單片機(jī)ATC電子琴課程設(shè)計(完整資料)_第2頁
基于單片機(jī)ATC電子琴課程設(shè)計(完整資料)_第3頁
基于單片機(jī)ATC電子琴課程設(shè)計(完整資料)_第4頁
基于單片機(jī)ATC電子琴課程設(shè)計(完整資料)_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于單片機(jī)ATC電子琴課程設(shè)計(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

基于單片機(jī)ATC電子琴課程設(shè)計(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)基于AT89C51單片機(jī)的多音階電子琴的設(shè)計摘要單片機(jī)是電子、計算機(jī)及機(jī)電專業(yè)的一門重要的必修課程.要求我們掌握單片機(jī)的基本組成和工作原理、會變程序的一般編寫方法、常用接口電路的軟硬件設(shè)計方法,具備基本的單片機(jī)系統(tǒng)應(yīng)用與開發(fā)能力。隨著科技的快速發(fā)展,單片機(jī)的應(yīng)用日益普遍。單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本單片機(jī)系統(tǒng)設(shè)計應(yīng)用單片機(jī)控制技術(shù),用AT89C51單片機(jī)為核心控制元件根據(jù)本學(xué)期所學(xué)的單片機(jī)知識結(jié)合設(shè)計了一套單片機(jī)控制的電子琴系統(tǒng)。電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器,它在現(xiàn)代音樂扮演著重要的角色。本次設(shè)計首先對單片機(jī)設(shè)計簡易電子琴仔細(xì)分析,接著制作硬件電路和編寫軟件的程序,最后進(jìn)行軟硬件的調(diào)試運(yùn)行。并且從原理圖,主要芯片,各模塊的原理和各個模塊的程序調(diào)試來闡述。利用單片機(jī)產(chǎn)生不同頻率來獲得我們要求的音階,實現(xiàn)高、中、低共21個音符的發(fā)音和顯示和音樂播放時的控制顯示,并且能自動播放程序中編排的音樂.系統(tǒng)運(yùn)行穩(wěn)定,其優(yōu)點是硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,性價比高等,具有一定的使用和參考價值。關(guān)鍵詞:單片機(jī)、電子琴、AT89C51、獨立鍵盤、目錄第1章引言.。....。......。.。。.....。..。.。.。。。。..。.。。。。..。。。.。...。。.。.......。。......。......。...。。。..。。。。。...。....。...。。............1.1。1設(shè)計背景..。。。.。。.....。.。。.。。。。.。。.。。...。。..。.。....。...。..。.。。...。..。。。...。。.。。.。。。..。....。。。..。..。.。.。....。..。。。。..。。。......11。2設(shè)計任務(wù)。.。。.。.。。。.。..。。..。...。。。..。。.。。.。..。..。.。.。..。.。。..。。..。.....。。.。.。。..。..。。.。....。。....。。。。...。.。..。....。..。....11。3設(shè)計目的。..。。.......。。..。。.....。.。。。..。...。....。.。。.。...。..。.....。...。.....。。.........。.........。。。。......。。.。..。...。.....。.。11.4設(shè)計思路。.。.。。..。.。.......。。。。...。.。。.。.....。......。..。..。.....。..。.。。..。.。..。....。。..。.。..。..。.。。..。。...。.。.。。。。。。。。。。。.。.。.1第2章方案論證.....。。.。.。.。...........。。.。..。。.。.。.。。..。。.。.。..。。。。.。。。。.。。...。.....。.。。。。。。。。..。...。....。。...。...。。。.....。.12。1方案論證..。。。.。。...。...。。.。...。。。。..。.。.....。..。...。...。。。。..。.。。...。.。........。..。..。。..。。.。.。。。。。...。。..。.。。.。.....。..。..。。..。。。1第3章硬件系統(tǒng)設(shè)計........。。.。.。...。...。。.。....。.。.。。。。...。.。..。。。。.。.。。。。.。........。.。.。.。。。。...。..。............。...。..。23。1時鐘電路....。....。..。.......。....。。..。............。..。。.。。...。.。..。....。.....。...。。。。.。..。...。.。.。..。。。.。。...。...。。..。..。..。..23.2復(fù)位電路.。....。....。。。...。。......。。..。。......。.。..。...。..。.............。。。。..。..。。。.。..。...........。..。。...。。..。。........33.3原理框圖。.....。....。...。。.......。。。.....。。.。..。.。。...。.........。。...。...。。.。.。........。..。....。..。.。。。..。...。....。。..。。..。。。。33.4顯示部分設(shè)計。。。。..。。。。。.。。.。。...。.。。...。.。.。..。。。.。..。....。.。.。。..。。....。。.。.。......。.。。.。。。...。.。.。.。..。。。。.。.....。....33。5按鍵部分設(shè)計。..。。...。....。。。..。..。.。..。.。。.。.....。.。。。.....。...。...。..。。....。...。....。....。......。..。。。。.。。..。..。。.。。.43.6發(fā)音部分設(shè)計。......。.。。。。...。...。。。.。...。。。...。..。..。..。。.....。..。...。..。。。.。..。..。.。.....。...。。。....。..。..。.。...。..。...。.5第4章軟件系統(tǒng)設(shè)計..。。.。.。.。..。。.。。。...。..。..。.。.........。.。.....。.。。。.。。.。.。..。。..。。。.......。。...。。。...。.。。....。。.54.1系統(tǒng)分析。.。。。。........。..。............。..。。。..。....。.。。。。..。.。.。。。。.。.....。。.......。.。.。..。.....。.。。...。。。....。.。.。.。..。..。。.。54.2參數(shù)計算...。...。.。..。..。。。.。。.。....。....。.。.。..。。。..。.........。。。。。。.。。..。..。..。。...。.。.。.。.。。...。.....。。。..。.......。..。.....。。。.74。3程序設(shè)計..。。。.。.。。...。。....。..。。...。....。..。。。...。...。。....。..。..。..。...。.。.。。.....。....。。....。。.....。.。。.。..。.。.。。..。。。。。。....。。。8第5章實驗結(jié)果..。.。...。。...。。.。..。....。....。。。.....。.。。...。....。。。.。。。。.。。.....。.。。。...。。。。...。..。.。..。.。。..。.。.。.。....。105。1硬件調(diào)試..。。。。.。.。。.....。.。...。。..。.。..。..。......。。.。..。。。......。。..。...。..。。。。.。..。..。.。..。.。。。..。。.。。.。..。....。.。.。.。105。2軟件調(diào)試...。。。。........。....。.。。.。。.。...。。.。。.。。.。.。.。.。。..。。。.....。.。.。.....。.。。....。。....。..。。.。....。。.。...。..。.。。。.。105。3仿真結(jié)果...。....。.。.。。。.。.。。.。..。。....。...。...。。.。...。。...。。.。..。.。。...。。.。..。.。.。.........。...。.。.。。。.。。....。...。.。。。。.105.4結(jié)果分析。..。.........。.。。。。..。.。.。...。....。。.。。.。。。...。.....。。..。。..。。。。。...。。.。。....。。.....。。。..。..。..。.。.。。。.。.....。....。。。。11第6章總結(jié)...。...。。。....。....。。。。..。.。....。。...。.。.....。。。..。。。....。。.。。。。..。.。.。....。.。...。.。...。.。......。。..。。...。.....。.11附錄一:系統(tǒng)整體電路圖.。。.。....。....。.....。.....。...。.。。。。。。.....。..。。。。.。...。...。。.。。.....。。。......。....。....。。.。。。.。.12附錄二:元器件清單。.。。。。.。..。..。..。.。.。.。。.。。....。..。.。...。。。。。。。.。..。。。..。。....。.。....。..。...。..。。。..。.。。..。。.。。..。....。。.。。.12附錄三:源程序代碼..。.。....。.。。..。.。..。..。..。。...。。.。..。..。。.。.。.。.。.。....。。。。.。.。..。.。。.。。.。.。。。。。.。。...。。..。。。.......13參考文獻(xiàn)。.。.。..。。.。。..。.。...。........。.。...。。......。.。..。。。.....。。。..。。。。...。.。.。...。..。.。....。.。。。..。。..。.。。。....。。.。..。。。....19第一章引言1。1設(shè)計背景隨著電子科學(xué)技術(shù)的飛速發(fā)展,電子技術(shù)正在逐漸改善著人們的學(xué)習(xí)、生活、工作,因此開發(fā)本系統(tǒng)希望能夠給人們帶來更多的生活樂趣?;诋?dāng)前市場上的玩具需求量增大,其中電子琴就是一個很好的應(yīng)用方面。單片機(jī)技術(shù)使我們可以利用軟硬件來實現(xiàn)電子琴的功能,從而可以實現(xiàn)電子琴的微型化,可以用作玩具琴、音樂轉(zhuǎn)盤以及音樂童車等等。并且可以進(jìn)行一定的功能擴(kuò)展。鑒于傳統(tǒng)電子琴可以用鍵盤上的“1”到“A”鍵演奏從低So到高DO等11個音,從而也可以通過單片機(jī)實現(xiàn)對十個按鍵的擴(kuò)展,實現(xiàn)七個音符鍵的高、中、低21個音調(diào)的顯示播放和任意音樂的自動播放。本次設(shè)計將十個音鍵制作成獨立鍵盤,其中七個為音符鍵,三個為控制鍵,并用數(shù)碼管進(jìn)行顯示,使電子琴的功能更加完美.不但可以實現(xiàn)對按鍵的顯示,而且可以實現(xiàn)對音樂的自動存儲和播放,使該設(shè)計功能更加完善。1.2設(shè)計任務(wù)1、根據(jù)要求,設(shè)計以單片機(jī)為核心的多音階電子琴系統(tǒng),可隨意彈奏想要表達(dá)的音樂;2、針對要求控制的對象完成程序的編制;3、硬件軟件聯(lián)調(diào),完成題目所要求的功能;4、有高中低三個音階,并有顯示電路。1.3設(shè)計目的1、通過課程設(shè)計,使我們能夠深入理解單片機(jī)系統(tǒng)的工作原理,接口電路的設(shè)計及調(diào)試方法,培養(yǎng)綜合運(yùn)用所學(xué)理論知識分析和解決實際問題的能力;2、使用AT89C51芯片的串口功能,利用獨立式鍵盤和AT89C51單片機(jī)以及揚(yáng)聲器實現(xiàn)樂曲的演奏;3、用keil軟件進(jìn)行編程與調(diào)試,利用Proteus7Professional軟件進(jìn)行繪制硬件電路圖且進(jìn)行仿真.1.4設(shè)計思路用獨立式鍵盤的7個按鍵分別對應(yīng)相應(yīng)的音符,當(dāng)按下某一個按鍵時,產(chǎn)生一個相應(yīng)音符,操作者按一定的節(jié)奏、規(guī)律進(jìn)行輸入時,信號經(jīng)過單片機(jī)處理,然后經(jīng)音頻放大后經(jīng)揚(yáng)聲器輸出音頻信號,產(chǎn)生樂曲。本次設(shè)計有一個創(chuàng)新,就是預(yù)先存放一段音樂程序在芯片內(nèi),整個設(shè)計既可以作電子琴用又可以作音樂盒用,且?guī)э@示功能。第二章方案論證2.1方案論證2。1。1總體設(shè)計采用AT89S52單片機(jī)作為主控芯片,設(shè)置鍵盤、蜂鳴器等外圍器件,另外還用到一些簡單器件如:四位數(shù)碼管,和NPN型三極管及電阻等。利用按鍵實現(xiàn)音符和音調(diào)的輸入;兩位的數(shù)碼管進(jìn)行被操作的按鍵顯示;用NPN型三極管8550實現(xiàn)低音頻功率放大;最后用蜂鳴器發(fā)音。主控芯片采用AT89S52單片機(jī),它是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,具有高性能、高速度、體積小、價格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點。避免了由于元器件種類、個數(shù)繁多,而過于復(fù)雜的硬件電路也容易引起系統(tǒng)的精度不高、體積過大等不利因素.同時具有強(qiáng)大的控制功能和靈活的編程實現(xiàn)特性,由于本設(shè)計主要用于人們娛樂方面,因此在設(shè)計上盡量使其安全以及簡單易操作。具有經(jīng)濟(jì)可行性、技術(shù)可行性、實物應(yīng)用性.2.1.2單片機(jī)選型硬件電路要以單片機(jī)作為主控芯片,實現(xiàn)按鍵輸入音符和音調(diào),四位數(shù)碼管的顯示以及低音頻功率放大和蜂鳴器發(fā)音。針對本設(shè)計的功能和用途,采用AT89C51單片機(jī)更好,實現(xiàn)功能完全,性價比較高,更適合本設(shè)計。第三章硬件系統(tǒng)設(shè)計3.1時鐘電路單片機(jī)內(nèi)部具有一個高增益反相放大器,用于構(gòu)成振蕩器.通常在引腳XTALl和XTAL2跨接石英晶體和兩個補(bǔ)償電容構(gòu)成自激振蕩器,結(jié)構(gòu)圖2中X1、C1、C2??梢愿鶕?jù)情況選擇6MHz、12MHz或24MHz等頻率的石英晶體,補(bǔ)償電容通常選擇30pF左右的瓷片電容。圖3-1、時鐘電路3.2復(fù)位電路單片機(jī)小系統(tǒng)常采用上電自動復(fù)位和手動按鍵復(fù)位兩種方式實現(xiàn)系統(tǒng)的復(fù)位操作。上電復(fù)位要求接通電源后,自動實現(xiàn)復(fù)位操作。手動復(fù)位要求在電源接通的條件下,在單片機(jī)運(yùn)行期間,用按鈕開關(guān)操作使單片機(jī)復(fù)位。其結(jié)構(gòu)如下圖。上電自動復(fù)位通過電容C3充電來實現(xiàn)。手動按鍵復(fù)位是通過按鍵將電阻R1與VCC接通來實現(xiàn).圖3-2、復(fù)位電路3。3原理框圖本系統(tǒng)有主控芯片89S52、發(fā)音單元、顯示模塊、按鍵模塊組成.圖3-3、原理框圖3。4顯示部分設(shè)計3.4.1數(shù)碼顯示方式數(shù)碼顯示有靜態(tài)顯示方式與動態(tài)顯示方式兩種.工作在靜態(tài)顯示方式時,數(shù)碼管的位線與電源一直相連,數(shù)碼管中的二極管均處于通電狀態(tài),即在靜態(tài)工作方式下,顯示電路中數(shù)碼管的位選線是同時選通,而數(shù)碼管的段選線是獨立輸入。工作在動態(tài)顯示方式時,數(shù)碼管的位線在掃描控制電路的控制下按設(shè)定順序?qū)?即電路中的數(shù)碼管是逐個接通電源,數(shù)碼管的段選線以并聯(lián)方式與譯碼電路聯(lián)接,即在動態(tài)工作方式下,數(shù)碼管不是同時導(dǎo)通顯示而是按照設(shè)定順序分時導(dǎo)通顯示。3。4。2八位數(shù)碼管的結(jié)構(gòu)本次課程設(shè)計的顯示電路采用兩位數(shù)碼管進(jìn)行顯示,由于此設(shè)計采用的是共陰極的,使用時不加限流電阻。為了顯示字符,要為LED顯示器段碼,除了組成8字形的字符的7段,另加上1個小數(shù)點位,共計8段,因此提供給LED顯示器的顯示段碼為1個字節(jié)。圖3-4、數(shù)碼管電路3.5按鍵部分設(shè)計3.5.1鍵盤設(shè)計鍵盤在單片機(jī)應(yīng)用系統(tǒng)中是一個關(guān)鍵的部件,它能實現(xiàn)向計算機(jī)輸入數(shù)據(jù),傳送命令等功能,是人工干預(yù)計算機(jī)的主要手段.鍵盤可以分為2類:獨立連接式鍵盤和矩陣式鍵盤。本設(shè)計采用獨立式鍵盤。獨立式按鍵是直接用I/O口線構(gòu)成的單個按鍵電路,其特點是每個按鍵單獨占用一根I/O口線,每個按鍵的工作不會影響其它I/O口線的狀態(tài).獨立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單,但每個按鍵必須占用一根I/O口線,然而,在按鍵較多時,I/O口線浪費(fèi)較大,不宜采用。獨立式按鍵軟件常采用查詢式結(jié)構(gòu)。先逐位查詢每根I/O口線的輸入狀態(tài),如某一根I/O口線輸入為低電平,則可確認(rèn)該I/O口線所對應(yīng)的按鍵已按下,然后,再轉(zhuǎn)向該鍵的功能處理程序。由于本程序較為簡單,為了使用方便及節(jié)省資源,選擇獨立式鍵盤.下圖為獨立式鍵盤電路圖:圖3-5、獨立式鍵盤電路圖3.6發(fā)音部分設(shè)計圖3-6、揚(yáng)聲器電路圖第四章軟件系統(tǒng)設(shè)計4.1系統(tǒng)分析4.1.1系統(tǒng)軟件的組成(1)鍵盤掃描程序:檢測是否有按鍵按下,有按鍵按下則記錄按下鍵的鍵值,并跳轉(zhuǎn)至功能轉(zhuǎn)移程序;無按鍵按下,則返回鍵盤掃描程序繼續(xù)檢測。(2)功能轉(zhuǎn)移程序:對檢測到的按鍵值進(jìn)行判斷,是琴鍵則跳轉(zhuǎn)至琴鍵處理程序,是功能鍵則跳轉(zhuǎn)至相應(yīng)的功能程序,我們設(shè)計的功能程序有兩種,即音色調(diào)節(jié)功能和自動播放樂曲的功能。(3)琴鍵處理程序:根據(jù)檢測到的按鍵值,查詢音調(diào)表,給計時器賦值,使發(fā)出相應(yīng)頻率的聲音.(4)自動播放歌曲程序:檢測到按鍵按下的是自動播放歌曲功能鍵后執(zhí)行該程序,電子琴會自動播放事先已經(jīng)存放的歌曲,歌曲播放完畢之后自動返回至鍵盤掃描程序,繼續(xù)等待是否有按鍵按下.4。1。2系統(tǒng)總體功能流程圖圖4—1、系統(tǒng)總體功能流程圖4。2參數(shù)計算4.2。1發(fā)音原理若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時間.利用定時器計時半周期時間,每當(dāng)計時終止后就將P1.0反相,然后重復(fù)計時再反相。就可在P1。0引腳上得到此頻率的脈沖。利用AT89C51的內(nèi)部定時器使其工作計數(shù)器模式(MODE1)下,改變計數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階。4.2。2計算舉例例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計數(shù)器計時956μs/1μs=956,每計數(shù)956次時將I/O反相,就可得到中音DO(523Hz)。計數(shù)脈沖值與頻率的關(guān)系式是:N=fi÷2÷fr,式中,N是計數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產(chǎn)生的頻率。其計數(shù)初值T的求法如下:T=65536-N=65536—fi÷2÷fr例如:設(shè)K=65536,fi=1MHz,求中音DO(261Hz)。T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音DO的T=65536-500000/523=64580。4.2.3計算結(jié)果(1)單片機(jī)12MHZ晶振,中音符與計數(shù)T0相關(guān)的計數(shù)值如下表所示:音符頻率(Hz)計數(shù)值(T值)音符頻率(Hz)計數(shù)值(T值)低1DO26263628#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中1DO52364580#4FA#149065198#1DO#55464633高5SO156865217中2RE58764633#5SO#166165235#2RE#62264884高6LA176065252中3MI65964732#6LA#186565268中4FA69864820高7SI196765283采用查表程序進(jìn)行查表時,可以為這個音符建立一個表格,有助于單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù):低音0-19之間,中音在20-39之間,高音在40—59之間。4.3程序設(shè)計4.3.1判斷音階(高中低音)子程序在軟件設(shè)計中采用yinjie代表音階,如下表所示:音階Yinjie值高2中1低0初始化狀態(tài)為中音(yinjie=1),電路中設(shè)計高、低兩個音階鍵。上電后,若無按鍵按下,則為中音模式。若音階鍵被按下,則如下流程圖所示,初始化后進(jìn)行按鍵掃描,在高音鍵按下,若初始yinjie不為2,則另yinjie=2,進(jìn)入高音工作模式,若初始yinjie為2,則對yinjie進(jìn)行初始化,即另yinjie=1,重新進(jìn)入進(jìn)入中音工作模式,這樣即實現(xiàn)了高音鍵切換高、中音方式的轉(zhuǎn)換.同理,用低音鍵實現(xiàn)中、低音的切換.圖4-2、判斷音階(高中低音)子程序4。3。2播放子程序(包括自動播放存儲音樂和按鍵發(fā)音)本設(shè)計共兩種播放模式,包括自動播放存儲音樂和按鍵發(fā)音。上電后,首先開中斷并設(shè)定定時器0為工作方式1,當(dāng)自動播放鍵按下時,進(jìn)入中斷,根據(jù)樂譜在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時器賦初值,即開始播放音樂。當(dāng)DO、RE、MI、FA、SO、LA、SI七種音符鍵按下時,根據(jù)音階值(如3.3。1中高中低對應(yīng))和音符值在定義的音頻數(shù)組中查找相應(yīng)音律,然后給定時器賦初值,即按鍵發(fā)音。圖4-3、播放子程序第五章實驗結(jié)果5.1硬件調(diào)試硬件調(diào)試主要是針對單片機(jī)部分進(jìn)行的調(diào)試.在上電之前,先確保電路中不存在斷路或短路情況,這一工作是整個調(diào)試工作的第一步,也是非常重要的一個步驟。在這部分調(diào)試中主要使用的工具是萬用表,用來完成檢測電路中是否存在斷路或者短路情況的任務(wù)。注意焊點之間,確保焊點沒有短接在一起,同時注意焊點的美觀,確保沒有開路以及短路的現(xiàn)象出現(xiàn)。在確保硬件電路正常且無異常情況(斷路或短路)的情況下方可上電調(diào)試,上電調(diào)試的目的是檢驗電路是否接錯,同時還要檢驗原理是否正確,在本次設(shè)計中,上電調(diào)試主要是檢測單片機(jī)控制部分、數(shù)碼管點亮部分、和音頻轉(zhuǎn)換電路硬件調(diào)試。1、數(shù)碼管LED電路調(diào)試:接通電源,隨機(jī)按下按鈕可以看到數(shù)碼管顯示數(shù)字。2、鍵盤單片機(jī)控制部分調(diào)試:上電后,隨機(jī)按動鍵盤可以發(fā)現(xiàn)各個按鍵對應(yīng)的音正確。5。2軟件調(diào)試調(diào)試主要方法和技巧:通常一個調(diào)試程序應(yīng)該具備至少四種性能:跟蹤、斷點、查看變量、更改數(shù)值。整個程序是一個主程序調(diào)用各個子程序?qū)崿F(xiàn)功能的過程,要使主程序和整個程序都能平穩(wěn)運(yùn)行,各個模塊的子程序的正確與平穩(wěn)運(yùn)行必不可少,所以在軟件調(diào)試的最初階段就是把各個子程序模塊進(jìn)行分別調(diào)試。5。3仿真結(jié)果圖5—1、低音音符LA仿真圖5.4結(jié)果分析根據(jù)仿真結(jié)果可知,本次課程設(shè)計能夠準(zhǔn)確并徹底的完成設(shè)計要求。右側(cè)數(shù)碼管可以顯示a、b、c三種結(jié)果,分別代表低音、中音和高音。右側(cè)數(shù)碼管可以顯示1、2、3、4、5、6、7七個數(shù)字,分別代表DO、RE、MI、FA、SO、LA、SI七種音符.當(dāng)系統(tǒng)上電后,若按下低音鍵,則選定工作方式為低音模式。P0口連接數(shù)碼管段選端,右側(cè)數(shù)碼管顯示的6即代表LA。四位數(shù)碼管即代表低音LA。第六章總結(jié)本次課程設(shè)計的課題是《基于AT89C51單片機(jī)的多音階電子琴的設(shè)計》,這是一個實用性質(zhì)非常強(qiáng)的題目。它與我們?nèi)粘I盥?lián)系緊密.這個課題的選取對所有參加這個課題研究的同學(xué)們來說都是一個非常好的鍛煉。這次實驗總共經(jīng)歷了兩周的時間,從功能需求分析到功能分析,從程序的設(shè)計到程序的調(diào)試、下載、最后終于完成了這次具有實際使用價值的實驗。在設(shè)計中我運(yùn)用自己平時學(xué)到的一些知識,以及自己在課后所查找資料的進(jìn)行設(shè)計,剛開始遇到很多困難,包括對使用C語言環(huán)境語言的不熟悉。后來一起和同學(xué)研究,最終找到了解決問題的答案。經(jīng)過我們的努力,在仿真軟件和實物上都實現(xiàn)了高、中、低21個音符的發(fā)聲和音樂的自動播放,使我們有了一定的成就感,也使我們進(jìn)一步熟悉和掌握了單片機(jī)的內(nèi)部結(jié)構(gòu)和工作原理,了解了單片機(jī)應(yīng)用系統(tǒng)設(shè)計的基本方法和步驟,掌握了單片機(jī)仿真軟件Proteus的使用方法和鍵盤、顯示器在的單片機(jī)控制系統(tǒng)中的應(yīng)用,同時也掌握了撰寫課程設(shè)計報告的方法。我感覺自己在設(shè)計方面提高很大,特別是在設(shè)計程序時,邏輯思維能力有所加強(qiáng),同時對以前所學(xué)的知識有了更深刻的認(rèn)識,并進(jìn)一步的得到了鞏固和提高,充分的做到了理論聯(lián)系實際,也使我認(rèn)識到理論與實際的差別,通過該課程設(shè)計,不但對單片機(jī)有了較為全面的認(rèn)識,而且相關(guān)的知識也有了足夠的掌握,我感覺最重要的還是設(shè)計思維的形成。更發(fā)現(xiàn)自己在平時學(xué)習(xí)中的缺陷.對以后的學(xué)習(xí)也有很大的幫助.這次課程設(shè)計,我所收獲的不僅是學(xué)習(xí)知識方面,更多的是生活方面。我了解到,在我們生活中,應(yīng)該學(xué)會與別人共同分享,分享知識,分享問題,這樣更有助于我們的交流,有利于我們共同進(jìn)步,有利于我們對學(xué)習(xí)養(yǎng)成良好的興趣。最后,我要感謝,帶我們課程設(shè)計的老師,感謝您對我們的耐心,感謝您們對我們的鼓勵,讓我們有信心繼續(xù)下去,成功走到最后。附錄一:系統(tǒng)整體電路圖附錄二:元器件清單序號元器件名稱數(shù)量(個)1AT89C521230P瓷片電容2312MHz晶振1410UF/16V電解電容15按鈕1160.5W/8Ω揚(yáng)聲器17數(shù)碼管1810K電阻19排阻(9引腳)1附錄三:源程序代碼#include<reg52.h>#defineucharunsignedcharvoidRun(void);voidKeyScan(void);voidPl(wèi)ayKey(void);voiddelay_1ms(uchari);voidPlayMusic(void);voidDisPlay(void);sbitBeep=P3^7;ucharTH0,TL0;//TH0,TL0ucharflag=0XFF;//模式,0表示音樂,ff表示按鍵ucharkey=0;//按鍵代號uchara;uchargaodi=0;//音樂音符ucharcodeMusicCode[]={0XFC,0X44,0XFC,0XAC,0XFD,0X09,0XFD,0X34,0XFD,0X82,0XFD,0XC8,0XFD,0X06,0XFB,0X04,0XFB,0X90,0XFC,0X0C,0XFE,0X22,0XF9,0X5B,0XFA,0X15};//月亮代表我的心ucharcodeMusic[]={0X02,0X82,0X16,0X32,0X54,0X02,0X52,0XA6,0X32,0X54,0X02,0X52,0X64,0X74,0XB6,0X64,0X52,0X5C,0X32,0X22,0X16,0X12,0X14,0X32,0X22,0X16,0X12,0X14,0X22,0X32,0X26,0X12,0X94,0X22,0X32,0X2C,0X32,0X52,0X36,0X22,0X14,0X54,0XAC,0X92,0XA2,0X96,0X0A2,0X96,0X82,0X3C,0X54,0X36,0X22,0X14,0X54,0XAC,0X92,0XA2,0X16,0X12,0X14,0X22,0X32,0X2C,0X02,0X82,0X16,0X32,0X56,0X12,0XA6,0X32,0X56,0X52,0X66,0X72,0XB6,0X62,0X62,0X52,0X58,0X32,0X22,0X16,0X12,0X14,0X32,0X22,0X16,0X12,0X14,0X22,0X32,0X1C,0XFF};//按鍵音符ucharcodeKeyCode[]={0XFF,0XFF,0xF8,0x8B,0xF9,0x5B,0xFA,0x14,0xFA,0x66,0xFB,0x03,0xFB,0x8F,0xFC,0x0B,//低音0xFC,0x43,0xFC,0xAB,0xFD,0x08,0xFD,0x33,0xFD,0x81,0xFD,0xC7,0xFE,0x05,//中音0xFE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xFF,0x02,//高音};voidmain(void){P1=0XFF;//初始化P0=0XFF;P2=0;TMOD=0X01;IT0=1;TR0=0;EX0=1;ET0=1;EA=1;while(1){KeyScan();//按鍵掃描Run();//運(yùn)行DisPlay();//顯示}}voidRun(void)//運(yùn)行{if(flag==0)PlayMusic();elsePlayKey();}voidKeyScan(void)//按鍵掃描{if(P1==0XFE)//第一按鍵按下{delay_1ms(12);//延時12MSif(P1==0XFE)//確定按下{key=1;a=key;}}elseif(P1==0XFD){delay_1ms(12);if(P1==0XFD){key=2;a=key;}}elseif(P1==0XFB){delay_1ms(12);if(P1==0XFB){key=3;a=key;}}elseif(P1==0XF7){delay_1ms(12);if(P1==0XF7){key=4;a=key;}}elseif(P1==0XEF){delay_1ms(12);if(P1==0XEF){key=5;a=key;}}elseif(P1==0XDF){delay_1ms(12);if(P1==0XDF){key=6;a=key;}}elseif(P1==0XBF){delay_1ms(12);if(P1==0XBF){key=7;a=key;}}elseif(P0==0XFE)//低音模式鍵按下{delay_1ms(12);if(P0==0XFE){gaodi=0;a=gaodi;}}elseif(P0==0XFD)//中音模式鍵按下{delay_1ms(12);if(P0==0XFD){gaodi=1;a=gaodi;}}elseif(P0==0XFB)//高音模式鍵按下{delay_1ms(12);if(P0==0XFB){gaodi=2;a=gaodi;}}elsereturn;}voidPl(wèi)ayKey(void)//響應(yīng)按鍵{if(key==0)return;else{Th0=KeyCode[gaodi*14+key*2];Tl0=KeyCode[gaodi*14+key*2+1];TR0=1;delay_1ms(187);TR0=0;key=0;}}time0()interrupt1//定時器0中斷{TH0=Th0;TL0=Tl0;Beep=~Beep;}voidinterrupt0()interrupt0//外部中斷0{flag=~flag;if(flag==0){a=8;P2=0;}}voiddelay_1ms(uchari)//延時{ucharj,k;for(j=0;j<i;j++)for(k=0;k〈148;k++);}voidPlayMusic(void)//播放音樂{ucharyinfu,jiepai;uchari,j;for(i=0;Music[i]!=0XFF;i++){yinfu=(Music[i]>〉4);jiepai=(Music[i]&0X0F);if(yinfu==0)continue;Th0=MusicCode[(yinfu-1)*2];Tl0=MusicCode[(yinfu-1)*2+1];TR0=1;for(j=jiepai;j>0;—-j){delay_1ms(250);}TR0=0;if(flag!=0)break;}}voidDisPlay(void)//顯示{switch(a){case0:P2=0X3F;break;case1:P2=0X06;break;case2:P2=0X5B;break;case3:P2=0X4F;break;case4:P2=0X66;break;case5:P2=0X6D;break;case6:P2=0X7D;break;case7:P2=0X07;break;default:P2=0X00;break;}}參考文獻(xiàn)[1]謝輝,黃淘,李焱.單片機(jī)原理及應(yīng)用.重慶.化學(xué)工業(yè)出版社,2010[2]蘇家健,曹柏榮,汪志鋒.單片機(jī)原理及應(yīng)用技術(shù)。北京:高等教育出版社,2003[3]李朝青.單片機(jī)原理及接口技術(shù).北京:北京航天航空大學(xué)出版色,2001[4]胡漢才.單片機(jī)原理及其接口技術(shù).北京:清華大學(xué)出版社,2004。[5]潭浩強(qiáng)。C語言程序設(shè)計。北京:清華大學(xué)出版社,2005[6]李華。MCS51/98系列單片機(jī)原理與應(yīng)用。北京:機(jī)械工業(yè)出版社,2007[7]謝自美等.電子線路設(shè)計、實驗、測試。北京:華中科技大學(xué)出版社,2006[8]周靈彬,張靖武.單片機(jī)產(chǎn)品的PROTEUS設(shè)計與仿真.電子工業(yè)出版社,2008[9]趙鑫,蔣亮,齊兆群等。數(shù)字電路設(shè)計.北京:機(jī)械工業(yè)出版社,2005單片機(jī)原理及系統(tǒng)課程設(shè)計評語:考勤10分守紀(jì)10分過程30分設(shè)計報告30分答辯20分總成績(100)專業(yè):自動化班級:姓名:學(xué)號:指導(dǎo)教師:蘭州交通大學(xué)自動化與電氣工程學(xué)院2015年12月30日基于單片機(jī)的16鍵電子琴一、電子琴設(shè)計的目的、要求與設(shè)計方法1.1設(shè)計目的現(xiàn)代樂器中,電子琴是高新科技在音樂領(lǐng)域的一個代表,體現(xiàn)了人類電子技術(shù)和藝術(shù)的完美結(jié)合。電子琴自動伴奏的穩(wěn)定性、準(zhǔn)確性,以及鮮明的強(qiáng)弱規(guī)律、隨人設(shè)置的速度要求,都更便于人們由易到難、深入淺出的準(zhǔn)確掌握歌曲節(jié)奏和樂曲風(fēng)格,對其節(jié)奏的穩(wěn)定性和準(zhǔn)確性訓(xùn)練能起到非常大的作用.1.2設(shè)計要求本設(shè)計主要是用AT89C52單片機(jī)為核心控制元件,設(shè)計一個微縮版的電子琴。單片機(jī)與按鍵構(gòu)成主控制模塊,在主控制模塊上設(shè)置有9個按鍵,分別達(dá)成不同目標(biāo)。本系統(tǒng)主要為了完成電子琴的三大功能:電子琴彈奏和音樂播放及錄音。1。3電子琴設(shè)計方法1.3。1設(shè)計工具表1軟件簡介軟件名稱設(shè)計作用KeiluVision4編寫程序與編譯PROTEUS繪制硬件電路圖、數(shù)字仿真MicrosoftVisio繪制程序流圖與框圖1。3.2設(shè)計思路(1)功能按鍵觸發(fā)外部中斷,以完成不同曲目的的切換。(2)設(shè)置定時器產(chǎn)生不同頻率的方波,I/O口輸出,經(jīng)功放后揚(yáng)聲器發(fā)聲.(3)采用4×4矩陣鍵盤彈奏16個音(低XI到高DO).電子琴的設(shè)計方案及原理2.1設(shè)計總體方案本系統(tǒng)采用AT89C52為主控芯片.輸入電路有16個琴鍵按鍵,通過按鍵隨意按下所要表達(dá)的音符,作為電平送給主體電路,中央處理器通過識別,解碼輸出音符,在揚(yáng)聲器中發(fā)出有效的聲音。1個音樂按鍵用于播放音樂和切換歌曲,通過按鍵觸發(fā)中斷,重置定時器初值,于另一個揚(yáng)聲器中發(fā)出有效音響.總設(shè)計框圖如下圖1所示.單單片機(jī)時鐘復(fù)位電路時鐘復(fù)位電路數(shù)碼管顯示電路數(shù)碼管顯示電路琴鍵控制電路琴鍵控制電路音頻播放電路音頻播放電路音樂切換電路音樂切換電路圖1基于單片機(jī)的電子琴電路原理框圖2。2發(fā)聲原理利用AT89C52的內(nèi)部定時器使其工作計數(shù)器模式(MODE1)下,改變計數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計數(shù)器計時956μs/1μs=956,每計數(shù)956次時將I/O反相,就可得到中音DO(523Hz)。

計數(shù)脈沖值與頻率的關(guān)系式是:

N=fi÷2÷fr。式中,N是計數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產(chǎn)生的頻率。

電子琴的硬件設(shè)計基于單片機(jī)AT89C51的電子琴電路由琴鍵控制電路、數(shù)碼管顯示電路、音頻播放電路、時鐘—復(fù)位電路、音樂切換電路和電源電路六部分所構(gòu)成.3.1琴鍵控制電路琴鍵控制電路作為人機(jī)聯(lián)系的輸入部分,也是間接控制數(shù)碼顯示和音頻功放的重要組成部分。鍵盤按照連接方式可以分為獨立式和矩陣式鍵盤兩類.3.1。1矩陣式鍵盤如圖2所示為4X4矩陣式鍵盤電路,由一個4X4的行、列結(jié)構(gòu)可以構(gòu)成一個16個按鍵鍵盤。

矩陣中無按鍵按下時,行線為高電平;當(dāng)有按鍵按下時,行線電平狀態(tài)將由與此行線相連的列線的電平?jīng)Q定。列線的電平如果為低,則行線電平為低;列線的電平如果為高,則行線的電平也為高,這是識別按鍵是否按下的關(guān)鍵所在。圖2矩陣式鍵盤3。1.2獨立式鍵盤

獨立式鍵盤的特點是一鍵一線,各鍵相互獨立,每個鍵各接一條I/O口線,通過檢測I/O輸入線的電平狀態(tài),可判斷出被按下的按鍵。

3。1。3

方案比較

表2鍵盤類型比較鍵盤類型優(yōu)點缺點獨立式電路簡單,編程簡單占用I/O口線多矩陣式占用I/O口線較少編程比較復(fù)雜由于此次設(shè)計的琴鍵控制電路需要16個按鍵,故單純從I/O口線的占用的角度比較,獨立式需要占用16條I/O口線,而矩陣式卻只需8條.故選擇矩陣式鍵盤電路比較合理。3。2數(shù)碼管顯示電路LED(Light

Emitting

Diode)發(fā)光二極管縮寫.LED數(shù)碼管是由發(fā)光二極管構(gòu)成的.常見的LED數(shù)碼管為“8”字型的,共計8段。一般來說分共陽極和共陰極兩種接法.3。2.1LED數(shù)碼管靜態(tài)顯示

靜態(tài)顯示方式即無論多少位LED數(shù)碼管,同時處于顯示狀態(tài)。如果送往各個LED數(shù)碼管所顯示字符的段碼一經(jīng)確定,則相應(yīng)I/O口鎖存器鎖存的段碼輸出將維持不變,直到送入另一個字符的段碼為止。3.2.2LED數(shù)碼管動態(tài)顯示

靜態(tài)顯示方式就是無論在任何時刻只有一個LED數(shù)碼管處于顯示狀態(tài),即單片機(jī)采用“掃描”方式控制各個數(shù)碼管輪流顯示。

3.3.3方案比較

對于以上兩種數(shù)碼管驅(qū)動電路的的優(yōu)缺點比較如表3所示。由于靜態(tài)驅(qū)動方式的顯示無閃爍,亮度較高,編程簡單,加上本次設(shè)計的數(shù)碼管顯示電路只需要2個數(shù)碼管,且分別接兩部分管腳,故選擇靜態(tài)驅(qū)動方式來顯示數(shù)碼管更為合理.如圖3所示為數(shù)碼管顯示電路,采用靜態(tài)驅(qū)動方式和共陽極接法.表3數(shù)碼管顯示方式比較驅(qū)動方式優(yōu)點缺點靜態(tài)顯示顯示無閃爍,亮度較高,編程簡單數(shù)碼管越多,所需的電流越大,電源的要求越高動態(tài)顯示電路簡單,數(shù)碼管越多,優(yōu)勢越明顯不如靜態(tài)顯示的亮度高,

可能出現(xiàn)閃爍現(xiàn)象圖3數(shù)碼管靜態(tài)顯示電路3。3音樂切換電路通過按鍵拉低電平,觸發(fā)中斷0.3.4音頻播放電路使用兩個揚(yáng)聲器,一個作為琴鍵輸出,一個作為樂曲輸出。3.5時鐘復(fù)位電路3。5。1時鐘電路

時鐘頻率直接影響單片機(jī)的速度,時鐘電路的質(zhì)量也直接影響單片機(jī)系統(tǒng)的穩(wěn)定性。常用的時鐘電路有兩種方式,一種是內(nèi)部時鐘方式,另一種是外部時鐘方式.

本設(shè)計采用內(nèi)部時鐘方式做時鐘電路.3。5。2復(fù)位電路

在單片機(jī)的實用系統(tǒng)中,一般有兩種復(fù)位操作形式:上電復(fù)位和手動復(fù)位。

上電復(fù)位在單片機(jī)系統(tǒng)每次通電時執(zhí)行。手動復(fù)位在系統(tǒng)出現(xiàn)操作錯誤或程序運(yùn)行出錯時使用。

由于本設(shè)計的需要,同時采用這兩種復(fù)位方式。整體電路圖如下圖4所示.圖4整體硬件設(shè)計電子琴的軟件設(shè)計系統(tǒng)功能的實現(xiàn)一般包括硬件部分和軟件部分,一旦硬件確定下來,軟件要實現(xiàn)的功能也隨之確定。而為使編程思路清晰,應(yīng)先繪制程序流程圖.

4。1

系統(tǒng)硬件接口定義

表4系統(tǒng)硬件接口定義引腳名接口說明備注P0.0~P0。7琴鍵數(shù)碼管與單片機(jī)通信數(shù)碼管顯示電路P2.0~P2.7曲目數(shù)碼管與單片機(jī)通信數(shù)碼管顯示電路P3。2(INT0)外部中斷源輸入端音樂切換電路P1.0~P1.7矩陣鍵盤接口琴鍵控制電路P3.0,P3。7控制揚(yáng)聲器音頻播放電路4。2主函數(shù)

主函數(shù)流程圖如圖5所示。利用模塊化的思想,主函數(shù)只執(zhí)行初始化函數(shù)、鍵盤掃碼函數(shù)、音頻處理函數(shù)和數(shù)碼管顯示函數(shù).圖5主函數(shù)流程圖4。3初始化函數(shù)初始化的流程框圖如圖6所示。該函數(shù)對所需的I/O口、外部中斷0、定時器0、定時器T1以及數(shù)碼管進(jìn)行初始化配置。TMOD=0x11;//T0方式1,T1方式1IP=0x01;//INT0中斷優(yōu)先級最高EA=1;ET0=1;ET1=1;EX0=1;//允許中斷TR0=0;//關(guān)定時器0P1=0xbf;//鍵盤初始化flag=0;//標(biāo)志位置0圖6初始化流程圖4.4數(shù)碼管顯示及音頻處理函數(shù)根據(jù)鍵值掃描函數(shù)讀取的鍵碼,揚(yáng)聲器發(fā)聲并結(jié)合數(shù)碼管顯示出來。圖7數(shù)碼管顯示流程圖4.5中斷函數(shù)中斷函數(shù)用到了外部中斷和定時器中斷.外部中斷的流程框圖如圖8所示,當(dāng)按鍵按下時,外部信號觸發(fā)外部中斷,執(zhí)行鍵值掃描函數(shù),讀取對應(yīng)的鍵值。定時中斷的流程框圖如圖9所示,定時器溢出中斷后,進(jìn)行重裝載初值,同時執(zhí)行相應(yīng)的音頻控制操作。

4.6鍵值掃描函數(shù)將輸入端置為高電平,輸出端置為低電平.這樣,當(dāng)按鍵沒有按下時,所有的輸入端無變化,代表無鍵按下。一旦有鍵按下,則輸入線就受輸出線的影響被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。流程圖如圖10所示.圖8外部鍵盤中斷流程圖圖9定時器中斷流程圖圖10鍵值掃描流程圖電子琴的系統(tǒng)仿真5.1部分仿真結(jié)果表5仿真結(jié)果按鍵編號發(fā)聲音調(diào)數(shù)碼管顯示備注0低XI0,-1中DO1,—2中RI2,-無播放曲目及停止1,2,或—重復(fù)按切換音樂圖11音樂顯示為“—”或不顯示的時候,琴鍵按下DO有效圖12按音樂鍵,播放音樂1,琴鍵彈奏無效5。2調(diào)試中出現(xiàn)的問題及解決電子琴的設(shè)計并非一帆風(fēng)順,在這期間遇到了很多問題,下面談幾個關(guān)鍵的問題。首先是數(shù)碼管顯示亂碼的問題,原本以為是數(shù)碼管字形碼表的代碼有錯,檢查幾遍發(fā)現(xiàn)代碼基沒錯,后來結(jié)合硬件圖一看,才知道硬件圖中數(shù)碼管是共陽極接法,軟件中的數(shù)碼管字形碼表是共陰極的。其二是按鍵引入中斷檢測時遇到的問題,按音樂鍵后琴鍵無法發(fā)聲和顯示,浪費(fèi)了很多時間,最終發(fā)現(xiàn)是程序的判斷條件有問題。其三是揚(yáng)聲器發(fā)出的音調(diào)不對,甚至沒有聲音,這個問題后來還是不能解決,最后放棄了LM386的功放電路,直接接揚(yáng)聲器,但是導(dǎo)致了部分琴鍵發(fā)聲帶雜音。總結(jié)在本次設(shè)計八路多功能搶答器的課設(shè)過程中,我利用AT89C52單片機(jī)及外圍接口實現(xiàn)電子琴,利用單片機(jī)的定時器/計數(shù)器定時和計數(shù)的原理實現(xiàn)對彈奏和播放的功能,利用Proteus和Keil軟件設(shè)計出實驗電路,完成了課設(shè)的任務(wù)。在本次課設(shè)中,我意識到將理論知識與實踐相結(jié)合的重要性,對于單片機(jī)這樣的課程,僅僅通過了解課本上的知識是遠(yuǎn)遠(yuǎn)不夠的,我通過查資料和搜集有關(guān)文獻(xiàn),培養(yǎng)了自學(xué)能力,通過利用軟件仿真和焊接電路,在很大程度上提高了我的動手能力.我們在課設(shè)的過程中,遇到了很多問題,比如我在仿真的過程中錯把共陰極數(shù)碼管字模當(dāng)作共陽極使用,使得數(shù)碼管無法正常顯示,通過查資料我明白了共陰極數(shù)碼管是高電平驅(qū)動,公共端是負(fù)極,共陽極數(shù)碼管是低電平驅(qū)動,公共端是正極,類似的問題出現(xiàn)了很多,我們通過一一排查,終于完成了課設(shè)任務(wù),結(jié)果表明,有付出必有收獲,把握重點、攻克難關(guān),活學(xué)活用對于牢固的掌握知識,是非常有用的。在此次課設(shè)中,我學(xué)到了很多,也通過不斷糾正自己的錯誤,意識到自身的不足,我對知識的掌握還沒有實現(xiàn)深層次的理解記憶,我相信這些教訓(xùn)都為我以后的學(xué)習(xí)奠定了良好的基礎(chǔ),時刻牢記團(tuán)隊合作、堅持與努力的重要性。參考文獻(xiàn)[1]王思明,張金敏,茍軍年.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計[M]。北京:人民郵電出版社,2008.[2]馮育長,鄒小兵.單片機(jī)系統(tǒng)設(shè)計與實例指導(dǎo)[M]。西安:西安電子科技大學(xué)出社,2004.[3]彭偉。單片機(jī)C語言程序設(shè)計實訓(xùn)100例[M].北京:電子工業(yè)出版社,2009.[4]單丹,馬淑云。基于AT89C51單片機(jī)電子琴的設(shè)計[J].中國高新技術(shù)企業(yè),2002.附錄#include<reg52.h〉#defineucharunsignedchar#defineuintunsignedint//共陽極數(shù)碼管UcharcodeLED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};sbitbeep=P3^0;ucharkey;//鍵號sbitbuzzer=P3^7;uchardis_buf;ucharflag;//音符延時表uintcodeTone_Delay_Table[]={64524,64580,64684,64777,64820,64896,64966,65030,65058,65110,65157,65178,65217,65252,65283,65316};//音調(diào)與節(jié)拍ucharcodeSong1_Tone[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,0xff};ucharcodeTime1_Tone[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xff};ucharcodeSong2_Tone[]={3,5,5,3,2,1,2,3,5,3,2,3,5,5,3,2,1,2,3,2,1,1,0xff};ucharcodeTime2_Tone[]={2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0xff};ucharcodeSong3_Tone[]={1,1,5,5,6,6,5,4,4,3,3,2,2,1,0xff};ucharcodeTime3_Tone[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xff};//定義按鍵序號ucharkeyno;//音樂片段索引,音符索引ucharsong_index=0;uchartone_index=0;//音符指針,延時指針uchar*tone_pointer,*delay_pointer;//從當(dāng)前數(shù)組中取出音符的位置uchari=0;//毫秒延時voiddelayms(uintms){uchart;while(ms-—)for(t=0;t<120;t++);}//按鍵產(chǎn)生外部中斷voidKey_Press()interrupt0{TR0=0;//切換歌曲song_index=(song_index+1)%3;switch(song_index){case2:tone_pointer=Song1_Tone;delay_pointer=Time1_Tone;break;case1:tone_pointer=Song2_Tone;delay_pointer=Time2_Tone;break;case0:tone_pointer=0;delay_pointer=0;break;}//重新開始i=0;TR0=1;flag=1;}//T0中斷播放voidplay_music()interrupt1{if(song_index!=0){TH0=Tone_Delay_Table[tone_index]/256;TL0=Tone_Delay_Table[tone_index]%256;buzzer=~buzzer;}else{buzzer=0;}}/*voidkey_scan(){uchartemp,k;//高四位置0,放入四行P1=0x0f;delayms(2);//按鍵后00001111變成0000xxxx,x中1個為0,3個仍為1//以下亦或操作把3個1變成0,唯一0變成1temp=P1^0x0f;//判斷按鍵發(fā)生于0-3列的哪一列switch(temp){case1:k=0;break;case2:k=1;break;case4:k=2;break;case8:k=3;break;default:return;}//底四位置0,放入四列P1=0xf0;delayms(2);//按鍵后11110000變成xxxx0000,x為1個0,三個仍為1//高四位移動至底四位,唯一0變1,其余為0temp=(P1>〉4)^0x0f;//對0~3行分別賦起始值0,4,8,12switch(temp){case1:k+=0;break;case2:k+=4;break;case4:k+=8;break;case8:k+=12;break;default:return;}keyno=k;}*///矩陣鍵盤掃描子程序voidkey_scan(void){uchartemp;P1=0x0F;//低四位輸入delayms(2);//稍稍延時temp=P1;//讀P1口temp=temp&0x0F;//取低四位temp=~(temp|0xF0);if(temp==1)//檢測按下的鍵所在的列號,在第一列key=0;elseif(temp==2)//在第二列key=1;elseif(temp==4)//在第三列key=2;elseif(temp==8)//在第四列key=3;elsekey=16;//否則顯示-P1=0xF0;//高四位輸入delayms(2);temp=P1;//讀P1口temp=temp&0xF0;temp=~((temp〉>4)|0xF0);if(temp==1)//檢測按下的鍵所在的行號,在第一行key=key+0;elseif(temp==2)//在第二行key=key+4;elseif(temp==4)//在第三行key=key+8;elseif(temp==8)//在第四行key=key+12;elsekey=16;//否則顯示—/*根據(jù)行號和列號得到按下的鍵號*/dis_buf=LED[key];//查表得鍵值}//T1中斷,發(fā)聲DORIMI。。。。voidplay()interrupt3{TH1=Tone_Delay_Table[key]/256;TL1=Tone_Delay_Table[key]%256;beep=~beep;}//主程序voidmain(){TMOD=0x11;//T0方式1,T1方式1IP=0x01;//INT0中斷優(yōu)先級最高EA=1;ET0=1;ET1=1;EX0=1;//允許中斷TR0=0;P1=0xbf;flag=0;while(1){//if(flag==0){P1=0xf0;//發(fā)送掃描碼if(P1!=0xf0)//有鍵按下{if(song_index!=2&&song_index!=1){key_scan();P0=dis_buf;//鍵值賦給P0口,顯示TR1=1;}}else{TR1=0;//停止播放}//}if(flag==1&&song_index?。?){delayms(2);tone_index=tone_pointer[i];if(tone_index==0xff){i=0;delayms(2000);continue;}TR0=1;delayms(delay_pointer[tone_index]*240);TR0=0;i++;switch(song_index){case2:P2=LED[2];break;case1:P2=LED[1];break;case0:P2=0xbf;break;}}}}摘要近年來,隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷深入,同時帶動傳統(tǒng)控制檢測技術(shù)日益更新.在實時檢測和自動控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往作為一個核心部件來使用,正在不斷的應(yīng)用到實際生活中,并且根據(jù)具體硬件結(jié)構(gòu)軟硬件結(jié)合,加以完善。十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊.那么靠什么來實現(xiàn)這井然秩序呢?靠的就是交通信號燈的自動指揮系統(tǒng)。交通信號燈控制方式很多。本系統(tǒng)采用MCS-51系列單片機(jī)STC89C51為中心器件來設(shè)計交通燈控制器,實現(xiàn)了通過信號燈對路面狀況的智能控制。從一定程度上解決了交通路口堵塞、車輛停車等待時間不合理、急車強(qiáng)通等問題。系統(tǒng)具有結(jié)構(gòu)簡單、可靠性高、成本低、實時性好、安裝維護(hù)方便等優(yōu)點,有廣泛的應(yīng)用前景。關(guān)鍵詞:交通燈單片機(jī)數(shù)碼管一.總體設(shè)計思路1.1設(shè)計目的及思路設(shè)計目的了解交通燈管理的基本工作原理,熟練掌握STC89C51的工作原理和應(yīng)用編程,熟悉STC89C51單片機(jī)并行接口的各種工作方式和應(yīng)用,并了解計數(shù)器/定時器的工作方式和應(yīng)用編程外部中斷的方法,掌握多位LED顯示問題的解決。設(shè)計思路(1)分析目前交通路口的基本控制技術(shù),提出自己的交通控制的初步方案.(2)確定系統(tǒng)交通控制的總體設(shè)計,增加了倒計時顯示提示。(3)進(jìn)行顯示電路.(4)進(jìn)行軟件系統(tǒng)的設(shè)計。1.2實際交通燈顯示時序及狀態(tài)轉(zhuǎn)換的理論分析圖1所示為紅綠燈轉(zhuǎn)換的狀態(tài)圖。S2S1S2S1S4S3S4S3圖1紅綠燈狀態(tài)轉(zhuǎn)換圖狀態(tài)S1S2S3S4時間30s5s30s5s東西道紅燈亮紅燈亮綠燈亮黃燈亮南北道綠燈亮黃燈亮紅燈亮紅燈亮表1十字路口指示燈燃亮方案說明:(1)當(dāng)東西方向為紅燈,此道車輛禁止通行,東西道行人可通過;南北道為綠燈,此道車輛通過,行人禁止通行。時間為60秒。(2)黃燈閃爍5秒,警示車輛和行人紅、綠燈的狀態(tài)即將切換.(3)當(dāng)東西方向為綠燈,此道車輛通行;南北方向為紅燈,南北道車輛禁止通過,行人通行。時間為80秒.東西方向車流大通行時間長。(4)這樣如上表的時間和紅、綠、黃出現(xiàn)的順序依次出現(xiàn)這樣行人和車輛就能安全暢通的通行。(5)此表可根據(jù)車流量動態(tài)設(shè)定紅綠燈初始值。共四種狀態(tài),分別設(shè)定為S1、S2、S3、S4,交通燈以這四種狀態(tài)為一個周期,循環(huán)執(zhí)行如下圖所示:圖2交通燈狀態(tài)循環(huán)圖圖2交通燈狀態(tài)循環(huán)圖程序就是在上述四種狀態(tài)下循環(huán)轉(zhuǎn)化的。一個周期四個狀態(tài),在正常模式下共花費(fèi)1分10秒。二.具體設(shè)計方案2.1方案要求:本設(shè)計要求與交通信號實際控制一致,采用LED模擬信號燈,信號燈分東西、南北二組,分別有紅、黃、綠三色。其工作狀態(tài)由程序控制,啟動、停止按鈕分別控制信號燈的啟動與停止。白天/黑夜轉(zhuǎn)換開關(guān)可對信號進(jìn)行控制轉(zhuǎn)換。并且要求能用兩位數(shù)碼管(或者一位數(shù)碼管)來顯示紅燈或者綠燈等待的時間,在黃燈的時候數(shù)碼管不顯示。信號燈的控制要求如下:⑴假設(shè)東西方向交通繁忙為主干道,車流量為南北交通的兩倍.因此東西方向的綠燈通行時間為是南北方向上的兩倍。⑵開始時東西方向綠燈先亮,南北為紅燈。⑶按下啟動按鈕開始工作,,按下停止按鈕,停止工作.白天/黑夜轉(zhuǎn)換開關(guān)閉合時為黑夜工作狀態(tài),這時只有黃燈來回閃爍,斷開為白天工作狀態(tài)。白天工作狀態(tài)要求:東西方向綠燈亮40s,然后黃燈閃三下(1下/秒,共5秒),然后紅燈亮20s,而南北方向為紅燈亮40s然后綠燈亮20s,然后黃燈也閃三下;如此周期循環(huán)下去。示意圖2。2方案分析根據(jù)十字路口交通燈的要求,可將本系統(tǒng)分為三個模塊,第一模塊是控制模塊,主要負(fù)責(zé)整個系統(tǒng)的控制和運(yùn)算,從而使各模塊正常工作,第二個模塊式顯示模塊包括LED燈和數(shù)碼管;第三是電源模塊,給各模塊提供電源,讓各模塊工作。其系統(tǒng)設(shè)計結(jié)構(gòu)如圖:圖3.系統(tǒng)設(shè)計結(jié)構(gòu)圖圖3.系統(tǒng)設(shè)計結(jié)構(gòu)圖2。389C51單片機(jī)引腳功能說明89C51外部引腳圖:(可以直接拷入ASM程序文件中,作注釋使用,十分方便)

┏━┓┏━┓

P1.0

┫1┗┛40┣

Vcc?

P1.1

┫2

39┣

P0.0

P1.2

┫3

38┣

P0.1

?

P1。3

┫4

37┣

P0。2

P1.4

┫5

36┣

P0.3

P1.5

┫6

35┣

P0.4

P1.6

┫7

34┣

P0.5

?

P1。7

┫8

33┣

P0。6

?

RST/Vpd

┫9

32┣

P0.7

?

RXDP3.0

┫10

31┣

—EA/Vpp(內(nèi)1/外0程序地址選擇)?

TXDP3.1

┫11

30┣

ALE/—P(地址鎖存輸出)?-INT0P3.2

┫12

29┣

-PSEN

(外部程序讀選通輸出)

-INT1P3。3

┫13

28┣

P2。7

?

T0

P3.4

┫14

27┣

P2。6

T1

P3.5

┫15

26┣

P2.5

—WRP3。6

┫16

25┣

P2。4

?

-RDP3.7

┫17

24┣

P2。3

?

X2

┫18

23┣

P2。2

?

X1

┫19

22┣

P2.1

GND

┫20

21┣

P2.0

?

┗━━━━┛引腳說明:?

①電源引腳?

Vcc(40腳):典型值+5V.

Vss(20腳):接低電平.?

②外部晶振?

X1、X2分別與晶體兩端相連接。當(dāng)采用外部時鐘信號時,X2接振蕩信號,X1接地

③輸入輸出口引腳:

P0口:I/O雙向口。作輸入口時,應(yīng)先軟件置“1”。

P1口:I/O雙向口。作輸入口時,應(yīng)先軟件置“1”。?

P2口:I/O雙向口。作輸入口時,應(yīng)先軟件置“1"。

P3口:I/O雙向口.作輸入口時,應(yīng)先軟件置“1”。

④控制引腳:?

RST/Vpd、ALE/—PROG、—PSEN、-EA/Vpp組成了MSC-51的控制總線。

RST/Vpd(9腳):復(fù)位信號輸入端(高電平有效).

第二功能:加+5V備用電源,可以實現(xiàn)掉電保護(hù)RAM信息不丟失。?

ALE/-PROG(30腳):地址鎖存信號輸出端。

第二功能:編程脈沖輸入.?

—PSEN(29腳):外部程序存儲器讀選通信號.?

—EA/Vpp(31腳):外部程序存儲器使能端。?

第二功能:編程電壓輸入端(+21V).圖6.單片機(jī)8051的內(nèi)部結(jié)構(gòu)圖6.單片機(jī)8051的內(nèi)部結(jié)構(gòu)2.4單片機(jī)最小系統(tǒng)時鐘電路圖7.時鐘電路XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時,外部振蕩信號應(yīng)直接加到XTAL1,而XTAL2懸空.內(nèi)部方式時,時鐘發(fā)生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz.晶振的頻率可以在1MHz-24MHz內(nèi)選擇。電容取30PF左右.系統(tǒng)的時鐘電路設(shè)計是采用的內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路。AT89單片機(jī)內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器。引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個自激振蕩器。外接晶體諧振器以及電容C1和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中.對外接電容的值雖然沒有嚴(yán)格的要求,但電容的大小會影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。因此,此系統(tǒng)電路的晶體振蕩器的值為12MHz,電容應(yīng)盡可能的選擇陶瓷電容,電容值約為22μF.在焊接刷電路板時,晶體振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。復(fù)位電路在振蕩器運(yùn)行時,有兩個機(jī)器周期(24個振蕩周期)以上的高電平出現(xiàn)在此引腿時,將使單片機(jī)復(fù)位,只要這個腳保持高電平,51芯片便循環(huán)復(fù)位.復(fù)位后P0-P3口均置1引腳表現(xiàn)為高電平,程序計數(shù)器和特殊功能寄存器SFR全部清零.當(dāng)復(fù)位腳由高電平變?yōu)榈碗娖綍r,芯片為ROM的00H處開始運(yùn)行程序.復(fù)位是由外部的復(fù)位電路來實現(xiàn)的。片內(nèi)復(fù)位電路是復(fù)位引腳RST通過一個斯密特觸發(fā)器與復(fù)位電路相連,斯密特觸發(fā)器用來抑制噪聲,它的輸出在每個機(jī)器周期的S5P2,由復(fù)位電路采樣一次。復(fù)位電路通常采用上電自動復(fù)位和按鈕復(fù)位兩種方式,此電路系統(tǒng)采用的是上電與按鈕復(fù)位電路。當(dāng)時鐘頻率選用6MHz時,C取22μF,Rs約為200Ω,Rk約為1K。復(fù)位操作不會對內(nèi)部RAM有所影響.常用的復(fù)位電路如下圖所示:圖8.復(fù)位電路圖顯示電路顯示器普遍地用于直觀地顯示數(shù)字系統(tǒng)的運(yùn)行狀態(tài)和工作數(shù)據(jù),按照材料及產(chǎn)品工藝,單片機(jī)應(yīng)用系統(tǒng)中常用的顯示器有:發(fā)光二極管LED顯示器、液晶LCD顯示器、CRT顯示器等。LED數(shù)碼管是現(xiàn)在最常用的顯示器之一。發(fā)光二極管(LED)由特殊的半導(dǎo)體材料砷化鎵、磷砷化鎵等制成,可以單獨使用,也可以組裝成分段式或點陣式LED顯示器件(半導(dǎo)體顯示器)。分段式顯示器(LED數(shù)碼管)由7條線段圍成8字型,每一段包含一個發(fā)光二極管。外加正向電壓時二極管導(dǎo)通,發(fā)出清晰的光。只要按規(guī)律控制各發(fā)光段亮、滅,就可以顯示各種字形或號。LED數(shù)碼管有共陽、共陰之分。本系統(tǒng)采用的是兩位共陰極數(shù)碼管三.電路圖和程序圖10.交通燈電路圖具體程序:#include<REG51.H>#defineucharunsignedchar#defineuintunsignedintuintnum,shi,ge;sbitred=P1^0;sbityel=P1^1;sbitgre=P1^2;? voiddelay(){uinta;for(a=500;a〉0;a-—);? }ucharcodearry_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voidinitial(){EA=1;ET0=1;TMOD=0x01;TH0=0x4c;TL0=0xd0;}voiddisplay(intY){shi=Y/10;ge=Y

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論