

GPIO_InitTypeDef GPIO_InitStructure; // 定义GPIO初始化结构体
void Delay(__IO uint32_t nCount) // 定义延时函数
{
for(; nCount != 0; nCount--);
}
void PlaysoundNum(u8 SoundNum) // 定义播放指定地址单元语音的函数
{
u8 i;
GPIO_ResetBits(GPIOC, WT_CLK); // 将WT_CS引脚置低,选中WT588D语音模块
Delay(10); // 延时10ms
for(i = 0; i < 8; i++)
{
GPIO_ResetBits(GPIOC, WT_CLK); // 将WT_CLK引脚置低
if(SoundNum & 0x01)
GPIO_SetBits(GPIOC, WT_DAT); // 如果SoundNum的最低位为1,则将WT_DAT引脚置高
else
GPIO_ResetBits(GPIOC, WT_DAT); // 如果SoundNum的最低位为0,则将WT_DAT引脚置低
SoundNum >>= 1; // 将SoundNum向右移动1位,准备处理下一位
Delay(100); // 延时100us
GPIO_SetBits(GPIOC, WT_CLK); // 将WT_CLK引脚置高
Delay(100); // 延时100us
}
GPIO_SetBits(GPIOC, WT_CS); // 将WT_CS引脚置高,结束通讯,触发WT588D语音模块播放指定地址单元的语音文件
}
int main(void) // 主函数
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = WT_CS | WT_CLK | WT_DAT; // 定义WT_CS、WT_CLK、WT_DAT引脚为推挽输出模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); // 初始化GPIOA的引脚
while(1) // 不断循环
{
// 播放第一个地址单元的语音文件
PlaysoundNum(1);
Delay(1500); // 播放2秒钟
// 播放第二个地址单元的语音文件
PlaysoundNum(2);
Delay(2500); // 播放3秒钟
}
}