void Initialize_wt588s16s_pins(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(WT588S16S_DATA_PERIPH,ENABLE);
RCC_APB2PeriphClockCmd(WT588S16S_BUSY_PERIPH,ENABLE);
GPIO_InitStructure.GPIO_Pin = WT588S16S_DATA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(WT588S16S_DATA_GPIO, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = WT588S16S_BUSY;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(WT588S16S_BUSY_GPIO, &GPIO_InitStructure);
GPIO_SetBits(WT588S16S_DATA_GPIO, WT588S16S_DATA);
}
void Line_send_one_byte(unsigned char data)
{
unsigned char i;
unsigned char data_temp = 0;
for( i=0; i<8; i++){
GPIO_SetBits(WT588S16S_DATA_GPIO, WT588S16S_DATA); //À¸ß·¢ËÍÊý¾Ý
data_temp = (data>>i)&0x01;
if(data_temp == 0){
delay_us(200); //200us
GPIO_ResetBits(WT588S16S_DATA_GPIO, WT588S16S_DATA);
delay_us(600); //600us
}else{
delay_us(600); //600us
GPIO_ResetBits(WT588S16S_DATA_GPIO, WT588S16S_DATA);
delay_us(200); //200us
}
}
}
void Line_send_stop(void)
{
//µØÖ·Êý¾ÝÁ¬½Ó·û
GPIO_SetBits(WT588S16S_DATA_GPIO, WT588S16S_DATA);
delay_us(2000); //2MS
GPIO_ResetBits(WT588S16S_DATA_GPIO, WT588S16S_DATA);
delay_us(5000); //5MS
}
void WT588S_play_music(unsigned short data)
{
unsigned char data_temp_1,data_temp_2;
data_temp_2 = (unsigned char)(data>>8);
data_temp_1 = (unsigned char)(data&0x00ff);
Line_send_stop();
Line_send_one_byte(data_temp_1);
Line_send_stop();
Line_send_one_byte(data_temp_2);
}