標題: 單片機數(shù)字音樂盒設(shè)計說明書文檔及源代碼 [打印本頁]

作者: 13頂頂頂單反    時間: 2025-5-22 09:59
標題: 單片機數(shù)字音樂盒設(shè)計說明書文檔及源代碼
第1章 緒論
隨著科學(xué)技術(shù)的進步和社會的發(fā)展,人類所接觸的信息也在不斷增加并且日益復(fù)雜。面對浩如煙海的信息,人們已經(jīng)能夠利用計算機等工具高效準確地對之進行處理。小小的音樂盒可以給人們帶來美好的回憶,提高人們的精神文化享受。傳統(tǒng)音樂盒是機械型的,體積笨重,發(fā)音單調(diào),不能實現(xiàn)批量生產(chǎn)。本文設(shè)計的音樂盒是以單片機為核心元件的電子式音樂盒,體積小,重量輕,能演奏和旋音樂,功能多,外觀效果多彩,使用方便,并具有一定的商業(yè)價值。
第2章 系統(tǒng)論述
2.1 總體方案

本次設(shè)計是一個基于AT89C51單片機的音樂盒,該音樂盒主要由按鍵電路、復(fù)位電路、時鐘電路、蜂鳴器以及顯示電路組成。使用其中兩個按鍵來控制播放和暫停另外兩個按鍵用來控制換曲。利在液晶上顯示曲目的更換,共三首音樂,蜂鳴器每播放一首歌時液晶上顯示相對應(yīng)的歌曲次序。系統(tǒng)組成框圖如圖2-1。

2.2 基本原理
1)主體電路:

直流電機PWM控制模塊:這部分電路主要由89C51單片機的I/O端口、定時計數(shù)器、外部中斷擴展等控制直流電機的加速、減速以及電機的正轉(zhuǎn)和反轉(zhuǎn),并且可以調(diào)整電機的轉(zhuǎn)速,還可以方便的讀出電機轉(zhuǎn)速的大小和了解電機的轉(zhuǎn)向,能夠很方便的實現(xiàn)電機的智能控制。

此外,還包括直流電機的直接清零、啟動(置數(shù))、暫停、連續(xù)功能。其間是通過89C51單片機產(chǎn)生脈寬可調(diào)的脈沖信號并輸入到L298驅(qū)動芯片來控制直流電機工作的。

2)各部分電路模塊的組成:

  (a)設(shè)計輸入部分:這一模塊主要是利用帶中斷的獨立式鍵盤來實現(xiàn)。

  (c)設(shè)計控制部分:主要由89C51單片機的外部中斷擴展電路組成。

  (b)設(shè)計顯示部分:是直接采用SM410564四位共陽數(shù)碼管組成顯示模塊。

3)直流電機PWM控制實現(xiàn)部分:

   主要由一些二極管、電機和L298直流電機驅(qū)動模塊組成。

2.3 原理框圖
1)系統(tǒng)組成:如圖2-1所示

圖2-1  直流電機PWM調(diào)速方案

    2)方案說明:

直流電機PWM調(diào)速系統(tǒng)以AT89C51單片機為控制核心,由命令輸入模塊、LED顯示模塊及電機驅(qū)動模塊組成。采用帶中斷的獨立式鍵盤作為命令的輸入,單片機在程序控制下,定時不斷給直流電機驅(qū)動芯片發(fā)送PWM波形,H型驅(qū)動電路完成電機正,反轉(zhuǎn)控制;同時單片機不停的將從鍵盤讀取的數(shù)據(jù)送到LED顯示模塊去顯示,從中不僅能讀取其速度,而且能知道它的轉(zhuǎn)向。

     

第3章 系統(tǒng)的硬件設(shè)計
3.1 單片機最小系統(tǒng)的設(shè)計
1)單片機AT89C51

    AT89C51是一種帶4K字節(jié)閃爍可編程可擦出只讀存儲器的低電壓,高性能 CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù),與工業(yè)標準MCS-51指令集合輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且廉價的方案。

2)復(fù)位電路及時鐘電路:

    復(fù)位電路和時鐘電路是維持單片機最小系統(tǒng)運行的基本模塊。

兩種常用復(fù)位電路:上電復(fù)位和手動復(fù)位。

其中:上電復(fù)位,如圖3-1所示;手動復(fù)位,如圖3-2所示。

              

             圖3-1 上電復(fù)位                        圖3-2 手動復(fù)位

有時系統(tǒng)在運行過程中出現(xiàn)程序跑飛的情況,在程序開發(fā)過程中,經(jīng)常需要手動復(fù)位。所以本次設(shè)計選用手動復(fù)位。

高頻率的時鐘有利于程序更快的運行,也有利于實現(xiàn)更高的信號采樣率,從而實現(xiàn)更多的功能。但是高速對系統(tǒng)的要求較高,而且功耗大,運行環(huán)境苛刻?紤]到單片機本身用于控制,而并非高速信號采樣處理,所以選取合適的頻率即可。合適頻率的晶振對于選頻信號強度準確度都有好處。

本次設(shè)計選取12.0M無源晶振接入XTAL1和XTAL2引腳。并聯(lián)2個30pF陶瓷電容幫助起振。單片機最小系統(tǒng)如圖3-3所示:

   

                             圖3-3  單片機最小系統(tǒng)

3.2 電源電路設(shè)計

直流穩(wěn)壓電源的基本原理:直流穩(wěn)壓電源一般有電源變壓器T、整流濾波電路及穩(wěn)壓電路所組成,基本框圖如圖3-4所示。

圖3-4 直流電源原理

1)電源變壓器T

    將220V的交流電壓變換成整流濾波電路所需要的交流電壓Ui,變壓器副邊與原邊的功率比為P2/P1=n,式中n是變壓器的效率。

2)整流電路:

   整流電路將交流電壓Ui變換成脈動的直流電壓。再經(jīng)濾波電路濾除較大的波紋成分,輸出波紋較小的直流電壓U1。常用的整流濾波電路有全波整流濾波、橋式整流濾波等。

3)濾波電路:

   各濾波電路C滿足RL-C=(3~5)T/2,式中T為輸入交流信號周期,RL為整流濾波電路的等效負載電阻。

4)穩(wěn)壓電路:

   常用的穩(wěn)壓電路有兩種形式:一是穩(wěn)壓管穩(wěn)壓電路,二是串聯(lián)型穩(wěn)壓電路。二者的工作原理有所不同。穩(wěn)壓管穩(wěn)壓電路其工作原理是利用穩(wěn)壓管兩端的電壓稍有變化,會引起其電流有較大變化這一特點,通過調(diào)節(jié)與穩(wěn)壓管串聯(lián)的限流電阻上的壓降來達到穩(wěn)定輸出電壓的目的。它一般適用于負載電流變化較小的場合。串聯(lián)型穩(wěn)壓電路是利用電壓串聯(lián)負反饋的原理來調(diào)節(jié)輸出電壓的。集成穩(wěn)壓電源事實上是串聯(lián)穩(wěn)壓電源的集成化。

3.3 直流電機驅(qū)動電路設(shè)計

由于單片機P3口輸出的電壓最高才有5V,難以直接驅(qū)動直流電機。所以我們需要使用恒壓恒流橋式2A驅(qū)動芯片L298N來驅(qū)動電機。

本設(shè)計所采用的L298N,可接受標準TTL邏輯電平信號VSS,VSS可接4.5~7V電壓。4腳VS接電源電壓,VS電壓范圍VIH為+2.5~46V,輸出電流可達2.5A,可驅(qū)動電感性負載。1腳和15腳下管的發(fā)射極分別單獨引出以便接入電流采樣電阻,形成電流傳感信號。

L298可驅(qū)動2個電動機,OUT1,OUT2和OUT3,OUT4之間可分別接電動機,本實驗裝置我們選用驅(qū)動一臺電動機,連接于OUT1和OUT2端口之間(電動機在子圖中未畫出)。

此外,5,7腳接輸入控制電平,控制電機的正反轉(zhuǎn)。EnA,EnB接控制使能端,控制電機的停轉(zhuǎn)。同時,需要加四個二極管在電機的兩端,防止電機反轉(zhuǎn)的時候產(chǎn)生強大的沖擊電流燒壞電機。具體直流電機驅(qū)動電路,如圖3-5所示。

                                 圖3-5 驅(qū)動電路

3.4 顯示模塊設(shè)計

本次設(shè)計顯示模塊直接采用的是SM410564 四位共陽數(shù)碼管顯示。又因為單片機的輸出端口輸出的電流較小,點亮數(shù)碼管的能力不大,所以需要采用三極管對輸出電流進行放大,此次三極管采用的是C9013,具體放大電路如圖3-6所示:

                                圖3-6 放大電路

3.5 按鈕電路設(shè)計

正轉(zhuǎn)、反轉(zhuǎn)、急停、加速、減速五個開關(guān)分別與單片機的P1.0,P1.1,P1.2,P1.3,P1.4相連,然后再與地相連。急停實現(xiàn)直流電機的停轉(zhuǎn),正轉(zhuǎn)實現(xiàn)直流電機的正轉(zhuǎn),反轉(zhuǎn)實現(xiàn)直流電機的反轉(zhuǎn),加速實現(xiàn)直流電機的加速,減速實現(xiàn)直流電機的減速,其電路如圖3-7所示。

     圖3-7 控制按鈕電路

3.6 元件參數(shù)選擇
1)實際計算過程

  (a)變壓器選擇:變壓器選擇雙15V變壓,考慮到電流不需要太大,最大電流為1A,實際選擇變壓器輸出功率為10W,可以很好的滿足要求。

  (b)整流橋:考慮到電路中會出現(xiàn)沖擊電流,整流橋的額定電流是工作電流的2~3倍。選取RS301(100V,3A)即可,實際購買過程中選擇了RS30(700V,3A)也符合設(shè)計要求。

  (c)濾波電容:考慮到對紋波電壓要求比較高,故選擇了2200μF耐壓值為25V以及100μF耐壓值50v的電解電容。

  (d)去耦電容:去耦電容的選擇是7812及7805芯片要求的,查手冊可知分別為0.01μF,用來濾除高頻分量防止產(chǎn)生自激。

  (e)電解電容:為了防止負載產(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è)計
4.1 總體方案

利用P3口,編制程序輸出一串脈沖,經(jīng)放大后驅(qū)動直流電機,改變輸出脈沖的電平的持續(xù)時間,達到使電機正轉(zhuǎn)、反轉(zhuǎn)、加速、減速、停轉(zhuǎn)等目的。由軟件編程從P3.0/P3.1管腳產(chǎn)生PWM 信號,經(jīng)驅(qū)動電路輸出給電機,從而控制電機得電與失電。軟件采用延時法進行設(shè)計。單片機上電后,系統(tǒng)進入準備狀態(tài)。當按動啟動按鈕后,根據(jù)P3.0為高電平時實現(xiàn)電機正轉(zhuǎn),P3.1為高電平時實現(xiàn)電機反轉(zhuǎn)。根據(jù)不同的加減速按鈕,調(diào)整P3.0/ P3.1輸出高低電平時的占空比,從而可以控制P3.0/ P3.1輸出高低電平時的有效值,進而控制電機的加減速。


其總體流程圖如圖4-1所示:
圖4-1 總體程序流程圖

P3.0/P3.1脈沖寬度調(diào)制器(PWM) 通道,它們產(chǎn)生可由編程決定寬度和間隔的脈沖。脈沖的間隔周期是由一個FOR循環(huán)控制,來產(chǎn)生不同的占空比。單片機產(chǎn)生的PWM信號不能直接驅(qū)動電機,這就需要設(shè)計合適的驅(qū)動電路,用以可以間接地驅(qū)動電機,使其能夠正常運行。為此,我們可借助于恒壓恒流橋式2A驅(qū)動芯片L298N來完成對電動機的驅(qū)動。具體的設(shè)計方法是通過Keil C編程,Proteus聯(lián)合仿真來實現(xiàn)的。

4.2 相關(guān)軟件介紹
1)Proteus

Proteus是一種低投資的電子設(shè)計自動化軟件,提供Schematic Drawing,SPICE仿真與PCB設(shè)計功能,這一點Proteus與multisim比較類似,只不過它可以仿真單片機和周邊設(shè)備,可以仿真51系列、AVR,PIC等常用的MCU,與Keil和MPLAB不同的是它還提供了周邊設(shè)備的仿真,只要給出電路圖就可以仿真,例如373,led,示波器,Proteus提供了大量的元件庫有RAM,ROM,鍵盤,馬達,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,編譯方面支持Keil和MPLAB,里面有大量的例子參考。

   (a)Proteus可提供的仿真元件資源Proteus軟件提供了可仿真數(shù)字和模擬、交流和直流等數(shù)千種元器件和多達30多個元件庫;

   (b)Proteus可提供的仿真儀表資源虛擬儀器儀表的數(shù)量、類型和質(zhì)量,是衡量仿真軟件實驗室是否合格的一個關(guān)鍵因素。在Proteus軟件中,理論上同一種儀器可以在一個電路中隨意的調(diào)用;

   (c)除了現(xiàn)實存在的儀器外,Proteus還提供了一個圖形顯示功能,可以將線路上變化的信號,以圖形的方式實時地顯示出來;

   (d)Proteus還提供了比較豐富的測試信號用于電路的測試。這些測試信號包括模擬信號和數(shù)字信號。

2)Keil

    Keil是德國開發(fā)的一個51單片機開發(fā)軟件平臺,最開始只是一個支持C語言和匯編語言的編譯器軟件。后來隨著開發(fā)人員的不斷努力以及版本的不斷升級,使它已經(jīng)成為了一個重要的單片機開發(fā)平臺,不過KEIL的界面并不是非常復(fù)雜,操作也不是非常困難,很多工程師的開發(fā)的優(yōu)秀程序都是在KEIL的平臺上編寫出來的。可以說它是一個比較重要的軟件,熟悉他的人很多很多,用戶群極為龐大,要遠遠超過偉福等廠家軟件用戶群,操作有不懂的地方只要找相關(guān)的書看看,到相關(guān)的單片機技術(shù)論壇問問,很快就可以掌握它的基本使用了。

  (a)Keil的UVision2可以進行純粹的軟件仿真(仿真軟件程序,不接硬件電路),也可以利用硬件仿真器,搭接上單片機硬件系統(tǒng),在仿真器中載入項目程序后進行實時仿真;

  (b)可以使用UVision2的內(nèi)嵌模塊Keil Monitor-51,在不需要額外的硬件仿真器的條件下,搭接單片機硬件系統(tǒng)對項目程序進行實時仿真;

  (c)uVision2調(diào)試器具備所有常規(guī)源極調(diào)試,符號調(diào)試特性以及歷史跟蹤,代碼覆蓋,復(fù)雜斷點等功能。DDE界面和shift語言支持自動程序測試。

4.3 應(yīng)用軟件的編制、調(diào)試

使用Keil 軟件工具時,項目開發(fā)流程和其它軟件開發(fā)項目的流程極其相似。

1)創(chuàng)建一個項目,從器件庫中選擇目標器件,配置工具設(shè)置;

2)用C語言或匯編語言創(chuàng)建源程序;

3)用項目管理器生成應(yīng)用;

4)修改源程序中的錯誤;

5)測試,連接應(yīng)用。

第5章 仿真結(jié)果與分析5.1仿真電路圖

如圖5-1所示:

圖5-1 仿真電路圖
5.2 仿真結(jié)果

1)半速運行狀態(tài),運行結(jié)果如圖5-1所示:

        

      圖5-1 電機半速運行

2)按下急停鍵,停止運行如圖5-2所示:

圖5-2 電機停止運行

3)按下加速鍵,加速運行如圖5-3所示:

圖5-3 電機加速運行

4)按下減速鍵,減速運行如5-4所示:

圖5-4 電機減速運行

按下反轉(zhuǎn)鍵,反轉(zhuǎn)運行如圖5-5所示:

圖5-5 電機反向運行

第6章總結(jié)

這次設(shè)計,運用AT89C51單片機為核心硬件,設(shè)計了直流電機的轉(zhuǎn)速控制系統(tǒng)。實現(xiàn)了對直流電機的停止、加速、減速、正轉(zhuǎn)、反轉(zhuǎn)等多種控制功能,基本滿足設(shè)系統(tǒng)計的要求。同時,在驅(qū)動芯片和電動機的連接之間我有加入續(xù)流二極管,在電機反向運轉(zhuǎn)時進行續(xù)流,避免燒壞電機及其他元件。在此設(shè)計中P0口作為輸出端口,我們在P0口接入了排阻使電路復(fù)位后P0口輸出的為高電平。

通過本次設(shè)計,學(xué)習(xí)與掌握了AT98C51單片機的基本原理及其各種應(yīng)用,對它的各種硬件接口與軟件設(shè)計方法有較深入的認識。對自動控制系統(tǒng)的動、靜態(tài)性能及其控制有了一定的認識。本設(shè)計重點在于應(yīng)用,因此在設(shè)計過程中使自己的動手能力得到鍛煉,同時提高了解決實際問題的能力

感謝兩周以來每一位指導(dǎo)過自己的人,謝謝他們給自己的知識,以及在專業(yè)知識和學(xué)習(xí)方法方面給我的許多的指導(dǎo)和啟發(fā),使我受益匪淺。謝謝他們的教導(dǎo),謝謝他們幫我成長。


單片機源程序如下:
  1. #include<at89x51.h>
  2. #define unchar unsigned char
  3. #define unint unsigned int
  4. unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,
  5. 0x99,0x92,0x82,0xf8,
  6. 0x80,0x90,0x88,0x83,
  7. 0xc6,0xa1,0x86,0x84,0xff,0xbf}; //顯示代碼
  8. unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7};   //位選口
  9. unsigned char dispbuf[4]={0,0,0,0};
  10. unsigned char dispbitcnt;
  11. unint mstcnt;
  12. unint i;

  13. unint count=0;
  14. unchar tp=0;
  15. void ledshow();
  16. void keyscan();
  17. void delay();
  18. void just();
  19. void turn();
  20. void motorstop();
  21. void speedup();
  22. void speeddown();

  23. void main(void)
  24. {
  25. P3_0=1;
  26. P3_1=0;
  27. dispbuf[0]=16;
  28. TMOD=0x02;
  29. TH0=0x06;
  30. TL0=0x06;
  31. TR0=1;
  32. ET0=1;
  33. EA=1;
  34. while(1)
  35.     {
  36.         ledshow();//數(shù)碼管顯示
  37.         keyscan();//鍵盤掃描
  38.     }
  39. }
  40. //延時10ms程序
  41. void delay()
  42. {
  43. unsigned char i,j;
  44. for(i=20;i>0;i--)
  45. for(j=248;j>0;j--);
  46. }
  47. //鍵盤掃描程序
  48. void keyscan()
  49. {
  50.     unchar temp=0;
  51.     P1=0xff;
  52.     if((P1&0x1f)!=0x1f)
  53.     {
  54.         delay();
  55.         if((P1&0x1f)!=0x1f)
  56.         {
  57.             temp=P1&0x1f;
  58.             switch(temp)
  59.             {
  60.             case 0x1e:
  61.                 just();break;
  62.             case 0x1d:
  63.                 turn();break;
  64.             case 0x1b:
  65.                 motorstop();break;
  66.             case 0x17:
  67.                 speedup();break;
  68.             case 0x0f:
  69.                 speeddown();break;
  70.             }
  71.         }
  72.     }
  73.     while((P1&0x1f)!=0x1f);
  74. }
  75. //數(shù)碼管顯示程序
  76. void ledshow()
  77. {
  78. P0=dispcode[dispbuf[dispbitcnt]];
  79. P2=dispbitcode[dispbitcnt];
  80. dispbitcnt++;
  81. if(dispbitcnt==4)
  82. {
  83. dispbitcnt=0;
  84. }  

  85. P2=0x01;P0=dispcode[dispbuf[0]];
  86. for(i=0;i<700;i++);

  87. P2=0x02;P0=dispcode[dispbuf[1]];
  88. for(i=0;i<700;i++);

  89. P2=0x04;P0=dispcode[dispbuf[2]];
  90. for(i=0;i<700;i++);

  91. P2=0x08;P0=dispcode[dispbuf[3]];
  92. for(i=0;i<700;i++);

  93.     dispbuf[1]=tp/100;
  94.     dispbuf[2]=(tp%100)/10;
  95.     dispbuf[3]=tp%10;
  96. }
  97. //中斷服務(wù)程序
  98. void t0(void) interrupt 1 using 0</font>
復(fù)制代碼

word文檔下載: 數(shù)字音樂盒全套說明書及源代碼.doc (346.89 KB, 下載次數(shù): 0)







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1