#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语音模块源码相关推荐

  1. Modbus RTU 51单片机从机源码与组态软件通信支持485和232串口通信,该从机源码可直接用于51系列和STC12系列单片机的

    Modbus RTU 51单片机从机源码与组态软件通信支持485和232串口通信,该从机源码可直接用于51系列和STC12系列单片机的,支持功能码01,02,03,04,05,06,0F,10等常用功 ...

  2. 51单片机modbus通讯源码

    51单片机modbus通讯源码 编号:779655439312452自动化大学仕

  3. 摄氏温度转换为华氏温度C语言四舍五入,51单片机DS18B20温度计源码(华氏和摄氏度的转换功能)...

    /*作者:王先生 51单片机:清华电子的板 #include #include #include typedef unsigned char uchar; typedef unsigned int   ...

  4. Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件。支持485和232串口通信

    Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件.支持485和232串口通信,该从机源码支持51系列和STC12系列单片机,支持功能码01,02,03,04,05,06,15, ...

  5. Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件

    Modbus RTU 51单片机从机工程源码与昆仑通泰触摸屏测试工程文件. 支持485和232串口通信,该从机源码支持51系列和STC12系列单片机,支持功能码01,02,03,04,05,06,15 ...

  6. 智能锁方案PCBA原理图PCB单片机开发板源码wifi远程开锁。 提供全套技术资料,包括原理图,PCB图,程序源码,bom清单,说明书等

    智能锁方案PCBA原理图PCB单片机开发板源码wifi远程开锁. 提供全套技术资料,包括原理图,PCB图,程序源码,bom清单,说明书等. 该指纹密码锁具有如下功能: 一.指纹开门 二.触摸密码开门 ...

  7. 电磁炉原理图和单片机C程序源码

    电磁炉原理图和单片机C程序源码 id=646368865905&

  8. 51单片机生成二维码

    最近搞了个单片机生成二维码,步骤如下 1.下载QRCode生成的驱动源代码,这个驱动是c语言编写的可以移植到各种c语言写的工程上去,下面附上下载链接: https://download.csdn.ne ...

  9. Compiled from Servlet.java (version 1.7 : 51.0 查看Servlet源码

    查看Servlet源码得导入源码包,源码包去官网下载就行啦,下载Zip格式,然后复制到WEB-INF得lib下,再去报错位置 修改指定路径就行啦 各位小伙伴看见异常可 先去看异常信息,会有一点提示 , ...

最新文章

  1. 揭秘罗永浩直播带货幕后之师
  2. Android系统架构图及简单的系统架构介绍
  3. 全城瘫痪!因韩国电信公司大火 首尔陷断网危机
  4. range与enumerate的区别
  5. Java Collection 学习
  6. Java并发编程之synchronized关键字解析
  7. 我在GNU/Linux下使用的桌面环境工具组合
  8. 界面怎么随意设计java,怎么样设计一个图形用户界面(普通登陆框)用java语言中的swing...
  9. 多年测试经验分享:上市公司怎么进行安全测试
  10. Python图片处理模块Pillow
  11. Word 标题样式不统一:有的没有段前,标题前后不一致
  12. 在 Leaflet 中合并使用谷歌中国卫星图和高德地图
  13. MongoDB笔记 -- ReplicationSet复制集
  14. 设计模式系列:中介者模式
  15. 一个帐号多设备登录的处理
  16. 2019计算机跨保经验:清(深)北交浙计算所经验
  17. linux内核启动停止在booting the kernel.
  18. python如何绘制蜘蛛图_蜘蛛网图实现Python可视化的方法
  19. Java游戏有易筋经_当年武侠游戏中绝学秘籍易筋经!重置游戏几十次,玩家才终于找到?...
  20. 计算机英语口语面试自我介绍,面试英语口语自我介绍范文【3篇】

热门文章

  1. 配合清退工作,建议将金融科技纳入监管沙盒
  2. LeCun称梯度下降是最优雅的 ML 算法,Marcus:我不同意!
  3. protel dxp PCB使用技巧(摘)
  4. ecshop根目录调用_ecshop文件结构名称手册
  5. Ionic + Vue3 + Capacitor 配置环境、打包应用常见问题
  6. CloseableHttpClient方式配置代理服务器访问外网
  7. AVplayer断网播放出错时player的duration、playableDuration、totalTime
  8. 两年聚37亿美元,“庞氏骗局” 维卡币负责人在美被捕
  9. 呃呃呃呃呃呃鹅鹅鹅鹅鹅鹅饿
  10. 2019成长感悟和分享