本代码是一个小型语音播放器的主程序。主要功能是通过按键控制语音的录制和播放,支持手动播报和循环播报两种模式。

代码中包含了多个头文件的引用,其中包括了延时函数、串口初始化、定时器初始化、按键初始化、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 著作权归作者所有。请勿转载和采集!

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