• 大小: 174.88 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-12-02
  • 语言: 其他
  • 标签: msp430F149  

资源简介

简单的通过msp430操作1838T接收红外线遥控的代码

资源截图

代码片段和文件信息


#include  

#define   uchar   unsigned char
#define   uint    unsigned int
#define t_3ms5  2300
#define t_1ms   666
#define RDIN P1IN//红外线模块OUT所在的端口输入寄存器RD必须是有中断功能的端口
#define RDDIR P1DIR//红外线模块OUT所在的端口输入/输出方向寄存器
#define RDIES P1IES//红外线模块OUT所在的端口中断触发沿选择寄存器
#define RDIFG P1IFG//红外线模块OUT所在的端口中断标志寄存器
#define RDIE P1IE//红外线模块OUT所在的端口中断使能寄存器
#define RDbit BIT6//红外线模块OUT所在的端口的位
const uint RDbit_back=~RDbit;
uchar get_code[4] = {0};
uint  timer;
#include “msp430.h“

void delay(uint time)    //10ms--10000
{
 while(time--);
}

uchar rd_dat()
{
  uchar stat;
  stat = RDIN;
  return (stat);
}

uchar get_num()
{
  uchar ijrddat=0;
  //_DINT();             //关闭中断
  for(j=0;j<4;j++)//16位的用户码,8位按键数据码以及8位按键数据码反码
  { 
    //如是输出数据1,
    //则先输出0.56ms的低电平,
    //再输出1.69ms的高电平,共2.25ms;
    //若是输出数据0,
    //则先输出0.56ms的低电平,
    //再输出0.565ms的高电平,共1.125ms
    for(i=8;i>0;i--)
    {
      dat>>=1; //一位一位获得八位数据
      do
        rd=rd_dat();//获取红外线模块OUT所在的端口RD的值
      while(!(rd & RDbit)); //等待低电平结束,出现高电平
      set_timer_b0(); //开始检测高电平时间,打开定时器
      do
        rd=rd_dat();//获取红外线模块OUT所在的端口RD的值
      while(rd & RDbit);       //等待高电平结束,出现低电平
      timer=TBR;               //得到高电平时间
      stop_timer_b0();         //关闭定时器
  if(timer>t_1ms)dat=dat|0x80;//通过高电平时间判断该位数据是1
      else dat=dat&0x7f;  //通过高电平时间判断该位数据是0   
      }
   get_code[j]=dat;
   }
  //_EINT(); 
  return(get_code[2]);             //获取按键数据码
}

void main( void )
{
  WDTCTL = WDTPW + WDTHOLD; //关看门狗
  P2DIR=0Xff;//P2全设为输出,控制LED灯
  P2OUT=0Xff;//LED灯全灭
  RDDIR |= (~RDbit);//将红外线模块OUT(P16)置为输入
  P1IES|=RDbit;//
  P1IFG&=(~RDbit);
  P1IE|=RDbit;
  //static uint  i;//循环辅助变量,不知道为什么要静态局部变量才能正常工作
  //uchar rd;//缓存红外线模块OUT所在的端口RD的值
  //uchar dat_code=0;//缓存获取到的按键数据码
  _EINT();
  while(1)
  {
    //_BIS_SR(LPM3_bits+GIE);
    uint ji;
    for(j=0;j<2;j++)
    {
      for(i=0;i<10000;i++)
    delay(10000);
    if(j==1)
      (P2OUT&=0xfe);
    else
    (P2OUT|=0x01);
    }
  }
}

# pragma vector = PORT1_VECTOR
__interrupt void P1_Interrupt(void)
{
  _DINT();//关闭中断
  if((RDIFG&RDbit)==RDbit)//若红外线模块OUT(P16)出现低电平
  {
    RDIFG&=RDbit_back;//清中断标志位
    //static uint  i;//循环辅助变量,不知道为什么要静态局部变量才能正常工作
    uchar rd;//缓存红外线模块OUT所在的端口RD的值
    uchar dat_code=0;//缓存获取到的按键数据码
    delay(10); 
    rd=rd_dat();//获取红外线模块OUT所在的端口RD的值
    if(rd & RDbit)//若红外线模块OUT(P16)确实出现低电平,开始识别,否则结束识别 
    {
      RDIFG&=RDbit_back;//清中断标志位
      _EINT();//开启中断
      return;
    }
    do
    {
      rd=rd_dat();
    }
    while(!(rd & RDbit));  //等待9ms低电平结束,出现高电平
    set_timer_b0();
    do
    {
      rd=rd_dat();//获取红外线模块OUT所在的端口RD的值
    }
    while(rd & RDbit);  //等待4.5ms高电平结束,出现低电平
    timer=TBR;
    stop_timer_b0(); //以上为处理引导码
    if(timer    {
      delay(1000);
      RDIFG&=RDbit_back;
      _EINT();
      return;
    }
    dat_code=get_num();   //取得按键数据码
    switch(dat_code)
   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      17966  2011-01-07 00:38  红外线接收(完成2)\红外接收通过数码管显示键码\Backup of hwreceive.ewd

     文件      47746  2011-01-07 00:38  红外线接收(完成2)\红外接收通过数码管显示键码\Backup of hwreceive.ewp

     文件      19545  2010-12-27 13:58  红外线接收(完成2)\红外接收通过数码管显示键码\Debug\Exe\4.d43

     文件        176  2011-01-04 18:59  红外线接收(完成2)\红外接收通过数码管显示键码\Debug\Obj\4.pbd

     文件      23830  2010-12-27 13:58  红外线接收(完成2)\红外接收通过数码管显示键码\Debug\Obj\main.r43

     文件        940  2014-02-11 22:49  红外线接收(完成2)\红外接收通过数码管显示键码\disp_4led.h

     文件       2167  2014-03-12 21:43  红外线接收(完成2)\红外接收通过数码管显示键码\hwreceive.dep

     文件      21406  2014-02-11 20:15  红外线接收(完成2)\红外接收通过数码管显示键码\hwreceive.ewd

     文件      54028  2014-02-11 23:28  红外线接收(完成2)\红外接收通过数码管显示键码\hwreceive.ewp

     文件        163  2011-01-07 00:38  红外线接收(完成2)\红外接收通过数码管显示键码\hwreceive.eww

     文件       3916  2014-03-06 00:14  红外线接收(完成2)\红外接收通过数码管显示键码\main.c

     文件        989  2014-03-05 21:55  红外线接收(完成2)\红外接收通过数码管显示键码\msp430.h

     文件       1242  2010-12-17 13:59  红外线接收(完成2)\红外接收通过数码管显示键码\Release\Exe\4.txt

     文件       1211  2014-03-06 00:14  红外线接收(完成2)\红外接收通过数码管显示键码\Release\Exe\hwreceive.txt

     文件        107  2010-12-17 13:59  红外线接收(完成2)\红外接收通过数码管显示键码\Release\Obj\4.pbd

     文件      65973  2014-03-12 21:43  红外线接收(完成2)\红外接收通过数码管显示键码\Release\Obj\hwreceive.pbd

     文件      65973  2014-03-12 21:43  红外线接收(完成2)\红外接收通过数码管显示键码\Release\Obj\hwreceive.pbd.browse

     文件      65973  2014-03-06 00:14  红外线接收(完成2)\红外接收通过数码管显示键码\Release\Obj\main.pbi

     文件       9599  2014-03-06 00:14  红外线接收(完成2)\红外接收通过数码管显示键码\Release\Obj\main.pbi.cout

     文件      10444  2014-03-06 00:14  红外线接收(完成2)\红外接收通过数码管显示键码\Release\Obj\main.r43

     文件       3238  2011-01-04 18:59  红外线接收(完成2)\红外接收通过数码管显示键码\settings\12.wsdt

     文件       2699  2011-01-04 18:59  红外线接收(完成2)\红外接收通过数码管显示键码\settings\4.cspy.bat

     文件      16856  2011-01-04 18:59  红外线接收(完成2)\红外接收通过数码管显示键码\settings\4.dbgdt

     文件       1120  2011-01-04 18:59  红外线接收(完成2)\红外接收通过数码管显示键码\settings\4.dni

     文件       2664  2011-01-07 00:35  红外线接收(完成2)\红外接收通过数码管显示键码\settings\hwdecode.wsdt

     文件       1348  2014-03-12 21:43  红外线接收(完成2)\红外接收通过数码管显示键码\settings\hwreceive.cspy.bat

     文件         63  2014-03-12 21:43  红外线接收(完成2)\红外接收通过数码管显示键码\settings\hwreceive.dbgdt

     文件        635  2014-03-12 21:43  红外线接收(完成2)\红外接收通过数码管显示键码\settings\hwreceive.dni

     文件       3517  2014-03-12 21:43  红外线接收(完成2)\红外接收通过数码管显示键码\settings\hwreceive.wsdt

     文件     678758  2004-01-03 01:04  红外线接收(完成2)\红外资料\电风扇红外发射.bmp

............此处省略19个文件信息

评论

共有 条评论