标题: 单片机红外遥控求助各位大侠!!!(板子是HL-1) [打印本页]

作者: w1206479884    时间: 2012-4-12 19:00
标题: 单片机红外遥控求助各位大侠!!!(板子是HL-1)

#include<reg52.h>
#include<stdio.h>
sbit dula=P2^6;
sbit wela=P2^7;
sbit fm=P2^3;

#define uchar unsigned char
#define uint unsigned int

sbit ir=P3^2;//红外接口标准
uint lowtime,hightime;
uchar a[4];
void cmg()
{
 dula=1;
 P0=0x00;
 dula=0;
 wela=1;
 P0=0x00;
 wela=0;
 //jd=0;
}
void timer0_init()
{
 TMOD=0x01;//定时器0定时方式1
}
void hong_init()
{
 EA=1;//总中断允许
 EX0=1;//外部中断0允许
 IT0=1;//外部中断0触发方式选择位,置1为下降沿有效
 ir=1;
}
bit my()//红外读32位的数据
{
 uchar i,j,temp;

 for(i=0;i<4;i++)
 {
  for(j=0;j<8;j++)
  {
   temp=temp>>1;//右移用于取数
   TH0=0;
   TL0=0;//定时器清零
   TR0=1;
   while(ir==0);//等待低电平
   TR0=0;
   lowtime=TH0*256+TL0;//保存低电平时间
   TH0=0;
   TL0=0;
   TR0=1;
   while(ir==1);
   TR0=0;
   hightime=TH0*256+TL0;
   if((lowtime<370)||(lowtime>640))
    return 0;
   if((hightime>370)&&(hightime<640))
    temp=temp&0x7f;
   if((hightime>1300)&&(hightime<1800))
    temp=temp|0x80;
  }
  a=temp;
 }
 if(a[2]=~a[3])
 return 1;
}
//lcd1602

void main()
{
 hong_init();
 timer0_init();
 cmg();
 while(1);

}
void int0() interrupt 0
{
 EX0=0;//关闭外部中断
 TH0=0;
 TL0=0;//定时器清零以准确计时
 TR0=1;//开启定时器0
 while(ir==0);//4.5ms的引导码等待,当ir为1是为结束码,跳出等待
 TR0=0;// 关定时器
 lowtime=TH0*256+TL0;//保存低电平时间
 TH0=0;
 TL0=0;//定时器再次清零
 TR0=1;//开定时器
 while(ir==1);//等待结束码
 TR0=0;
 hightime=TH0*256+TL0;//保存高电平时间
 if((lowtime>3800)&&(lowtime<4600)&&(hightime>3800)&&(hightime<4600))
 {
   //my();
  if(my()==1)
      fm=0;

 }
 
}

 

用遥控器控制蜂鸣器发声的功能无法实现,谢谢各位大侠!!






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1