欢迎光临深圳市昶丰科技有限公司官方网站!现在的时间是:
 
 
服务与支持
  技术文章
  成功案例
  解决方案
  下载专区
 
  技术文章
HT6221(红外)解码程序

/*******************************************************************************
** 名称:红外线解码程序
** MCU :AT89C52 12mHz
** 作者:傲雪风雨    
** 日期:2007-12
** 描述:本程序是接收13.5S格式引导码,的红外线遥控发射器的程序把所读到的码显示出
** 来,接收HT6221发谢的信号。  
**********************************************************************************/
#include <reg51.h>
#define uchar unsigned char //雄定义
sbit LED_1=P2^1;  //LED脚
sbit LED_2=P2^2;  
sbit LED_3=P2^3;
sbit LED_4=P2^4;
sbit LED_5=P2^5;
sbit LED_6=P2^6;
sbit buzzer=P3^3; //蜂鸣器
sbit IrPort=P3^7; //红外线通信口
/***----- 全局变量 ------------****/
uchar Num[16]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa7,0x26,0xa1,0xb1};
uchar ir[4];  //红外解码值
uchar abc;  //用于中断计时
/***----- 函数声明  ---------***/
void incept();   //红外接收解码
void delay(uchar); //廷时
void uDelay(uchar); //红外廷时
void display();  //LED显示
void kk();    //蜂鸣器响声
/***************** 主程序 *****************************/
void main(void)
{ P0=0xff;
  P1=0xff;
  P2=0xff;
  P3=0xff;
  while(1)
  { incept();  //调用接收
   display();  //调用显显示
   incept();   //调用接收
  }
}
/***************************************************
** 函数名称: uDelay
** 功能描述: 红外廷时,约100us延时程序
** 输  入:
** 输  出:
** 全局变量: 无
** 调用模块: 无
*****************************************************/
void uDelay(uchar i)  //约100us延时程序
{ for( ;i>0; i--)
  { uchar j=45;
    while(--j);
  }
}
/*****************************************************************
** 函数名称: delay
** 功能描述: 廷时
** 输  入: 无
** 输  出: 无
** 全局变量: 无
** 调用模块: 无
*****************************************************************/
void delay(uchar z)
{ uchar t1,y;
  for(t1=z;t1>0;t1--)
  for(y=110;y>0;y--);
}
/*****************************************************
** 函数名称: kk
** 功能描述:  
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: delay()
******************************************************/
void kk()
{ buzzer=0;
  delay(200);
  buzzer=1;
}
/*********************************************************************
** 函数名称: incept
** 功能描述: 红外接收解码,引导码9mS底平、4.5mS高电平,后32位数据码
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**********************************************************************/
void incept()
{ uchar i,j,Temp;
  if(IrPort==0)   //查询没有啊红外接收
  {
    for(i=0;i<70;i++)  //延时8000us循环检测是否有1电平,避免干扰信号
    { uDelay(1);
      if (IrPort==1)
     { return;   //退出本函数
     }
    }  
   while(IrPort==0);  //等待高电平避开9毫秒低电平引导脉冲
   for(i=0;i<37;i++)  //廷时4.3mS如果有底电平出现则退出解码
   { uDelay(1);   //在100uS内出现底电平则退出解码,也是被开2.25mS的连码到来测退出解码
     if (IrPort!=1)
      {  return;   //退出本函数
      }
   }
   while(IrPort==1);   //等待底电平避开4.5毫秒高电平引导脉冲
   for(j=0;j<4;j++)    //读入码记录在ir数组中
   { Temp=0;  
    for(i=0;i<8;i++)  //循环,每次读入8个状态为一个码
    { while(IrPort==0); //等待第一位高电平到来
      uDelay(9);   //用900us去度量
      if(IrPort==1)  //此时为高就是信号1,数值移入
      { uDelay(10);  //延时一下,拖过1电平持续时间
        Temp|=0x1<<i;
      }    
    }
   ir[j]=Temp;   //把接到的码装入数组
   }
   kk();     //调用蜂鸣器响声
  }
}
/************************************************
** 函数名称: display
** 功能描述: 显示函数
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: incept()
***********************************************/
void display()
{ P0=Num[ir[0]>>4];      //显示地址码
LED_1=0;
  incept();  //调用接收
  delay(1);
  incept();  
  LED_1=1;
  P0=Num[ir[0]&0x0f];
  LED_2=0;
  incept();  
  delay(1);
  incept();  
  LED_2=1;

  P0=Num[ir[1]>>4];    //显示地址反码
  LED_3=0;
  incept();  
  delay(1);
  incept();  
  LED_3=1;
  P0=Num[ir[1]&0x0f];
  LED_4=0;
  incept();  //调用接收
  delay(1);
  incept();  
  LED_4=1;
  incept();  //调用接收
  P0=Num[ir[2]>>4];      //显示数据码
  LED_5=0;
  incept();  
  delay(1);
  incept();  
  LED_5=1;
  P0=Num[ir[2]&0x0f];   //
  LED_6=0;
  incept();  
  delay(1);
  incept();  
  LED_6=1;
}

上一条新闻:多功能钟控程序 2014-10-16
下一条新闻:对象的交换 2014-10-30
友情链接:掉货检测
Copyright © 2013-2015 深圳市昶丰科技有限公司 All Rights Reserved. 粤ICP备2023005930号    深圳网络公司-龙腾盛世提供技术支持
地址:深圳市宝安区福海街道展城社区福园一路35号天瑞工业园A5栋912    电话:0755-29308961    传真:0755-29308961    邮箱:chn_cf@163.com    
热门关键字:掉货检测