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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主

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

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

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



系統設計

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



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




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

單元一: 4*4鍵盤矩陣

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

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




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


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

單元六:蜂鳴器電路

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



軟件設計

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

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

下面為數碼管顯示的程序,2.0為第一個鎖存器的使能端,首先通過給P0口賦值#07H,讓第一塊鎖存器的輸出值鎖定,選定四個數碼管顯示我們只使用第四個。然后關閉使能端,第二塊鎖存器的輸出控制一個數碼管的顯示數字。
通過查表法給數碼管送入不同的數值。
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   
下面是發出聲音的代碼:                 
MUSIC: MOV R3,#200
       MOV A,R7
       JZ KEY1
       LCALL FENGMING
       AJMPKEY1


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

L:      LCALL DELAY  ;延時去除抖動
         MOV  A,P1 ;重新取值
         JB  ACC.4,L1 ;P1.4這一列有鍵按下?沒有則跳轉到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  ;延時,穩定電路
          MOV  A,P1  ;取值
          ANL  A,#0FH  ;屏蔽高四位
         JB  ACC.0,Q2 ;判斷是不是第0行,不是則轉移
          MOV  R4,#00H  ;如果是,那把0送給R4(R4存行(轉換為鍵號))
         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  ;調整后放在R7寄存器中
          AJMP KEY1
DELAY: MOV R6,#20H  ;仿真時測試延時為13ms
Q6:      MOV  R5,#0BBH
              DJNZ R5,$
              DJNZ R6,Q6
              RET

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

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

下面為代碼中用到的三個表格,分別為數碼管顯示的表格和計數器高低位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


若有不足還請大家指出




評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩精品在线一区 | 国产精品一区二区三区在线 | 久久a久久 | av在线播放国产 | 午夜欧美一区二区三区在线播放 | 夜夜爽99久久国产综合精品女不卡 | 亚洲国产欧美91 | 91porn成人精品 | 亚洲国产一区二区三区在线观看 | 性色视频 | 成人精品免费视频 | 爱爱视频在线观看 | 久久久久久国产精品久久 | 欧美日韩91 | 激情 婷婷 | 激情视频网站 | 欧美mv日韩mv国产网站91进入 | 欧美精品一区在线观看 | 久久久久久亚洲欧洲 | 国产一区二区三区在线看 | 夜夜爽99久久国产综合精品女不卡 | 91视频91| 亚洲一区中文 | 久久躁日日躁aaaaxxxx | 久久久久久久国产精品影院 | 激情欧美一区二区三区中文字幕 | 久久国产一区二区三区 | 亚洲成人av | 国产玖玖| 日本在线精品视频 | 欧美xxxx性| 在线免费观看黄视频 | 中文字幕一区二区三区精彩视频 | 国产精品久久二区 | 亚洲精品国产成人 | 亚州视频在线 | av中文字幕网 | 日韩欧美专区 | 久久成人综合 | 久久在线视频 | 成人精品国产一区二区4080 |