u32 Remote_Odr=0; //ÃüáîÔY′æ′|
u8 Remote_Cnt=0; //°′¼ü′Îêy,′Ë′ΰ′ϼüμÄ′Îêy
u8 Remote_Rdy=0; //oìía½óêÕμ½êy¾Y
//3õê¼»ˉoìía½óêÕòy½ÅμÄéèÖÃ
//¿aÆôÖD¶Ï,2¢ó3éä
void Remote_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //GPIO
NVIC_InitTypeDef NVIC_InitStructure; //ÖD¶Ï
EXTI_InitTypeDef EXTI_InitStructure; //ía2¿ÖD¶ÏÏß
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //éÏà-êäèë
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1); //Ñ¡Ôñ

A1ËùÔúμÄGPIO1ü½ÅóÃ×÷ía2¿ÖD¶ÏÏß·EXIT1
EXTI_InitStructure.EXTI_Line = EXTI_Line1; //ía2¿Ïß·EXIT1
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //éèíaía2¿ÖD¶ÏÄ£ê½:EXTIÏß·ÎaÖD¶ÏÇëÇó
EXTI_Mode_Event ;//éèÖà EXTIÏß·Îaê¼tÇëÇó
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ía2¿ÖD¶Ï′¥·¢ÑØÑ¡Ôñ:éèÖÃêäèëÏ߷ϽμÑØÎaÖD¶ÏÇëÇó
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //ê1Äüía2¿ÖD¶ÏDÂ×′ì¬
EXTI_Init(&EXTI_InitStructure); //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //ê1Äü°′¼üËùÔúμÄía2¿ÖD¶Ïí¨μà
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÏèÕ¼óÅÏ輶2¼¶
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //′óóÅÏ輶1¼¶
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äüía2¿ÖD¶Ïí¨μà
NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
}
//¼ì2aÂö3å¿í¶è
//×î3¤Âö¿íÎa5ms
//·μ»ØÖμ:x,′ú±íÂö¿íÎax*20us(x=1~250);
u8 Pulse_Width_Check(void)
{
u8 t=0;
while(RDATA)
{
t++;delay_us(19);
if(t==250)return t; //3¬ê±òç3ö
}
return t;
}
//′|àíoìía½óêÕ
/*-------------------------D-òé--------------------------
¿aê¼à-μí9ms,½ó×ÅêÇò»¸ö4.5msμĸßÂö3å,í¨ÖaÆ÷¼t¿aê¼′«Ëíêy¾YáË
½ó×ÅêÇ·¢Ëí4¸ö8λ¶t½øÖÆÂë,μúò»¶t¸öêÇò£¿Ø궱eÂë(REMOTE_ID),μúò»¸öÎa
ÕyÂë(0),μú¶t¸öÎa·′Âë(255),½ó×Åὸöêy¾YêǼüÖμ,μúò»¸öÎaÕyÂë
μú¶t¸öÎa·′Âë.·¢Ëííêoó40ms,ò£¿ØÔù·¢Ëíò»¸ö9msμí,2ms¸ßμÄÂö3å,
±íê¾°′¼üμÄ′Îêy,3öÏÖò»′ÎÔòÖ¤Ã÷Ö»°′ÏÂáËò»′Î,èç1û3öÏÖ¶à′Î,Ôò¿é
òÔèÏÎaêÇ3ÖDø°′ϸüü.
---------------------------------------------------------*/
//ía2¿ÖD¶Ï·tÎñ3ìDò
void EXTI1_IRQHandler(void)
{
u8 res=0;
u8 OK=0;
u8 RODATA=0;
while(1)
{
if(RDATA)//óD¸ßÂö3å3öÏÖ
{
res=Pulse_Width_Check();//»ñμÃ′Ë′θßÂö3å¿í¶è
if(res==250)break;//·ÇóDóÃDÅoÅ
if(res>=200&&res<250)OK=1; //»ñμÃÇ°μ¼Î»(4.5ms)
else if(res>=85&&res<200) //°′¼ü′Îêy¼óò»(2ms)
{
Remote_Rdy=1;//½óêüμ½êy¾Y
Remote_Cnt++;//°′¼ü′ÎêyÔö¼ó
// dispnone(3412);
break;
}
else if(res>=50&&res<85){RODATA=1;}//1.5ms
else if(res>=10&&res<50){RODATA=0;}//500us
if(OK)
{
Remote_Odr<<=1;
Remote_Odr+=RODATA;
Remote_Cnt=0; //°′¼ü′ÎêyÇåáã
}
}
}
EXTI_ClearITPendingBit(EXTI_Line1); //Çå3yEXTI1Ïß·1òÆeλ
}
//′|àíoìía¼üÅì
//·μ»ØÏàó|μļüÖμ
u8 Remote_Process(void)
{
u8 t1,t2;
t1=Remote_Odr>>24; //μÃμ½μØÖ·Âë
t2=(Remote_Odr>>16)&0xff;//μÃμ½μØÖ··′Âë
Remote_Rdy=0;//Çå3y±ê¼Ç
if(t1==(u8)~t2&&t1==REMOTE_ID)//¼ìÑéò£¿Ø궱eÂë(ID)¼°μØÖ·
{
t1=Remote_Odr>>8;
t2=Remote_Odr;
if(t1==(u8)~t2)return t1; //′|àí¼üÖμ
}
return 0;
}
u8 keymatch(void)
{ u8 irdata;
irdata=Remote_Process();
switch(irdata)
{
case 48: return(1);
case 24: return(2);
case 122: return(3);
case 16: return(4);
case 56: return(5);
case 90: return(6);
case 66: return(7);
case 74: return(8);
case 82: return(9);
case 104: return(17);
case 194: return(11);
case 34: return(12);
case 226: return(13);
case 224: return(14);
case 168: return(15);
case 144: return(16);
case 162: return(0);
case 152: return(18);
case 176: return(19);
case 2: return(20);
default:return(99);
}
}
一周热门 更多>