一、硬件部分
二、软件部分
1.iSD录音模块代码.c和.h文件如下
#include "delay.h"
#include <STC89C5xRC.H>
#include "ISD4004.h"
#include <intrins.h>
void delay(unsigned int time) //延迟n微秒
{
while(time--);
}
void spi_send(unsigned char isdx)
{
unsigned char y;
MOSI=0;
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((isdx>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
}
void spisend16(unsigned int addr)
{
char y;
MOSI=0;//发送地址
SCLK=0;
for(y=0;y<16;y++)
{
SCLK=0;
if((addr>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//发送地址结束
}
void SendCmd(unsigned char cmd,unsigned int addr)
{
unsigned char ar;
SS=0; //ss=0,打开spi通信端
delay(5);
ar=(unsigned char)(addr);
spi_send(ar); //发送地址低位
ar=(unsigned char)(addr>>8);
spi_send(ar); //发送地址高位
spi_send(cmd);//发送命令
SS=1;
delay(5);
SCLK=0;
}
void autoplay(unsigned int addr)
{
SS=0; //发送开始
MOSI=0;
SCLK=0;
spi_send(ISDPOWERUP); // 上电
SS=1;
delayms(50);
SS=0; //发送发音地址
MOSI=0;
SCLK=0;
spisend16(addr);
MOSI=0;//放音 设置命令
SCLK=0;
spi_send(PLAYSET);
SS=1;
SS=0;
MOSI=0;//放音 命令
SCLK=0;
spi_send(PLAYCUR);
SS=1;
}
void autorecord(unsigned int addr)
{
SS=0; //发送开始
MOSI=0;
SCLK=0;
spi_send(ISDPOWERUP); // 上电
SS=1;
delayms(50);
SS=0; //发送开始
MOSI=0;
SCLK=0;
spi_send(ISDPOWERUP); // 上电
SS=1;
delayms(50);
SS=0; //发送发音地址
MOSI=0;
SCLK=0;
spisend16(addr);
MOSI=0;//放音 设置命令
SCLK=0;
spi_send(RECSET);
SS=1;
SS=0;
MOSI=0;//放音 命令
SCLK=0;
spi_send(RECCUR);
SS=1;
}
void stop()
{
SS=1;
SS=0;
MOSI=0;//放音
SCLK=0;
spi_send(OPERSTOP);
SS=1;
}
void stoppd()
{
SS=1;
SS=0;
MOSI=0;//放音
SCLK=0;
spi_send(ISDPOWERUP);
SS=1;
}
void InitISD()
{
SS=1;
SCLK=1;
MOSI=1;
}
#ifndef _ISD4004_H_
#define _ISD4004_H_
#include <STC89C5xRC.H>
sbit SS = P1^3; //片选
sbit SCLK = P1^1; //ISD4003时钟
sbit MOSI = P1^0; //数据输入
sbit INT = P1^4; //中断
#define ISDPOWERUP 0X20 //ISD4004上电
#define ISDSTOP 0X10 //ISD4004下电
#define OPERSTOP 0X30 //ISD4004停止当前操作
#define PLAYSET 0XE0 //ISD4004从指定地址开始放音
#define PLAYCUR 0XF0 //ISD4004从当前地址开始放音
#define RECSET 0XA0 //ISD4004从指定地址开始录音
#define RECCUR 0XB0 //ISD4004从当前地址开始录音
#define SetHigRes() {P1=0x1b;}//设置为高阻态 0001 1011
#define SetNormalSt(){P1=0x10;}//设置为普通态
extern void autoplay(unsigned int addr);
extern void autorecord(unsigned int addr);
extern void InitISD();
extern void spi_send(unsigned char isdx);
extern void stop();
extern void stoppd();
#endif