小型语音播放器主程序代码解析
本代码是一个小型语音播放器的主程序。主要功能是通过按键控制语音的录制和播放,支持手动播报和循环播报两种模式。
代码中包含了多个头文件的引用,其中包括了延时函数、串口初始化、定时器初始化、按键初始化、LED初始化、LCD1602初始化等等。这些都是为了方便后续程序的编写和使用。
在主函数中,首先进行了各种初始化操作,包括了延时函数的初始化、串口的初始化、定时器的初始化、按键的初始化、LED的初始化、LCD1602的初始化等等。然后进入了一个死循环,不断地检测按键的状态和更新显示内容。
在死循环中,首先判断是否需要更新显示内容。如果需要更新,则根据按键状态和播放模式来更新LCD1602上的显示内容。如果按下了录音键,则将语音播放器设置为录音状态,并在LCD1602上显示'Sound recording';如果松开了录音键,则将语音播放器设置为停止录音状态,并清空LCD1602上的显示内容。如果当前是手动播报模式,则在LCD1602上显示'Key trigger';如果当前是循环播报模式,则在LCD1602上显示'Loop Playback'。
然后判断是否检测到按键按下。如果检测到按键按下,则进行小抖动处理,避免误操作。如果是第一次检测到按键按下,则根据按键的不同,进行不同的操作。如果是播放方式键,则切换播放模式;如果是设置值键,则将语音播放器设置为运行状态,并延时一段时间后关闭。
最后,如果没有检测到按键按下,则将rekey设置为0,避免重复检测到按键。
#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; //防止重复检测到按键
}
}
}
原文地址: https://www.cveoy.top/t/topic/jxIe 著作权归作者所有。请勿转载和采集!