语音模块(思泽远科)

电源电压:2.0V-5.5V(投CODE前请先确定好电压,使内部晶振产生更加  符合规格)

  静态电流:小于10UA

 

DATA脚:

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

MCU先发最高位

BUSY脚:

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

 看DATA线的驱动:由同步头,数据1,数据0组成

每一帧数据的发送都先有同步头,然后由数据0,数据1组成就可以播放不同的语音

协议表

协议码

内容

协议码

内容

0X00

静音

0X14

卡重复

0X01

修改管理员密码

0X15

是否删除

0X02

设置开门密码

0X16

请放手指

0X03

登记指纹

0X17

指纹重复

0X04

登记卡片

0X18

欢迎回家

0X05

修改时间

0X19

开门失败

0X06

删除所有指纹

0X1a

蓝牙连接成功

0X07

删除指定指纹

0X1b

按#号确认,按*号退出

0X08

恢复出厂设置

0X1c

请重新设置

0X09

设置音量

0X1d

0X0a

删除所有门卡

0X1e

叮咚,叮咚(门铃声)

0X0b

删除指定门卡

0X1f

(报警声)

0X0c

请输入管理员密码

0X20

vol=15

0X0d

请输入新密码

0X21

vol=11

0X0e

请再次输入新密码

0X22

vol=9

0X0f

验证失败

0X23

vol=6

0X10

密码不一致

0X24

vol=4

0X11

操作成功

0X25

vol=2

0X12

密码重复

0X26

vol=1

0X13

请放置卡片

0X27

vol=0

首先初始化GPIO

/**
  * @函数名:void voice_init()
  * @作者:嵌入式小炜 
  * @形参:void
  * @函数返回值:void
  * @:函数说明:VOICE初始化   BUSY--PC4  DATA--PC5
  */
  void voice_init()
  {
   
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
	GPIO_InitTypeDef GPIO_InitStruct={0};//定义结构体变量名
	//
	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;//输出速度为50Mhz
	
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;//第一号管脚
    GPIO_Init(GPIOC,&GPIO_InitStruct);
   
  }

然后具体如何实现同步头,数据0和数据1,只要利用延时就可以控制高低电平的时间,数据0和数据1其实类似我们平时发送的高低电平1和0,只是这个1和0包含的东西不一样

//同步头
/**
    * @函数名:
    * @作者:嵌入式小炜 
    * @形参:void
    * @函数返回值:void
    * @:函数说明:同步头为 8MS 高和 1MS 低组成
    */
void Syns Header()
{
     PCout(5)=1;//位域文件io_bit.h  就是通过地址宏定义了管脚的输出,你可以看成GPIOC->ODR|=1<<5;
     delay_ms(8);
     PCout(5)=0;
     delay_ms(1);

}

//数据1
/**
    * @函数名: void data0()
    * @作者:嵌入式小炜 
    * @形参:void
    * @函数返回值:void
    * @:函数说明:数据 “0” : 0.5MS 高电平和 1.5MS 低电平组成。
    */
  void data0()
  {
       PCout(5)=1;
       delay_us(500);
       PCout(5)=0;
       delay_us(1500);
  }
 /**
    * @函数名: void data1()
    * @作者:嵌入式小炜 
    * @形参:void
    * @函数返回值:void
    * @:函数说明:数据 “1” : 1.5MS 高电平和 0.5MS 低电平组成。
    */
  void data1()
  {
       PCout(5)=1;
       delay_us(1500);
       PCout(5)=0;
       delay_us(500);
  }

完成好同步头,数据0和数据1的封装就可以写发送数据的函数了

/**
    * @函数名:
    * @作者:嵌入式小炜 
    * @形参:u8 data 发送的数据
    * @函数返回值:void
  * @:函数说明:发送数据函数
    */
  //u8 data;
  u8 i;
  void data_send(u8 data)
  {
      delay_ms(5);//要给语言模块启动的时间
     Syns Header();//先发送同步头
     //数据是先发高位再发低位的
      for(u8 i=0;i<8;i++)
      {
          
          if(data&(0x80>>i))
          {
              data1();
          }
          else
          {
               data0();
          }   
          
      }   
      
  }

如果你连续发送语句的话,上条语句就会覆盖这条语句,导致只有最后一条语句生效,我们可以等待音乐播放的高电平过去后在发送下一条语句

/**
    * @函数名:
    * @作者:嵌入式小炜 
    * @形参:void
    * @函数返回值:void
    * @:函数说明:语言模块工作
    */
    
    void voice_play(u8 data1)
    {
      
        data_send(data1);
          while(PCin(4));//
    }

最后侵权必删!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值