⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 语音1._c

📁 ISD1720芯片实现录音,定点录音,播放,定点播放等.
💻 _C
字号:

/****************************************************************
           在发送命令时的第四位是开LED指示位
		   当C4=1时开启,要指示话要在每个命令中将此位置位
		   以下的程序都将此位置位了。
/*****************************************************************

#define PU      PU(0x11) //POWER UP 01
#define PD      PU(0x17) //POWER DOWN 07
#define EXTLCK  PU(0x5A) //是否使能外部时钟 4A

#define STOP    PU(0x12) //停止   02
#define RESET   PU(0x13) //复位  03
#define FWD     PU(0x01) //下一曲 48
#define PLAY    PU(0x50) //播放当前曲目  40
#define REC     PU(0x51) //从当前地址开始录音 41

#define CLR_INT  PU(0x14) //清除中断和EOM位  04 
#define ERASE    PU(0x52) //擦除当前曲目 42
#define G_ERASE  PU(0x53) //擦除全部曲目除了提示音 43

#define WR_NVCFG  PU(0x56) //将APC的内容写到NVCFG中 46
#define LD_NVCFG  PU(0x57) //将NVCFG的内容加载到APC中 47
#define CHK_MEM   PU(0x59) //检查环形存储结构 49

#define RD_STATUS  status_address(0x15) //读取状态寄存器,当前地址 05
#define DEVID      status_address(0x19) //读取器件ID 09

#define RD_PLAY_PTR  status_address_pointer(0x16) //读取状态寄存器,当前地址和播放指针 06
#define RD_REC_PTR   status_address_pointer(0x18) //读取状态寄存器,当前地址和录音指针 08
#define RD_APC       status_address_pointer(0x54) //读取状态寄存器,当前地址和APC寄存器 44
/****************************************************************************
    下面的程序是要用
unsigned char command_data(unsigned char command,unsigned int data1,unsigned int data2)
   该函数要实现如下功能由不同的命令实现
   返回的i值是状态值
***********************************************************************
i=command_data(0x55,data1,data2);//wr_apc1(void);将<D11:D0>的数据写进APC寄存器,并由VOL管脚调节音量 45
i=command_data(0x75,data1,data2);//wr_apc2(void);将<D11:D0>的数据写进APC寄存器,并由<D2:D0>调节音量 65

i=command_data(0x90,data1,data2); //set_play(void);//从<S10:S0>开始播放,直到<E10:E0>或EOM 80
i=command_data(0x91,data1,data2); //set_rec(void); //从<S10:S0>开始录音,直到<E10:E0> 81
i=command_data(0x92,data1,data2); //set_erase(void);//擦除<S10:S0>到<E10:E0>的内容 82

/***********************************************************
                    SPI发送程序
*************************************************************/
#include <iom16v.h>
#include <macros.h>
void spi_sent_init(void)
{ PORTB |= (1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7); 	
  DDRB |= (1<<DDB5)|(1<<DDB7)|(1<<DDB4);       //设置MOSI,SCK和SS为输出 
  SPCR = (1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//设置为主机,LSB先发送
  SPSR = 0x00;              //预分频为128
}

unsigned char SPI(unsigned int Data)
{ 
  unsigned char sign;
  PORTB &=~ (1<<PB4);            //强制接收方进入从模式
  SPCR |= (1<<MSTR);             // MSTR有时会被清零,这里强制进入主机模式
  SPDR = Data;              //启动数据传输 
  while(!(SPSR&(1<<SPIF)));      //等待传输结束 
  PORTB |= (1<<PB4);
  sign=SPSR;
  sign=SPDR;
  return sign;            
}
/***********************************************************
                    命令程序
*************************************************************/
unsigned char pu(unsigned char data)
{
   unsigned char i;
   do
   {
     i=SPI(data);//发送命令
   }
   while((i=SPI(0x00))&0x01);//检测发送的命令是否接收了上一个命令
   return i;
}
//*************************************************************
unsigned int status_address(unsigned char data)//读取状态寄存器,当前地址
{
    unsigned char i;
	unsigned int k;
   do
   {
     i=SPI(data);//发送命令
   }
   while((i=SPI(0x00))&0x01);//检测发送的命令是否接收了上一个命令
   k=SPI(0x00);//读当前地址
   k=(8<<k)+i;//低位是状态,高位是地址
   return k;
}
//*************************************************************
long status_address_pointer(unsigned char data)//读取状态寄存器,当前地址和播放指针
{
    unsigned char i,j;
	long k;
   do
   {
     i=SPI(data);//发送命令
   }
   while((i=SPI(0x00))&0x01);//检测发送的命令是否接收了上一个命令
   j=SPI(0x00);//读当前地址
   k=SPI(0x00);//读播放指针
   k=(8<<k)+j;//低位是状态,高位是地址
   k=(8<<k)+i;//低位是状态,中间是地址,高位是播放指针
   return k;
}
//*************************************************************
unsigned char command_data(unsigned char command,unsigned int data1,unsigned int data2)
{
   unsigned char i,j,k,m,n;
   j=data1/256;k=data1%256;
   m=data2/256;n=data2%256;
   do
   {
     i=SPI(command);//发送命令
   }
   while((i=SPI(0x00))&0x01);//检测发送的命令是否接收了上一个命令
   k=SPI(k);k=SPI(j);
   k=SPI(n);k=SPI(m);
   return i;
}
/**********************************************************************
************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -