跪求ISD1760语音模块程序

2020-01-20 19:01发布

我现在在做一个报价的模块其中关键是语音模块,可是没有学过现在在用希望哪位大侠能给点资料啊。。。。。。。。。。。。。。小弟菜鸟啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
KY1168
2020-01-21 02:57
#include "STC11F04E.H"       

#define uchar unsigned char
#define uint unsigned int
#define     K  P3_7
#define   PTT  P3_5

/*******ISD1700状态寄存器及各个标志位定义****/
unsigned char bdata SR0_L;//SR0寄存器
unsigned char bdata SR0_H;
unsigned char bdata SR1;//SR1寄存器
unsigned char APCL=0,APCH=0;
unsigned char PlayAddL=0,PlayAddH=0;
unsigned char RecAddL=0,RecAddH=0;

sbit CMD=SR0_L^0;  //SPI指令错误标志位
sbit FULL=SR0_L^1; //芯片存储空间满标志位
sbit PU=SR0_L^2;   //上电标志位
sbit EOM=SR0_L^3;  //EOM标志位
sbit INTT=SR0_L^4; //操作完成标志位
sbit RDY=SR1^0;    //准备接受指令标志?
sbit ERASE=SR1^1;  //擦除标志位?
sbit PLAY=SR1^2;   //播放标志位
sbit REC=SR1^1;    //录音标志位


/***************ISD1700指令函数声明**********/
unsigned char ISD_SendData(unsigned char dat);
unsigned char ISD_Devid (void);
void ISD_PU(void);
void ISD_STOP(void);
void ISD_Reset(void);
void ISD_Clr_Int(void);
void ISD_Rd_Status(void);
void ISD_Rd_Playptr(void);
void ISD_PD(void);
void ISD_Rd_Recptr(void);
void ISD_Play(void);
void ISD_Rec(void);
void ISD_Erase(void);
void ISD_G_Erase(void);
void ISD_Rd_APC(void);
void ISD_WR_APC2(unsigned char apcdatl,apcdath);
void ISD_WR_NVCFG(unsigned char apcdatl,apcdath);
void ISD_LD_NVCFG(void);
void ISD_FWD(void);
void ISD_CHK_MEN(void);
void ISD_EXTCLK(void);
void ISD_SET_PLAY(unsigned char Saddl,saddh,Eaddl,Eaddh);
void ISD_SET_Rec(unsigned char Saddl,saddh,Eaddl,Eaddh);
void ISD_SET_Erase(unsigned char Saddl,saddh,Eaddl,Eaddh);

//***********************端口定义*****************************///
sbit   SS=P1^4;
sbit  SCK=P1^5;
sbit MOSI=P1^6;
sbit MISO=P1^7;

sbit Key_AN=P3^2;

////*标志位定义*******************////
uchar bdata flag;

sbit PR_flag=flag^1;
sbit Erase_flag=flag^4;
sbit Stop_flag=flag^7;

////////*其它函数声明************//
void Cpu_Init(void);
void ISD_Init(void);
void ISDWORK(void);
void delay(unsigned int t);
/***************主函数*********************/


void main()
{

   uchar i;
   P3M1=0x80;         //        A0
   P3M0=0x00;
   K=0;
   PTT=0;
   Cpu_Init();          //初始化ISP端口
        delay(1);
   ISD_Init();          // 芯片初始化               
   while(1)
          {
                 if(Key_AN==0)
                   {
                          delay(10);
                            if(Key_AN==0)
                           {
                                //  K=1;
                               
                                  ISD_Init();

                                  flag=0x00;
                                  PR_flag=1;     //开始录音
                                  ISDWORK();
                                  PR_flag=0;                                 
                                 
                                  PTT=1;                 //开始播放
                                  ISDWORK();
                                  PTT=0;                                       
                        
                                  Erase_flag=1;         //删除所有
                                  ISDWORK();     
                                  Erase_flag=0;          
                       
                        //          Stop_flag=1;         //掉电
                        //          ISDWORK();  
                        //          Stop_flag=0;
                        //          delay(50);
                                  
                           }
                          while(Key_AN==0);
                //          K=0;

                  }
            }          
}



/************************函数原型:void IniCpuIO()
                         功能:CPU及系统变量初始化***********///
void Cpu_Init(void)
{
          SS=1;         //初始化ISP端口
         SCK=1;
        MOSI=1;
        MISO=1;
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式               
        TMOD=0x01;        //定时器0工作在方式1
        EA=0;                 //关中断
        flag=0;
}

/****************函数原型:void ISD_Init(void);
                 功能:系统初始化。************/
void ISD_Init(void)
{
        SS=1;
        SCK=1;
        MOSI=0;
        do
        {
                ISD_PU(); //上电
                delay(50);
                ISD_Rd_Status();
        }while(CMD||(!PU));                    
        //ISD_WR_APC2(0x40,0x04);           //出厂时默认为0x0440,低位在前,高位在后
        ISD_WR_APC2(0x80,0x04);                         //D3为打开本地监听
        do
        {
                ISD_Rd_Status();
        }        while(RDY==0);
        delay(100);
}
/**************函数原型:void ISDWORK(void)
                功能:对ISD1700进行的相关操作*******/               
void ISDWORK(void)
{
        uchar i;
        switch(flag)
          {
                case 0x00:         //放音
                           do
                            {
                                  ISD_Rd_Status();
                            }        while(RDY==0);
                           delay(10);
                           ISD_Play();
                           delay(2);
                           do
                            {
                                  ISD_Rd_Status();

                            } while(PLAY==1);
       
                             ISD_Clr_Int();
                           do
                            {
                                 ISD_Rd_Status();
                            }        while(RDY==0);
                           delay(10);
                           ISD_FWD();
                           do
                            {
                                  ISD_Rd_Status();
                            }        while(RDY==0);
                           break;
                case 0x02:                                   //录音程序
                           ISD_Clr_Int();  //清楚中断标志
                           do
                            {
                                   ISD_Rd_Status();        //读取寄存器状态内容
                            }        while(RDY==0);           //准备接受指令标志?
       
                           ISD_Rec();
                           do
                            {
                                  ISD_Rd_Status();
                                 /*
                                          if(FULL==1)        //芯片存储空间满标志位
                                  {
                                             for(i=3;i>0;i--)
                                             {
                                                         K=1;
                                                         delay(300);
                                                         K=0;
                                                     delay(200);
                                             }
                                   }   */
                             }while(Key_AN==0);         //等待铵键松开
                       ISD_Clr_Int();  //清楚中断标志
                           ISD_STOP();           //停止当前操作
                              break;

                case 0x10:
                           do
                            {
                                  ISD_Rd_Status();
                            }while(RDY==0);
                           delay(2);
                           ISD_G_Erase();        //删除全部内容
                           do
                            {
                                  ISD_Rd_Status();
                            }while(RDY==0);         
                                                                  
                       break;
                case 0x80:
                           ISD_Clr_Int();
                           ISD_STOP();
                           ISD_Reset();          
                           ISD_PD();         //掉电
                           break;
           }
}

/**************函数原型:unsigned char ISD_SendData(unsigned char dat);
                           功能:向CPU发送&读回数据******/
unsigned char ISD_SendData(unsigned char dat)
{
        unsigned char i,j,BUF_ISD=dat;
        SCK=1;
        SS=0;
        for(j=4;j>0;j--)
        {;}
        for(i=0;i<8;i++)
        {
                SCK=0;
                for(j=2;j>0;j--)
                {;}
                if(BUF_ISD&0x01)
                MOSI=1;
                else
                MOSI=0;
                BUF_ISD>>=1;
                if(MISO)
                BUF_ISD|=0x80;
                SCK=1;
                for(j=6;j>0;j--)
                {;}
        }
        MOSI=0;
        return(BUF_ISD);
}

/************函数原型:void ISD_STOP(void);
             功能:停止当前操作**********/
void ISD_STOP(void)
{
        ISD_SendData(0x02);
        ISD_SendData(0x00);
        SS=1;
}
/***********函数原型:void ISD_Reset(void);发送指令后需要延迟50ms
            功能:ISD1700复位****************/
void ISD_Reset(void)
{
        ISD_SendData(0x03);
        ISD_SendData(0x00);
        SS=1;
}

/*****************函数原型:void ISD_Clr_Int(void);
                  功能:清除中断标志**************/
void ISD_Clr_Int(void)
{
        ISD_SendData(0x04);
        ISD_SendData(0x00);
        SS=1;
}

/******************函数原型:void ISD_Rd_Status(void)
                   功能:读取状态寄存器内容********/
void ISD_Rd_Status(void)
{
        unsigned char i;
        ISD_SendData(0x05);
        ISD_SendData(0x00);
        ISD_SendData(0x00);
        SS=1;
        for(i=2;i>0;i--)
        {;}
        SR0_L=ISD_SendData(0x05);
    SR0_H=ISD_SendData(0x00);
        SR1=ISD_SendData(0x00);
        SS=1;
}

/**************** *函数原型:void ISD_Rd_PlayPtr(void)
                   功能:读取放音指针**************/
void ISD_Rd_Playptr(void)
{
        unsigned char i;
        ISD_SendData(0x06);
        ISD_SendData(0x00);
        ISD_SendData(0x00);
        ISD_SendData(0x00);
        SS=1;
        for(i=2;i>0;i--)
        {;}
        SR0_L=ISD_SendData(0x06);
        SR0_H=ISD_SendData(0x00);
        PlayAddL=ISD_SendData(0x00);
        PlayAddH=ISD_SendData(0x00);
        SS=1;
}

/******************函数原型:void iSD_PU(void);发送指令后需要延时50ms
                    功能:上电************************/
void ISD_PU(void)
  {
          ISD_SendData(0x01);
        ISD_SendData(0x00);
        SS=1;
  }

/******************函数原型:void iSD_PD(void);发送指令后需要延时50ms
                    功能:下电************************/
void ISD_PD(void)
  {
          ISD_SendData(0x07);
        ISD_SendData(0x00);
        SS=1;
  }

/**************函数原型:void ISD_Rd_RecPtr(void);
               功能:读取录音指针*****************/
void ISD_Rd_Recptr(void)
{
        unsigned char i;
        ISD_SendData(0x08);
        ISD_SendData(0x00);
        ISD_SendData(0x00);
        ISD_SendData(0x00);
        SS=1;
        for(i=2;i>0;i--)
        {;}
        SR0_L=ISD_SendData(0x08);
        SR0_H=ISD_SendData(0x08);
        RecAddL=ISD_SendData(0x00);
        RecAddH=ISD_SendData(0x00);
        SS=1;
}

/****************函数原型:unsigned char ISD_Devid(void);
                                  功能:读取APC寄存器内容***********/
unsigned char ISD_Devid(void)
   {
                   unsigned char DeviceNO,i;
                ISD_SendData(0x09);
                ISD_SendData(0x00);
                ISD_SendData(0x00);
                SS=1;
                for(i=2;i>0;i--)
                {;}
                ISD_SendData(0x09);
                ISD_SendData(0x00);
                DeviceNO=ISD_SendData(0x00);
                SS=1;
                return DeviceNO;
   }
/*****************函数原型:void ISD_Rec(void);
                                   功能:录音******************/
void ISD_Rec(void)
{
        ISD_SendData(0x41);
        ISD_SendData(0x00);
        SS=1;

}

/*****************函数原型:void ISD_Play(void);
                                   功能:放音******************/
void ISD_Play(void)
{
        ISD_SendData(0x40);
        ISD_SendData(0x00);
        SS=1;
}


/******************函数原型:void ISD_ISD_Erase(void);
                   功能:擦除****************/
void ISD_Erase(void)
{
        ISD_SendData(0x42);
        ISD_SendData(0x00);
        SS=1;
}

/*******************函数原型:void ISD_G_Erase(void);
                    功能:全体擦除************/
void ISD_G_Erase(void)
{
        ISD_SendData(0x43);
        ISD_SendData(0x00);
        SS=1;       
}

/**************函数原型:void ISD_RD_APC(void)
                                功能:读取APC寄存器内容***************/
void ISD_Rd_APC(void)
{
        unsigned char i;
        ISD_SendData(0x44);
        ISD_SendData(0x00);
        ISD_SendData(0x00);
        ISD_SendData(0x00);
        SS=1;
        for(i=2;i>0;i--)
        {;}
        SR0_L=ISD_SendData(0x44);
        SR0_H=ISD_SendData(0x00);
        APCL=ISD_SendData(0x00);
        APCH=ISD_SendData(0x00);
        SS=1;
}

/***************函数原型:void ISD_WR_APC2(unsigned char apcdatl,apcdath);
                功能:设置APC2***********************/
void ISD_WR_APC2(unsigned char apcdatl,apcdath)
{
        ISD_SendData(0x65);
        ISD_SendData(apcdatl);
        ISD_SendData(apcdath);
        SS=1;
}

/**********函数原型:void ISD_WR_NVCFG(unsigned char apcdatl,apcdath);
           功能:将APC数据写入NVCFG寄存器中***********/
void ISD_WR_NVCFG(unsigned char apcdatl,apcdath)
{
        ISD_SendData(0x46);
        ISD_SendData(apcdatl);
        ISD_SendData(apcdath);
        SS=1;
}

/***********函数原型:void ISD_LD_NVCFG(void)
             功能:将NVCFG数据载入APC寄存器中********/
void ISD_LD_NVCFG(void)
{
        ISD_SendData(0x47);
        ISD_SendData(0x00);
        SS=1;
}
/***********函数原型:void ISD_FWD(void)
    功能:放音指针下跳一段,指向下一段语音的起始地址********/
void ISD_FWD(void)
{
        ISD_SendData(0x48);
        ISD_SendData(0x00);
        SS=1;
}

/***********函数原型:void ISD_CHK_MEN(void)
    功能:空间检查******/
void ISD_CHK_MEM(void)
{
        ISD_SendData(0x49);
        ISD_SendData(0x00);
        SS=1;
}

/***********函数原型:void ISD_EXTCLK(void)
    功能:启用/关闭 外部时钟模式******/
void ISD_EXTCLK(void)
{
        ISD_SendData(0x4a);
        ISD_SendData(0x00);
        SS=1;
}

/***********函数原型:void ISD_SET_PLAY(unsigned char Saddl,Saddh,Eaddl,Eakkh);
    功能:定点播放******/
void ISD_SET_PLAY(unsigned char Saddl,Saddh,Eaddl,Eaddh)
{
        ISD_SendData(0x80);
        ISD_SendData(0x00);
        ISD_SendData(Saddl);
        ISD_SendData(Saddh);
        ISD_SendData(Eaddl);
        ISD_SendData(Eaddh);
        ISD_SendData(0x00);
        SS=1;
}
/***********函数原型:void ISD_SET_Rec(unsigned char Saddl,Saddh,Eaddl,Eakkh);
    功能:定点录音******/       
void ISD_SET_Rec(unsigned char Saddl,Saddh,Eaddl,Eaddh)
{
        ISD_SendData(0x81);
        ISD_SendData(0x00);
        ISD_SendData(Saddl);
        ISD_SendData(Saddh);
        ISD_SendData(Eaddl);
        ISD_SendData(Eaddh);
        ISD_SendData(0x00);
        SS=1;
}
/***********函数原型:void ISD_SET_Erase(unsigned char Saddl,Saddh,Eaddl,Eakkh);
    功能:定点录音******/
void ISD_SET_Erase(unsigned char Saddl,Saddh,Eaddl,Eaddh)
{
        ISD_SendData(0x82);
        ISD_SendData(0x00);
        ISD_SendData(Saddl);
        ISD_SendData(Saddh);
        ISD_SendData(Eaddl);
        ISD_SendData(Eaddh);
        ISD_SendData(0x00);
        SS=1;
}       

/***********函数原型:void delay(unsigned int t)***/

void delay(unsigned int t)
{
   for(;t>0;t--)
     {
                   TH0=0xFE;            //TMOD计数器0,工作方式1,延时1ms,晶振5.7M
                TL0=0x00;                //FE  23
                TR0=1;
                while(TF0!=1)
                {;}
                TF0=0;
                TR0=0;
     }
}

一周热门 更多>