基于51单片机+SYN6288语音播报

发布者:Huanle666最新更新时间:2022-09-21 来源: csdn关键字:51单片机  SYN6288  语音播报 手机看文章 扫描二维码
随时随地手机看文章

资料

我用的是绿深电子技术的模块,资料也挺齐全的。也有相关例程。

SYN6288模块原理图

在这里插入图片描述

语音合成命令

在这里插入图片描述

接线

如何接线

接线其实很简单。

image.png

实现原理

51单片机 串口接收数据,根据不同的数据 通过串口的形式发送给 SYN6288,从而控制SYN6288语音播报。


程序代码

我用的是STC89C52


main.c

#include

#include "syn6288.h"

#include "delay.h"

#include "uart.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; //接收串口来的数据


//串口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  main(void)

{

UART1_Init();

SYN_FrameInfo(0, "[v3][t5]大家好"); //喇叭说 你好

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, "[v3][t5]你好");  //喇叭说 你好

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;

}


}


syn6288.c

#include

#include

#include "uart.h"

#include "syn6288.h"


/**************芯片设置命令*********************/

/*外部声明*/

extern unsigned char SYN_StopCom[];

extern unsigned char SYN_SuspendCom[];

extern unsigned char SYN_RecoverCom[];

extern unsigned char SYN_ChackCom[];

extern unsigned char SYN_PowerDownCom[];



//Music:  0:无背景音乐  1~15:选择背景音乐

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);

}


uart.c

#include

#include "uart.h"


/*串口发送一字节数据*/

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++);

}

}


delay.c

#include

#include "delay.h"


//软件延时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++);

}

关键字:51单片机  SYN6288  语音播报 引用地址:基于51单片机+SYN6288语音播报

上一篇:基于51单片机+SG90舵机
下一篇:基于51单片机---遥控灯

推荐阅读最新更新时间:2024-11-11 11:15

8051单片机数据说明
深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。 具体说明如下(8031为缺省CPU)。 一、Keil C51扩展关键字 C51 V4.0版本有以下扩展关键字(共19个): _at_idata sfr16 alien interrupt small bdata large _task_ Code bit pdata using reentrant xdata compact sbit data sfr 二、内存区域(Memory Areas): 1、 Pragram Area: 由Code说明可有多达64kBytes的程序
[单片机]
51单片机低功耗工作模式
低功耗操作方式 在以电池供电的系统中有时为了降低电池的功耗在程序不运行时就要采用低功耗方式低功耗方式有两种—待机方式和掉电方式 低功耗方式是由电源控制寄存器PCON上一课我们提到过的来控制的电源控制寄存器是一个逐位定义的8位寄存器其格式如下   PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如下:    PCON电源管理寄存器结构 PCON D7 D6 D5 D4 D3 D2 D1 D0 位符号 SMOD - - - GF1 GF0 PD IDL PCON标志位说明: 在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当
[单片机]
51单片机矩阵键盘检测源代码(按键数码管显示0-F)
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52;找到相应部分即可.这是一整个单片机开发板的电路图其他的忽略. hex文件及其工程文件下载:http://www.51hei.com/f/juzhen.rar 以下是通过测试的源代码: /* *功能:使用矩阵按键使得按键按下时数码管上显示各自对应的数字(0 ~ F); *日期:2013-05-03-17:51; *作者:徐冉 *特别说明:本程序代码已经通过调试,仅供学习使用; * */ /***********AT89C52-RC 单片机51hei 实验板***********/ /*****************51hei-开发板****************
[单片机]
通过51单片机实现直流电机调速
一、项目背景及目的 随着各种工业生产设备和机械设备的广泛使用,直流电机调速技术的研究和应用越来越受到人们的重视,具有广泛的应用前景。本项目通过51单片机实现直流电机调速功能,为实际工程应用提供一个可靠和有效的调速方案。 二、设计思路 (1)系统原理 本系统采用PWM(脉冲宽度调制)技术对直流电机进行调速控制。通过改变输出信号的占空比,实现对直流电机的转速控制。系统中包括51单片机、直流电机、电路板以及控制程序。 (2)硬件设计 电机:使用24V直流电机实现实际转速控制。 驱动电路:使用四个寄生二极管三相全桥驱动电路控制电机,使电机可以正反转,并控制电机的速度。 51单片机:使用STC89C52单片机,作为控制核心。单片机
[单片机]
通过<font color='red'>51单片机</font>实现直流电机调速
51单片机C语言学习 6
第六课 变量   上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:       数据类型   变量名表   在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。   而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一
[单片机]
51单片机的延时子程序
延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念、机器周期和指令周期的区别和联系、相关指令的用法等用图解法的形式详尽的回答读者 我们知道程序设计是单片机开发最重要的工作,而程序在执行过程中常常需要完成延时的功能。例如 在交通灯的控制程序中,需要控制红灯亮的时间持续30秒,就可以通过延时程序来完成。延时程序是如何实现的呢?下面让我们先来了解一些相关的概念。 一、机器周期和指令周期 1.机器周期是指单片机完成一个基本操作所花费的时间,一般使用微秒来计量单片机的运行速度,51 单片机的一个机器周期包
[单片机]
基于51单片机的红外线遥控程序编写代码
#include reg52.h #define uchar unsigned char #define uint unsigned int unsigned char code smg_du ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char code smg_we ={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78}; uchar irtime; uchar startflag; uchar irdata ; uchar bitn
[单片机]
51单片机心形灯实现从中间向两端流水编程
心形灯原理图 编译软件:Keil uVision5 (如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343174) 单片机程序下载软件:STC-ISP (如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343157) 程序代码: #include reg51.h #include intrins.h unsigned char code table ={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; void De
[单片机]
<font color='red'>51单片机</font>心形灯实现从中间向两端流水编程
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved