第1章 緒論 隨著科學(xué)技術(shù)的進(jìn)步和社會(huì)的發(fā)展,人類所接觸的信息也在不斷增加并且日益復(fù)雜。面對(duì)浩如煙海的信息,人們已經(jīng)能夠利用計(jì)算機(jī)等工具高效準(zhǔn)確地對(duì)之進(jìn)行處理。小小的音樂盒可以給人們帶來美好的回憶,提高人們的精神文化享受。傳統(tǒng)音樂盒是機(jī)械型的,體積笨重,發(fā)音單調(diào),不能實(shí)現(xiàn)批量生產(chǎn)。本文設(shè)計(jì)的音樂盒是以單片機(jī)為核心元件的電子式音樂盒,體積小,重量輕,能演奏和旋音樂,功能多,外觀效果多彩,使用方便,并具有一定的商業(yè)價(jià)值。 第2章 系統(tǒng)論述
2.1 總體方案本次設(shè)計(jì)是一個(gè)基于AT89C51單片機(jī)的音樂盒,該音樂盒主要由按鍵電路、復(fù)位電路、時(shí)鐘電路、蜂鳴器以及顯示電路組成。使用其中兩個(gè)按鍵來控制播放和暫停另外兩個(gè)按鍵用來控制換曲。利在液晶上顯示曲目的更換,共三首音樂,蜂鳴器每播放一首歌時(shí)液晶上顯示相對(duì)應(yīng)的歌曲次序。系統(tǒng)組成框圖如圖2-1。 2.2 基本原理1)主體電路: 直流電機(jī)PWM控制模塊:這部分電路主要由89C51單片機(jī)的I/O端口、定時(shí)計(jì)數(shù)器、外部中斷擴(kuò)展等控制直流電機(jī)的加速、減速以及電機(jī)的正轉(zhuǎn)和反轉(zhuǎn),并且可以調(diào)整電機(jī)的轉(zhuǎn)速,還可以方便的讀出電機(jī)轉(zhuǎn)速的大小和了解電機(jī)的轉(zhuǎn)向,能夠很方便的實(shí)現(xiàn)電機(jī)的智能控制。 此外,還包括直流電機(jī)的直接清零、啟動(dòng)(置數(shù))、暫停、連續(xù)功能。其間是通過89C51單片機(jī)產(chǎn)生脈寬可調(diào)的脈沖信號(hào)并輸入到L298驅(qū)動(dòng)芯片來控制直流電機(jī)工作的。 2)各部分電路模塊的組成: (a)設(shè)計(jì)輸入部分:這一模塊主要是利用帶中斷的獨(dú)立式鍵盤來實(shí)現(xiàn)。 (c)設(shè)計(jì)控制部分:主要由89C51單片機(jī)的外部中斷擴(kuò)展電路組成。 (b)設(shè)計(jì)顯示部分:是直接采用SM410564四位共陽數(shù)碼管組成顯示模塊。 3)直流電機(jī)PWM控制實(shí)現(xiàn)部分: 主要由一些二極管、電機(jī)和L298直流電機(jī)驅(qū)動(dòng)模塊組成。 2.3 原理框圖1)系統(tǒng)組成:如圖2-1所示 
圖2-1 直流電機(jī)PWM調(diào)速方案 2)方案說明: 直流電機(jī)PWM調(diào)速系統(tǒng)以AT89C51單片機(jī)為控制核心,由命令輸入模塊、LED顯示模塊及電機(jī)驅(qū)動(dòng)模塊組成。采用帶中斷的獨(dú)立式鍵盤作為命令的輸入,單片機(jī)在程序控制下,定時(shí)不斷給直流電機(jī)驅(qū)動(dòng)芯片發(fā)送PWM波形,H型驅(qū)動(dòng)電路完成電機(jī)正,反轉(zhuǎn)控制;同時(shí)單片機(jī)不停的將從鍵盤讀取的數(shù)據(jù)送到LED顯示模塊去顯示,從中不僅能讀取其速度,而且能知道它的轉(zhuǎn)向。 第3章 系統(tǒng)的硬件設(shè)計(jì) 3.1 單片機(jī)最小系統(tǒng)的設(shè)計(jì)1)單片機(jī)AT89C51: AT89C51是一種帶4K字節(jié)閃爍可編程可擦出只讀存儲(chǔ)器的低電壓,高性能 CMOS8位微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù),與工業(yè)標(biāo)準(zhǔn)MCS-51指令集合輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且廉價(jià)的方案。 2)復(fù)位電路及時(shí)鐘電路: 復(fù)位電路和時(shí)鐘電路是維持單片機(jī)最小系統(tǒng)運(yùn)行的基本模塊。 兩種常用復(fù)位電路:上電復(fù)位和手動(dòng)復(fù)位。 其中:上電復(fù)位,如圖3-1所示;手動(dòng)復(fù)位,如圖3-2所示。  圖3-1 上電復(fù)位 圖3-2 手動(dòng)復(fù)位 有時(shí)系統(tǒng)在運(yùn)行過程中出現(xiàn)程序跑飛的情況,在程序開發(fā)過程中,經(jīng)常需要手動(dòng)復(fù)位。所以本次設(shè)計(jì)選用手動(dòng)復(fù)位。 高頻率的時(shí)鐘有利于程序更快的運(yùn)行,也有利于實(shí)現(xiàn)更高的信號(hào)采樣率,從而實(shí)現(xiàn)更多的功能。但是高速對(duì)系統(tǒng)的要求較高,而且功耗大,運(yùn)行環(huán)境苛刻?紤]到單片機(jī)本身用于控制,而并非高速信號(hào)采樣處理,所以選取合適的頻率即可。合適頻率的晶振對(duì)于選頻信號(hào)強(qiáng)度準(zhǔn)確度都有好處。 本次設(shè)計(jì)選取12.0M無源晶振接入XTAL1和XTAL2引腳。并聯(lián)2個(gè)30pF陶瓷電容幫助起振。單片機(jī)最小系統(tǒng)如圖3-3所示:
圖3-3 單片機(jī)最小系統(tǒng) 3.2 電源電路設(shè)計(jì)直流穩(wěn)壓電源的基本原理:直流穩(wěn)壓電源一般有電源變壓器T、整流濾波電路及穩(wěn)壓電路所組成,基本框圖如圖3-4所示。 
圖3-4 直流電源原理 1)電源變壓器T: 將220V的交流電壓變換成整流濾波電路所需要的交流電壓Ui,變壓器副邊與原邊的功率比為P2/P1=n,式中n是變壓器的效率。 2)整流電路: 整流電路將交流電壓Ui變換成脈動(dòng)的直流電壓。再經(jīng)濾波電路濾除較大的波紋成分,輸出波紋較小的直流電壓U1。常用的整流濾波電路有全波整流濾波、橋式整流濾波等。 3)濾波電路: 各濾波電路C滿足RL-C=(3~5)T/2,式中T為輸入交流信號(hào)周期,RL為整流濾波電路的等效負(fù)載電阻。 4)穩(wěn)壓電路: 常用的穩(wěn)壓電路有兩種形式:一是穩(wěn)壓管穩(wěn)壓電路,二是串聯(lián)型穩(wěn)壓電路。二者的工作原理有所不同。穩(wěn)壓管穩(wěn)壓電路其工作原理是利用穩(wěn)壓管兩端的電壓稍有變化,會(huì)引起其電流有較大變化這一特點(diǎn),通過調(diào)節(jié)與穩(wěn)壓管串聯(lián)的限流電阻上的壓降來達(dá)到穩(wěn)定輸出電壓的目的。它一般適用于負(fù)載電流變化較小的場(chǎng)合。串聯(lián)型穩(wěn)壓電路是利用電壓串聯(lián)負(fù)反饋的原理來調(diào)節(jié)輸出電壓的。集成穩(wěn)壓電源事實(shí)上是串聯(lián)穩(wěn)壓電源的集成化。 3.3 直流電機(jī)驅(qū)動(dòng)電路設(shè)計(jì) 由于單片機(jī)P3口輸出的電壓最高才有5V,難以直接驅(qū)動(dòng)直流電機(jī)。所以我們需要使用恒壓恒流橋式2A驅(qū)動(dòng)芯片L298N來驅(qū)動(dòng)電機(jī)。 本設(shè)計(jì)所采用的L298N,可接受標(biāo)準(zhǔn)TTL邏輯電平信號(hào)VSS,VSS可接4.5~7V電壓。4腳VS接電源電壓,VS電壓范圍VIH為+2.5~46V,輸出電流可達(dá)2.5A,可驅(qū)動(dòng)電感性負(fù)載。1腳和15腳下管的發(fā)射極分別單獨(dú)引出以便接入電流采樣電阻,形成電流傳感信號(hào)。 L298可驅(qū)動(dòng)2個(gè)電動(dòng)機(jī),OUT1,OUT2和OUT3,OUT4之間可分別接電動(dòng)機(jī),本實(shí)驗(yàn)裝置我們選用驅(qū)動(dòng)一臺(tái)電動(dòng)機(jī),連接于OUT1和OUT2端口之間(電動(dòng)機(jī)在子圖中未畫出)。 此外,5,7腳接輸入控制電平,控制電機(jī)的正反轉(zhuǎn)。EnA,EnB接控制使能端,控制電機(jī)的停轉(zhuǎn)。同時(shí),需要加四個(gè)二極管在電機(jī)的兩端,防止電機(jī)反轉(zhuǎn)的時(shí)候產(chǎn)生強(qiáng)大的沖擊電流燒壞電機(jī)。具體直流電機(jī)驅(qū)動(dòng)電路,如圖3-5所示。 
圖3-5 驅(qū)動(dòng)電路 3.4 顯示模塊設(shè)計(jì)本次設(shè)計(jì)顯示模塊直接采用的是SM410564 四位共陽數(shù)碼管顯示。又因?yàn)閱纹瑱C(jī)的輸出端口輸出的電流較小,點(diǎn)亮數(shù)碼管的能力不大,所以需要采用三極管對(duì)輸出電流進(jìn)行放大,此次三極管采用的是C9013,具體放大電路如圖3-6所示: 
圖3-6 放大電路 3.5 按鈕電路設(shè)計(jì)正轉(zhuǎn)、反轉(zhuǎn)、急停、加速、減速五個(gè)開關(guān)分別與單片機(jī)的P1.0,P1.1,P1.2,P1.3,P1.4相連,然后再與地相連。急停實(shí)現(xiàn)直流電機(jī)的停轉(zhuǎn),正轉(zhuǎn)實(shí)現(xiàn)直流電機(jī)的正轉(zhuǎn),反轉(zhuǎn)實(shí)現(xiàn)直流電機(jī)的反轉(zhuǎn),加速實(shí)現(xiàn)直流電機(jī)的加速,減速實(shí)現(xiàn)直流電機(jī)的減速,其電路如圖3-7所示。 
圖3-7 控制按鈕電路 3.6 元件參數(shù)選擇1)實(shí)際計(jì)算過程 (a)變壓器選擇:變壓器選擇雙15V變壓,考慮到電流不需要太大,最大電流為1A,實(shí)際選擇變壓器輸出功率為10W,可以很好的滿足要求。 (b)整流橋:考慮到電路中會(huì)出現(xiàn)沖擊電流,整流橋的額定電流是工作電流的2~3倍。選取RS301(100V,3A)即可,實(shí)際購買過程中選擇了RS30(700V,3A)也符合設(shè)計(jì)要求。 (c)濾波電容:考慮到對(duì)紋波電壓要求比較高,故選擇了2200μF耐壓值為25V以及100μF耐壓值50v的電解電容。 (d)去耦電容:去耦電容的選擇是7812及7805芯片要求的,查手冊(cè)可知分別為0.01μF,用來濾除高頻分量防止產(chǎn)生自激。 (e)電解電容:為了防止負(fù)載產(chǎn)生沖擊電流,故在輸出端加入2200μF、耐壓值為25V的電解電容。 (f)7805支路的元件參數(shù)基本相同。 直流電源產(chǎn)生電路:12V如圖3-7所示、5V如圖3-8所示: 
圖3-7 12V電源 
圖3-8 5V電源 第4章 系統(tǒng)的軟件設(shè)計(jì) 4.1 總體方案利用P3口,編制程序輸出一串脈沖,經(jīng)放大后驅(qū)動(dòng)直流電機(jī),改變輸出脈沖的電平的持續(xù)時(shí)間,達(dá)到使電機(jī)正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、停轉(zhuǎn)等目的。由軟件編程從P3.0/P3.1管腳產(chǎn)生PWM 信號(hào),經(jīng)驅(qū)動(dòng)電路輸出給電機(jī),從而控制電機(jī)得電與失電。軟件采用延時(shí)法進(jìn)行設(shè)計(jì)。單片機(jī)上電后,系統(tǒng)進(jìn)入準(zhǔn)備狀態(tài)。當(dāng)按動(dòng)啟動(dòng)按鈕后,根據(jù)P3.0為高電平時(shí)實(shí)現(xiàn)電機(jī)正轉(zhuǎn),P3.1為高電平時(shí)實(shí)現(xiàn)電機(jī)反轉(zhuǎn)。根據(jù)不同的加減速按鈕,調(diào)整P3.0/ P3.1輸出高低電平時(shí)的占空比,從而可以控制P3.0/ P3.1輸出高低電平時(shí)的有效值,進(jìn)而控制電機(jī)的加減速。 
其總體流程圖如圖4-1所示:圖4-1 總體程序流程圖 P3.0/P3.1脈沖寬度調(diào)制器(PWM) 通道,它們產(chǎn)生可由編程決定寬度和間隔的脈沖。脈沖的間隔周期是由一個(gè)FOR循環(huán)控制,來產(chǎn)生不同的占空比。單片機(jī)產(chǎn)生的PWM信號(hào)不能直接驅(qū)動(dòng)電機(jī),這就需要設(shè)計(jì)合適的驅(qū)動(dòng)電路,用以可以間接地驅(qū)動(dòng)電機(jī),使其能夠正常運(yùn)行。為此,我們可借助于恒壓恒流橋式2A驅(qū)動(dòng)芯片L298N來完成對(duì)電動(dòng)機(jī)的驅(qū)動(dòng)。具體的設(shè)計(jì)方法是通過Keil C編程,Proteus聯(lián)合仿真來實(shí)現(xiàn)的。 4.2 相關(guān)軟件介紹1)Proteus Proteus是一種低投資的電子設(shè)計(jì)自動(dòng)化軟件,提供Schematic Drawing,SPICE仿真與PCB設(shè)計(jì)功能,這一點(diǎn)Proteus與multisim比較類似,只不過它可以仿真單片機(jī)和周邊設(shè)備,可以仿真51系列、AVR,PIC等常用的MCU,與Keil和MPLAB不同的是它還提供了周邊設(shè)備的仿真,只要給出電路圖就可以仿真,例如373,led,示波器,Proteus提供了大量的元件庫有RAM,ROM,鍵盤,馬達(dá),LED,LCD,AD/DA,部分SPI器件,部分IIC器件,編譯方面支持Keil和MPLAB,里面有大量的例子參考。 (a)Proteus可提供的仿真元件資源Proteus軟件提供了可仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件和多達(dá)30多個(gè)元件庫; (b)Proteus可提供的仿真儀表資源虛擬儀器儀表的數(shù)量、類型和質(zhì)量,是衡量仿真軟件實(shí)驗(yàn)室是否合格的一個(gè)關(guān)鍵因素。在Proteus軟件中,理論上同一種儀器可以在一個(gè)電路中隨意的調(diào)用; (c)除了現(xiàn)實(shí)存在的儀器外,Proteus還提供了一個(gè)圖形顯示功能,可以將線路上變化的信號(hào),以圖形的方式實(shí)時(shí)地顯示出來; (d)Proteus還提供了比較豐富的測(cè)試信號(hào)用于電路的測(cè)試。這些測(cè)試信號(hào)包括模擬信號(hào)和數(shù)字信號(hào)。 2)Keil Keil是德國(guó)開發(fā)的一個(gè)51單片機(jī)開發(fā)軟件平臺(tái),最開始只是一個(gè)支持C語言和匯編語言的編譯器軟件。后來隨著開發(fā)人員的不斷努力以及版本的不斷升級(jí),使它已經(jīng)成為了一個(gè)重要的單片機(jī)開發(fā)平臺(tái),不過KEIL的界面并不是非常復(fù)雜,操作也不是非常困難,很多工程師的開發(fā)的優(yōu)秀程序都是在KEIL的平臺(tái)上編寫出來的?梢哉f它是一個(gè)比較重要的軟件,熟悉他的人很多很多,用戶群極為龐大,要遠(yuǎn)遠(yuǎn)超過偉福等廠家軟件用戶群,操作有不懂的地方只要找相關(guān)的書看看,到相關(guān)的單片機(jī)技術(shù)論壇問問,很快就可以掌握它的基本使用了。 (a)Keil的UVision2可以進(jìn)行純粹的軟件仿真(仿真軟件程序,不接硬件電路),也可以利用硬件仿真器,搭接上單片機(jī)硬件系統(tǒng),在仿真器中載入項(xiàng)目程序后進(jìn)行實(shí)時(shí)仿真; (b)可以使用UVision2的內(nèi)嵌模塊Keil Monitor-51,在不需要額外的硬件仿真器的條件下,搭接單片機(jī)硬件系統(tǒng)對(duì)項(xiàng)目程序進(jìn)行實(shí)時(shí)仿真; (c)uVision2調(diào)試器具備所有常規(guī)源極調(diào)試,符號(hào)調(diào)試特性以及歷史跟蹤,代碼覆蓋,復(fù)雜斷點(diǎn)等功能。DDE界面和shift語言支持自動(dòng)程序測(cè)試。 4.3 應(yīng)用軟件的編制、調(diào)試 使用Keil 軟件工具時(shí),項(xiàng)目開發(fā)流程和其它軟件開發(fā)項(xiàng)目的流程極其相似。 1)創(chuàng)建一個(gè)項(xiàng)目,從器件庫中選擇目標(biāo)器件,配置工具設(shè)置; 2)用C語言或匯編語言創(chuàng)建源程序; 3)用項(xiàng)目管理器生成應(yīng)用; 4)修改源程序中的錯(cuò)誤; 5)測(cè)試,連接應(yīng)用。 第5章 仿真結(jié)果與分析5.1仿真電路圖 如圖5-1所示: 圖5-1 仿真電路圖 5.2 仿真結(jié)果1)半速運(yùn)行狀態(tài),運(yùn)行結(jié)果如圖5-1所示:  圖5-1 電機(jī)半速運(yùn)行 2)按下急停鍵,停止運(yùn)行如圖5-2所示: 
圖5-2 電機(jī)停止運(yùn)行 3)按下加速鍵,加速運(yùn)行如圖5-3所示: 
圖5-3 電機(jī)加速運(yùn)行 4)按下減速鍵,減速運(yùn)行如5-4所示: 
圖5-4 電機(jī)減速運(yùn)行 按下反轉(zhuǎn)鍵,反轉(zhuǎn)運(yùn)行如圖5-5所示: 
圖5-5 電機(jī)反向運(yùn)行 第6章總結(jié)這次設(shè)計(jì),運(yùn)用AT89C51單片機(jī)為核心硬件,設(shè)計(jì)了直流電機(jī)的轉(zhuǎn)速控制系統(tǒng)。實(shí)現(xiàn)了對(duì)直流電機(jī)的停止、加速、減速、正轉(zhuǎn)、反轉(zhuǎn)等多種控制功能,基本滿足設(shè)系統(tǒng)計(jì)的要求。同時(shí),在驅(qū)動(dòng)芯片和電動(dòng)機(jī)的連接之間我有加入續(xù)流二極管,在電機(jī)反向運(yùn)轉(zhuǎn)時(shí)進(jìn)行續(xù)流,避免燒壞電機(jī)及其他元件。在此設(shè)計(jì)中P0口作為輸出端口,我們?cè)赑0口接入了排阻使電路復(fù)位后P0口輸出的為高電平。 通過本次設(shè)計(jì),學(xué)習(xí)與掌握了AT98C51單片機(jī)的基本原理及其各種應(yīng)用,對(duì)它的各種硬件接口與軟件設(shè)計(jì)方法有較深入的認(rèn)識(shí)。對(duì)自動(dòng)控制系統(tǒng)的動(dòng)、靜態(tài)性能及其控制有了一定的認(rèn)識(shí)。本設(shè)計(jì)重點(diǎn)在于應(yīng)用,因此在設(shè)計(jì)過程中使自己的動(dòng)手能力得到鍛煉,同時(shí)提高了解決實(shí)際問題的能力 感謝兩周以來每一位指導(dǎo)過自己的人,謝謝他們給自己的知識(shí),以及在專業(yè)知識(shí)和學(xué)習(xí)方法方面給我的許多的指導(dǎo)和啟發(fā),使我受益匪淺。謝謝他們的教導(dǎo),謝謝他們幫我成長(zhǎng)。
單片機(jī)源程序如下:
- #include<at89x51.h>
- #define unchar unsigned char
- #define unint unsigned int
- unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x84,0xff,0xbf}; //顯示代碼
- unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7}; //位選口
- unsigned char dispbuf[4]={0,0,0,0};
- unsigned char dispbitcnt;
- unint mstcnt;
- unint i;
-
- unint count=0;
- unchar tp=0;
- void ledshow();
- void keyscan();
- void delay();
- void just();
- void turn();
- void motorstop();
- void speedup();
- void speeddown();
-
- void main(void)
- {
- P3_0=1;
- P3_1=0;
- dispbuf[0]=16;
- TMOD=0x02;
- TH0=0x06;
- TL0=0x06;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- ledshow();//數(shù)碼管顯示
- keyscan();//鍵盤掃描
- }
- }
- //延時(shí)10ms程序
- void delay()
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
- //鍵盤掃描程序
- void keyscan()
- {
- unchar temp=0;
- P1=0xff;
- if((P1&0x1f)!=0x1f)
- {
- delay();
- if((P1&0x1f)!=0x1f)
- {
- temp=P1&0x1f;
- switch(temp)
- {
- case 0x1e:
- just();break;
- case 0x1d:
- turn();break;
- case 0x1b:
- motorstop();break;
- case 0x17:
- speedup();break;
- case 0x0f:
- speeddown();break;
- }
- }
- }
- while((P1&0x1f)!=0x1f);
- }
- //數(shù)碼管顯示程序
- void ledshow()
- {
- P0=dispcode[dispbuf[dispbitcnt]];
- P2=dispbitcode[dispbitcnt];
- dispbitcnt++;
- if(dispbitcnt==4)
- {
- dispbitcnt=0;
- }
-
- P2=0x01;P0=dispcode[dispbuf[0]];
- for(i=0;i<700;i++);
-
- P2=0x02;P0=dispcode[dispbuf[1]];
- for(i=0;i<700;i++);
-
- P2=0x04;P0=dispcode[dispbuf[2]];
- for(i=0;i<700;i++);
-
- P2=0x08;P0=dispcode[dispbuf[3]];
- for(i=0;i<700;i++);
-
- dispbuf[1]=tp/100;
- dispbuf[2]=(tp%100)/10;
- dispbuf[3]=tp%10;
- }
- //中斷服務(wù)程序
- void t0(void) interrupt 1 using 0</font>
復(fù)制代碼
word文檔下載:
數(shù)字音樂盒全套說明書及源代碼.doc
(346.89 KB, 下載次數(shù): 0)
2025-5-22 09:59 上傳
點(diǎn)擊文件名下載附件
數(shù)字音樂盒全套說明書及源代碼 下載積分: 黑幣 -5
|