在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

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

      51單片機控制ISD1420實現選段播放功能的實現

      作者: 時間:2016-11-21 來源:網絡 收藏

      本文引用地址:http://www.biyoush.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//地址指針復位,開始錄放第一段
      #definemode40xD1//按PE鍵可快速選段放音

      //0xC1//也為地址指針復位

      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);//選擇播放當前段操作


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

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

      POW=0;//開啟電源

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

      }
      }

      //-----端口初始化
      voidio_init(void)
      {
      P1M0=0x00;//設置STC的IO為標準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;
      }

      //串行數據發(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;//保存數據到數組里面
      //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;//地址指針復位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;//第一步:地址指針復位0xC0A7--A0:11000000(A2、A5在應用中可直接接地)
      nop(10);
      //P1=0XFF;

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

      if(i>0)
      {
      P1=0xD1;//第二步:快速選段放音0xD1A7--A0:11010001(A2、A5在應用中可直接接地)
      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;//第三步:播放當前段0xD0A7--A0:11010000(A2、A5在應用中可直接接地)

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

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

      }

      //----------------------------軟件延時函數----------------------------
      //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);
      }



      評論


      技術專區(qū)

      關閉