<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. 電子開(kāi)發(fā)網(wǎng)

      電子開(kāi)發(fā)網(wǎng)電子設(shè)計(jì) | 電子開(kāi)發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開(kāi)發(fā)網(wǎng) >> 電子開(kāi)發(fā) >> 單片機(jī) >> 正文

      單片機(jī)電子琴--Electronic organ

      作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2017/11/25

      單片機(jī)電子琴,Electronic organ

      關(guān)鍵字:AT89S51,電子琴電路圖

       
      1.  實(shí)驗(yàn)任務(wù)
      (1.       由4X4組成16個(gè)按鈕矩陣,設(shè)計(jì)成16個(gè)音。
      (2.       可隨意彈奏想要表達(dá)的音樂(lè)。
      2.電路原理圖
       
       
       
      3.系統(tǒng)板硬件連線
      (1.       把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPK IN端口上;
      (2.       把“單片機(jī)系統(tǒng)“區(qū)域中的P3.0-P3.7端口用8芯排線連接到“4X4行列式鍵盤(pán)”區(qū)域中的C1-C4 R1-R4端口上;
      4.  相關(guān)程序內(nèi)容
      (1.       4X4行列式鍵盤(pán)識(shí)別;
      (2.       音樂(lè)產(chǎn)生的方法;
      一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可。現(xiàn)在以單片機(jī)12MHZ晶振為例,例出高中低音符與單片機(jī)計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如下表所示
      音符
      頻率(HZ)
      簡(jiǎn)譜碼(T值)
       
      音符
      頻率(HZ)
      簡(jiǎn)譜碼(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
      下面我們要為這個(gè)音符建立一個(gè)表格,有助于單片機(jī)通過(guò)查表的方式來(lái)獲得相應(yīng)的數(shù)據(jù)
      低音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、音樂(lè)的音拍,一個(gè)節(jié)拍為單位(C調(diào))
      曲調(diào)值
      DELAY
       
      曲調(diào)值
      DELAY
      調(diào)4/4
      125ms
       
      調(diào)4/4
      62ms
      調(diào)3/4
      187ms
       
      調(diào)3/4
      94ms
      調(diào)2/4
      250ms
       
      調(diào)2/4
      125ms
      對(duì)于不同的曲調(diào)我們也可以用單片機(jī)的另外一個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成。
      下面就用AT89S51單片機(jī)產(chǎn)生一首“生日快樂(lè)”歌曲來(lái)說(shuō)明單片機(jī)如何產(chǎn)生的。
      在這個(gè)程序中用到了兩個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成的。其中T0用來(lái)產(chǎn)生音符頻率,T1用來(lái)產(chǎn)生音拍。
      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語(yǔ)言源程序
      #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:單片機(jī),電子琴,Electronic organ,電子琴電路圖  
      責(zé)任編輯:admin
      相關(guān)文章列表
      基于AT89C52單片機(jī)控制的雙軸太陽(yáng)自動(dòng)跟蹤系統(tǒng)設(shè)計(jì)
      ESP32單片機(jī)入門(mén)篇
      超聲波測(cè)距+溫度+報(bào)警的單片機(jī)代碼_51單片機(jī)超聲波測(cè)距C語(yǔ)言程序
      七段數(shù)碼管顯示原理研究_數(shù)碼管顯示0~9對(duì)應(yīng)的段碼
      單片機(jī)C語(yǔ)言編程入門(mén)教程  流水燈程序示例
      基于51單片機(jī)—多功能秒表,多功能計(jì)時(shí)器C語(yǔ)言程序
      STC89C52單片機(jī)數(shù)字電流表電壓表源碼與電路圖  51單片機(jī)電流電壓
      自學(xué)stm32單片機(jī)四個(gè)步驟,實(shí)用又高效!
      先學(xué)51還是先學(xué)STM32?STM32和51單片機(jī)的區(qū)別
      單片機(jī)最小系統(tǒng)介紹及電路設(shè)計(jì) STM32單片機(jī)最小系統(tǒng)
      什么是PIC單片機(jī)
      為什么51單片機(jī)的晶振一般使用11.0592? 51單片機(jī)常用波特率初值表
      51單片機(jī)寄存器功能一覽表
      單片機(jī)寫(xiě)延時(shí)程序的幾種方法
      自學(xué)單片機(jī)編程之中斷與時(shí)鐘程序
      哈佛結(jié)構(gòu)與馮·諾伊曼結(jié)構(gòu)區(qū)別以及X86體系
      單片機(jī)萬(wàn)年歷:公歷日期與農(nóng)歷日期的相互轉(zhuǎn)換程序
      AVR定時(shí)器1的CTC模式設(shè)置
      單片機(jī)超聲波視覺(jué)識(shí)別系統(tǒng)的測(cè)量軟件開(kāi)發(fā),超聲波測(cè)距
      LCD1602的單片機(jī)驅(qū)動(dòng)詳解
      請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱(chēng):
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評(píng)論
      最新推薦
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁(yè)面
      下到頁(yè)底
      晶體管查詢(xún)
      主站蜘蛛池模板: 亚洲av无码国产综合专区| 丁香伊人五月综合激激激| 国产精品综合久久第一页| 国产成人亚洲综合| 亚洲av日韩综合一区在线观看| 亚洲综合色7777情网站777| 亚洲av综合av一区二区三区| 国产成人99久久亚洲综合精品| 久久久综合九色合综国产| 99久久国产亚洲综合精品| 97久久婷婷五月综合色d啪蜜芽 | 久久久综合九色合综国产| 天天综合天天综合色在线| 91久久婷婷国产综合精品青草| 天天做.天天爱.天天综合网| heyzo专区无码综合| 婷婷激情狠狠综合五月| 色综合天天综合中文网| 久久久综合亚洲色一区二区三区 | 久久伊人久久亚洲综合| 九九综合九九综合| 热综合一本伊人久久精品| 亚洲国产成人综合| 国产精品综合AV一区二区国产馆| 熟女少妇色综合图区| 色欲香天天综合网无码| 狠狠做深爱婷婷久久综合一区| 婷婷色香五月激情综合2020| 亚洲AV日韩综合一区尤物| 久久精品水蜜桃av综合天堂| 久久久久久久综合日本亚洲 | 中文字幕亚洲综合久久2| 久久综合噜噜激激的五月天| 青青热久久综合网伊人| 久久综合中文字幕| 中文网丁香综合网| 国产成人亚洲综合无码| 亚洲精品综合一二三区在线| 日韩综合在线观看| 久久99亚洲综合精品首页| 狠狠色狠狠色综合网|