<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      單片機電子琴--Electronic organ

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2017-11-25

      單片機電子琴,Electronic organ

      關鍵字:AT89S51,電子琴電路圖

       
      1.  實驗任務
      (1.       由4X4組成16個按鈕矩陣,設計成16個音。
      (2.       可隨意彈奏想要表達的音樂。
      2.電路原理圖
       
       
       
      3.系統板硬件連線
      (1.       把“單片機系統”區域中的P1.0端口用導線連接到“音頻放大模塊”區域中的SPK IN端口上;
      (2.       把“單片機系統“區域中的P3.0-P3.7端口用8芯排線連接到“4X4行列式鍵盤”區域中的C1-C4 R1-R4端口上;
      4.  相關程序內容
      (1.       4X4行列式鍵盤識別;
      (2.       音樂產生的方法;
      一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可。現在以單片機12MHZ晶振為例,例出高中低音符與單片機計數T0相關的計數值如下表所示
      音符
      頻率(HZ)
      簡譜碼(T值)
       
      音符
      頻率(HZ)
      簡譜碼(T值)
      低1 DO
      262
      63628
      # 4 FA#
      740
      64860
      #1 DO#
      277
      63731
      中5 SO
      784
      64898
      低2 RE
      294
      63835
      # 5 SO#
      831
      64934
      #2 RE#
      311
      63928
      中6 LA
      880
      64968
      低3 M
      330
      64021
      # 6
      932
      64994
      低4 FA
      349
      64103
      中7 SI
      988
      65030
      # 4 FA#
      370
      64185
      高1 DO
      1046
      65058
      低5 SO
      392
      64260
      # 1 DO#
      1109
      65085
      # 5 SO#
      415
      64331
      高2 RE
      1175
      65110
      低6 LA
      440
      64400
       
      # 2 RE#
      1245
      65134
      # 6
      466
      64463
      高3 M
      1318
      65157
      低7 SI
      494
      64524
      高4 FA
      1397
      65178
      中1 DO
      523
      64580
      # 4 FA#
      1480
      65198
      # 1 DO#
      554
      64633
      高5 SO
      1568
      65217
      中2 RE
      587
      64684
      # 5 SO#
      1661
      65235
      # 2 RE#
      622
      64732
      高6 LA
      1760
      65252
      中3 M
      659
      64777
      # 6
      1865
      65268
      中4 FA
      698
      64820
      高7 SI
      1967
      65283
      下面我們要為這個音符建立一個表格,有助于單片機通過查表的方式來獲得相應的數據
      低音0-19之間,中音在20-39之間,高音在40-59之間
      TABLE:        DW 0,63628,63835,64021,64103,64260,64400,64524,0,0
                         DW 0,63731,63928,0,64185,64331,64463,0,0,0
                         DW 0,64580,64684,64777,64820,64898,64968,65030,0,0
                         DW 0,64633,64732,0,64860,64934,64994,0,0,0
                         DW 0,65058,65110,65157,65178,65217,65252,65283,0,0
                         DW 0,65085,65134,0,65198,65235,65268,0,0,0
                         DW 0
      2、音樂的音拍,一個節拍為單位(C調)
      曲調值
      DELAY
       
      曲調值
      DELAY
      調4/4
      125ms
       
      調4/4
      62ms
      調3/4
      187ms
       
      調3/4
      94ms
      調2/4
      250ms
       
      調2/4
      125ms
      對于不同的曲調我們也可以用單片機的另外一個定時/計數器來完成。
      下面就用AT89S51單片機產生一首“生日快樂”歌曲來說明單片機如何產生的。
      在這個程序中用到了兩個定時/計數器來完成的。其中T0用來產生音符頻率,T1用來產生音拍。
      5.程序框圖
       
       
       
       
      6.匯編源程序
      KEYBUF      EQU 30H
      STH0        EQU 31H
      STL0        EQU 32H
      TEMP        EQU 33H
                  ORG 00H
                  LJMP START
                  ORG 0BH
                  LJMP INT_T0
      START:      MOV TMOD,#01H
                  SETB ET0
                  SETB EA
      WAIT:  
                  MOV P3,#0FFH
                  CLR P3.4
                  MOV A,P3
                  ANL A,#0FH 
                  XRL A,#0FH
                  JZ NOKEY1
                  LCALL DELY10MS
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY1
                  MOV A,P3
                  ANL A,#0FH
                  CJNE A,#0EH,NK1
                  MOV KEYBUF,#0
                  LJMP DK1
      NK1:        CJNE A,#0DH,NK2
                  MOV KEYBUF,#1
                  LJMP DK1
      NK2:        CJNE A,#0BH,NK3
                  MOV KEYBUF,#2
                  LJMP DK1
      NK3:        CJNE A,#07H,NK4
                  MOV KEYBUF,#3
                  LJMP DK1
      NK4:        NOP
      DK1:   
                  MOV A,KEYBUF
                  MOV DPTR,#TABLE
                  MOVC A,@A+DPTR
                  MOV P0,A
                  MOV A,KEYBUF
                  MOV B,#2
                  MUL AB
                  MOV TEMP,A
                  MOV DPTR,#TABLE1
                  MOVC A,@A+DPTR
                  MOV STH0,A
                  MOV TH0,A
                  INC TEMP
                  MOV A,TEMP
                  MOVC A,@A+DPTR
                  MOV STL0,A
                  MOV TL0,A
                  SETB TR0
       
      DK1A:       MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JNZ DK1A
                  CLR TR0
      NOKEY1:
                  MOV P3,#0FFH
                  CLR P3.5
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY2
                  LCALL DELY10MS
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY2
                  MOV A,P3
                  ANL A,#0FH
                  CJNE A,#0EH,NK5
                  MOV KEYBUF,#4
                  LJMP DK2
      NK5:        CJNE A,#0DH,NK6
                  MOV KEYBUF,#5
                  LJMP DK2
      NK6:        CJNE A,#0BH,NK7
                  MOV KEYBUF,#6
                  LJMP DK2
      NK7:        CJNE A,#07H,NK8
                  MOV KEYBUF,#7
                  LJMP DK2
      NK8:        NOP
      DK2:   
                  MOV A,KEYBUF
                  MOV DPTR,#TABLE
                  MOVC A,@A+DPTR
                  MOV P0,A
                  MOV A,KEYBUF
                  MOV B,#2
                  MUL AB
                  MOV TEMP,A
                  MOV DPTR,#TABLE1
                  MOVC A,@A+DPTR
                  MOV STH0,A
                  MOV TH0,A
                  INC TEMP
                  MOV A,TEMP
                  MOVC A,@A+DPTR
                  MOV STL0,A
                  MOV TL0,A
                  SETB TR0
      DK2A:       MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JNZ DK2A
                  CLR TR0
      NOKEY2:
                  MOV P3,#0FFH
                  CLR P3.6
                  MOV A,P3
                  ANL A,#0FH
           &nbsnbsp;      XRL A,#0FH
                  JZ NOKEY3
                  LCALL DELY10MS
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY3
                  MOV A,P3
                  ANL A,#0FH
                  CJNE A,#0EH,NK9
                  MOV KEYBUF,#8
                  LJMP DK3
      NK9:        CJNE A,#0DH,NK10
                  MOV KEYBUF,#9
                  LJMP DK3
      NK10:       CJNE A,#0BH,NK11
                  MOV KEYBUF,#10
                  LJMP DK3
      NK11:       CJNE A,#07H,NK12
                  MOV KEYBUF,#11
                  LJMP DK3
      NK12:       NOP
      DK3:
                  MOV A,KEYBUF
                  MOV DPTR,#TABLE
                  MOVC A,@A+DPTR
                  MOV P0,A
                  MOV A,KEYBUF
                  MOV B,#2
                  MUL AB
                  MOV TEMP,A
                  MOV DPTR,#TABLE1
                  MOVC A,@A+DPTR
                  MOV STH0,A
                  MOV TH0,A
                  INC TEMP
                  MOV A,TEMP
                  MOVC A,@A+DPTR
                  MOV STL0,A
                  MOV TL0,A
                  SETB TR0
       
      DK3A:       MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JNZ DK3A
                  CLR TR0
      NOKEY3:
                  MOV P3,#0FFH
                  CLR P3.7
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY4
                  LCALL DELY10MS
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY4
                  MOV A,P3
                  ANL A,#0FH
                  CJNE A,#0EH,NK13
                  MOV KEYBUF,#12
                  LJMP DK4
      NK13:       CJNE A,#0DH,NK14
                  MOV KEYBUF,#13
                  LJMP DK4
      NK14:       CJNE A,#0BH,NK15
                  MOV KEYBUF,#14
                  LJMP DK4
      NK15:       CJNE A,#07H,NK16
                  MOV KEYBUF,#15
                  LJMP DK4
      NK16:       NOP
      DK4:   
                  MOV A,KEYBUF
                  MOV DPTR,#TABLE
                  MOVC A,@A+DPTR
                  MOV P0,A
                  MOV A,KEYBUF
                  MOV B,#2
                  MUL AB
                  MOV TEMP,A
                  MOV DPTR,#TABLE1
                  MOVC A,@A+DPTR
                  MOV STH0,A
                  MOV TH0,A
                  INC TEMP
                  MOV A,TEMP
                  MOVC A,@A+DPTR
                  MOV STL0,A
                  MOV TL0,A
                  SETB TR0
      DK4A:       MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JNZ DK4A
                  CLR TR0
      NOKEY4:
                  LJMP WAIT
      DELY10MS:
                  MOV R6,#10
      D1:         MOV R7,#248
                  DJNZ R7,$
                  DJNZ R6,D1
                  RET
      INT_T0:
                  MOV TH0,STH0
                  MOV TL0,STL0
                  CPL P1.0
                  RETI
      TABLE:      DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
                  DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
       
      TABLE1:     DW 64021,64103,64260,64400
                  DW 64524,64580,64684,64777
                  DW 64820,64898,64968,65030
                  DW 65058,65110,65157,65178
                  END
      7.  C語言源程序
      #include
      unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
                                  0x66,0x6d,0x7d,0x07,
                                  0x7f,0x6f,0x77,0x7c,
                                  0x39,0x5e,0x79,0x71};
      unsigned char temp;
      unsigned char key;
      unsigned char i,j;
      unsigned char STH0;
      unsigned char STL0;
      unsigned int code tab[]={64021,64103,64260,64400,
                                64524,64580,64684,64777,
                                64820,64898,64968,65030,
                                65058,65110,65157,65178};
      void main(void)
      {
        TMOD=0x01;
        ET0=1;
        EA=1;
        while(1)
          {
            P3=0xff;
            P3_4=0;
            temp=P3;
            temp=temp & 0x0f;
            if (temp!=0x0f)
              {
                for(i=50;i>0;i--)
                for(j=200;j>0;j--);
                temp=P3;
                temp=temp & 0x0f;
                if (temp!=0x0f)
                  {
                    temp=P3;
                    temp=temp & 0x0f;             
                    switch(temp)
                      {
                        case 0x0e:
                          key=0;
                          break;
                        case 0x0d:
                          key=1;
                          break;
                        case 0x0b:
                          key=2;
                          break;
                        case 0x07:
                          key=3;
                          break;
                      }
                    temp=P3;
                    P1_0=~P1_0;
                    P0=table[key];
                    STH0=tab[key]/256;
                    STL0=tab[key]%256;
                    TR0=1;
                    temp=temp & 0x0f;             
                    while(temp!=0x0f)
                      {
                        temp=P3;
                        temp=temp & 0x0f;             
                      }
                    TR0=0;
                  }
              }
       
            P3=0xff;
            P3_5=0;
            temp=P3;
            temp=temp & 0x0f;
            if (temp!=0x0f)
              {
                for(i=50;i>0;i--)
                for(j=200;j>0;j--);
                temp=P3;
                temp=temp & 0x0f;
                if (temp!=0x0f)
                  {
                    temp=P3;
                    temp=temp & 0x0f;             
                    switch(temp)
                      {
                        case 0x0e:
                          key=4;
                          break;
                        case 0x0d:
                          key=5;
                          break;
                        case 0x0b:
                          key=6;
                          break;
                        case 0x07:
                          key=7;
                          break;
                      }
                    temp=P3;
                    P1_0=~P1_0;
                    P0=table[key];
                    STH0=tab[key]/256;
                    STL0=tab[key]%256;
                    TR0=1;
                    temp=temp & 0x0f;             
                    while(temp!=0x0f)
                      {
                        temp=P3;
                        temp=temp & 0x0f;             
                      }
                    TR0=0;
                  }
              }
       
            P3=0xff;
            P3_6=0;
            temp=P3;
            temp=temp & 0x0f;
            if (temp!=0x0f)
              {
                for(i=50;i>0;i--)
                for(j=200;j>0;j--);
                temp=P3;
                temp=temp & 0x0f;
                if (temp!=0x0f)
                  {
                    temp=P3;
                    temp=temp & 0x0f;             
                    switch(temp)
                      {
                        case 0x0e:
                          key=8;
                          break;
                        case 0x0d:
                          key=9;
                          break;
                        case 0x0b:
                          key=10;
                          break;
                        case 0x07:
                          key=11;
                          break;
                      }
                    temp=P3;
                    P1_0=~P1_0;
                    P0=table[key];
                    STH0=tab[key]/256;
                    STL0=tab[key]%256;
                    TR0=1;
                    temp=temp & 0x0f;             
                    while(temp!=0x0f)
                      {
                        temp=P3;
                        temp=temp & 0x0f;             
                      }
                    TR0=0;
                  }
              }
            P3=0xff;
            P3_7=0;
            temp=P3;
            temp=temp & 0x0f;
            if (temp!=0x0f)
              {
                for(i=50;i>0;i--)
                for(j=200;j>0;j--);
                temp=P3;
                temp=temp & 0x0f;
                if (temp!=0x0f)
                  {
                    temp=P3;
                    temp=temp & 0x0f;             
                    switch(temp)
                      {
                        case 0x0e:
                          key=12;
                          break;
                        case 0x0d:
                    &nbs, , , p;     key=13;
                          break;
                        case 0x0b:
                          key=14;
                          break;
                        case 0x07:
                          key=15;
                          break;
                      }
                    temp=P3;
                    P1_0=~P1_0;
                    P0=table[key];
                    STH0=tab[key]/256;
                    STL0=tab[key]%256;
                    TR0=1;
                    temp=temp & 0x0f;             
                    while(temp!=0x0f)
                      {
                        temp=P3;
                        temp=temp & 0x0f;             
                      }
                    TR0=0;
                  }
              }     
          }
      }
       
      void t0(void) interrupt 1 using 0
      {
        TH0=STH0;
        TL0=STL0;
        P1_0=~P1_0;
      }
      Tags:單片機,電子琴,Electronic organ,電子琴電路圖  
      責任編輯:admin
    4. 上一篇文章:
    5. 下一篇文章: 沒有了
    6. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 一本久道综合色婷婷五月| 亚洲综合伊人久久大杳蕉| 精品亚洲综合久久中文字幕| 精品久久综合1区2区3区激情 | 亚洲国产综合精品中文字幕| 久久久综合香蕉尹人综合网| 色综合天天综合网国产成人网| 天天av天天翘天天综合网| 亚洲国产成人久久综合野外| 亚洲综合激情视频| 中文字幕久久综合| 狠狠综合亚洲综合亚洲色| 亚洲人成依人成综合网 | 91精品国产综合久久青草| 婷婷综合激情五月中文字幕| 久久久久综合国产| 综合久久国产九一剧情麻豆| 综合偷自拍亚洲乱中文字幕| AV狠狠色丁香婷婷综合久久| 久久综合九色综合91| 国产精品综合色区在线观看| 国产精品综合一区二区三区| 六月婷婷缴清综合在线| 91精品国产综合久久香蕉| 一本久久a久久精品vr综合| 久久久久亚洲AV综合波多野结衣| 天天色天天操综合网| 色婷婷狠狠久久综合五月| 欧美日韩综合一区二区三区| 久久综合久综合久久鬼色| 激情五月婷婷综合| 一本一道久久综合久久| 综合久久久久久中文字幕| 亚洲av日韩综合一区久热| 五月天婷五月天综合网在线| 狠狠综合视频精品播放| 99久久综合狠狠综合久久止| 亚洲精品天天影视综合网| 婷婷色中文字幕综合在线| 国产婷婷综合在线视频中 | 区三区激情福利综合中文字幕在线一区亚洲视频1 |