欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13469|回復: 0
打印 上一主題 下一主題
收起左側

基于51單片機的簡易電子琴設計說明書

[復制鏈接]
跳轉到指定樓層
樓主
ID:473179 發表于 2019-1-26 19:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
設計了一個以AT89S52為主控核心的電子琴系統,系統由單片機AT89S52、獨立按鍵模塊、功率放大模塊、揚聲器、數碼管組成,用C語言編寫了51程序,該系統可以實現按鍵彈奏音樂和存儲播放功能。該系統可以主要優點有硬件電路結構簡單易實現,電子琴所需功能基本具備,系統穩定可靠。缺點是音量調節大小不明顯,可加入多首音樂或者按鍵選擇音樂的功能。

目    錄

1. 設計背景
1.1單片機背景
1.2單片機電子琴應用
2.設計方案
3. 方案實施
3.1硬件設計
3.1.1總體電路設計
3.1.2單片機簡介
3.1.3按鍵設計
3.1.4LED數碼管
3.1.5揚聲器
3.1.6電源電路
3.1.7時鐘電路
3.2軟件設計
3.3仿真與調試
3.3.1仿真軟件介紹
3.3.2仿真結果
4. 結果與結論
4.1實現的功能
4.2設計結論
5. 收獲與致謝
6. 參考文獻
7. 附件

1. 設計背景
1.1單片機背景

單片機是經典的嵌入式微控制器(Microcontroller Unit),縮寫為MCU,最早是被利用于工業控制領域。因為在工業控制領域單片機有著廣泛的應用,所以誕生了單片機開發板這樣的系統使更多的產品開發人員、業內人士、學生來學習單片機這門技術,其中比較出名的單片機開發板有電子人DZR-01A。單片機是從芯片內部僅有的特殊處理器發展起來的,它最開始的設計思路是將CPU與大量的外圍設備通過一個微處理器集成在一起,從而使得計算機系統變得更迷你,組裝到繁雜的且對體積要求比較小的控制裝備之中更簡單。Zilog公司的Z80便是最早使用這種設計思想做出來的的cpu,自此以后,單片機和計算機CPU的發展便成為了兩個不同的方向。

單片機相當于把一個復雜的計算機系統濃縮到一個微小的芯片上,它計算機相比只缺少了輸入/輸出設備,所以可以把它看作一個微型的計算機。可以概況的講成:一塊相當于一臺計算機的芯片。它的質量輕、體積小、價格便宜、為開發、應用和學習提供了便利條件。所以,如果你想要了解計算機原理與結構,那么學習使用單片機是最簡單的選擇。

1.2單片機電子琴應用

電子琴是大規模集成電路和音樂結合的產物,它因為能模擬各種樂器的音色而受到群眾們喜愛。本設計制作了一種除了有普通電子琴彈奏功能外,還擁有一種存儲播放樂曲功能。本設計是以AT89S52單片機作為一個簡單電子琴系統設計的核心部件,其原理是因為每個表有固定的振動頻率,所以可以利用89S52單片機內部的定時/計數器改變計數值來產生各個音調對應的方波頻率來驅動揚聲器播放出不同音調。這僅僅只是單片機應用的一個點,希望能由點到面,更好的了解和應用單片機技術。

2.設計方案
2.1方案一:采用CPLD外接揚聲器、鍵盤、數碼管等。

8個譯碼輸出顯示的數碼管,以顯示目標芯片的32 位輸出信號,且8個發光管也能顯示目標器件的8位輸出信號。時鐘為50MHz ,輸出接揚聲器。

具體過程:主系統可由兩個模塊組成:當系統檢測到有按鍵按下時,對應音符的頻率由模塊1獲得,這是一個數控分頻器。由其clk端輸入一具有較高頻率的信號,分頻后輸出。

音符的持續時間須根據樂曲的速度及每個音符的節拍數決定,模塊2的功能是為模塊1提供決定所發音的分頻預置值,而此數在模塊1輸入口停留的時間即為此音符的節拍值。

2.2方案二:采用單片機外接揚聲器、鍵盤、數碼管等。

采用AT89S52單片機的兩個定時器(如T0,T1)控制頻率,在P1.0引腳上輸出方波周期信號,產生聲音,按下不同的模擬按鍵就會產生不同的音符,所以使用者可以通過本電子琴系統暢所欲為的彈奏自己想要彈的樂曲。

具體過程:當系統掃描到鍵盤上有鍵子被按下,則快速檢測出是那一個鍵子,然后單片機的定時器被啟動,發出一定頻率的脈沖,該頻率的脈沖經喇叭驅動電路放大濾波后,就會發出相應的音調。。如果在前一個按下的鍵發聲的同時有另一個鍵被按下,則啟用中斷系統,前面鍵的發音停止,轉到后按的鍵的發音程序,發出后按鍵的音。

2.3方案對比

對比兩套方案各有優缺點,方案一采用CPLD,工作速度快,系統穩定,效果好,但是其價格昂貴;而方案二在設計這樣小型電子方面,無論是效果還是工作速度與方案一相差不大,而且價格較為便宜。因此,選擇方案二即單片機加外設的方式設計該系統比較好。

3. 方案實施
3.1硬件設計
3.1.1總體電路設計

由AT89S52單片機、獨立鍵盤、音頻功率放大模塊、揚聲器、數碼管、存儲播放模塊所組成。



圖1 系統結構框架

3.1.2單片機簡介

AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統可編程Flash存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統可編程,亦適于常規編程器。在單芯片上,擁有靈巧的8 位CPU和在系統可編程Flash,使得AT89S52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。 AT89S52具有以下標準功能: 8k字節Flash,256字節RAM, 32 位I/O 口線,看門狗定時器,2 個數據指針,三個16 位 定時器/計數器,一個6向量2級中斷結構,全雙工串行口。另外,AT89S52 可降至0Hz 靜態邏 輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工 作。掉電保護方式下,RAM內容被保存,振蕩器被結,單片機一切工作停止,直到下一個中斷或硬件復位為止。

圖2 AT89S52

3.1.3按鍵設計

本設計共含有10個按鍵,其中8個按鍵分別接著P2.0~P2.7引腳,代表著8個音符。當按下這八個按鍵其中一個按鍵時,數碼管也會顯示一個與音調對應的數字來指示用戶所按下的按鍵。而另外兩個按鍵為功能按鍵,按下可播放已存儲的歌曲,另一個按下可中斷播放音樂。這兩個功能按鍵連接著的引腳分別是P3.2、P3.3。如圖3所示。

圖3按鍵圖

3.1.4LED數碼管

由于本次設計需要的單片機I/O端口不多,所以數碼管顯示方式采用了靜態顯示驅動,數碼管將直接由單片機I/O端口驅動, 又因為LED數碼管是電流控制元件,所以使用時要上一個加限流電阻。數碼管顯示是通過單片機查表得出編碼,然后單片機再驅動端口決定數碼管顯示的數字,按鍵與數碼管顯示程序的一致性就是這么實現的。連接在P0.1-P0.3,4個引腳上,并加一個排阻。如圖4所示。


圖4數碼管與單片機的連接圖

3.1.5揚聲器

揚聲器采用兩個三極管來放大音頻,串連著一個可調節電阻,用來調節聲音大小,整個模塊由單片機P1.0引腳控制。如圖5所示。

圖5揚聲器的連接圖

3.1.6電源電路

經由電解電容和非極性電容構成的濾波網絡和三端穩壓器LM7805的穩壓作用后,輸出+5V的直流電壓。

圖6電源電路圖

3.1.7時鐘電路

時鐘頻率直接影響單片機的速度,時鐘電路的質量也直接影響單片機系統的穩定性。常用的時鐘電路有兩種方式,一種是內部時鐘方式,另一種是外部時鐘方式。

AT89C51內部有一個用于構成振蕩器的高增益反相放大器,輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。這兩個引腳跨接石英晶體振蕩器和微調電容,構成一個穩定的自激振蕩器,圖9是AT89S51內部時鐘方式的電路,C1和C2的典型值通常選擇為30pF,石英晶體常選6MHz或12MHz的。本設計采用內部時鐘方式做時鐘電路


圖7時鐘電路圖

3.2軟件設計

本設計的基本流程是對初始化的單片機進行鍵盤掃描,判斷其有無按鍵按下,若有則需要繼續判斷按鍵的類別,判斷它是功能選擇鍵還是獨立鍵盤上的音調鍵,若是獨立鍵盤,則通過P1.0發生頻率播放音調,通過P0顯示數碼管數字。若是功能選擇鍵,則播放程序儲存好的音樂歌曲,然后檢測是否按下中斷鍵,若是則停止播放,不是則一直播放到結束。此設計使用的語言選擇中,匯編語言是面向特定機型的需要,在不同的計算機指令系統上和不同的微控制器上,指令結構有著云泥之別,就算指令大同小異,它也不能夠移植。C語言是一種高級語言,可以結構化編程,還可以 移植。使用標準C語言的程序編程,完全可以不作任何修改就能夠移植到不同的系統平臺上。基于以上對比,本設計系統更適合C語言來進行編程。            

3.3仿真與調試
3.3.1仿真軟件介紹

Proteus是英國著名的EDA工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,一鍵切換到PCB設計,真正實現了從概念到產品的完整設計。是目前世界上唯一將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺。

3.3.2仿真結果

利用Proteus仿真軟件將Keil軟件中的C語言程序導入仿真電路中,燈泡D1亮,按下播放鍵,單片機存儲的音樂可自動播放,按下停止鍵,音樂播放停止。復位鍵按下后,系統復位,八個按鍵可隨按鍵者隨意按下彈奏音樂,同時數碼管顯示相對應的節奏。


圖6仿真結果圖
4. 結果與結論
4.1實現的功能

     根據功能需求與電路結構得知,當開關按下時,將可有其連接的輸入口讀取到低電平,再次制作的一個八鍵的電子琴,若按下S1,則發出中音DO,如按下S2,則發中Re,以此類推,按下的同時數碼管顯示相對應的數字。此外,該電子琴不僅可以自己彈奏也可自動播放所存儲的音樂,數碼管顯示相對應的音符。

4.2設計結論

本設計利用AT89S52單片機設計一個簡易電子琴,具備電子琴的基本功能,分析了利用單片機簡易電子琴設計的基本原理,并介紹了AT89S52單片機設計的電子琴統硬件系統。改變AT89S52的定時器里面的特殊功能寄存器TH0及TL0在模式1下的計數值,便會產生不同方波頻率,然后通過揚聲器產生對應的音調。最終將編寫的源程序轉換為機器碼導入單片機芯片,仿真調試運行后,就可以實現利用按鍵彈奏想要的歌曲。與此同時仿真調試軟件用的是protues,源程序編譯軟件用的是keil,所以對這兩款軟件的掌握熟練度也增加了許多。

5. 收獲與致謝

     課程設計是培養學生綜合運用所學知識,發現,提出,分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程,隨著科學技術發展的日新月異,大規模芯片已經成為當今計算機運用中空前活躍的領域,在生活中可以說是無處不在。以此作為二十一世紀的大學生來說掌握開發技術是十分重要的。

     通過本次實驗,我不僅可以鞏固以前學過的知識,如數電知識,系統設計和C語言,而且學到了很多在書本上所沒有學到的知識,如實踐經驗和操作技巧。我懂得了理論與實踐相結合是很重要的,只有理論知識是遠遠不夠的,光看書部進行相關的聯系是行不通的,只有把所學的理論知識與實踐結合起來,從而提高自己的實際動手能力和獨立思考能力。在此次電子琴設計中也讓我學會了Proteus和Keil這兩個軟件的基本應用,多掌握了兩門技術,對自己以后要做此方面的設計打下了基礎。于此同時也讓我知道了,做任何事情都要學會團隊合作要多學多問,知道請教,不能自己一味悶頭去做,應該多請教老師和同伴的意見和建議。在設計過程難免會遇到各種各樣的問題,同時在設計的的過程中發現了自己的不足之處,對以前學過的知識理解的不夠深刻,掌握的不夠牢固,通過這次課程設計之后,把以前學過的知識重新溫故,全部整合,進一步深刻理解。我們要學會學習的能力,能夠舉一反三,觸類旁通,這樣對自己以后的發展有很大的幫助,因此我們需要在學習中學習,在實踐中找出答案!



7. 附件

仿真圖如下:

電路圖如下:


PCB圖如下:

實物圖如下:




代碼如下:


  1. #include "reg51.h"
  2. #define shumaguan P0                           //定義數碼管段碼輸出
  3. sbit LED =P1^1 ;
  4. sbit SPK =P1^0  ;
  5. sbit K1= P3^2;     
  6. sbit K2= P3^3;                                  //定義方波輸出口

  7. unsigned int tone1,tone2;
  8. /*****標準音符表*****/
  9. //用于使定時器初值變化以產生相應頻率的定時
  10. unsigned char code yinfu[]={0xfb,0xe9,      //Do
  11.                               0xfc,0x5c,      //Re
  12.                               0xfc,0xc1,      //Mi
  13.                               0xfc,0xef,      //Fa
  14.                               0xfd,0x45,      //So
  15.                               0xfd,0x92,      //La
  16.                               0xfd,0xd0,      //Si
  17.                               0xfd,0xee,      //Do#
  18.                               0x00,0x00     //音符之間的間隔,只要間隔時間小于65ms時,
  19.                                                         //喇叭不會發出聲音,用作拍子之間的短暫停頓   
  20. };

  21. /*****生日快樂歌音調表*****/
  22. unsigned char code shengri_tone[]={   1,0,1,2,1,4,3,0,
  23.                                    1,0,1,2,1,5,4,0,
  24.                                                1,0,1,8,6,4,3,2,0,
  25.                                                7,0,7,6,4,5,4,0       //0代表不發聲,即停頓;數字即為音調
  26. };

  27. /*****生日快樂歌節拍表*****/
  28. unsigned char code shengri_beat[]={   24,1,24,48,48,48,72,5,
  29.                                    24,1,24,48,48,48,72,5,
  30.                                      24,1,24,48,48,48,48,72,5,
  31.                                       24,1,24,48,48,48,72,5    //節拍,即tone表各音調的延時
  32. };


  33. /*****15ms延時子程序,用于節拍*****/
  34. void delay(void)
  35. {
  36.        unsigned char n=15;
  37.        while(n--)
  38.        {
  39.               unsigned char i;
  40.               for(i=0;i<125;i++);
  41.        }
  42. }

  43. /*****定時器0初始化*****/
  44. void initTimer(void)
  45. {
  46.       TMOD=0x01;           //定時器0,工作方式1;定時器1,工作方式1
  47.       TH0=tone1;
  48.       TL0=tone2;
  49. }

  50. /*****定時器0中斷服務程序*****/
  51. void timer0(void) interrupt 1
  52. {
  53.       TH0=tone1;
  54.       TL0=tone2;
  55.       SPK=~SPK;                           //取反,以產生方波
  56. }

  57. /*****演奏子程序1*****/
  58. void play1(void)
  59. {                 
  60.        unsigned char m=0;
  61.        unsigned char s;   
  62.        unsigned char a=1;
  63.        while(1)
  64.        {
  65.               EA=0;
  66.               LED=0;
  67.               a=shengri_tone[m];                            //取音符
  68.                         shumaguan=a;
  69.               s=shengri_beat[m];                      //取節拍
  70.               tone1=yinfu[2*a-2];                           
  71.               tone2=yinfu[2*a-1];                           
  72.               EA=1;
  73.               while(s--)
  74.               {                           
  75.                            
  76.                      delay();
  77.               }
  78.                                          
  79.                                             if((!K1)||(!K2))   //發現按鍵,立即退出播放
  80.    {
  81.       EA=0;SPK=0;shumaguan=0xff; m=34;                                                                                                                      //改過已
  82.     return;
  83.    }
  84.    else
  85.               LED=1;
  86.               m++;
  87.               if(m>=33) return;      //數值是shengri相關表中的元素數量
  88.        }   
  89.                
  90. }

  91. /*****按鍵檢測*****/
  92. void check_key(void)
  93. {
  94.        P2=0xff;                                   
  95.        P3=0xff;                      //設置為輸入狀態
  96.        switch(P2)                          //檢測按鍵,輸出數碼管、載入定時器初值、允許中斷
  97.        {
  98. case 0xfe:shumaguan=0xf9;tone1=0xfb;tone2=0xe9;EA=1;break;
  99.     case 0xfd:shumaguan=0xa4;tone1=0xfc;tone2=0x5c;EA=1;break;
  100.     case 0xfb:shumaguan=0xb0;tone1=0xfc;tone2=0xc1;EA=1;break;
  101. case 0xf7:shumaguan=0x99;tone1=0xfc;tone2=0xef;EA=1;break;
  102. case 0xef:shumaguan=0x92;tone1=0xfd;tone2=0x45;EA=1;break;
  103. case 0xdf:shumaguan=0x82;tone1=0xfd;tone2=0x92;EA=1;break;
  104. case 0xbf:shumaguan=0xf8;tone1=0xfd;tone2=0xd0;EA=1;break;
  105. case 0x7f:shumaguan=0x80;tone1=0xfd;tone2=0xee;EA=1;break;
  106. default: EA=0;SPK=0;shumaguan=0xff;//沒有鍵按下則關閉中斷和數碼管              //                              改過已
  107.        }
  108.        switch(P3)
  109.        {
  110.               case 0xfb:play1();break;

  111.        }
  112. }

  113. /*****主程序*****/
  114. void main(void)
  115. {
  116.        initTimer();
  117.        shumaguan=0xff;
  118.        TR0=1;
  119.        ET0=1;
  120.        SPK=0;
  121.        while(1)
  122.        {
  123.               check_key();
  124.        }
  125. }
復制代碼


完整的Word格式文檔51黑下載地址:

基于51單片機的簡易電子琴設計.doc (5.11 MB, 下載次數: 73)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:532604 發表于 2019-5-10 16:11 來自觸屏版
樓主這是畢業設計嗎?

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表