语言播报模块

一、硬件原理图

二、功能说明

DATA:

  1. :平时 DATA 脚为低电平
  2. :每发一个信号前必须要有一个同步头。
  3. :同步头为 8MS 高和 1MS 低组成。
  4. :数据 “0” : 0.5MS 高电平和 1.5MS 低电平组成。
  5. :数据 “1” : 1.5MS 高电平和 0.5MS 低电平组成。
  6. :先接收数据的最高位BIT7,在接收 N-1 位,最后接收数据的最低位BIT0。

PB0脚:

  1. :有声音时输出高电平,无声音输出低电平。

三、代码例程

MAIN.C

		Voice_Config();  //语言初始化
		VoiceSendData(0x18);  //欢迎回家

VOICE.C

#include "voice.h"
#include "delay.h"

/*
PC4	   VOICE_BUSY
PC5		 VOICE_DATA
*/
void Voice_Config(void)
{
	//开启GPIOC的时钟
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); 
	//定义结构体
  GPIO_InitTypeDef GPIO_InitStruct;

	 // 配置连接到语音数据信号的引脚
  GPIO_InitStruct.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed;
  GPIO_Init(GPIOC, &GPIO_InitStruct);
	
}


//同步头的时序
static void Data_Head(void)
{
	GPIO_SetBits(GPIOC,GPIO_Pin_5);
	Delay_ms(8);
	GPIO_ResetBits(GPIOC,GPIO_Pin_5);
	Delay_ms(1);
}


//数据0的时钟信号
static void Data_0(void)
{
	GPIO_SetBits(GPIOC,GPIO_Pin_5);
	Delay_us(500);
	GPIO_ResetBits(GPIOC,GPIO_Pin_5);
	Delay_us(1500);
}


//数据1的时钟信号
static void Data_1(void)
{
	GPIO_SetBits(GPIOC,GPIO_Pin_5);
	Delay_us(1500);
	GPIO_ResetBits(GPIOC,GPIO_Pin_5);
	Delay_us(500);
}


void VoiceSendData(uint8_t data)
{
	Delay_ms(500);
	Data_Head();  //同步头
	
	for(char i = 0; i < 8; i++)
	{
		if((data & 0x80) == 0x80)
		{
			Data_1();
		}
		else
		{
			Data_0();
		}
		data<<=1;
	}
	GPIO_ResetBits(GPIOC,GPIO_Pin_5);
}

VOICE.H

#ifndef _VOICE_H_
#define _VOICE_H_

#include "stm32f4xx.h"

void Voice_Config(void);
void VoiceSendData(uint8_t data);

#endif

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值