⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +

📁 基于msp430和1286的红外控制的万年历
💻
字号:
//*************************************************************************
//红外解码  暂时只是获得红外 可以通过设置断点来观察获得的红外码
//提示 红外需要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 + -