• <rp id="wfxtb"><acronym id="wfxtb"></acronym></rp><em id="wfxtb"></em><dd id="wfxtb"><big id="wfxtb"><video id="wfxtb"></video></big></dd>
  • <rp id="wfxtb"></rp>

    <mark id="wfxtb"><center id="wfxtb"></center></mark>

      <rp id="wfxtb"><span id="wfxtb"><u id="wfxtb"></u></span></rp>

      <rp id="wfxtb"><object id="wfxtb"></object></rp>

      注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! 打開購物車 查看留言付款方式聯系我們
      初中電子 單片機教材一 單片機教材二
      搜索上次看見的商品或文章:
      商品名、介紹 文章名、內容
      首頁 電子入門 學單片機 免費資源 下載中心 商品列表 象棋在線 在線繪圖 加盟五一 加入收藏 設為首頁
      本站推薦:
      89C51-ISD4000語音單片機通用開發板
      文章長度[] 加入時間[2008/3/30] 更新時間[2025/7/1 15:39:04] 級別[0] [評論] [收藏]

      89C51-ISD4000語音單片機通用開發板

        本板采用國內最常用的MCS-51語言單片機89C51,與最新的ISD4000系列語音芯片結合,可供用戶開發各種最新的智能型數碼語音產品。

      一、 結構

      89C51-ISD4000語音電路程序AT89C51單片機
      板上已裝配好:
      89C51--單片機,8031內核,4K可反復擦寫的程序存儲器,32條I/O口,5V工作
      ISD4003-08--語音芯片,音質優異的模擬存儲技術,可反復錄放,8分鐘,可分1200段,SPI接口方式,3V供電
      LM386--功率放大器,0.5W驅動
      24C01(選配件)--I2C總線串行存儲器。
      還有駐極體話筒(MIC)、話筒放大器、音量電位器、發光管等部件。 二、 性能參數
      外接電源電壓:5V(穩壓)
      外接喇叭:4-16歐姆,0 .5W
      工作電流:25~30mA ( 錄音),50~80mA (放音)
      靜態電流:13mA
      隨板提供的演示程序功能:
      1、錄音
      跳線插在"REC"一側是錄音狀態,按住"AN"鍵不放,指示燈亮即可對著板上話筒講話錄音,松鍵時錄音停止并形成一段。再按則錄下一段。按"STOP"鍵為復位,再錄音時又從第一段開始。
      2、放音
      跳線插在"PLAY"一側是放音狀態,按一下"AN"鍵即播放一段,一段結束后自動停止放音,再按"AN"則播放下一段
      按"STOP"鍵為復位,再放音時又從第一段開始。

      89C51-ISD4000語音電路程序AT89C51單片機
      89C51單片機12MHz
      注:本程序為ISD4002、4003的控制程序,ISD4004的程序須加些改動,請注意程序后邊的注釋。
      SS EQU P1.0 ;片選
      SCLK EQU P1.1 ;ISD4003時鐘
      MOSI EQU P1.2 ;數據輸入
      MISO EQU P1.3 ;數據輸出
      LED EQU P1.7 ;指示燈
      INT EQU INT0 ;中斷
      AN EQU P1.6 ;執行
      STOP EQU P1.5 ;復位
      PR EQU P1.4 ;PR=1錄音 PR=0放音
      ;初始化
      ORG 0000H ;
      AJMP MAIN ;
      MAIN: MOV SP,#10H ;
      MOV P1,#0FFH ;
      MOV P2,#0FFH ;
      MOV P3,#0FFH ;
      MOV P0,#0FFH ;
      CLR EA ;
      MAII: SETB LED ;關指示燈
      ACALL DSTOP ;ISD掉電
      MAS0: MOV 3AH,#200 ;
      MAS1: JB AN,MAS0 ;等按AN鍵
      DJNZ 3AH,MAS1 ;
      ACALL UP ;ISD上電
      MOV 20H,#00H ;ISD低位地址
      MOV 21H,#00H ;ISD高位地址
      JB PR,REC ;PR=1 錄音
      AJMP PLAY ;PR=0 放音
      ;SETREC 16位
      ;從指定地址錄音 10100 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >
      REC: MOV A,20H ;發地址 A7-A0
      ACALL ISDX ;
      MOV A,21H ;發地址 A9-A8
      SETB ACC.7 ;
      CLR ACC.6 ;
      SETB ACC.5 ;
      CLR ACC.4 ;
      CLR ACC.3 ;
      ACALL ISDX ;
      SETB SS ;關片選
      ;REC 8位
      ;從當前地址錄音 10110 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >
      REC1: MOV 36H,#10 ;
      REC2: ACALL YS50 ;延時錄音
      DJNZ 36H,REC2 ;
      CLR LED ;開指示燈
      MOV A,#0B0H ;發 1011 0XXX
      ACALL ISDX ;
      SETB SS ;關片選
      REC3: MOV 35H,#200 ;
      REC4: JNB INT,REC7 ;OVF=0芯片溢出
      JNB AN,REC3 ;
      DJNZ 35H,REC4 ;
      SETB LED ;關指示燈
      ACALL STOPP ;停止當前操作
      REC5: JNB STOP,REC6 ;中斷RESET
      JB AN,REC5 ;等待AN=0
      ACALL STOPP ;停止當前操作
      AJMP REC1 ;
      REC6: CLR SCLK ;時鐘SCLK=0
      SETB SS ;關片選
      ACALL STOPP ;停止當前操作
      AJMP MAII ;
      REC7: SETB LED ;關指示燈
      MOV 36H,#15 ;
      REC8: ACALL YS50 ;延時錄音
      JB AN,REC6 ;等待AN=1
      DJNZ 36H,REC8 ;
      CLR LED ;
      MOV 36H,#15 ;
      REC9: ACALL YS50 ;延時錄音
      JB AN,REC6 ;等待AN=1
      DJNZ 36H,REC9 ;
      AJMP REC7 ;
      ;SETPLAY 16位
      ;從指定地址放音 11100 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >
      PLAY: JNB AN,PLAY ;等待AN=1
      MOV A,20H ;發地址 A7-A0
      ACALL ISDX ;
      MOV A,21H ;發地址 A9-A8
      SETB ACC.7 ;
      SETB ACC.6 ;
      SETB ACC.5 ;
      CLR ACC.4 ;
      CLR ACC.3 ;
      ACALL ISDX ;
      SETB SS ;關片選
      ;PLAY 8位
      ;從當前地址放音 11110 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >
      PLAY1: CLR LED ;LED開指示燈
      MOV A,#0F0H ;發 11110 XXXXXXXX
      ACALL ISDX ;發 << SETPLAY >>
      SETB SS ;關片選
      PLAY2: JNB STOP,REC6 ;STOP=0停止放音
      JB INT,PLAY2 ;無OVF EOM繼續放音
      SETB LED ;關指示燈
      ACALL STOPP ;停止當前操作
      ;檢測OVF
      CLR SS ;開片選
      CLR SCLK ;時鐘SCLK=0
      SETB SCLK ;時鐘SCLK=1
      JB MISO,REC6 ;芯片到未
      CLR SCLK ;時鐘SCLK=0
      SETB SS ;關片選
      ACALL STOPP ;停止當前操作
      PLAY3: JNB STOP,REC6 ;中斷放音
      JB AN,PLAY3 ;等待AN=0
      AJMP PLAY1 ;順序放音
      ;ISD上電 << POWERUP >>
      UP: MOV A,#20H ;發00100 XXXXXXXXXXX
      ACALL ISDX ;
      SETB SS ;關片選
      ACALL YS50 ;50mS延時
      ACALL YS50 ;50mS延時
      RET ;
      ;停止當前操作<< STOP >> 8位
      STOPP: MOV A,#30H ;發 0X11 0XXX
      ACALL ISDX ;
      SETB SS ;關片選
      ACALL YS50 ;50mS延時
      ACALL YS50 ;50mS延時
      RET ;
      ;停止當前操作掉電<< STOPPWRDN >> 8位
      DSTOP: MOV A,#10H ;發0X010 XXXXXXXXXX
      ACALL ISDX ;
      SETB SS ;關片選
      ACALL YS50 ;50mS延時
      ACALL YS50 ;50mS延時
      RET ;
      ;ISD3300,4003 SPI寫入程序 8位 數據在A
      ISDX: CLR SS ;開片選
      MOV R6,#8 ;
      CLR SCLK ;時鐘SCLK=0
      ISD1: MOV C,ACC.0 ;
      MOV MOSI,C ;數據寫 MOSI
      SETB SCLK ;時鐘SCLK=1
      RR A ;
      CLR SCLK ;時鐘SCLK=0
      DJNZ R6,ISD1 ;
      RET ;
      ;**** 10mS延時 ****
      YS1: MOV TMOD,#01H ;
      MOV TH0,#0D8H ;10mS延時初值置入
      MOV TL0,#0F0H ;(65536-X)*1=10MS
      SETB TR0 ;65536-(10000/1)=D8F0H
      JNB TF0,$ ;
      CLR TF0 ;
      CLR TR0 ;
      RET ;
      ;**** 50mS延時 ****
      YS50: MOV TMOD,#01H ;
      MOV TH0,#3CH ;50mS延時初值置入
      MOV TL0,#0B0H ;(65536-X)*1=50MS
      SETB TR0 ;65536-(50000/1)
      JNB TF0,$ ;
      CLR TF0 ;
      CLR TR0 ;
      RET ;
      END ;

      附:ISD4004的程序改動注明:
      SETREC: ;指定地址錄音
      MOV 20H,#00H ;低八為地址
      MOV 21H,#00H ;高八位地址
      MOV 22H,#0a0H ;操作碼
      MOV A,20H
      ACALL ISDX
      MOV A,21H
      ACALL ISDX
      MOV A,22H
      ACALL ISDX
      SETB SS
      指定地址錄音(SETPLAY)和指定地址快進(SETMC)的改動與上述相同

      ISD4000-89c51開發板C程序示例

      //*****************************************************
      //      ISD4002-89c51開發板演示例程    C51版本        *
      //              作者:中青世紀       Lell             *
      //                     2008.2.27                      *
      //                                                    *
      //      更多ISD4000使用心得請登陸中青世紀論壇         *
      //        http://www.atvoc.com/bbs                    *
      //                                                    *
      //*****************************************************
      #include <reg51.h>
      sbit SS   =     P1^0;              //片選
      sbit SCLK =     P1^1;              //ISD4003時鐘
      sbit MOSI =     P1^2;              //數據輸入
      sbit MISO =     P1^3;              //數據輸出
      sbit LED =     P1^7;              //指示燈
      sbit ISD_INT=   P3^2;           //中斷
      sbit AN =     P1^6;              //執行
      sbit STOP =     P1^5;             //復位
      sbit PR =     P1^4;              //PR=1錄音? PR=0放音
      void    delay(unsigned int time)   //延遲n微秒
      {
      while(time!=0)
      {
      time-- ;
      }
      }
      void     delayms(unsigned int time)    //延遲n毫秒
      {    TMOD=0x01;

          for(time;time>0;time--)
      {
      TH0=0xfc;
      TL0=0x18;
      TR0=1;
      while(TF0!=1)
      {;}
      TF0=0;
      TR0=0;
      }

      }

      //************************************
      //ISD4002 spi串行發送子程序,8位數據
      //************************************
      void spi_send(unsigned char isdx)
      {   unsigned char isx_counter;
      SS=0;     //ss=0,打開spi通信端
      SCLK=0;
      for(isx_counter=0;isx_counter<8;isx_counter++) //先發低位再發高位,依次發送。
      { if ((isdx&0x01)==1)
      MOSI=1;
      else
      MOSI=0;
      isdx=isdx>>1;
      SCLK=1;
      delay(2);

         SCLK=0;
      delay(2);
      }
      }

      //*******************************
      //發送stop指令
      //*******************************
      void isd_stop(void)
      {   delay(10);
      spi_send(0x30);
      SS=1;
      delayms(50);
      }
      //*******************************
      //發送上電指令,并延遲50ms
      //*******************************
      void isd_pu(void)
      {  delay(10);
      SS=0;
      spi_send(0x20);
      SS=1;
      delayms(50);
      }
      //*******************************
      //發送掉電指令,并延遲50ms
      //*******************************

      void isd_pd(void)
      { delay(10);

           spi_send(0x10);
      SS=1;
      delayms(50);
      }
      //*******************************
      //發送play指令
      //*******************************
      void isd_play(void)
      {
      LED=0;
      spi_send(0xf0);
      SS=1;
      }
      //*******************************
      //發送rec指令
      //*******************************
      void isd_rec(void)
      {
      LED=0;
      spi_send(0xb0);
      SS=1;
      }
      //*******************************
      //發送setplay指令
      //*******************************
      void isd_setplay(unsigned char adl,unsigned char adh)

      {

      spi_send(adl);    //發送放音起始地址低位
      adh=adh||0xe0;
      spi_send(adh);   //發送放音起始地址高位
      SS=1;
      }
      //*******************************
      //發送setrec指令
      //*******************************
      void isd_setrec(unsigned char adl,unsigned char adh)
      {
      spi_send(adl);    //發送放音起始地址低位
      adh=adh||0xa0;
      spi_send(adh);    //發送放音起始地址高位
      SS=1;
      }
      //************************************
      //芯片溢出,LED閃爍提醒停止錄音
      //************************************
      void isd_overflow(void)
      {
      while(AN==0)
      {LED=1;
      delayms(300);
      LED=0;
      delayms(300);
      }

      }
      //************************************
      //檢查芯片是否溢出(讀OVF,并返回OVF值)
      //************************************
      unsigned char chk_isdovf(void)
      {
      SS=0;
      delay(2);
      SCLK=0;
      delay(2);
      SCLK=1;
      SCLK=0;
      delay(2);

      if (MISO==1)
      { SCLK=0;
      SS =1;     //關閉spi通信端
      isd_stop();     //發送stop指令
      return 1;     //OVF為1,返回1
      }
      else
      { SCLK=0;
      SS =1;         //關閉spi通信端
      isd_stop();     //發送stop指令
      return 0;     //OVF為0,返回0

      }
      }

      //************************************************************************
      //主程序
      //功能:1.錄音時,按住AN鍵,LED點亮開始錄音,松開AN即可停止錄音
      //    再次按下AN鍵,LED點亮開始錄第二段音,依次類推,直到芯片溢出。
      //     按stop鍵芯片復位
      //     2.放音時,按一下AN鍵,即播放一段語音。 按stop鍵芯片復位。
      //************************************************************************

      void main(void)
      {unsigned char ovflog;
      while(1)
      {
      P0=P1=P2=P3=0xff;  //初始化
      while (AN==1)     //等待AN鍵按下
      {
      if (AN==0)                 //按鍵防抖動
      {delayms(20);}
      }
      isd_pu();     //AN鍵按下,ISD上電并延遲50ms
      isd_pd();
      isd_pu();

          if (PR==1)     //如果PR=1則轉入錄音部分
      {
      delayms(500);     //延遲錄音

           isd_setrec(0x00,0x00);     //發送0x0000h地址的setplay指令
      do
      { isd_rec();    //發送rec指令
      while(AN==0)    //等待錄音完畢
      {if (ISD_INT==0)     //如果芯片溢出,進行LED閃爍提示,
      isd_overflow();    //如果取消錄音(松開AN鍵)則停止錄音,芯片復位
      }

           if (ISD_INT==0)

           break;
      LED=1;         //錄音完畢,LED熄滅
      isd_stop();     //發送停止命令
      while(AN==1)     //如果AN再次按下,開始錄制下一段語音
      {if(STOP==0)    //如果按下STOP按鍵,則芯片復位
      break;
      if (AN==0)
      delayms(500);
      }
      }while(AN==0);

          }
      else             //如果PR==0則轉入放音部分
      {
      while(AN==0){;}
      isd_setplay(0x00,0x00);     //發送setplay指令,從0x0000地址開始放音
      do
      { isd_play();            //發送放音指令
      delay(20);
      while(ISD_INT==1)         //等待放音完畢的EOM中斷信號
      {;}
      LED=1;
      isd_stop();         //放音完畢,發送stop指令

           if (ovflog=chk_isdovf())         //檢查芯片是否溢出 ,如溢出則停止放音,芯片復位
      break;
      while(AN==1)     //等待AN鍵再次按下
      {if (STOP==0)
      break;
      if(AN==0)
      delayms(20);
      }
      }while(AN==0);     // AN鍵再次按下,播放下一段語音
      }

      isd_stop();
      isd_pd();
      }
      }
      注意:與ISD4002/03不同的是,由于ISD4004芯片的語音地址是16位,在發送帶地址指令(如setplay,setrec,setmc)時,需要先發送兩個字節的地址信息,再發送一個字節的命令字,ISD4004的程序編寫與ISD4002/03的區別,僅此而已。
      例如,ISD4004的setplay指令程序應為:
      void isd_setplay(unsigned char adl,unsigned char adh)
      {
      delayms(1);
      spi_send(adl);     //發送放音起始地址低位
      delay(2);
      spi_send(adh);    //發送放音起始地址高位
      delay(2);
      spi_send(0xe0);    //發送setplay指令字節
      SS=1;
      }

      1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
      2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
      本站協議。 版權信息。 關于我們。 本站地圖。 營業執照。 發票說明。 付款方式。 聯系方式
      深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102
      E-mail:51dz$163.com($改為@);Tel:(0755)27947428
      工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389
      91嫩草黄片动漫版