• 51单总线控制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单片机用单总线现实语音自动播报。

    工作模式说明

    1. IO 组合模式0:
      单片机控制 I/O 组合触发(低电平有效)指定的曲目后释放(IO0-IO7 恢复高电平),播放完当前曲目停止;播放中途重新触发,播放新的曲目,播放结束停止;若一直触发(不释放电平),循环播放。
    2. IO 组合模式 1:
      单片机控制 IO 组合触发(低电平有效)指定的曲目,一直循环播放指定曲目,电平释放(IO0-IO7
      恢复高电平)即停止播放。播放中途释放电平,即刻停止播放。
    3. IO 独立模式 0:
      IO0-IO7 独立控制 8 首曲目, IO 触发(低电平有效)指定的曲目后释放(IO0-IO7 恢复高电平),播放完当前曲目停止;播放中途重新触发,播放新的曲目,播放结束停止;若一直触发(不释放电平),循环播放。
    4. IO 独立模式 1:
      IO0-IO7 独立控制 8 首曲目,IO 触发(低电平有效)指定的曲目,一直循环播放指定曲目,
      电平释放(IO0-IO7 恢复高电平)即停止播放。播放中途释放电平,即刻停止播放。
    5. UART 串口模式:
      通过UART串口发送
      起始码-指令类型-数据长度(n)-数据 1-数据 n-和检验(SM)
      来实现模块的语音播报、上一曲、下一曲等功能。
    6. One_line 单总线串口模式:
      通过特定的时序,往模块发送0码或1码的组合实现模块的语音播报、上一曲、下一曲等功能。

    下文由51单片机控制SV-5W的“One_line 单总线串口模式”展开
    在这里插入图片描述

    模块配置

    在这里插入图片描述

    引脚配置CON3CON2CON1
    电平设置100

    根据上个图拨动拨码开关配置好模式。

    接线

    由上图可知SV-5W语音播报模块本身带有5W的功放芯片,可以直接接入一个5W以内的小喇叭。模块板载的USB口只能用于音频文件的传输,不能用于模块供电。还需要一直TF卡,把音频文件存入到TF卡里面,注意音频文件的命名格式以5位数字命名,少的以0补全,例如:音频文件初始名称为“123.MP3”,需要改成“00123.MP3”。
    One_line 单总线控制的数据接口是模块上的IO4,根据要求接线即可。
    按要求接线:

    51单片机DY-SV17F5V电源喇叭
    P1^1IO4
    5V5V
    GND- 5VGND
    D6IO3
    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);	//写指令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    主要函数

    void writeOrder(unsigned char Order)	//写指令
    {
    	unsigned char i;
    	
    	for(i=0;i<8;i++)
    	{
    		
    		if((bit)(Order & 0x01))
    		{
    			writeOne();
    		}
    		else
    			writeZero();
    		Order >>= 1;	
    	}
    
    }	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    主程序

    #include
    #include
    #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++;
    		}
    	}
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    上面程序宏定义了部分指令,实际上只用了播放模式选择和开始播放的指令,功能指令太多不一一演示,有兴趣的小伙伴可以自行拓展,程序已经写好了发送指令的时序,调用和更改writeOrder()这个函数的参数即可。

    效果展示

    视频中一共播放了三段音频文件,因为是全盘循环的模式,播放完一个音频文件后会自动播放下一个。

    51单总线控制SV5W语音播报模块

  • 相关阅读:
    低代码开发平台的功能有哪些?低代码“功能清单”一览
    鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统
    java计算机毕业设计vue校园菜鸟驿站管理系统MyBatis+系统+LW文档+源码+调试部署
    聊聊我常用的5款动态数据可视化工具
    # Sharding-JDBC从入门到精通(1)- 概述-分库分表
    计算机网络复习04——网络层
    vue 图片裁剪并回传显示
    挂耳式耳机品牌排行榜,五款目前排行靠前的耳机分享
    Linux引导过程
    入门力扣自学笔记109 C++ (题目编号1161)
  • 原文地址:https://blog.csdn.net/qq_42250136/article/details/127948253