搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2011-7-31 12:54:51 | 显示全部楼层 |阅读模式
#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[4];
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[2]==0X45)
    String(2,1,"关机     ");
  if(Ir_Buf[2]==0x44)
    String(2,1,"CH-      ");
  if(Ir_Buf[2]==0X07)
    String(2,1,"上一曲   ");
  if(Ir_Buf[2]==0X16)
    String(2,1,"左三     ");
  if(Ir_Buf[2]==0X0c)
    String(2,1,"1        ");
  if(Ir_Buf[2]==0X08)
    String(2,1,"4        ");
  if(Ir_Buf[2]==0x42)
    String(2,1,"7        ");
/*****************************/   
  if(Ir_Buf[2]==0X46)
    String(2,1,"返回     ");
  if(Ir_Buf[2]==0X40)
    String(2,1,"CH+      ");
  if(Ir_Buf[2]==0X15)
    String(2,1,"下一曲   ");
  if(Ir_Buf[2]==0X19)
    String(2,1,"右三     ");
  if(Ir_Buf[2]==0x18)
    String(2,1,"2        ");
  if(Ir_Buf[2]==0X1c)
    String(2,1,"5        ");
  if(Ir_Buf[2]==0X52)
    String(2,1,"8        ");
/****************************/   
  if(Ir_Buf[2]==0X47)
    String(2,1,"设置     ");
  if(Ir_Buf[2]==0X43)
    String(2,1,"EQ       ");
  if(Ir_Buf[2]==0x09)
    String(2,1,"暂停     ");
  if(Ir_Buf[2]==0X0d)
    String(2,1,"0        ");
  if(Ir_Buf[2]==0X5e)
    String(2,1,"3        ");
  if(Ir_Buf[2]==0X5a)
    String(2,1,"6        ");
  if(Ir_Buf[2]==0X4a)
    String(2,1,"9        ");
}

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-7-31 22:06:56 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-24 23:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表