yuan90826 发表于 2011-7-31 12:54:51

刚刚用430写了个红外解码程序……非定时器红外解码,共享一下……

#include "msp430x14x.H "
#include "IR.h"
#include "12864.h"
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

unsigned char Ir_Buf;
void Init_Clk(void)
{ uint delay;
BCSCTL1 &= ~XT2OFF;                           // XT2on
BCSCTL2 |= SELM1 + SELS;                        // MCLK为8M   
for(delay=5000;delay>0;delay--);
IFG1 &=~OFIFG;      
TACCR0=0XFFFF;
}
void InitP1(void)
{
P1DIR &=~BIT7;//配置为输入
P1SEL &=~BIT7;//选择为功能模块
P1IES |= BIT7;//选择触发方式1为下降沿触发,0上升沿
P1IE|= BIT7;//使能中断
P1IFG &=~BIT7;//清除标志位
}
void IR(void)
{ uchar i,j;
uint temp=0;
if((P1IFG&BIT7)==BIT7)
{ P1IFG &=~BIT7;//清除终端标志位
    P1IE&=~BIT7;//关闭中断
}

loop:
    for(i=0;i<4;i++)
    {
      if(Ir_Pin==0) break;
      if(i==3)
      {
      P1IE |= BIT7;
      return;
      }
    }
    delay_us(270);
    if(Ir_Pin)
      goto loop;
    while(!Ir_Pin);//等待红外信号到来
   
    for(i=0;i<4;i++)                        //4个字节      
      for(j=0;j<8;j++)                        //每个字节8位
      {
         while(Ir_Pin)
          delay_us(130);//等待低电平
         while(!Ir_Pin)
          delay_us(130);//等待高电平
         while(Ir_Pin)//计算高电平时间
         {
            delay_us(130);
            temp++;
            if(temp>=30)
            {
            P1IE |= BIT7;//使能中断
            return;
            }
         }
         
         Ir_Buf>>=1;//数据右移一位
            
         if(temp>11)
         Ir_Buf|=0x80;//如果高电平时间大于1.69ms则高位补1
         temp = 0;
      }

Scan_Ir();//红外扫描
P1IFG &=~BIT7;//清除标志位
P1IE |= BIT7;//打开中断
}
void Scan_Ir(void)
{
if(Ir_Buf==0X45)
    String(2,1,"关机   ");
if(Ir_Buf==0x44)
    String(2,1,"CH-      ");
if(Ir_Buf==0X07)
    String(2,1,"上一曲   ");
if(Ir_Buf==0X16)
    String(2,1,"左三   ");
if(Ir_Buf==0X0c)
    String(2,1,"1      ");
if(Ir_Buf==0X08)
    String(2,1,"4      ");
if(Ir_Buf==0x42)
    String(2,1,"7      ");
/*****************************/   
if(Ir_Buf==0X46)
    String(2,1,"返回   ");
if(Ir_Buf==0X40)
    String(2,1,"CH+      ");
if(Ir_Buf==0X15)
    String(2,1,"下一曲   ");
if(Ir_Buf==0X19)
    String(2,1,"右三   ");
if(Ir_Buf==0x18)
    String(2,1,"2      ");
if(Ir_Buf==0X1c)
    String(2,1,"5      ");
if(Ir_Buf==0X52)
    String(2,1,"8      ");
/****************************/   
if(Ir_Buf==0X47)
    String(2,1,"设置   ");
if(Ir_Buf==0X43)
    String(2,1,"EQ       ");
if(Ir_Buf==0x09)
    String(2,1,"暂停   ");
if(Ir_Buf==0X0d)
    String(2,1,"0      ");
if(Ir_Buf==0X5e)
    String(2,1,"3      ");
if(Ir_Buf==0X5a)
    String(2,1,"6      ");
if(Ir_Buf==0X4a)
    String(2,1,"9      ");
}

点击此处下载 ourdev_662726OICZOH.rar(文件大小:22K) (原文件名:非定时器红外解码.rar)

gold2073 发表于 2011-7-31 22:06:56

mark
页: [1]
查看完整版本: 刚刚用430写了个红外解码程序……非定时器红外解码,共享一下……