看ISD1760的使用手册,里面有读取当前语音的地址的指令。我是这样做的,先手工录音,然后和Arduino板子连接,板子里下载一个程序用来读当前录音的地址,然后手动按键控制下一条语音,再读出当前语音的地址,于是所有语音地址都读出来了。然后再用上面的程序控制播放哪一条语音。
//define pins
#define DATAOUT 11 //mosi
#define DATAIN 12 //miso
#define SPICLOCK 13 //sck
#define SLAVESELECT 10 //ss
//opcodes
#define PU 0x01
#define STOP 0x02
#define RESET 0x03
#define CLR_INT 0x04
#define RD_STATUS 0x05
#define RD_PLAY_PTR 0x06
#define PD 0x07
#define RD_REC_PTR 0x08
#define DEVID 0x09
#define PLAY 0x40
#define REC 0x41
#define ERASE 0x42
#define G_ERASE 0x43
#define RD_APC 0x44
#define WR_APC1 0x45
#define WR_APC2 0x65
#define WR_NVCFG 0x46
#define LD_NVCFG 0x47
#define FWD 0x48
#define CHK_MEM 0x49
#define EXTCLK 0x4A
#define SET_PLAY 0x49
#define SET_REC 0x81
#define SET_ERASE 0x82
void setup() {
byte clr;
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK,OUTPUT);
pinMode(SLAVESELECT,OUTPUT);
digitalWrite(SLAVESELECT,HIGH); //disable device
SPCR = B01111111; //data lsb, clock high when idle, samples on falling
clr=SPSR;
clr=SPDR;
delay(10);
//start serial
Serial.begin(9600);
digitalWrite(SLAVESELECT,LOW);
spi_transfer(PU); // power up
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
delay(100);
digitalWrite(SLAVESELECT,LOW);
spi_transfer(CLR_INT); // clear interupt and eom bit
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
delay(100);
}
void loop() {
digitalWrite(SLAVESELECT,LOW);
spi_transfer(PLAY); // clear interupt and eom bit
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
byte byte1;
byte byte2;
byte byte3;
byte byte4;
digitalWrite(SLAVESELECT,LOW);
byte1 = spi_transfer(RD_PLAY_PTR); // clear interupt and eom bit
byte2 = spi_transfer(0x00); // data byte
byte3 = spi_transfer(0x00); // data byte
byte4 = spi_transfer(0x00);
digitalWrite(SLAVESELECT,HIGH);
Serial.println(byte1);
Serial.println(byte2);
Serial.println(byte3);
Serial.println(byte4);
delay(9000);
}
char spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait for the end of the transmission
{
};
return SPDR; // return the received byte
} |