STM32 音频播放器代码解读:录音、手动播放和循环播放
STM32 音频播放器代码解读:录音、手动播放和循环播放
本代码是一个基于 STM32 的音频播放器,主要包括录音、手动播放、循环播放等功能。代码中通过调用各种库函数实现了各种功能,具体解读如下:
1. 头文件包含
#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'
该部分包含了程序所需的各种头文件,其中包括了 LED、延时、串口、定时器、按键、LCD 等模块的头文件。
2. 变量定义
char dis0[17]; // 暂存数组
unsigned char disFlag = 0; // 更新显示标志
static unsigned char rekey = 0;
unsigned char playMode = 0; // 设置标志
该部分定义了程序中所需的各种变量,包括暂存数组、更新显示标志、按键检测标志、播放模式等。
3. 主函数
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; // 防止重复检测到按键
}
}
}
该部分是程序的主函数,主要实现了各种功能的调用和实现。首先进行了各种模块的初始化,然后进入主循环。主循环中,通过判断各种标志位的状态,实现了录音、手动播放、循环播放等功能。同时,通过检测按键状态,实现了播放模式的切换和值的设置。
4. 总结
本代码实现了基于 STM32 的音频播放器,通过调用各种库函数实现了各种功能,包括录音、手动播放、循环播放等。同时,代码结构清晰,易于理解和修改。
注意: 代码中还包含了部分注释,建议你根据注释内容结合实际情况进行理解和修改。
原文地址: https://www.cveoy.top/t/topic/jxIa 著作权归作者所有。请勿转载和采集!