51单片机+SYN6288语音模块源码
#include <reg52.h>
//#include "syn6288.h"
//#include "delay.h"
//#include "uart.h"
#include <string.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; //接收串口来的数据
//软件延时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++);
}
//串口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 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++);
}
}
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);
}
void main(void)
{
UART1_Init();
SYN_FrameInfo(0, "[v12][t4]你好"); //喇叭说 你好
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, "[v16][t3]你好"); //喇叭说 你好
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;
}
}
51单片机+SYN6288语音模块源码相关推荐
- Modbus RTU 51单片机从机源码与组态软件通信支持485和232串口通信,该从机源码可直接用于51系列和STC12系列单片机的
Modbus RTU 51单片机从机源码与组态软件通信支持485和232串口通信,该从机源码可直接用于51系列和STC12系列单片机的,支持功能码01,02,03,04,05,06,0F,10等常用功 ...
- 51单片机modbus通讯源码
51单片机modbus通讯源码 编号:779655439312452自动化大学仕
- 摄氏温度转换为华氏温度C语言四舍五入,51单片机DS18B20温度计源码(华氏和摄氏度的转换功能)...
/*作者:王先生 51单片机:清华电子的板 #include #include #include typedef unsigned char uchar; typedef unsigned int ...
- Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件。支持485和232串口通信
Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件.支持485和232串口通信,该从机源码支持51系列和STC12系列单片机,支持功能码01,02,03,04,05,06,15, ...
- Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件
Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件. 支持485和232串口通信,该从机源码支持51系列和STC12系列单片机,支持功能码01,02,03,04,05,06,15 ...
- 智能锁方案PCBA原理图PCB单片机开发板源码wifi远程开锁。 提供全套技术资料,包括原理图,PCB图,程序源码,bom清单,说明书等
智能锁方案PCBA原理图PCB单片机开发板源码wifi远程开锁. 提供全套技术资料,包括原理图,PCB图,程序源码,bom清单,说明书等. 该指纹密码锁具有如下功能: 一.指纹开门 二.触摸密码开门 ...
- 电磁炉原理图和单片机C程序源码
电磁炉原理图和单片机C程序源码 id=646368865905&
- 51单片机生成二维码
最近搞了个单片机生成二维码,步骤如下 1.下载QRCode生成的驱动源代码,这个驱动是c语言编写的可以移植到各种c语言写的工程上去,下面附上下载链接: https://download.csdn.ne ...
- Compiled from Servlet.java (version 1.7 : 51.0 查看Servlet源码
查看Servlet源码得导入源码包,源码包去官网下载就行啦,下载Zip格式,然后复制到WEB-INF得lib下,再去报错位置 修改指定路径就行啦 各位小伙伴看见异常可 先去看异常信息,会有一点提示 , ...
最新文章
- 揭秘罗永浩直播带货幕后之师
- Android系统架构图及简单的系统架构介绍
- 全城瘫痪!因韩国电信公司大火 首尔陷断网危机
- range与enumerate的区别
- Java Collection 学习
- Java并发编程之synchronized关键字解析
- 我在GNU/Linux下使用的桌面环境工具组合
- 界面怎么随意设计java,怎么样设计一个图形用户界面(普通登陆框)用java语言中的swing...
- 多年测试经验分享:上市公司怎么进行安全测试
- Python图片处理模块Pillow
- Word 标题样式不统一:有的没有段前,标题前后不一致
- 在 Leaflet 中合并使用谷歌中国卫星图和高德地图
- MongoDB笔记 -- ReplicationSet复制集
- 设计模式系列:中介者模式
- 一个帐号多设备登录的处理
- 2019计算机跨保经验:清(深)北交浙计算所经验
- linux内核启动停止在booting the kernel.
- python如何绘制蜘蛛图_蜘蛛网图实现Python可视化的方法
- Java游戏有易筋经_当年武侠游戏中绝学秘籍易筋经!重置游戏几十次,玩家才终于找到?...
- 计算机英语口语面试自我介绍,面试英语口语自我介绍范文【3篇】
热门文章
- 配合清退工作,建议将金融科技纳入监管沙盒
- LeCun称梯度下降是最优雅的 ML 算法,Marcus:我不同意!
- protel dxp PCB使用技巧(摘)
- ecshop根目录调用_ecshop文件结构名称手册
- Ionic + Vue3 + Capacitor 配置环境、打包应用常见问题
- CloseableHttpClient方式配置代理服务器访问外网
- AVplayer断网播放出错时player的duration、playableDuration、totalTime
- 两年聚37亿美元,“庞氏骗局” 维卡币负责人在美被捕
- 呃呃呃呃呃呃鹅鹅鹅鹅鹅鹅饿
- 2019成长感悟和分享