900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 支持c语言的otp单片机 单片机驱动语音OTP芯片程序

支持c语言的otp单片机 单片机驱动语音OTP芯片程序

时间:2022-07-18 17:07:36

相关推荐

支持c语言的otp单片机 单片机驱动语音OTP芯片程序

/****************************************************

;;

OTP语音芯片串行三线模式组合语音测试程序

;主芯片:MPC82L52(1T)

;工作频率:6MHz

;适用语音芯片型号:SC8035,SC8016,SC040 SC020B,SC010B...

;亿矽特科技

****************************************************/

include "REG_MPC82L52.H"

#include

void delay_ms(unsigned int count) ;

void delay_us(unsigned int count);

void SC_Speech(unsigned char cnt);

void SC_WBusy(void);

void SC_Speechs(void);

/**************端口定义*****************/

sbit SC_RST=P3^0; //P3.0是脉冲复位脚

sbit SC_DATA=P3^1; //P3.1是脉冲数据脚

sbit SC_BUSY=P3^2; //P3.2是放音BUSY脚

unsigned int sp[3]; //定义一个组合语音用的数组变量

/*************主程序****************/

main (void)

{

SC_DATA=0;

SC_RST=1;

delay_us(100); //上电复位防止干扰发声芯片放音

SC_RST=0;

delay_us(100);

sp[0]=0;

sp[1]=0;

sp[2]=0;

while(1)

{

sp[0]=8;

sp[1]=5;

sp[2]=9;

SC_Speechs(); //组合8,5,9地址段放音

delay_ms(5000); //延时放音时间5秒

}

}

/**************************************

;延时X毫秒

;不同的工作环境,需要调整此函数

;入口参数:count

;出口参数:无

**************************************/

void delay_ms(unsigned int count)

{

unsigned int i,j;

for(i=0;i

{

for(j=0;j<500;j++);

}

}

/**************************************

;延时X微秒

;不同的工作环境,需要调整此函数

;入口参数:count

;出口参数:无

**************************************/

void delay_us(unsigned int count)

{

unsigned int i,j;

for(i=0;i

{

for(j=0;j<2;j++);

}

}

/**************************************

;控制地址段放音

;入口参数:cnt;

;出口参数:无

**************************************/

void SC_Speech(unsigned char cnt)

{

unsigned char i;

SC_RST=1;

delay_us(100); //DAC,大于32段为15MS

SC_RST=0;

delay_us(100);

for(i=0;i < cnt;i++)

{

SC_DATA=1; //数据脉冲高

delay_us(100); //延时100US

SC_DATA=0; //数据脉冲低

delay_us(100); //延时100US

}

}

/**************************************

;控制地址段组合放音

;入口参数:无

;出口参数:无

**************************************/

void SC_Speechs(void)

{

SC_Speech(sp[0]);

SC_WBusy();

SC_Speech(sp[1]);

SC_WBusy();

SC_Speech(sp[2]);

sp[0]=0;

sp[1]=0;

sp[2]=0;

}

/**************************************

;等待BUSY信号变低;

;入口参数:无

;出口参数:无

**************************************/

void SC_WBusy(void)

{

unsigned int times;

for(times=0;times<50;times++) //等待超过5秒最长语音段自动退出;

{

delay_ms(100); //调节组合语音间隔

if(SC_BUSY==0) break;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。