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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录