资料
我用的是绿深电子技术的模块,资料也挺齐全的。也有相关例程。
SYN6288模块原理图
语音合成命令
接线
如何接线
接线其实很简单。
实现原理
51单片机 串口接收数据,根据不同的数据 通过串口的形式发送给 SYN6288,从而控制SYN6288语音播报。
程序代码
main.c
#include #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 #include #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 #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 #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单片机+SG90舵机
下一篇:基于51单片机---遥控灯
推荐阅读最新更新时间:2024-11-11 11:15
设计资源 培训 开发板 精华推荐
- STEVAL-IPM08B,基于 SLLIMM 2nd 系列 IGBT IPM 的电机控制电源评估板
- TCR5SB23、200mA、2.3V 输出电压 CMOS 低压降稳压器的典型应用
- LT1108CS8掌上电脑逻辑电源微功率DC/DC转换器典型应用电路
- NCP45491PMNGEVB:NCP45491 双模评估板
- 具有可编程闪烁率的 PCA9552 16 位 I2C 总线 LED 驱动器的典型应用电路
- 高速无线DAP调试器
- LT1185IT 折返式电流调节器限制的典型应用电路
- 具有 400mA 突发模式操作、2.25MHz 同步降压型稳压器的 LTC3621IMS8E 5Vout 的典型应用
- LTM4630EY 36A、1.2V 输出 DC/DC 稳压器的典型应用电路
- 征集令 | 物联网消毒小夜灯燃气报警器