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

📄 isd4004_v08.c

📁 使用SPCE061A单片机控制ISD4004_16M语音芯片放音
💻 C
字号:
//保留了除IOB0、IOB1、IOB3的其它位值,不改变MISO的值
//按键读取当时状态!	
#define	Port_IOA_Data   		(unsigned int*)0x7000        //portA data
#define Port_IOA_Buffer         (unsigned int*)0x7001        //portA buffer
#define Port_IOA_Dir            (unsigned int*)0x7002        //portA direction
#define Port_IOA_Attrib         (unsigned int*)0x7003        //portA attribution
#define Port_IO_RL              (unsigned int*)0x7004        //portA last data latch

#define Port_IOB_Data           (unsigned int*)0x7005        //portB data
#define Port_IOB_Buffer         (unsigned int*)0x7006        //portB buffer
#define Port_IOB_Dir            (unsigned int*)0x7007        //portB direction
#define Port_IOB_Attrib         (unsigned int*)0x7008        //portB attribution

#define Port_Feed_Back          (unsigned int*)0x7009        //portB.4 portB.5 SFC
#define Port_TimerA_Data        (unsigned int*)0x700A        //timer A data
#define Port_TimerA_Ctrl        (unsigned int*)0x700B        //timer A control
#define Port_TimerB_Data        (unsigned int*)0x700C        //timer B data
#define Port_TimerB_Ctrl        (unsigned int*)0x700D        //timer B control
#define Port_TimeBaseSetup      (unsigned int*)0x700E        //time base configuration
#define Port_INT_Ctrl           (unsigned int*)0x7010        //interrupt control
#define Port_INT_Clear          (unsigned int*)0x7011        //Interrupt clear register
#define Port_Watchdog_Clear     (unsigned int*)0x7012        //clear watchdog 

#define SS_0					0xFFF7
#define SS_1					0x0008
#define SCLK_0					0xFFFE
#define SCLK_1					0x0001
#define MOSI_0					0xFFFD
#define MOSI_1					0x0002
#define	SS_SCLK_MOSI_0			0xFFF4
#define	SS_SCLK_1				0x0009

//#include	"SPCE061.H"
void Delay()
{
	int i=0;
	for(i=0;i<1800;i++)
	{
		*Port_Watchdog_Clear=0x0001;
	}
}
//===============================================================================================
//POWER UP 命令
//===============================================================================================
void poweron()
{
	int i=0;
	int m=0x0000;
	int j=0x0000;
	*Port_IOB_Dir|=0x000b;						//ss,IOB3,输出;sclk,IOB0,输出;MOSI,IOB1,输出;MISO,IOB2,输入;
	*Port_IOB_Attrib|=0x000f;
	*Port_IOB_Data&=0xfff0;
	
	m=0x0020;
	for(i=0;i<8;i++)
	{
		
		*Port_IOB_Data&=SS_SCLK_MOSI_0;			//ss=0,片选;sclk=0,时钟低电平
		j=m&0x0001;
		j=j<<1;
		*Port_IOB_Data|=j;
		*Port_IOB_Data|=SCLK_1;					//sclk=1,时钟高电平;时钟上升沿,传入数据
		m=m>>1;
	}
	*Port_IOB_Data|=SS_1;						//ss=1,不片选;sclk=1,时钟高电平
	Delay();
}
//===============================================================================================
//POWERDOWN
//===============================================================================================
void powerdown()
{
	int i=0;
	int m=0x0000;
	int j=0x0000;
	
	m=0x0040;
	for(i=0;i<8;i++)
	{
		
		*Port_IOB_Data&=SS_SCLK_MOSI_0;						//ss=0,片选;sclk=0,时钟低电平
		j=m&0x0001;
		j=j<<1;
		*Port_IOB_Data|=j;
		*Port_IOB_Data|=SCLK_1;						//sclk=1,时钟高电平;时钟上升沿,传入数据
		m=m>>1;
	}
	*Port_IOB_Data|=SS_1;						//ss=1,不片选;sclk=1,时钟高电平
	Delay();	
}
//===============================================================================================
//STOP
//===============================================================================================
void stop()
{
	int i=0;
	int m=0x0000;
	int j=0x0000;
	
	m=0x0030;
	for(i=0;i<8;i++)
	{
		
		*Port_IOB_Data&=SS_SCLK_MOSI_0;						//ss=0,片选;sclk=0,时钟低电平
		j=m&0x0001;
		j=j<<1;
		*Port_IOB_Data|=j;
		*Port_IOB_Data|=SCLK_1;						//sclk=1,时钟高电平;时钟上升沿,传入数据
		m=m>>1;
	}
	*Port_IOB_Data|=SS_1;						//ss=1,不片选;sclk=1,时钟高电平
	Delay();	
}
//===============================================================================================
//PLAY
//===============================================================================================
void play(int a)
{
	int i=0;
	int m=0x0000;
	int j=0x0000;
	
//===============================================================================================
//SET PLAY 命令
//===============================================================================================	
//	*Port_IOB_Data&=0xfff7;						//ss=0,片选
	m=0x00e0;
	for(i=0;i<16;i++)
	{
		*Port_IOB_Data&=SS_SCLK_MOSI_0;
		j=a&0x0001;
		j=j<<1;
		*Port_IOB_Data|=j;
		*Port_IOB_Data|=SCLK_1;						//sclk=1,时钟高电平;时钟上升沿,传入数据
		a=a>>1;
	}
	for(i=0;i<8;i++)
	{
		*Port_IOB_Data&=SS_SCLK_MOSI_0;
		j=m&0x0001;
		j=j<<1;
		*Port_IOB_Data|=j;
		*Port_IOB_Data|=SCLK_1;						//sclk=1,时钟高电平;时钟上升沿,传入数据
		m=m>>1;
		}
	*Port_IOB_Data|=SS_1;
	*Port_Watchdog_Clear=0x0001;
//===============================================================================================
//PLAY 命令
//===============================================================================================	
	m=0x00f0;
//	*Port_IOB_Data&=0xfff7;
	for(i=0;i<8;i++)
	{
		*Port_IOB_Data&=SS_SCLK_MOSI_0;
			j=m&0x0001;
		j=j<<1;
		*Port_IOB_Data|=j;
		*Port_IOB_Data|=SCLK_1;						//sclk=1,时钟高电平;时钟上升沿,传入数据
		m=m>>1;
	}
	*Port_IOB_Data|=SS_1;
	*Port_Watchdog_Clear=0x0001;	
}
//===============================================================================================
//REC
//===============================================================================================
void rec()
{
	int i=0;
	int m=0x0000;
	int j=0x0000;
	int a=0x0047;
	
}
//===============================================================================================
//MC
//===============================================================================================
void mc()
{
	int i=0;
	int m=0x0000;
	int j=0x0000;
	int a=0x0047;
	
}
//===============================================================================================
//RINT
//===============================================================================================
void rint()
{
	int i=0;
	int m=0x0000;
	int j=0x0000;
	int r=0,e=0,k=0;
	
	m=0x0030;
	for(i=0;i<8;i++)
	{
		*Port_IOB_Data&=SS_SCLK_MOSI_0;
		j=m&0x0001;
		j=j<<1;
		*Port_IOB_Data|=j;
		*Port_IOB_Data|=SCLK_1;						//sclk=1,时钟高电平;时钟上升沿,传入数据
		m=m>>1;
	}
	
//	*Port_IOB_Data|=SS_1;
	*Port_Watchdog_Clear=0x0001;
//读出数据
	for(i=0;i<2;i++)
	{
		*Port_IOB_Data&=SCLK_0;
		k=*Port_IOB_Data&0x0004;
		k=k>>2;
		e|=k;
		e=e<<1;
		*Port_IOB_Data|=SCLK_1;
	}
	for(i=0;i<16;i++)
	{
		*Port_IOB_Data&=SCLK_0;
		k=*Port_IOB_Data&0x0004;
		k=k>>2;
		r|=k;
		r=r<<1;
		*Port_IOB_Data|=SCLK_1;
	}
}
//===============================================================================================
//
//===============================================================================================



int main()

{
/*	int i=0;
	int m=0x0000;
	int j=0x0000;
	int r=0,e=0,k=0;
	
	poweron();
	play(0x0000);
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	Delay();
	m=0x0030;
	for(i=0;i<8;i++)
	{
		*Port_IOB_Data&=SS_SCLK_MOSI_0;
		j=m&0x0001;
		j=j<<1;
		*Port_IOB_Data|=j;
		*Port_IOB_Data|=SCLK_1;						//sclk=1,时钟高电平;时钟上升沿,传入数据
		m=m>>1;
	}
	
//	*Port_IOB_Data|=SS_1;
	*Port_Watchdog_Clear=0x0001;
//读出数据
	for(i=0;i<2;i++)
	{
		*Port_IOB_Data&=SCLK_0;
		k=*Port_IOB_Data&0x0004;
		k=k>>2;
		e|=k;
		e=e<<1;
		*Port_IOB_Data|=SCLK_1;
	}
	for(i=0;i<16;i++)
	{
		*Port_IOB_Data&=SCLK_0;
		k=*Port_IOB_Data&0x0004;
		k=k>>2;
		r|=k;
		r=r<<1;
		*Port_IOB_Data|=SCLK_1;
	}*/




 	unsigned int t=0,I_Key=0;
	 
	//设置A口为带下拉电阻的输入	 
	*Port_IOA_Dir=0x0000;
	*Port_IOA_Attrib=0x0000;
	*Port_IOA_Data=0x0000;
	
	while(1)
	{
		t=*Port_IOA_Data;
		I_Key=t&0xffff;						//获取A口输入的键值
		switch(I_Key)
		{
			case 0x0000:			break;			            //无键按下
			case 0x0001:
						{poweron();
						play(0x0047);}			        	// I_Key 1
									break;
			case 0x0002:stop();				        	// I_Key 2
			break;
			case 0x0004:					        // I_Key 3
			case 0x0008:				        	// I_Key 4
			case 0x0010:				        	// I_Key 5
			case 0x0020:				        	// I_Key 6
			case 0x0040:					        // I_Key 7
			case 0x0080:					        // I_Key 8
							break;
			default:
							break;	   
		}
	}
}

⌨️ 快捷键说明

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