📄 iipod.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 + -