|
#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周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|