SYN6288移植51程序
一,头文件
我刚刚买回来的模块并不是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程序相关推荐
- 无缝移植J2ME程序到OPhone平台解决方案
目录 • 为 什么需要移植J2ME程序 • J2ME 适配包之架构 • J2ME 适配包之界面 • J2ME 适配包之按键映射 • J2ME 适配包之数据持久存储 • J2ME 适配包总结 • 关 于 ...
- Proteus使用教程并仿真51程序——LED流水灯
目录 一.Proteus简介 二.安装Proteus软件 三.熟悉Proteus软件 1.如何创建工程 2.界面简介 四.51程序设计和仿真 1.绘制原理图 1)添加元件 2)摆放元件 2.编写51程 ...
- C51教程 第二个51程序: 跑马灯 流水灯
keil+proteus 第二个51程序 : 跑马灯 流水灯 这是一个AT89c51单片机教程,我们每次都会提供博文教程以及附带资料下载. 单片机就是一个小型CPU,在电子领域应用广泛,电视.冰箱.洗 ...
- Protues的一个简单51程序仿真
Protues的一个简单51程序仿真 一.组装原件步骤 二.代码编写 三.仿真结果 四.总结 一.组装原件步骤 1.创建一个新的工程 2.找原件 3.将各元件连接起来,构成原理图 二.代码编写 1.打 ...
- 51单片机教程 第一个51程序 :点亮一个发光二极管
化作尘百度网盘下载中心:https://pan.baidu.com/s/1eLnnSXwbFi8o0RESJYFPSQ 提取码:uxir 取走点赞哦~ keil+proteus 第一个51程序 :让一 ...
- 移植Qt程序到surface RT
移植Qt程序到surface RT 1. 编译Qt库 Surface的操作系统是基于ARM架构的windows RT,所以需要编译出基于相应平台的Qt库. 1.1编译环境 Win8.1操作系统 Vis ...
- 有占空比的c语言中断程序,如何用51程序改变占空比
满意答案 *介绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平 ...
- gsoap linux 编译,gSOAP嵌入式linux下的移植与程序开发
一.移植 1.下载源码 本例下载最新版本为:gsoap_2.8.33.zip 2.解压源码 $ unzip gsoap_2.8.33.zip 3.平台准备unbuntu1204 $sudo apt-g ...
- 外部中断0——51程序
51单片机中一共有5个中断方式: ①外部中断0 ②定时器中断0 ③外部中断1 ④定时器中断1 ⑤串口中断 5个中断优先级从 高 到 低 void int0_init() //外部中断0初始化函数 ...
最新文章
- 负载均衡集群介绍、LVS介绍、LVS调度算法、 LVS NAT模式搭建
- [结构型] -- 外观模式
- 分块读取Blob字段数据(Oracle)
- antdesign的表单中的下拉框设置默认值BUG处理
- AngularJS(6)-选择框Select
- TypeScript基础入门 - 接口 - 可索引的类型
- oracle自增的两种办法,ORACLE数据库实现自增的两种方式
- 【java SOAP】对SOAP的一个个人印象
- 汽车智力游戏-汽车游戏大全
- ArcGIS地理配准(Georeferencing)详解
- 关于路由器和交换机的区别图解(总结)
- 关于Inter漏洞“熔断”的论文翻译(三)(完)
- 杭州地铁首末站周边停车场正酝酿停车收费优惠
- POJ-1637 混合图欧拉回路-网络流求解
- linux主板上的网卡不显示,linux服务器更换主板后无法识别网卡解决办法
- 苹果8黑屏无法强制开机_iPhone黑屏转圈圈,无法开机解决方法
- ArcGIS Pro系列教程之登陆及离线授权
- 蜜罐如何获取攻击者敏感信息
- P57 3-3数数字
- HS8145V 进入华为界面后 再刷回电信界面