📄 语音录放模块程序.txt
字号:
1. SPI口通信模块
(1)下面为初始化部分的代码程序。
void SPI_Init(void)
{
TRISB=0xe1; //设置PORTB数据方向寄存器
PORTB=0x80; //设置PORTD
}
(2)以下程序SPI总线读写功能,data既是向SPI写入的数据,也是从SPI中读取的数据,返回给函数。
unsigned char SPI_ReadWrite(unsigned char data)
{
unsigned char i;
for(i=8; i!=0; i--)
{
SPI_CLK=0; //CLK引脚置低电平
SPI_DI=0; //数据线置低电平
if(data&0x80)
SPI_DI=1; //若data高位为1,则数据线置高电平
data<<=1;
SPI_CLK=1; // CLK引脚置高电平
if(SPI_DO)
data|=1; // 读入一位
}
SPI_CLK=0;
return data;
2. ISD4004录音操作
// 录音操作
void Record(int nAddr)
{
int i;
unsigned char code;
// 发送加电指令
PowerUp();
// 延时25ms以上
Delay_ms(30);
// 再次发送加电指令
PowerUp();
// 延时25ms以上
Delay_ms(30);
// 延时25ms以上
Delay_ms(30);
// 发送地址信息
SendAddr(nAddr);
// 发送SETREC命令
code = 0x05;
SendOpCode(code);
// 发送REC命令
code = 0x0D;
SendOpCode(code);
// 处理结束
for(;;)
{
// 如果发生溢出的时候则结束录音
if(nOVF == 1)
{
nOVF = 0;//清除中断标志变量
// 发送停止命令
Stop();
// 延迟一点时间
for(i = 0;i < 100;i++) ;
break;
}
// 如果第2次按下录音键,则结束录音
if((nRec == 0) && (nRec_count == 2))
{
nRec_count = 0;//清除按键次数记录变量
// 发送停止命令
Stop();
// 延迟一点时间
for(i = 0;i < 100;i++) ;
break;
}
}
// 发送掉电指令
PowerDown();
// 延迟一段时间
Delay_ms(30);
return;
3. ISD4004放音操作
// 放音操作
void Play(int nAddr)
{
int i;
unsigned char code;
// 发送加电指令
PowerUp();
// 延时25ms以上
Delay_ms(30);
// 发送地址信息
SendAddr(nAddr);
// 发送SETPLAY命令
code = 0x07;
SendOpCode(code);
// 发送PLAY命令
code = 0x0F;
SendOpCode(code);
// 处理结束
for(;;)
{
// 如果发生溢出的时候则结束录音
if(nOVF == 1)
{
nOVF = 0;//清除中断标志变量
// 发送停止命令
Stop();
// 延迟一点时间
for(i = 0;i < 100;i++) ;
break;
}
// 如果第2次按下放音键,则结束放音
if((nPlay == 0) && (nPlay_count == 2))
{
nPlay_count = 0;//清除按键次数记录变量
// 发送停止命令
Stop();
// 延迟一点时间
for(i = 0;i < 100;i++) ;
break;
}
}
// 发送掉电指令
PowerDown();
// 延迟一段时间
Delay_ms(30);
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -