语音模块调用不出声,独立播放正常。
时间:10-02
整理:3721RD
点击:
单片机使用AT89S52,语音模块使用ISD1760
1760上接口与单片机管脚对应:
sbit ISD_SS=P2^0;
sbit ISD_SCLK=P2^1;
sbit ISD_MISO=P2^3;
sbit ISD_MOSI=P2^2;
要实现的的功能是在密码锁正确、错误、以及错误3次播放语音。
**********************************************************
在线等大家指导,提意见。
主程序:
*********************程序中调用播放实例****************************
spi_pu(); //给1760上电
while(1) GetSound(1); //密码正确则应该调用语音
/**************获取指定语音段地址并播放,用户可根据实际需要进行增减******************/
/**************对应的语音段地址在SOUND.H文件里,具体地址从录音软件中读取*************/
void GetSound(uchar soundtick)
{
ISD_SS=0;
switch(soundtick)
{
case 0:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_0A, sound_0B); }break; //现在时间
case 1:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_1A, sound_1B); }break; //点
case 2:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_2A, sound_2B); } break; //分
default: break;
}
ISD_SS=1;
}
*********************sound.h*****************************
#define sound_0A 0x0005
#define sound_0B 0x0020
#define sound_1A 0x0021
#define sound_1B 0x0035
#define sound_2A 0x0036
#define sound_2B 0x003f
**********************追溯 isd1700_7byte_comm()****************************
//7个字节命令
void isd1700_7byte_comm(uchar comm_par, uint star_addr, uint end_addr)
{
uchar i;
ISD_COMM_RAM[0]=comm_par;
ISD_COMM_RAM[1]=NULL1;
ISD_COMM_RAM[2]=star_addr;
ISD_COMM_RAM[3]=star_addr>>8;
ISD_COMM_RAM[4]=end_addr;
ISD_COMM_RAM[5]=end_addr>>8;
ISD_COMM_RAM[6]=NULL1;
rest_isd_comm_ptr();
i=0;
do{
*back_data_ptr++=T_R_comm_byte(*isd_comm_ptr++);
i++;
}while(i<=7);
}
***************************追溯 rest_isd_comm_ptr()**********************************
//复位
void rest_isd_comm_ptr(void)
{
isd_comm_ptr=ISD_COMM_RAM;
back_data_ptr=ISD_COMM_RAM_C;
}
*********************追溯T_R_comm_byte()**********************************
//SPI接口函数
uchar T_R_comm_byte( uchar comm_data )
{
uchar bit_nuber;
uchar temp;
bit_nuber=0;
temp=0;
do{
ISD_SCLK=0;
delay(1);
if((comm_data>>bit_nuber&0x01)!=0)
{ISD_MOSI=1;}
else
{ISD_MOSI=0;}
if(ISD_MISO)
{temp=(temp>>1)|0x80;}
else
{temp=temp>>1;}
ISD_SCLK=1;
delay(1);
}while(++bit_nuber<=7);
ISD_MOSI=0;
return (temp);
}
1760上接口与单片机管脚对应:
sbit ISD_SS=P2^0;
sbit ISD_SCLK=P2^1;
sbit ISD_MISO=P2^3;
sbit ISD_MOSI=P2^2;
要实现的的功能是在密码锁正确、错误、以及错误3次播放语音。
**********************************************************
在线等大家指导,提意见。
主程序:
*********************程序中调用播放实例****************************
spi_pu(); //给1760上电
while(1) GetSound(1); //密码正确则应该调用语音
/**************获取指定语音段地址并播放,用户可根据实际需要进行增减******************/
/**************对应的语音段地址在SOUND.H文件里,具体地址从录音软件中读取*************/
void GetSound(uchar soundtick)
{
ISD_SS=0;
switch(soundtick)
{
case 0:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_0A, sound_0B); }break; //现在时间
case 1:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_1A, sound_1B); }break; //点
case 2:{ isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED, sound_2A, sound_2B); } break; //分
default: break;
}
ISD_SS=1;
}
*********************sound.h*****************************
#define sound_0A 0x0005
#define sound_0B 0x0020
#define sound_1A 0x0021
#define sound_1B 0x0035
#define sound_2A 0x0036
#define sound_2B 0x003f
**********************追溯 isd1700_7byte_comm()****************************
//7个字节命令
void isd1700_7byte_comm(uchar comm_par, uint star_addr, uint end_addr)
{
uchar i;
ISD_COMM_RAM[0]=comm_par;
ISD_COMM_RAM[1]=NULL1;
ISD_COMM_RAM[2]=star_addr;
ISD_COMM_RAM[3]=star_addr>>8;
ISD_COMM_RAM[4]=end_addr;
ISD_COMM_RAM[5]=end_addr>>8;
ISD_COMM_RAM[6]=NULL1;
rest_isd_comm_ptr();
i=0;
do{
*back_data_ptr++=T_R_comm_byte(*isd_comm_ptr++);
i++;
}while(i<=7);
}
***************************追溯 rest_isd_comm_ptr()**********************************
//复位
void rest_isd_comm_ptr(void)
{
isd_comm_ptr=ISD_COMM_RAM;
back_data_ptr=ISD_COMM_RAM_C;
}
*********************追溯T_R_comm_byte()**********************************
//SPI接口函数
uchar T_R_comm_byte( uchar comm_data )
{
uchar bit_nuber;
uchar temp;
bit_nuber=0;
temp=0;
do{
ISD_SCLK=0;
delay(1);
if((comm_data>>bit_nuber&0x01)!=0)
{ISD_MOSI=1;}
else
{ISD_MOSI=0;}
if(ISD_MISO)
{temp=(temp>>1)|0x80;}
else
{temp=temp>>1;}
ISD_SCLK=1;
delay(1);
}while(++bit_nuber<=7);
ISD_MOSI=0;
return (temp);
}