找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3260|回复: 0
打印 上一主题 下一主题
收起左侧

单片机红外遥控求助各位大侠!!!(板子是HL-1)

[复制链接]
跳转到指定楼层
楼主
ID:34641 发表于 2012-4-12 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#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;

 }
 
}

 

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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表