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

📄 isd4004.txt

📁 c语言实现的16分钟录音芯片ISD4004的操作源程序。可以参考一下
💻 TXT
字号:
#include <reg51.h>

sbit SS = P1^0;				//片选
sbit SCLK = P1^1;			//ISD4004时钟
sbit MOSI = P1^2;			//数据输入
sbit MISO = P1^3;			//数据输出
sbit LED = P1^7;			//指示灯
sbit AN = P1^6;				//执行
sbit STOP = P1^5;			//复位
sbit PR = P1^4;				//PR = 1录音,PR = 0放音
sbit INT = P3^4;				//中断

void YS50();
void ISDX( unsigned char d );
void UP();
void STOPP();
void DSTOP();

main()
{
	unsigned char delay;		//延时参数
	unsigned char isdl,isdh;	//ISD高、低位
	unsigned char n1;

//单片机初始化
	SP = 0x10;
	P0 = 0xFF;
	P1 = 0xFF;
	P2 = 0xFF;
	P3 = 0xFF;
	EA = 0;
lab1:
	LED = 1;			//关指示灯
	DSTOP();			//ISD掉电
	delay = 200;
	while( AN );			//等按AN键
	while( delay-- );		//延时
	UP();				//ISD上电
	isdl = isdh = 0;		//ISD高低位地址置0
	if( PR )				//PR = 1录音
	{
		ISDX( isdl );
		ISDX( isdl );
		ISDX( isdh );
		SS = 1;
	     b1:
		n1 = 10;
		while( n1-- )
		{
			YS50( );
		}
		LED = 0;
		ISDX( 0xB0 );
		SS = 1;
		if( INT )
		{
			while( !AN );
			n1 = 200;
			while( n1-- );
			LED = 1;		//关指示灯
			STOPP();		//停止当前操作
			if( STOP )
			{
				while( !AN );
				STOPP();
				goto b1;
			}
		}
		else
		{
		      b2:
			LED = 1;
			n1 = 15;
			while( !AN )
			{
				while( !n1-- )
				{
					YS50( );
				}
				LED = 0;
				n1 = 15;
				while( !AN )
				{
					while( !n1 )
					{
						YS50( );
					}
					goto b2;
				}
			}
		}
	}
	else					//PR = 0 放音
	{
		while( !AN );
		ISDX( isdl );
		ISDX( ( isdh | 0xE0 ) & 0xE7  );
		SS = 1;
	     b3:
		LED = 0;
		ISDX( 0xF0 );
	 	SS = 1;
		if( STOP )
		{
			while( INT );
			LED = 1;
			STOPP( );
			SS = 0;
			SCLK = 0;
			SCLK = 1;
			if( !MISO )
			{
				SCLK = 0;
				SS = 1;
				STOPP( );
				if( STOP)
				{
					while( !AN )
					{
						goto b3;
					}
				}
			}
		}
	}
	SCLK = 0;
	SS = 1;
	STOPP( );
	goto lab1;
}


/* ISD4004 芯片驱动*/
/**********************************************50 ms 延时 **********************************************/

void YS50( )
{
	TMOD = 1;
	TH0 = 0x3C;									//50ms延时初值置入
	TL0 = 0xB0;
	TR0 = 1;
	while( !TF0 );
	TF0 = 0;
	TR0 = 0;
}



/* ISD4004 SPI 写入程序 */

void ISDX( unsigned char d)
{
	unsigned char i,j;
	SS = 0;						//开片选
	SCLK = 0;					//时钟 SCLK = 0 
	j = d;
	for( i = 0;i < 8;i++)
	{
		if( j & 0x01 )				//数据写 MOSI 
		{
			MOSI = 1;
		}
		else
		{
			MOSI = 0;
		}
		SCLK = 1;				//时钟 SCLK = 1
		j = j >> 1;
		SCLK = 0;				//时钟 SCLK = 0
	}
}



/* ISD 上电 */

void UP( )
{
	ISDX( 20 );					//发 00100XXXXXXXXXXX
	SS = 1;						//关片选
	YS50( );					//延时 50 ms
	YS50( );					//延时 50 ms
}

void STOPP( )
{
	ISDX( 30 );					//发 0X110XXX
	SS = 1;						//关片选
	YS50( );					//延时 50 ms
	YS50( );					//延时 50 ms
}


void DSTOP( )
{
	ISDX( 10 );					//发 0X010XXXXXXXXXX				
	SS = 1;						//关片选
	YS50( );					//延时 50 ms
	YS50( );					//延时 50 ms
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -