DY-SV17F语音播放模块应用篇二 【UART 串口模式】

UART 串口模式 是采用波特率为 9600 的全双工串口通信。
  1. 语音模块做为从机处理,上电默认等待状态,所有播放操作全由主机控制。
  2. 从机不会主动发起通信,所有通信都是由主机发起。
串口模式接线图:

使用串口可以存放65535首曲目(需要注意模块只有4m内存),通过通信指令可以实现多种模式播放,具体如下:

控制指令 :

设置指令 :

查询指令

      指令太多,就不全部介绍了,本文只使用指定播放功能:

 

 AA 07 02 前三位固定的,不用管;

后三位分别是 曲目高8位 曲目低8位 SM

                    其中高8位和低8位刚好组成16进制,如0xFFFF刚好对应65535。

                    SM和检验,代表前面几个数据的和。

介绍完毕(细节操作过程请看第一章)

代码部分:

#include <REGX52.H>

typedef unsigned char u8;

u8 Music_Cmd_Appoint[] = {0xAA,0x07,0x02,0x00,0x00,0x00};	//播放指定曲目初始化数组
						 //AA 07 02 曲目高8位 曲目低8位 SM(和检验,前面所有字节之和)

void UartInit(void)		//9600波特率 @11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFD;			//设置定时初始值
	TH1 = 0xFD;			//设置定时重载值
	ET1 = 0;			//禁止定时器%d中断
	TR1 = 1;			//定时器1开始计时
}

void UartSendByte(u8 C)		//串口数据发送
{
    SBUF = C;		
    while(!TI);		//等待发送完成
    TI = 0;			//软件置0
}

/*
  说明:播放指定曲目
  参数1:数组
  参数2:播放第x首曲目
*/
void USART_MUSIC(u8 *mdate, u8 num)	   
{
	u8 i;
	mdate[4] = num;			//写入播放曲目
	mdate[5] = 0;
	for(i=0; i<5; i++)		//SM 把前面 数组0~4 总共5个数加起来
	{
		mdate[5] += mdate[i];
	}	
	for(i=0; i<6; i++)		//把修改后的曲目发送出去(每次发送一个数据,分6次发送完)
	{
		UartSendByte(mdate[i]);		
	}	
}

void main()			//主程序
{
	UartInit();		//串口初始化
	
	USART_MUSIC(Music_Cmd_Appoint, 2);		//指定播放第二首
	
	while(1)
	{
			
	}	
}

//完。

相关资料:

DY-SV17F语音播放模块应用篇一 【IO独立模式】_啊维的博客-CSDN博客

  • 6
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
STM32F407单片机读写 MH-Z14A氧化碳传感器模块串口输出软件DEMO例程源码,可做为你的学习设计参考。 int main(void) { uint32_t strL; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); MX_USARTx_Init(); HMI_USARTx_Init(); /* 无限循环 */ while (1) { /* 发送读取数值指令 */ if(HAL_UART_Transmit(&husartx,&aTxBuffer[0],9,0xFFFF)==HAL_OK) /* 读取返回值 */ HAL_UART_Receive(&husartx,&aRxBuffer[0],9,0xFFFF); /* 计算气体浓度值 */ strL=aRxBuffer[2]*256+aRxBuffer[3]; HMI_value_setting("page1.t1.txt",aRxBuffer[0]); HMI_value_setting("page1.t7.txt",aRxBuffer[1]); HMI_value_setting("page1.t9.txt",aRxBuffer[2]); HMI_value_setting("page1.t11.txt",aRxBuffer[3]); HMI_value_setting("page1.t13.txt",aRxBuffer[4]); HMI_value_setting("page1.t15.txt",aRxBuffer[5]); HMI_value_setting("page1.t17.txt",aRxBuffer[6]); HMI_value_setting("page1.t19.txt",aRxBuffer[7]); HMI_value_setting("page1.t21.txt",aRxBuffer[8]); HMI_string_setting("page1.t3.txt",strL); printf("氧化碳浓度为:%d ppm\n",strL); HAL_Delay(5000); } } /** * 函数功能: 向串口屏发送数据 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void HMI_value_setting(const char *val_str,uint32_t value) { uint8_t tmp_str[30]={0}; uint8_t i; sprintf((char *)tmp_str,"%s=\"%x\"",val_str,value); for(i=0;i<strlen((char *)tmp_str);++i) { HMI_USARTx->DR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } /** * 函数功能: 向串口屏发送数据 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void HMI_string_setting(const char *val_str,int32_t value) { uint8_t tmp_str[50]={0}; uint8_t i; sprintf((char *)tmp_

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值