基于51单片机+SYN6288语音播报

资料

我用的是绿深电子技术的模块,资料也挺齐全的。也有相关例程。

SYN6288模块原理图

在这里插入图片描述

语音合成命令

在这里插入图片描述

接线

如何接线

接线其实很简单。

51单片机SYN6288语音合成
TXRX
VCCVCC
GNDGND

实现原理

51单片机 串口接收数据,根据不同的数据 通过串口的形式发送给 SYN6288,从而控制SYN6288语音播报。

程序代码

我用的是STC89C52

main.c

#include <reg52.h>
#include "syn6288.h"
#include "delay.h"
#include "uart.h"

/**************芯片设置命令*********************/
unsigned char SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
unsigned char SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暂停合成
unsigned char SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢复合成
unsigned char SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //状态查询
unsigned char SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //进入POWER DOWN 状态命令

unsigned char receive_ok = 0;  //接收标志位
unsigned char command; 		//接收串口来的数据

//串口1初始化
void UART1_Init(void)
{
	SCON = 0x50;		//8位数据,可变波特率
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	ES = 1;
	EA = 1;
	RI = 0;
	TI = 0;
}


void  main(void)
{
	UART1_Init();
	SYN_FrameInfo(0, "[v3][t5]大家好"); //喇叭说 你好
	delay(2000);
	receive_ok = 1;
	while(1)
	{
		//选择背景音乐2。(0:无背景音乐  1-15:背景音乐可选)
		//m[0~16]:0背景音乐为静音,16背景音乐音量最大
		//v[0~16]:0朗读音量为静音,16朗读音量最大
		//t[0~5]:0朗读语速最慢,5朗读语速最快
		//其他不常用功能请参考数据手册

		/*判断指令*/
		switch(command)
		{
			case '1':	   //如果是 1
			receive_ok = 0;
			SYN_FrameInfo(0, "[v3][t5]你好");  //喇叭说 你好
			delay(2000);
			command = 0;
			receive_ok = 1;
			break;
			case 'G':		  	//如果你 G  喇叭说 这个是干垃圾
			receive_ok = 0;		//禁止接收串口数据
			SYN_FrameInfo(0, "[v3][t5]这个是干垃圾");
			delay(2000);
			command = 0;
			receive_ok = 1;	 	//允许接收串口数据
			break;
			default :
			receive_ok = 1;
			break;
		 }		
		//暂停合成,此时没有用到,用于展示函数用法
		//YS_SYN_Set(SYN_SuspendCom);
	}

}


//串口1中断
void Uart1_Isr() interrupt 4
{
	if(receive_ok == 1)	//如果可以接收数据了
	{
		command = SBUF;	//接收数据
		while(!RI);
		RI=0;
		receive_ok = 0;	
	}	

}

syn6288.c

#include <reg52.h>
#include <string.h>
#include "uart.h"
#include "syn6288.h"

/**************芯片设置命令*********************/
/*外部声明*/
extern unsigned char SYN_StopCom[];
extern unsigned char SYN_SuspendCom[];
extern unsigned char SYN_RecoverCom[];
extern unsigned char SYN_ChackCom[];
extern unsigned char SYN_PowerDownCom[];


//Music:  0:无背景音乐  1~15:选择背景音乐
void SYN_FrameInfo(unsigned char Music, unsigned char *HZdata)
{
	/****************需要发送的文本**********************************/
	unsigned char  Frame_Info[50];
	unsigned char  HZ_Length;
	unsigned char  ecc  = 0;  			//定义校验字节
	unsigned int i = 0;
	HZ_Length = strlen((char*)HZdata); 			//需要发送文本的长度

	/*****************帧固定配置信息**************************************/
	Frame_Info[0] = 0xFD ; 			//构造帧头FD
	Frame_Info[1] = 0x00 ; 			//构造数据区长度的高字节
	Frame_Info[2] = HZ_Length + 3; 		//构造数据区长度的低字节
	Frame_Info[3] = 0x01 ; 			//构造命令字:合成播放命令
	Frame_Info[4] = 0x01 | Music << 4 ; //构造命令参数:背景音乐设定

	/*******************校验码计算***************************************/
	for(i = 0; i < 5; i++)   				//依次发送构造好的5个帧头字节
	{
		ecc = ecc ^ (Frame_Info[i]);		//对发送的字节进行异或校验
	}

	for(i = 0; i < HZ_Length; i++)   		//依次发送待合成的文本数据
	{
		ecc = ecc ^ (HZdata[i]); 				//对发送的字节进行异或校验
	}
	/*******************发送帧信息***************************************/
	memcpy(&Frame_Info[5], HZdata, HZ_Length);
	Frame_Info[5 + HZ_Length] = ecc;
	UART1_SendString(Frame_Info, 5 + HZ_Length + 1);
}

uart.c

#include <reg52.h>
#include "uart.h"

/*串口发送一字节数据*/
void UART1_SendByte(unsigned char DAT)
{
	SBUF = DAT;
	while(TI == 0);
	TI=0;
}

/*串口发送字符串数据*/
void UART1_SendString(unsigned char *DAT, unsigned char len)
{
	unsigned char i;
	for(i = 0; i < len; i++)
	{
		UART1_SendByte(*DAT++);
	}
}

delay.c

#include <reg52.h>
#include "delay.h"

//软件延时1ms
void  delay(unsigned int uldata)
{
	unsigned int j  =  0;
	unsigned int g  =  0;
	for (j = 0; j < uldata; j++)
		for (g = 0; g < 110; g++);
}

基于 51单片机的其他项目

基于51单片机+遥控灯
基于51单片机+LCD1602显示
基于51单片机+红外遥控解码+LCD1602显示
基于51单片机+DHT11温湿度+LCD1602显示
基于51单片机+DS18B20温度测温器+LCD1602显示
基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶

尾声

如果觉得这篇文章对你有用。欢迎大家点赞、评论哈哈

需要 整个SYN6288工程源码 和 资料 ,欢迎大家打赏,评论区留上你的邮箱 or vx or qq。o( ̄︶ ̄)o

在这里插入图片描述

继续加油!

  • 70
    点赞
  • 449
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 132
    评论
51单片机是一种广泛应用的单片机,具有成本低、易于学习、易于使用等优点。而syn6288语音模块是一种能够实现语音合成和识别的模块。将这两个模块结合起来,可以实现一些语音控制的应用。 具体实现方法如下: 1.硬件连接syn6288语音模块的VCC连接51单片机的5V电源,GND连接51单片机的GND,RXD连接51单片机的P2.0引脚,TXD连接51单片机的P2.1引脚。 2.软件编程 首先需要定义一些常量和变量,如下: ```c #define SYN6288 0x02 //syn6288语音模块地址 #define CMD_WR 0x22 //写命令 #define CMD_RD 0x21 //读命令 #define CMD_PLAY 0x40 //播放命令 #define CMD_STOP 0x10 //停止命令 #define CMD_VOL 0x06 //音量命令 #define CMD_SPD 0x07 //语速命令 #define CMD_PIT 0x08 //音调命令 unsigned char buffer[100]; //定义缓冲区 unsigned char i = 0; //定义计数器 ``` 然后需要编写一些函数,如下: ```c //发送命令 void send_cmd(unsigned char cmd, unsigned char data1, unsigned char data2) { unsigned char sum = 0; //校验和 buffer[0] = 0xFD; //帧头 buffer[1] = SYN6288; //地址 buffer[2] = CMD_WR; //写命令 buffer[3] = cmd; //命令 buffer[4] = data1; //参数1 buffer[5] = data2; //参数2 for(i = 0; i < 6; i++) //计算校验和 { sum += buffer[i]; } buffer[6] = sum; //校验和 for(i = 0; i < 7; i++) //发送数据 { SBUF = buffer[i]; while(!TI); //等待发送完成 TI = 0; } } //播放声音 void play_sound(unsigned char index) { send_cmd(CMD_PLAY, 0x00, index); } //停止播放 void stop_sound() { send_cmd(CMD_STOP, 0x00, 0x00); } //设置音量 void set_volume(unsigned char volume) { send_cmd(CMD_VOL, 0x00, volume); } //设置语速 void set_speed(unsigned char speed) { send_cmd(CMD_SPD, 0x00, speed); } //设置音调 void set_pitch(unsigned char pitch) { send_cmd(CMD_PIT, 0x00, pitch); } ``` 接下来就可以在主函数中调用这些函数,实现语音控制了。例如,播放一个“欢迎光临”的声音: ```c void main() { set_volume(0x08); //设置音量为8 set_speed(0x05); //设置语速为5 set_pitch(0x05); //设置音调为5 play_sound(0x01); //播放“欢迎光临”的声音 while(1); //循环等待 } ``` 以上就是基于51单片机syn6288语音模块的实现方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮卡丘吉尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值