📄 4002.c
字号:
/****************************************
语言芯片模块: 4002.c
创建时间:
创建 人:
修改时间:
****************************************/
//4002的数字地址
const unsigned int numAddr[]={0,5,10,15,20,25,30,35,40,45,//0-9
50,55,60,65,70};//安全 保持 点 米 危险
void mosi_1(void)
{
RC2=1;
OC2=1;
}
void mosi_0(void)
{
RC2=1;
OC2=0;
}
void cs4002_1(void) //定义CS为高
{
RC1=1;
OC1=1;
}
void cs4002_0(void) //定义CS为低
{
RC1=1;
OC1=0;
}
void scl4002_1(void)
{
RC0=1;
OC0=1;
}
void scl4002_0(void)
{
RC0=1;
OC0=0;
}
//写一个字节
void write_byte(unsigned char a)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(a&0x01) {mosi_1();}
else {mosi_0();}
scl4002_1();
asm("nop");
asm("nop");
scl4002_0();
asm("nop");
asm("nop");
a>>=1;
}
}
//ISD4004 上电
void powerup(void)
{
cs4002_0();
write_byte(0x00);
write_byte(0x20);
cs4002_1();
}
//设置录音
//设定录音地址 10100 <0,A9,A8 , A7...A0 >
void set_rec(unsigned int Addr)
{
unsigned char AddrH=0,AddrL=0;
AddrL = Addr;
AddrH = ((Addr>>8)|0xA0);
cs4002_0();
write_byte(AddrL);
write_byte(AddrH);
cs4002_1();
}
//录音
//REC 命令10110XXX XXXXXXXX
void rec(void)
{
cs4002_0();
write_byte(0x00);
write_byte(0xb0);
cs4002_1();
}
//设定播放地址 11100 <0,A9 A8, A7...A0 >
void set_play(unsigned int Addr)
{
unsigned char AddrH=0,AddrL=0;
AddrL = Addr;
AddrH = ((Addr>>8)|0xE0);
cs4002_0();
write_byte(AddrL);
write_byte(AddrH);
cs4002_1();
}
//放音
void play(void)
{
cs4002_0();
write_byte(0x00);
write_byte(0xf0);//发命令11110 XXXX
cs4002_1();
}
//停止当前操作
void stop_4002(void)
{
cs4002_0();
write_byte(0x00);
write_byte(0x30);
cs4002_1();
}
//定义延时程序
void delay_4002(unsigned int i) //延迟子函数
{
while(i--);
}
//开始录音
void rec_4002(unsigned int Addr)
{
powerup();
delay_4002(5118);
powerup();
delay_4002(5118);
delay_4002(5118);
set_rec(Addr);
rec();
}
//开始放音
void play_4002(unsigned int Addr)
{
powerup();
delay_4002(5118);
set_play(Addr);
play();
}
/***********************************************
函数名:PlayDistance()
子函数:
输 入:无
输 出:无
功 能:语音测距
------------------------------------------------
************************************************/
void PlayDistance(void)
{
unsigned int i,k;
unsigned int ISD_Addr = 0;
k = distance;
i = k%1000/100;
ISD_Addr = numAddr[i]; //米位
play_4002(ISD_Addr);
OSTimeDly(180);
stop_4002();
OSTimeDly(10);
ISD_Addr = 60;//点
play_4002(ISD_Addr);
OSTimeDly(180);
stop_4002();
OSTimeDly(10);
i = k%100/10; //分米位
ISD_Addr = numAddr[i];
play_4002(ISD_Addr);
OSTimeDly(180);
stop_4002();
OSTimeDly(10);
i = k%10; //厘米位
ISD_Addr = numAddr[i];
play_4002(ISD_Addr);
OSTimeDly(180);
stop_4002();
OSTimeDly(10);
ISD_Addr = 65;//米
play_4002(ISD_Addr);
OSTimeDly(300);
stop_4002();
OSTimeDly(10);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -