电源电压:2.0V-5.5V(投CODE前请先确定好电压,使内部晶振产生更加 符合规格)
静态电流:小于10UA
DATA脚:
- :平时 DATA 脚为低电平 --- 空闲为低电平
- :每发一个信号(8bit协议码)前必须要有一个同步头。
- :同步头为 8MS 高和 1MS 低组成。
- :数据 “0” : 0.5MS 高电平和 1.5MS 低电平组成。
- :数据 “1” : 1.5MS 高电平和 0.5MS 低电平组成。
- :模块先接收数据的最高位BIT7,在接收 N-1 位,最后接收数据的最低位BIT0。
MCU先发最高位
BUSY脚:
- :有声音时输出高电平,无声音输出低电平。
看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));//
}
最后侵权必删!!!