单总线控制SV-5W语音播报模块
- SV-5W语音播报模块
- SV-5W语音播报模块简介
- 工作模式说明
- 模块配置
- 接线
- 驱动
- 部分代码
- 效果展示
SV-5W语音播报模块
SV-5W语音播报模块简介
DY-SV5W是一款智能语音模块,集成IO分段触发,UART串口控制,ONE_line单总线串口控制,标准 MP3 等 7 种工作模式;板载 5W D 类功放,可直接驱动 4Ω,3~5W 喇叭;支持 MP3,WAV 解码格式,最大支持 32G TF 卡存储,可通过 USB 数据线连接电脑更新 TF 卡存储音频文件。
上次写了同系列的“SV17F语音播报模块”用 IO 分段触发实现语音自动播报—“传送门”,本次将会以51单片机用单总线现实语音自动播报。
工作模式说明
- IO 组合模式0:
单片机控制 I/O 组合触发(低电平有效)指定的曲目后释放(IO0-IO7 恢复高电平),播放完当前曲目停止;播放中途重新触发,播放新的曲目,播放结束停止;若一直触发(不释放电平),循环播放。 - IO 组合模式 1:
单片机控制 IO 组合触发(低电平有效)指定的曲目,一直循环播放指定曲目,电平释放(IO0-IO7
恢复高电平)即停止播放。播放中途释放电平,即刻停止播放。 - IO 独立模式 0:
IO0-IO7 独立控制 8 首曲目, IO 触发(低电平有效)指定的曲目后释放(IO0-IO7 恢复高电平),播放完当前曲目停止;播放中途重新触发,播放新的曲目,播放结束停止;若一直触发(不释放电平),循环播放。 - IO 独立模式 1:
IO0-IO7 独立控制 8 首曲目,IO 触发(低电平有效)指定的曲目,一直循环播放指定曲目,
电平释放(IO0-IO7 恢复高电平)即停止播放。播放中途释放电平,即刻停止播放。 - UART 串口模式:
通过UART串口发送
起始码-指令类型-数据长度(n)-数据 1-数据 n-和检验(SM)
来实现模块的语音播报、上一曲、下一曲等功能。 - One_line 单总线串口模式:
通过特定的时序,往模块发送0码或1码的组合实现模块的语音播报、上一曲、下一曲等功能。
下文由51单片机控制SV-5W的“One_line 单总线串口模式”展开
模块配置
引脚配置 | CON3 | CON2 | CON1 |
---|---|---|---|
电平设置 | 1 | 0 | 0 |
根据上个图拨动拨码开关配置好模式。
接线
由上图可知SV-5W语音播报模块本身带有5W的功放芯片,可以直接接入一个5W以内的小喇叭。模块板载的USB口只能用于音频文件的传输,不能用于模块供电。还需要一直TF卡,把音频文件存入到TF卡里面,注意音频文件的命名格式以5位数字命名,少的以0补全,例如:音频文件初始名称为“123.MP3”,需要改成“00123.MP3”。
One_line 单总线控制的数据接口是模块上的IO4,根据要求接线即可。
按要求接线:
51单片机 | DY-SV17F | 5V电源 | 喇叭 |
---|---|---|---|
P1^1 | IO4 | ||
5V | 5V | ||
GND | - 5V | GND | |
D6 | IO3 | ||
SPEAKER+ | + | ||
SPEAKER- | - |
驱动
由手册可知单总线的0码和1码时序如下:
手册中的示例:
发送数据前,先把SDA拉低超过2ms,然后开始发送数据,注意低位在前。
0码:高电平与低电平的比例是1:3
1码:高电平与低电平的比例是3:1
空闲状态:SDA拉高
部分代码
函数定义
void delay(unsigned char); //毫秒延时函数
void delay_us(unsigned char); //100微秒延时函数
void dataStart(void); //开始通讯
void dataEnd(void); //结束通讯
void writeOne(void); //写1
void writeZero(void); //写0
void writeOrder(unsigned char); //写指令
主要函数
void writeOrder(unsigned char Order) //写指令
{
unsigned char i;
for(i=0;i<8;i++)
{
if((bit)(Order & 0x01))
{
writeOne();
}
else
writeZero();
Order >>= 1;
}
}
主程序
#include<reg52.h>
#include<intrins.h>
#include "DYSV.h"
#define END 0x13
#define PLAY 0x11
#define PLAYMode 0x0E
#define STOP 0x12
#define SDMode 0x18
#define UP 0x14
#define DOWN 0x15
unsigned int a=0;
void main()
{
while(1)
{
if(a==0)
{
dataStart(); //开始通讯
writeOrder(PLAYMode); //选择循环模式
writeOrder(0); //全盘循环
dataEnd(); //结束通讯
dataStart();
writeOrder(PLAY); //播放
dataEnd();
a++;
}
}
}
上面程序宏定义了部分指令,实际上只用了播放模式选择和开始播放的指令,功能指令太多不一一演示,有兴趣的小伙伴可以自行拓展,程序已经写好了发送指令的时序,调用和更改writeOrder()
这个函数的参数即可。
效果展示
视频中一共播放了三段音频文件,因为是全盘循环的模式,播放完一个音频文件后会自动播放下一个。
51单总线控制SV5W语音播报模块