<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機控制ISD1420實現(xiàn)選段播放功能的實現(xiàn)

          51單片機控制ISD1420實現(xiàn)選段播放功能的實現(xiàn)

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/201611/319371.htm

          程序原文:


          #i nclude
          #i nclude
          #i nclude
          #i nclude

          //硬件端口的定義
          #definePOWP3_7//此引腳為單片機控制一個三極管ISD1420供電

          #definePLP3_5//接ISD1420PLAYL
          #definePEP3_4//接ISD1420PLAYE
          #defineRECP3_3//接ISD1420REC

          #defineREC_LEDP3_2//ISD1420RECLED

          //操作模式的定義
          #definemode10xC8//循環(huán)放音操作,按一下PE鍵可循環(huán)放音,按PL鍵停止;或按PL鍵放音,松開即停止

          #definemode20xD0//按順序連續(xù)分段錄放音,每段語音長度不限
          #definemode30xC0//地址指針復(fù)位,開始錄放第一段
          #definemode40xD1//按PE鍵可快速選段放音

          //0xC1//也為地址指針復(fù)位

          unsignedcharRX_index=0;//
          bitFLAG_rev=0;//
          unsignedcharPC_COMMAND;
          unsignedcharRX_BUFFER[10];//串行接收緩存

          voidio_init(void);
          voidinit_serialcomm(void);
          voidserial_out(unsignedchard);
          voiddelay5ms(void);
          voiddelay(unsignedintx);
          voidnop(unsignedchari);

          voidpaly(unsignedchari);//選擇播放當(dāng)前段操作


          voidmain(void)
          {
          io_init();
          init_serialcomm();
          delay(1000);

          serial_out(0xaa);//發(fā)送到PC機,看看PC端是否收到正確數(shù)據(jù)
          serial_out(0x55);
          serial_out(0x33);

          POW=0;//開啟電源

          //P1=mode4;
          //P1=0X00;
          while(1)
          {

          }
          }

          //-----端口初始化
          voidio_init(void)
          {
          P1M0=0x00;//設(shè)置STC的IO為標(biāo)準(zhǔn)51IO模式
          P1M1=0x00;
          P3M0=0x00;
          P3M1=0x00;
          P1=0XFF;
          P3=0XFF;
          }

          //串行口初始化
          voidinit_serialcomm(void)
          {
          SCON=0x50;//SCON:serailmode1,8-bitUART,enableucvr

          TMOD=0x20;//TMOD:timer1,mode2,8-bitreload

          TH1=0xf3;//12MHz,2400bps
          TL1=0xf3;
          //IE|=0x90;//EnableSerialInterrupt

          TR1=1;//timer1run

          ES=1;
          EA=1;
          }

          //串行數(shù)據(jù)發(fā)送,查詢模式
          voidserial_out(unsignedchard)
          {
          ES=0;
          SBUF=d;while(TI==0){;}TI=0;
          ES=1;
          }

          //串行中斷接收
          voidreceive()interrupt4
          {
          if(RI)
          {
          RI=0;
          ES=0;
          PC_COMMAND=SBUF;

          //RX_BUFFER[RX_index]=PC_COMMAND;//保存數(shù)據(jù)到數(shù)組里面
          //RX_index++;
          switch(PC_COMMAND)
          {


          case0xa0:

          serial_out(0xa0);
          P1=mode2;//按順序連續(xù)分段錄放音,每段語音長度不限0xD0連續(xù)尋址,A4

          PE=0;
          nop(10);
          PE=1;

          P1=0XFF;

          break;

          case0xb0:
          serial_out(0xb0);
          P1=mode3;//地址指針復(fù)位0xC0

          nop(10);
          P1=0XFF;

          break;

          case0xc0://選段播放控制
          serial_out(0xc0);


          P1=0xD1;//第二步:快速選段放音


          P1_0=0;
          nop(10);
          P1_0=1;
          nop(10);


          PE=0;
          nop(10);
          PE=1;

          break;

          case0xd0:
          serial_out(0xd0);//播放任意段的組合
          paly(3);
          paly(1);
          paly(5);
          paly(5);
          paly(6);
          paly(4);
          paly(3);
          paly(6);
          paly(1);

          break;

          case0x30:
          serial_out(0x30);
          //此操作循環(huán)放音操作,按一下PE鍵可循環(huán)放音,按PL鍵停止;或按PL鍵放音,松開即停止
          //此操作沒什么用
          P1=mode1;

          PE=0;
          nop(10);
          PE=1;
          //
          break;

          default:break;
          }

          ES=1;
          }
          }


          voidpaly(unsignedchari)
          {
          i--;

          P1=mode3;//第一步:地址指針復(fù)位0xC0A7--A0:11000000(A2、A5在應(yīng)用中可直接接地)
          nop(10);
          //P1=0XFF;

          delay(30);//必要的延時

          if(i>0)
          {
          P1=0xD1;//第二步:快速選段放音0xD1A7--A0:11010001(A2、A5在應(yīng)用中可直接接地)
          do
          {
          P1_0=0;//給A0低電平脈沖
          nop(10);
          P1_0=1;
          nop(10);

          PE=0;
          nop(10);
          PE=1;

          delay(50);//這個延時是非常必要的!
          i--;
          }
          while(i!=0);

          delay(30);//必要的延時
          }


          P1=mode2;//第三步:播放當(dāng)前段0xD0A7--A0:11010000(A2、A5在應(yīng)用中可直接接地)

          PE=0;
          nop(10);
          PE=1;
          //P1=0XFF;

          while(REC_LED==1){;}//等待播放
          while(REC_LED==0){;}//等待播放結(jié)束

          }

          //----------------------------軟件延時函數(shù)----------------------------
          //50ms延時
          voiddelay5ms(void)
          {
          unsignedcharTempCyc=250;
          while(TempCyc--);
          }

          voiddelay(unsignedintx)
          {
          do
          {
          delay5ms();delay5ms();delay5ms();x--;
          }
          while(x!=0);
          }

          voidnop(unsignedchari)
          {
          do
          {
          _nop_();
          i--;
          }
          while(i!=0);
          }



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();