⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4002.c

📁 用超声波来测量距离
💻 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 + -