📄 +
字号:
//*************************************************************************
//红外解码 暂时只是获得红外 可以通过设置断点来观察获得的红外码
//提示 红外需要5伏供电 才可以准确读出数据
//****************************************************************************
#include "msp430x14x.h" //xt1 32768KHZ xt2 8MHZ ,红外接收头接于P1.0
#include "jiema.h"
#include "delay.h"
unsigned char IRcode[4]={0,0,0,0}; //定义一个4字节的数组用来存储代码
void int_ex(void) //初始化P1.0口外部中断
{
P1DIR&=HONGWAI_0;//输入口
P1SEL&=HONGWAI_0; //使用普通IO
P1IE|=HONGWAI_1;//外部中断允许
P1IES|=HONGWAI_1;//下降沿触发中断
P1IFG&=BIT0; // 清除P1口中断标志
}
void get_jiema()
{
char m,n,k,CodeTemp;
P1IE&=HONGWAI_0;//禁止P1.0中断
if(P1IFG&HONGWAI_1==HONGWAI_1)
{ //10
// P1IFG=0;//清中断标志
for(k=0;k<10;k++)
{//9
delay_us(700); //delay 0.7ms
if (HONGWAI_IN) //如果0.7ms后HONGWAI_IN=1,说明不是引导码
{//7
k=10;break;
}//7
else
if(k==9) //如果持续了10×0.7ms=7ms的低电平,说明是引导码
{//0
while(HONGWAI_IN==0);
while(HONGWAI_IN==1);//跳过4.5ms延时
for(m=0;m<4;m++) //分别读取4个字节
{//1
for(n=1;n<=8;n++) //每个字节8个bit的判断
{ //2
while(HONGWAI_IN==0); //等待上升沿
delay_us(700); //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
if(HONGWAI_IN) //如果IRsignal是"1",则向右移入一位"1"
{//3
delay_ms(1);
CodeTemp=CodeTemp|0x80;
if(n<8) CodeTemp=CodeTemp>>1;
}//3
else
if(n<8)CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则向右移一位,自动补"0"
}//2
IRcode[m]=CodeTemp;
CodeTemp=0;
}//1
beep_out;
if((IRcode[0]==0xff)&(IRcode[1]==0xff))
{
beep_0;
}
else
{
beep_1;
delay_ms(100);
beep_0;
}
// delay_ms(200);
}//0
}//9
}//10
P1IE|=HONGWAI_1;//外部中断允许
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -