在这段主函数代码的基础上写一个ISD1820语音芯片采集和存储的代码,语音存储在ISD1820芯片内部:#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include <stdio.h> #include "timer.h" #include "key.h" #include "myled.h" #include "lcd1602.h" char dis0[17]; //暂存数组 unsigned char disFlag=0;//更新显示标志 static unsigned char rekey =0; unsigned char playMode =0; //设置标志 int main(void) { delay_init(); //延时函数初始化 uart_init(9600); //串口初始化为115200 // uart2_init(9600) ; TIM3_Int_Init(499,7199);//5ms 初始化定时器 MyLED_Init(); //初始化输出 KEY_Init(); //初始化输入 Lcd_GPIO_init(); //初始化lcd引脚 Lcd_Init(); //初始化lcd屏幕 delay_ms(20); Lcd_Puts(0,0,(u8 *)"Loop Playback "); //初始化显示 //Key trigger Lcd_Puts(0,1,(u8 *)"Sound recording "); //初始化显示 playMode =0;//初始化方式 while(1) { if(disFlag == 1) { disFlag = 0;//清空标志 if(key3==0){//录音 yy_rec = 1; //录音中 Lcd_Puts(0,1,(u8 *)"Sound recording "); //显示 } else{ yy_rec = 0; //停止录音 Lcd_Puts(0,1,(u8 *)" "); } if(playMode == 0){//手动播报 Lcd_Puts(0,0,(u8 *)"Key trigger "); } else{//循环播报 yy_play = !yy_play; //播报 Lcd_Puts(0,0,(u8 *)"Loop Playback "); //初始化显示 // } } if((key1==0)||(key2==0)) //检测到按键按下 { delay_ms(10); //小抖动 if(rekey==0) { if(key1==0) //检测是否按下 { rekey=1; if(playMode ) { //播放方式 playMode = 0; } else{ playMode = 1; } } else if(key2==0)//设置值键 { rekey=1; yy_play =1; //上电动作下 delay_ms(200); yy_play =0;//关闭运行 } } } else { rekey=0; //防止重复检测到按键 } } }
时间: 2024-01-13 15:02:41 浏览: 273
基于ISD1820芯片的语言录放模块AD09设计硬件(原理图+PCB+BOM)文件.zip
好的,以下是基于主函数代码的ISD1820语音芯片采集和存储的代码,语音存储在ISD1820芯片内部的实现方法:
```
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"
#include "myled.h"
#include "lcd1602.h"
char dis0[17]; //暂存数组
unsigned char disFlag=0;//更新显示标志
static unsigned char rekey =0;
unsigned char playMode =0; //设置标志
void ISD1820_Record()
{
USART_SendData(USART1, 0x22); // 发送指令,开始录音
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送完成
delay_ms(5000); // 录音 5 秒
USART_SendData(USART1, 0x77); // 发送指令,停止录音
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送完成
delay_ms(1000); // 停止录音后需要等待一段时间,让 ISD1820 完成存储操作
}
int main(void)
{
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为115200
TIM3_Int_Init(499,7199);//5ms 初始化定时器
MyLED_Init(); //初始化输出
KEY_Init(); //初始化输入
Lcd_GPIO_init(); //初始化lcd引脚
Lcd_Init(); //初始化lcd屏幕
delay_ms(20);
Lcd_Puts(0,0,(u8 *)"Loop Playback "); //初始化显示
Lcd_Puts(0,1,(u8 *)"Sound recording "); //初始化显示
playMode = 0; //初始化方式
while (1)
{
if (disFlag == 1)
{
disFlag = 0; //清空标志
if (key3 == 0) { //录音
ISD1820_Record(); //调用录音函数
Lcd_Puts(0,1,(u8 *)" "); //清空屏幕
}
if (playMode == 0) { //手动播放
if (key1 == 0) { //检测到按键按下
delay_ms(10); //小抖动
if (rekey == 0) {
rekey = 1;
yy_play = 1; //播放语音
delay_ms(200);
yy_play = 0; //关闭运行
}
}
} else { //循环播放
if (yy_play == 0) { //检测到播放结束
yy_play = 1; //播放语音
}
}
}
if ((key1 == 0) || (key2 == 0)) { //检测到按键按下
delay_ms(10); //小抖动
if (rekey == 0) {
if (key1 == 0) { //检测是否按下
rekey = 1;
if (playMode) { //播放方式
playMode = 0;
Lcd_Puts(0,0,(u8 *)"Key trigger ");
} else {
playMode = 1;
Lcd_Puts(0,0,(u8 *)"Loop Playback ");
}
} else if (key2 == 0) { //设置值键
rekey = 1;
yy_play = 1; //播放语音
delay_ms(200);
yy_play = 0; //关闭运行
}
}
} else {
rekey = 0; //防止重复检测到按键
}
}
}
```
以上代码中,我们在 `ISD1820_Record()` 函数中实现了 ISD1820 语音芯片的录音功能。在 `main()` 函数中,当检测到 `key3` 按键按下时,调用 `ISD1820_Record()` 函数进行录音。在录音结束后,清空屏幕。
此外,我们还调整了 `main()` 函数中的逻辑,以适应录音功能的实现。当 `playMode` 为 0 时,表示手动播放模式,此时按下 `key1` 按键会触发播放语音的动作。当 `playMode` 为 1 时,表示循环播放模式,程序会自动循环播放录制的语音。我们在 `ISD1820_Record()` 函数中加入了延时操作,以确保 ISD1820 芯片在录音结束后能够完成存储操作。
阅读全文