语言播报模块

发布于:2024-05-21 ⋅ 阅读:(157) ⋅ 点赞:(0)

一、硬件原理图

二、功能说明

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


网站公告

今日签到

点亮在社区的每一天
去签到