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

📄 iipod.c

📁 ipod 控制程序不容易找到的资料播放暂停上一曲下一曲等功能
💻 C
字号:

#include <reg51.h>
#include <intrins.h>
#include "type.h"
#include "iPod.h"
#include "gpio.h"


extern GPIO volatile xdata *gGpio;

sbit IPOD_CTRL 		= P1^0;
sbit IDET  = P1^1;
sbit IDCHARGE = P1^3;
//sbit IPOD_CMD_OUT	= P1^3;

unsigned char code iPod_Head[]			= {0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,};
unsigned char code iPod_PowerPlay[] 	= {0x7F, 0xD5, 0x56, 0x04, 0x81, 0x00, 0x50, 0x12,};
unsigned char code iPod_Next[] 			= {0x7F, 0xD5, 0x56, 0x04, 0x81, 0x00, 0x42, 0x16, 0x7F,};
unsigned char code iPod_Pre[]			= {0x7F, 0xD5, 0x56, 0x04, 0x81, 0x00, 0x41, 0x16, 0xBF,};
unsigned char code iPod_Forward[] 		= {0x7F, 0xD5, 0x56, 0x04, 0x81, 0x00, 0x42, 0x16, 0x7F, 0x7F,};
unsigned char code iPod_Backward[]		= {0x7F, 0xD5, 0x56, 0x04, 0x81, 0x00, 0x41, 0x16, 0xBF, 0xBF,};
unsigned char code iPod_Cmd_End[]		= {0x7F, 0xD5, 0x56, 0x04, 0x81, 0x00, 0x40, 0x16,};
//unsigned char  Test_Cmd[]			= {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,};

unsigned char gDataLine = 0x80;
unsigned char gWait = 0x00;
unsigned char gCmdStart = 0;
unsigned char gWaitCharge = 0;

//delay n cycles, one cycle is 100us
void Delay20us(unsigned int n)
{
	while(n)
	{
		_nop_();
		n--;
		n++;
		n--;
	}
}

void iPodInitTimer(void)
{
	
	TMOD = 0x11;
	/*
	TH0 = 0xD0;
	TL0 = 0xF0;
	//*/
	
	TH0 = TH_NUM;
	TL0 = TL_NUM;		//0xa2
	//*/
	//EA = 1;
	ET0 = 1;

	TH1 = 0x3C;
	TL1 = 0xB0;
	ET1 = 1;
	TR1 = 1;

	EA = 1;
	//TR0 = 1;
}


char IsIpodInsert(void)
{
//	return !(gGpio->PortB.rGPIO_IN & 0x08);
    IDET = 1;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();_nop_();
    return (!IDET);
 
} 

void OpenIpodCharge(void)
{
	IDCHARGE = 1;
}

void CloseIpodCharge(void)
{
	IDCHARGE = 0;
}


void DelayCharge(void) interrupt 3 using 2
{
	TL1 = 0xB0;
	TH1 = 0x3C;
	if (gWaitCharge == 60)
	{
		ET1 = 0;
		//OpenIpodCharge();
		gWaitCharge = 0;
	}
	else
	{
		gWaitCharge++;
	}
}


void DelayTimer(void) interrupt 1 using 3
{
	
	TL0 = TL_NUM;
	TH0 = TH_NUM;
	//*/
	/*
	TL0 = 0xF0;
	TH0 = 0xD0;
	//*/
	if (gDataLine)
	{
		IPOD_CTRL = 1;
	}
	else
	{
		IPOD_CTRL = 0;	
	}
	gWait = 0x00;
}

//send command 
void iPodSendCmd(unsigned char *pCmd, unsigned char num)
{
	unsigned char i, j;
	unsigned char temp;
	
	for (i = 0; i < num; ++i)
	{	
		temp = pCmd[i];
		for (j = 0; j < 8; ++j)
		{
			gDataLine = temp & 0x80;
			gWait = 0x01;
			while (gWait);
			temp <<= 1;
		}
	}
	gDataLine = 1;
	//IPOD_CTRL = 1;
}

void iPodPowerOn(void)
{
	
	unsigned char i;
	TR0 = 1;
	IPOD_CTRL = 1;
	
	//while(1);
	iPodSendCmd(iPod_Head, 8);
	//Delay20us(7844);
	for (i = 0; i < 6; ++i)			//6
	{
		Delay20us(PON_NUM);		//7844
		iPodSendCmd(iPod_PowerPlay, 8);
	}
	
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(PON_NUM);
		
	TR0 = 0;
	//*/

	/*
	TR0 = 1;
	IPOD_CTRL = 1;
	
	//while(1);
	iPodSendCmd(iPod_Head, 8);
	Delay20us(25000);

	iPodSendCmd(iPod_PowerPlay, 8);
	Delay20us(25000);		//7844
	
	iPodSendCmd(iPod_PowerPlay, 8);
	Delay20us(25000);

	iPodSendCmd(iPod_PowerPlay, 8);
	Delay20us(25000);

	iPodSendCmd(iPod_PowerPlay, 8);
	Delay20us(25000);

	iPodSendCmd(iPod_PowerPlay, 8);
	Delay20us(25000);

	iPodSendCmd(iPod_Cmd_End, 8);
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(25000);
		
	TR0 = 0;
	//*/
}

void iPodPowerOff(void)
{
	unsigned char i;
	TR0 = 1;
	IPOD_CTRL = 1;
	for (i = 0; i < 40; ++i)
	{
		iPodSendCmd(iPod_PowerPlay, 8);
		Delay20us(POFF_NUM);		//2373
	}
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(POFF_NUM);
	TR0 = 0;
}

void iPodPlayPause(void)
{
	iPodPowerOn();
}

void iPodPre(void)
{
	unsigned char i;
	TR0 = 1;
	IPOD_CTRL = 1;

	iPodSendCmd(iPod_Head, 8);
	//Delay20us(2347);
	
	for (i = 0; i < 4; ++i)
	{	
		Delay20us(P_N_NUM);			//2321
		iPodSendCmd(iPod_Pre, 9);
	}
	
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(P_N_NUM);

	TR0 = 0;
	/*
	TR0 = 1;
	IPOD_CTRL = 1;

	iPodSendCmd(iPod_Head, 8);
	Delay20us(2347);
	
	iPodSendCmd(iPod_Pre, 9);
	Delay20us(2321);
	
	iPodSendCmd(iPod_Pre, 9);
	Delay20us(2321);

	iPodSendCmd(iPod_Pre, 9);
	Delay20us(2321);
	
	iPodSendCmd(iPod_Pre, 9);
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(2321);

	TR0 = 0;
	//*/
}

void iPodNext(void)
{
	unsigned char i;
	TR0 = 1;
	IPOD_CTRL = 1;

	iPodSendCmd(iPod_Head, 8);
	//Delay20us(2347);
	
	for (i = 0; i < 4; ++i)
	{	
		Delay20us(P_N_NUM);
		iPodSendCmd(iPod_Next, 9);
	}
	
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(P_N_NUM);

	TR0 = 0;
	/*
	TR0 = 1;
	IPOD_CTRL = 1;

	iPodSendCmd(iPod_Head, 8);
	Delay20us(2347);
	
	iPodSendCmd(iPod_Next, 9);
	Delay20us(2321);
	
	iPodSendCmd(iPod_Next, 9);
	Delay20us(2321);

	iPodSendCmd(iPod_Next, 9);
	Delay20us(2321);
	
	iPodSendCmd(iPod_Next, 9);
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(2321);

	TR0 = 0;
	//*/
}


void iPodBackward(void)
{
	unsigned char i;
	TR0 = 1;
	IPOD_CTRL = 1;
	if (gCmdStart == 0)
	{
		gCmdStart = 1;
		iPodSendCmd(iPod_Head, 8);
		Delay20us(F_B_NUM);	
	}

	for (i = 0; i < 4; ++i)
	{
		iPodSendCmd(iPod_Backward, 9);
		Delay20us(F_B_NUM);
	
		iPodSendCmd(iPod_Backward, 9);
		Delay20us(F_B_NUM);
	
		iPodSendCmd(iPod_Backward, 10);
		Delay20us(F_B_NUM);
	}
/*
	iPodSendCmd(iPod_Backward, 9);
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(21500);
*/
	TR0 = 0;
	//*/
}

void iPodForward(void)
{
	unsigned char i;
	TR0 = 1;
	IPOD_CTRL = 1;
	if (gCmdStart == 0)
	{
		gCmdStart = 1;
		iPodSendCmd(iPod_Head, 8);
		Delay20us(F_B_NUM);		//2344
	}

	for (i = 0; i < 4; ++i)
	{
		iPodSendCmd(iPod_Forward, 9);
		Delay20us(F_B_NUM);		//2317
	
		iPodSendCmd(iPod_Forward, 9);
		Delay20us(F_B_NUM);		//2314
	
		iPodSendCmd(iPod_Forward, 10);
		Delay20us(F_B_NUM);		//2314
	}
/*
	iPodSendCmd(iPod_Forward, 9);
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(21500);			//2274
*/
	TR0 = 0;
	//*/

}



void iPodForwardEnd(void)
{
	gCmdStart = 0;
	TR0 = 1;
	IPOD_CTRL = 1;

	iPodSendCmd(iPod_Forward, 9);
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(F_B_NUM);			//2274

	TR0 = 0;
}

void iPodBackwardEnd(void)
{
	gCmdStart = 0;
	TR0 = 1;
	IPOD_CTRL = 1;

	iPodSendCmd(iPod_Backward, 9);
	iPodSendCmd(iPod_Cmd_End, 8);
	Delay20us(F_B_NUM);			//2274

	TR0 = 0;
}


#ifdef IPOD_DEBUG
void main(void)
{		
		IPOD_CMD_OUT = 0;
		InitTimer();
		//iPodPowerOff();
		iPodPowerOn();
		
		

		iPodForward();
		iPodForward();
		iPodForward();

		iPodBackward();
		iPodBackward();
		iPodBackward();

		iPodNext();
		iPodPre();
		iPodPre();
		iPodNext();
		iPodPre();
		
		iPodPlayPause();
		iPodPlayPause();
		iPodPlayPause();
		iPodPowerOff();
		
		/*
		while(1)
		{
			SendCmd1(Test_Cmd);
			//SendCmd(Test_Cmd);
		}
		//*/
		//IPOD_CTRL = 0;
	
		while(1);
	
}

#endif

⌨️ 快捷键说明

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