久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11737|回復(fù): 0
收起左側(cè)

基于51單片機的建議電子琴 代碼與原理

[復(fù)制鏈接]
ID:314930 發(fā)表于 2018-4-23 22:55 | 顯示全部樓層 |閱讀模式

這個是我最近的課程設(shè)計,做完了給大家分享一下吧
基本要求:基于51單片機的多音階電子琴可以采用16個按鍵矩陣,設(shè)計成16個音階,來實現(xiàn)隨意彈奏想要表達的音樂。
設(shè)計提示:
  1)掌握鍵盤的掃描識別編程方法;
  2)理解數(shù)碼管動態(tài)顯示原理。
  3)可先利用單片機定時器T0或T1實現(xiàn)基準時間(如20ms)

利用51開發(fā)板以及外接的矩陣鍵盤,以及數(shù)碼管和蜂鳴器,設(shè)計出功能簡單的電子琴,從而了解蜂鳴器發(fā)出不同音調(diào)的原理,加深對蜂鳴器原理的認識。同時了解矩陣鍵盤的掃描原理以及加深數(shù)碼管動態(tài)顯示的原理。
另外,元件的使用以及畫總電路圖使用到了PROTEL軟件,代碼的編寫下載使用keil軟件,本次大作業(yè)也會讓我對這兩個軟件的使用更加熟練。

實驗原理
    音節(jié)由不同頻率的方波產(chǎn)生,音節(jié)與頻率的關(guān)系見下面的表格。要產(chǎn)生音頻方波,只要算出某一咅頻的周期(頻率的倒數(shù)),然后將此周期除以2,即為半周期的時間。利用計時器計時此半周期時間,每當計時到后就將輸出信號的I/O反相,然后重復(fù)計時此半周期時間再對I/O 反相,就可在I/O腳得到此頻率的方波。在51單片機上,產(chǎn)生方波的I/O腳選用P2.5,P2.5輸出不同頻率的方波,蜂 鳴器便會發(fā)出不同的聲音。另外,音樂的節(jié)拍是由延時實現(xiàn)的,如果1拍為0.4秒,1/4拍是 0.1秒。只要設(shè)定延時時間,就可求得節(jié)拍的時間。延時作為基本延時時間,節(jié)拍值只能是它的整數(shù)倍。



系統(tǒng)設(shè)計

本課題只要給蜂鳴器不同頻率的信號既可以實現(xiàn)不同音調(diào)的發(fā)聲。單片機實驗板上的數(shù)碼顯示管可以顯示四位數(shù)字,但是并行口只有八個,所以只能選用動態(tài)掃描方式。鍵盤由于板子上沒有鍵盤,只能使用外接鍵盤,插在P1口,蜂鳴器接在P2.5口,數(shù)碼顯示管接在P0口。
功能單元框圖如下圖:

Snip20180423_18.jpg

功能描述:
矩陣鍵盤:輸入不同的按鍵信號,用來選擇蜂鳴器頻率以及數(shù)碼管的顯示。
AT89S51: 主控制模塊。
74HC573: 鎖存器,數(shù)碼管采取動態(tài)掃描方式,為了選擇數(shù)碼管顯示的是第幾個七段數(shù)碼管,需要借助鎖存器。
數(shù)碼管:顯示數(shù)字。
蜂鳴器:發(fā)出聲音
時鐘與復(fù)位電路:提供時鐘信號與復(fù)位信號。




硬件設(shè)計
(本章用來論述各個功能單元的具體實現(xiàn)電路,并詳細介紹設(shè)計過程,如元器件的選型、特點以及具體原理電路圖)

單元一: 4*4鍵盤矩陣

按鍵數(shù)目較多的場合常常采用矩陣式鍵盤,也稱行列式鍵盤。鍵盤由行線和列線組成,按鍵位于行列線的交叉點上。一個4*4的行列結(jié)構(gòu)可以構(gòu)成一個16個按鍵的鍵盤,需要一個8位的并行IO口。很明顯,再按鍵數(shù)目較多的場合,矩陣式鍵盤要比獨立式鍵盤節(jié)省較多的IO口線。本實驗中矩陣鍵盤接在P1口。

單元二:SST89E51芯片
SST89E51是一個低功耗,高性能CMOS 8位單片機,片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用高密度、非易失性存儲技術(shù)制造,兼容標準MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,SST89E51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。




單元三:時鐘與復(fù)位電路
時鐘信號分為內(nèi)部時鐘信號與外部時鐘信號,本實驗中使用的是外部時鐘信號,CPU外面有一個11.0592Mhz的外接晶振。復(fù)位操作是單片機的初始化操作,只需要給AT89S51單片機的復(fù)位引腳RST加上大于兩個機器周期的高電平就可以使得單片機復(fù)位。


單元四:鎖存器74HC573  74HC573是擁有八路輸出的透明鎖存器,輸出為三態(tài)門,是一種高性能硅柵CMOS器件。當輸入的數(shù)據(jù)消失時,在鎖存器芯片的輸出端,數(shù)據(jù)仍然保持。 單元五:
數(shù)碼管顯示

單元六:蜂鳴器電路

有源蜂鳴器是一種一體化結(jié)構(gòu)的電子迅響器,采用直流電壓供電,廣泛應(yīng)用于計算機、打印機、復(fù)印機、報警器、電子玩具、汽車電子設(shè)備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”(舊標準用“FM”、“LB”、“JD”等)表示。



軟件設(shè)計

接下來的代碼為初始化各值:
  ORG 0000H
         AJMP KEY1
         ORG  0030H
                      MOV A,#0
                      MOV R7,#0
                      SETB P2.5

下面為鍵盤掃描的主程序:
KEY1:
                MOV P1,#0F0H ;給列送高電平
         LCALL DELAY  ;延時,使電路穩(wěn)定下來
         MOV  R4,00H
         MOV  A,P1  ;P1口的值
         ANL  A,#0F0H  ;屏蔽行線的影響
         CJNE A,#0F0H,L ;如果有鍵按下,就跳轉(zhuǎn)到L

下面為數(shù)碼管顯示的程序,2.0為第一個鎖存器的使能端,首先通過給P0口賦值#07H,讓第一塊鎖存器的輸出值鎖定,選定四個數(shù)碼管顯示我們只使用第四個。然后關(guān)閉使能端,第二塊鎖存器的輸出控制一個數(shù)碼管的顯示數(shù)字。
通過查表法給數(shù)碼管送入不同的數(shù)值。
DISPLAY:
      CLR  P2.0         ;
     SETB    P2.1
     MOV     P0,#07H
  CLR    P2.1
      SETB   P2.0
     MOV  DPTR,#TABLE
         MOV A,R7
     MOVC    A,@A+DPTR
     MOV    P0,A   
下面是發(fā)出聲音的代碼:                 
MUSIC: MOV R3,#200
       MOV A,R7
       JZ KEY1
       LCALL FENGMING
       AJMPKEY1


下面是鍵盤掃描程序的子程序:

L:      LCALL DELAY  ;延時去除抖動
         MOV  A,P1 ;重新取值
         JB  ACC.4,L1 ;P1.4這一列有鍵按下?沒有則跳轉(zhuǎn)到L1
         MOV  R3,#00H  ;R3用作記列號
          AJMP Q1
L1:    JB  ACC.5,L2
         MOV  R3,#01H
         AJMP Q1
L2:    JB  ACC.6,L3
         MOV  R3,#02H
         AJMP Q1
L3:    JB  ACC.7,KEY1
          MOV  R3,#03H
          AJMP Q1
Q1:    MOV  P1,#0FH  ;給行送高電平
          LCALL DELAY  ;延時,穩(wěn)定電路
          MOV  A,P1  ;取值
          ANL  A,#0FH  ;屏蔽高四位
         JB  ACC.0,Q2 ;判斷是不是第0行,不是則轉(zhuǎn)移
          MOV  R4,#00H  ;如果是,那把0送給R4(R4存行(轉(zhuǎn)換為鍵號))
         AJMP JIA
Q2:    JB  ACC.1,Q3
          MOV  R4,#04H
          AJMP JIA
Q3:    JB  ACC.2,Q4
          MOV  R4,#08H
          AJMP JIA
Q4:    JB  ACC.3,KEY1
          MOV  R4,#0CH
          AJMP JIA
JIA:    MOV  A,R3    ;行號加上列號就是改鍵的值
         ADD  A,R4
          MOV  R7,A  ;調(diào)整后放在R7寄存器中
          AJMP KEY1
DELAY: MOV R6,#20H  ;仿真時測試延時為13ms
Q6:      MOV  R5,#0BBH
              DJNZ R5,$
              DJNZ R6,Q6
              RET

蜂鳴器的子程序:控制不同的計數(shù)器初值,從而達到分頻的效果。建立了兩個表格TABLE2和TABLE3,利用查表法取出初值分別裝入TH0和TL0。計數(shù)器工作時我沒有采用中斷,而是通過判斷TF溢出位來查看計數(shù)是否完成。R3是為了進行兩百個循環(huán),即增長響聲時間。

FENGMING:
       MOV  R3,#200
       SETBP2.5
MAIN01:
    MOV  TMOD,#01H
       MOV  DPTR,#TABLE2
       MOVA,R7
       MOVC  A,@A+DPTR
       MOV  R5,A
       MOV  DPTR,#TABLE3
       MOVA,R7
       MOVC  A,@A+DPTR
       MOV  R6,A      
       MOV  TH0,R6
       MOV  TL0,R5
       SETB  TR0
WAIT: JNB  TF0, WAIT;判斷是否溢出
       CLR  TF0
   CPL P2.5       ;蜂鳴器響   
       DJNZ  R3,MAIN01    ;蜂鳴器的延時程序
RET

下面為代碼中用到的三個表格,分別為數(shù)碼管顯示的表格和計數(shù)器高低位TL0和TH0的表格。


TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ,7FH,6FH,77H
         DB 7CH,39H,5EH,79H,71H;
TABLE2: DB25H,080H,84H,0D9H,68H,0B9H,5BH,78H,79H,
       DB 0E4H,0A8H,0E6H,6FH,88H,40H,66H
TABLE3:DB 0FEH,0FDH,0FEH,0FAH,0FBH,0FBH,0FDH,0FEH,
DB  0FDH,0FEH,0FAH,0FBH,0FBH,0FDH,0FBH,0FBH


若有不足還請大家指出




評分

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

查看全部評分

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产午夜精品久久久久 | 欧美精品在线播放 | 亚洲一区二区三区视频 | 三级av网址 | caoporn免费在线视频 | 国产精品日韩欧美一区二区三区 | 91视频中文| 无码日韩精品一区二区免费 | 国产偷录叫床高潮录音 | 在线一区二区三区 | 久久高清亚洲 | 欧美久久久久 | 草久久 | 国产精品久久久久不卡 | 二区三区av | 一区二区三区四区视频 | 久久精品综合 | 91欧美精品成人综合在线观看 | 国产精品美女久久久久aⅴ国产馆 | 91在线看| 成人深夜福利 | 天天草天天爱 | 国产精品资源在线 | 久久不卡日韩美女 | 国产精品污www一区二区三区 | 国产精品婷婷 | 日韩高清一区 | 在线观看a视频 | 色综合99| 夜夜爽99久久国产综合精品女不卡 | 亚洲国产成人av好男人在线观看 | 91国产在线视频在线 | 国产激情一区二区三区 | 久久久久国产一区二区三区四区 | 久久国产精品久久久久 | 国产精品毛片一区二区三区 | 超级乱淫av片免费播放 | 亚洲精品视频在线 | 久久久久久久久久久久久9999 | 欧美精品1区2区3区 精品国产欧美一区二区 | 99久久国产免费 |