一,头文件

我刚刚买回来的模块并不是51.52芯片的,所以

LE52.H 使用不了,我的Keil4脾气也暴躁,包含所有头文件的config.h也编译出现错误,因此我自己建立了一个包含所有头文件的头文件all.h(所以目录中的LE52.H与config都是没用的),其余的usart.h与SYN6288.h没怎么改,SYN6288.h中的uint8_t   要记得换成unsigned char   因为我没有给这个宏定义,我的keil4太难驯服了

二,主程序

1.说完头文件先说说串口程序usart.c

#include "all.h"

unsigned char a,flag;
unsigned char DAT;
unsigned int  x=0;

void UartIni(void)

 
 TMOD=0x20; //定时器初始化

SCON=0x50;//选择模式
 
 TH1=256-3;//9600波特率
 
 TL1=256-3;
 
 TR1=1;
 ES=1;//开启中断
 EA=1; 
}

void UARTSendByte(DAT)
{
    ES=0;   //关闭中断
    SBUF = DAT;
    while(!TI);
    TI=0;
    ES=1;//开启中断
}

void PrintCom(unsigned char *DAT,unsigned char len)
{
    unsigned char i;
    for(i=0;i<len;i++)
    {
         UARTSendByte(*DAT++);
    }    
}

void Uart_Isr() interrupt 4 
{    
    DAT=SBUF;
    RI=0;
    x=1;
}

2.SYN6288.c程序其实几乎都没有改,我一般就把uint8_t替换成unsigned char

#include "all.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 状态命令

/***********************************************/

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(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;
          PrintCom(Frame_Info,5+HZ_Length+1);
}

void YS_SYN_Set(unsigned char *Info_data)
{
    unsigned char Com_Len;
    Com_Len =strlen(Info_data);
    PrintCom(Info_data,Com_Len);
}

3.main.c程序如下,这里最重要的是SYN_FrameInfo函数的使用,如果在while里面记得要加上延时函数,要不程序一直运行太快,喇叭一句话都来不及说,真正开发的时候也要加入延时,这样喇叭才正常

#include "all.h"

// sbit P1_0=P1^0;

void delay_ms(unsigned int n)
{
  unsigned  int  q=0,w=0;
    for(q=0;q<n;q++)
    {
    for(w=0;w<120;w++);
    }
}

void MCU_init(); 
extern void SYN_FrameInfo(unsigned char Music,unsigned char *HZdata);
void  delay(unsigned long uldata);

void  main(void)
{
 unsigned int n=6,i=0;
     UartIni(); /*串口初始化*/
//     delay_ms(5000);
//      SYN_FrameInfo(0,"大家好,我是[t5]渣渣灰")    ;
//      delay_ms(5000);
  
       
   while(1)
   {
      switch(P1)
     {
            case    0x00:
            SYN_FrameInfo(0,"我是[t5]渣渣灰初代") ; delay_ms(10000);    break;
            case   0x01:
            SYN_FrameInfo(0,"我是[t5]渣渣灰一号") ; delay_ms(10000);     break;
            case   0x02:
            SYN_FrameInfo(0,"我是[t5]渣渣灰二号") ;  delay_ms(10000);    break;
            case   0x03:
            SYN_FrameInfo(0,"我是[t5]渣渣灰三号") ;  delay_ms(10000);    break;
            case   0x04:
            SYN_FrameInfo(0,"我是[t5]渣渣灰四号") ;  delay_ms(10000);    break;
            case   0x05:
            SYN_FrameInfo(0,"我是[t5]渣渣灰五号") ;  delay_ms(10000);    break;
            case   0x06:
            SYN_FrameInfo(0,"我是[t5]渣渣灰六号") ;  delay_ms(10000);    break;    
            default :
            delay_ms(1000)  ;    break;

}

}

}

void  delay(unsigned long uldata)
{
    unsigned int j  =  0;
    unsigned int g  =  0;
    for (j=0;j<5;j++)
    {
        for (g=0;g<uldata;g++)
        {
            _nop_();
            _nop_();

三、总结

这个其实不算很难,就是小问题挺多,大概向上面一样分三步,第一步串口初始化调试串口,使用Printfcom循环发送字节;第二步,初始化SYN6288,一般送的资料里面都有原始代码,不需要更改;第三步,SYN_FrameInfo函数的使用(在买回来的时候会有说明书的,这个有很多调节方法,不过我只是说说程序移植)

SYN6288移植51程序相关推荐

  1. 无缝移植J2ME程序到OPhone平台解决方案

    目录 • 为 什么需要移植J2ME程序 • J2ME 适配包之架构 • J2ME 适配包之界面 • J2ME 适配包之按键映射 • J2ME 适配包之数据持久存储 • J2ME 适配包总结 • 关 于 ...

  2. Proteus使用教程并仿真51程序——LED流水灯

    目录 一.Proteus简介 二.安装Proteus软件 三.熟悉Proteus软件 1.如何创建工程 2.界面简介 四.51程序设计和仿真 1.绘制原理图 1)添加元件 2)摆放元件 2.编写51程 ...

  3. C51教程 第二个51程序: 跑马灯 流水灯

    keil+proteus 第二个51程序 : 跑马灯 流水灯 这是一个AT89c51单片机教程,我们每次都会提供博文教程以及附带资料下载. 单片机就是一个小型CPU,在电子领域应用广泛,电视.冰箱.洗 ...

  4. Protues的一个简单51程序仿真

    Protues的一个简单51程序仿真 一.组装原件步骤 二.代码编写 三.仿真结果 四.总结 一.组装原件步骤 1.创建一个新的工程 2.找原件 3.将各元件连接起来,构成原理图 二.代码编写 1.打 ...

  5. 51单片机教程 第一个51程序 :点亮一个发光二极管

    化作尘百度网盘下载中心:https://pan.baidu.com/s/1eLnnSXwbFi8o0RESJYFPSQ 提取码:uxir 取走点赞哦~ keil+proteus 第一个51程序 :让一 ...

  6. 移植Qt程序到surface RT

    移植Qt程序到surface RT 1. 编译Qt库 Surface的操作系统是基于ARM架构的windows RT,所以需要编译出基于相应平台的Qt库. 1.1编译环境 Win8.1操作系统 Vis ...

  7. 有占空比的c语言中断程序,如何用51程序改变占空比

    满意答案 *介绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平 ...

  8. gsoap linux 编译,gSOAP嵌入式linux下的移植与程序开发

    一.移植 1.下载源码 本例下载最新版本为:gsoap_2.8.33.zip 2.解压源码 $ unzip gsoap_2.8.33.zip 3.平台准备unbuntu1204 $sudo apt-g ...

  9. 外部中断0——51程序

    51单片机中一共有5个中断方式: ①外部中断0 ②定时器中断0 ③外部中断1 ④定时器中断1 ⑤串口中断 5个中断优先级从  高  到  低 void int0_init() //外部中断0初始化函数 ...

最新文章

  1. 负载均衡集群介绍、LVS介绍、LVS调度算法、 LVS NAT模式搭建
  2. [结构型] -- 外观模式
  3. 分块读取Blob字段数据(Oracle)
  4. antdesign的表单中的下拉框设置默认值BUG处理
  5. AngularJS(6)-选择框Select
  6. TypeScript基础入门 - 接口 - 可索引的类型
  7. oracle自增的两种办法,ORACLE数据库实现自增的两种方式
  8. 【java SOAP】对SOAP的一个个人印象
  9. 汽车智力游戏-汽车游戏大全
  10. ArcGIS地理配准(Georeferencing)详解
  11. 关于路由器和交换机的区别图解(总结)
  12. 关于Inter漏洞“熔断”的论文翻译(三)(完)
  13. 杭州地铁首末站周边停车场正酝酿停车收费优惠
  14. POJ-1637 混合图欧拉回路-网络流求解
  15. linux主板上的网卡不显示,linux服务器更换主板后无法识别网卡解决办法
  16. 苹果8黑屏无法强制开机_iPhone黑屏转圈圈,无法开机解决方法
  17. ArcGIS Pro系列教程之登陆及离线授权
  18. 蜜罐如何获取攻击者敏感信息
  19. P57 3-3数数字
  20. HS8145V 进入华为界面后 再刷回电信界面

热门文章

  1. python计算圆周率100万位要多久_Super Pi-计算10000位圆周率需要多少时间?
  2. 英文文章汇总+翻译小亮点
  3. 统计一篇英语文章每个单词出现的频率
  4. db2之SQL3055N
  5. c语言控制数码管显示时间,单片机 控制 数码管显示
  6. Discuz对不起,您安装的不是正版应用的解决办法
  7. RPC编程:Hessian RPC一个老的RPC框架(一)
  8. 实验一段有趣的js代码。
  9. 如何实现广告精准投放?一文获得新思路
  10. 亲测有效解决“你已购买过此项目,现在可以免费下载,不再另外收费”提示