导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→红外接收 程序[sifan1157]

 *第13545篇: 红外接收 程序

  
楼 主:sifan1157 2008年2月25日17:08
 红外接收 程序
/************************************************************************************
*  Copyright (c) 2007,重庆优易特电子
*            All rights reserved.
*
* 文件名称: main.c
* 文件标识: none
* 适用器件: STC89C51RC

* 摘 要:    红外接收

* 当前版本:1.0
* 作 者:李芳
* 完成日期:2007年12月10日
*
*************************************************************************************/
#include  <reg52.h>  

unsigned char code DUAN_TABLE[]={0X3F, 0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x77,0x7C,0x39,0x5E,0x79,0x71};    
unsigned char disp_buff[4]={1,2,3,4};
unsigned int tem[34]={0};


sbit IO_HW=P3^4; //红外检测IO口
sbit    d0=P2^3;
bit flag=0;

//返回:0,表示没有键按下;1,表示有键按下,按下的键码为*dat.
unsigned char HW_scan(unsigned  int *dat) //红外扫描,接收按键并进行解码
{
  unsigned char count=0;
  unsigned long int x=0,y=0;

   if(IO_HW==0)     //判断IO口状态,0表示有数据
   {  while(IO_HW==0);//等待
   
   while(IO_HW==1);    
      for(count=0;count  <32;count++)   //接收32个脉冲
    { 
    TH1=0;TL1=0;   
    while(IO_HW==0&&x  <5000)x++;   //等待低电平到,并延时退出,防止死在这里
    if(x>  4900)return 0;
    TR1=1;   
    while(IO_HW==1&&x  <10000)x++;   //低电平维持时间用定时器1计时,并长时间无响应退出
    if(x>  9900)return 0;
    TR1=0;  
    
    x=TH1*256+TL1; 
    if(x>  1000) y=y|0x01;   //553,>  0.6ms认为宽脉冲,位数据为1.
    y=y  <  <1;         //先读高位
    }
  y=y>  >  1;      //最后多余的一位退回去.
  *dat=y;   
 // if(*dat==0x00ff||*dat==0x807f||*dat==0x40bf||*dat==0x20df||*dat==0xa05f||*dat==0x609f||*dat==0x10ef||*dat==0x906f||*dat==0x50af||*dat==0xb04f||*dat==0xc03f||*dat==0xe01f||*dat==0xd02f||*dat==0x3ad6)return 1; 
// if(*dat==0xc03f||*dat==0x20df||*dat==0x906f||*dat==0x50af||*dat==0xd02f||*dat==0x2ad6||*dat==0x3ad6||*dat==0x40bf||*dat==0xe01f)return 1;
 if(*dat==0x40bf||*dat==0xc03f||*dat==0xe01f||*dat==0x50af||*dat==0xd02f||*dat==0x02fd||*dat==0x2ad5||*dat==0xe817||*dat==0x6897||*dat==0x0af5||*dat==0xc837||*dat==0x48b7||*dat==0x32cd||*dat==0xf00f||*dat==0x708f||*dat==0x12ed)return 1;
   //10个键的编码依次为:1234567890
  else return 0;  
   }
   else  return 0;
}  

/*main()
{
  unsigned int dat;
  TMOD=0X11;//定时器1用作红外检测
  TH0=0xee;
  TL0=0;
  TR0=1;
  ET0=1;
  EA=1;
  disp_buff[0]=0;
  while(1)
  { 
    if(HW_scan(&dat)==1)
     {
     if(dat==0x00ff)
  {disp_buff[0]=1;}
  else if(dat==0x807f)
  {disp_buff[0]=2;}
  else if(dat==0x40bf)
  {disp_buff[0]=3;}
  else if(dat==0xc03f)
  {disp_buff[0]=4;} 
  else if(dat==0x20df)
  {disp_buff[0]=5;}
  else if(dat==0xa05f)
  {disp_buff[0]=6;}//
  else if(dat==0x609f)
  {disp_buff[0]=7;}
  else if(dat==0xe01f)
  {disp_buff[0]=8;}
  else if(dat==0x10ef)
  {disp_buff[0]=9;} 
  else if(dat==0x906f)
  {disp_buff[0]=12;}//
  else if(dat==0x50af)
  {disp_buff[0]=13;} 
  else if(dat==0xd02f)
  {disp_buff[0]=14;} 
   else if(dat==0x2ad6)
  {disp_buff[0]=0;} 
     
   }
    
  }
}  */

main()
{
  unsigned int dat;
  TMOD=0X11;//定时器1用作红外检测
  TH0=0xee;
  TL0=0;
  TR0=1;
  ET0=1;
  EA=1;
  disp_buff[0]=0;
  while(1)
  { 
    if(HW_scan(&dat)==1)
     {
    if(dat==0x40bf)    //ok
  {disp_buff[0]=11;}
  else if(dat==0xc03f) //+下方
  {disp_buff[0]=12;} 
  else if(dat==0xe01f) //+
  {disp_buff[0]=13;}

  else if(dat==0x50af)  //-
  {disp_buff[0]=14;} 
  else if(dat==0xd02f)  //.
  {disp_buff[0]=15;} 
  else if(dat==0x02fd)
  {disp_buff[0]=0;}
  
  else if(dat==0x2ad5) //1
  {disp_buff[0]=1;}
  else if(dat==0xe817)  //2
  {disp_buff[0]=2;} 
  else if(dat==0x6897) //3
  {disp_buff[0]=3;} 
  else if(dat==0x0af5)//4 
  {disp_buff[0]=4;}
  else if(dat==0xc837) 
  {disp_buff[0]=5;}
  else if(dat==0x48b7)
  {disp_buff[0]=6;}//
  else if(dat==0x32cd)
  {disp_buff[0]=7;}
  else if(dat==0xf00f)
  {disp_buff[0]=8;}
  else if(dat==0x708f)
  {disp_buff[0]=9;}    
     else if(dat==0x12ed)
  {disp_buff[0]=0;}  
   }
    
  }

void timer0() interrupt 1
{
 static unsigned char Bit=0;

 TH0=0xEE;
 TL0=0x00;

 P1=0xfe;
 P0=DUAN_TABLE[disp_buff[Bit]];
 
}

  
2楼:sifan1157 2008年3月18日18:22
 我的联系方式
我们提供与上面程序相配套的程序,提供您学习此实验板的完整资料,如果您感兴趣,请联系我们.

重庆市优易特电子
联系人:行卫军
电话:023-62111023
网址:
单片机菜鸟群:17373243
单片机学习群:57464005

此主题相关图片如下:
按此在新窗口浏览图片


>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:51单片机学习板

[下一篇主题]:[原创]电子产品开发