找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10993|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机控制syn6288播放汉语音程序

[复制链接]
跳转到指定楼层
楼主
ID:3721 发表于 2015-1-5 22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //注意:51单片机使用12M晶振串口发送数据会有误差而不能工作
  2. //                所以只能使用11.0592M的晶振

  3. #include <reg51.h>            
  4. #include <string.h>
  5. #include "uart.h"

  6. void syn6288(char*  tex,unsigned  char changdu);
  7. /****************************************************************************
  8. * 函  数:void  main(void)
  9. * 功  能:主函数
  10. * 参  数:无
  11. * 返回值:无
  12. * 更  新:无
  13. * 备  注:无
  14. ****************************************************************************/
  15. void  main(void)
  16. {        
  17. /****************需要发送的文本**********************************/
  18.         char code text[] =  {"[v10][m10]湖北"};
  19.         char code hubei[] =  {"[v9][m9]ok"};
  20. /****************串口的初始化************************************/
  21.         
  22.         uartinit();
  23.         syn6288(text,sizeof(text));
  24.         uart_delay(2000);                  //延时很重要

  25.         syn6288(hubei,sizeof(hubei));
  26.         uart_delay(1000);                  //延时很重要
  27.        

  28.         while(1)
  29.         ;
  30. }
  31. /****************************************************************************
  32. * 函  数:void syn6288(char*  tex,unsigned  char changdu)
  33. * 功  能:语音读取字符串
  34. * 参  数:tex--------字符串的地址
  35. *         changdu----字符串tex的长读
  36. * 返回值:无
  37. * 更  新:无
  38. * 备  注:无
  39. ****************************************************************************/
  40. void syn6288(char*  tex,unsigned  char changdu)
  41. {       
  42.         unsigned  char  headOfFrame[5];
  43.     unsigned  char  length;  
  44.         unsigned  char  ecc  = 0;                          //定义校验字节
  45.         unsigned  int i=0;
  46.         length =changdu;                         //需要发送文本的长度

  47.         /*****************发送过程**************************************/           
  48.         headOfFrame[0] = 0xFD ;                         //构造帧头FD
  49.         headOfFrame[1] = 0x00 ;                         //构造数据区长度的高字节
  50.         headOfFrame[2] = length + 3;                 //构造数据区长度的低字节
  51.         headOfFrame[3] = 0x01 ;                         //构造命令字:合成播放命令
  52. /*****************带背景音乐**************************************/                   
  53.         headOfFrame[4] = 0x21 ;                         //构造命令参数:编码格式为GBK

  54. /*****************不带背景音乐**************************************/                   
  55.         //headOfFrame[4] = 0x01 ;                         //构造命令参数:编码格式为GBK

  56.         for(i = 0; i<5; i++)                                   //依次发送构造好的5个帧头字节
  57.         {  
  58.             ecc=ecc^(headOfFrame[i]);                 //对发送的字节进行异或校验       
  59.             SBUF = headOfFrame[i];
  60.             while (TI== 0) {;}                           //等待发送中断标志位置位
  61.             TI = 0;                                                 //发送中断标志位清零
  62.         }

  63.         for(i = 0; i<length; i++)                   //依次发送待合成的文本数据
  64.         {  
  65.             ecc=ecc^(tex[i]);                                 //对发送的字节进行异或校验       
  66.             SBUF = tex[i];
  67.             while (TI== 0) {;}
  68.             TI = 0;
  69.                 //uart_delay(10);                               
  70.         }
  71.         //uart_delay(1000);
  72.         SBUF=ecc;                                                        //最后发送校验字节
  73.         while(TI== 0)
  74.                 ;
  75.         TI=0;        


  76. }
复制代码
完整代码下载: syn6288_2_ok.rar (50.03 KB, 下载次数: 290)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:86401 发表于 2015-7-27 10:01 | 只看该作者
这个的原理能不能讲讲
回复

使用道具 举报

板凳
ID:97870 发表于 2015-12-1 17:54 | 只看该作者
为啥我把你的程序复制粘贴了下编译有错啊?能帮我看看吗
回复

使用道具 举报

地板
ID:85865 发表于 2016-4-28 19:52 | 只看该作者
下来学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表