找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4056|回复: 11
收起左侧

21路红外线遥控开关程序

  [复制链接]
ID:70976 发表于 2014-12-24 16:02 | 显示全部楼层 |阅读模式
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
void delay(uchar x);  //x*0.14MS
void delay1(int ms);
void beep();
sbit IRIN = P3^2;         //红外接收器数据线
sbit BEEP = P1^5;         //蜂鸣器驱动线
sbit RELAY1= P1^0;         //继电器驱动线
sbit RELAY2= P1^1;         //继电器驱动线
sbit RELAY3= P1^2;         //继电器驱动线
sbit RELAY4= P1^3;         //继电器驱动线
sbit RELAY5= P1^4;         //继电器驱动线
sbit RELAY6= P1^6;         //继电器驱动线
sbit RELAY7= P1^7;         //继电器驱动线
uchar IRCOM[7];
main()
{
    IRIN=1;                    //I/O口初始化
    BEEP=1;
    RELAY1=1;
delay1(10);                 //延时
    IE = 0x81;                 //允许总中断中断,使能 INT0 外部中断
TCON = 0x01;               //触发方式为脉冲负边沿触发
     while(1);

} //end main
/**********************************************************/
void IR_IN() interrupt 0 using 0
{
      unsigned char i,j,k,N=0;
     EX0 = 0;     //关掉外部中断防止中断的再次发生进入检测引导码阶段(9ms的低电平4.5ms的高电平)
delay(15);
if (IRIN==1)
     { EX0 =1;  //9ms的检测检测结束从新打开外部中断
  return;
}
                           //确认IR信号出现
  while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
    {delay(1);}

for (j=0;j<4;j++)         //收集四组数据
{
for (k=0;k<8;k++)        //每组数据有8位
{
  while (IRIN)            //等 IR 变为低电平,跳过4.5ms的引导高电平信号。
    {delay(1);}
   while (!IRIN)          //等 IR 变为高电平
    {delay(1);}
    while (IRIN)           //计算IR高电平时长(0和1的低电平的时长一样的,只要判断高电平时长超过0.56ms并小于1.12ms为1否  则为0)
     {
   delay(1);
   N++;           
if (N>=30)
{
EX0=1;
return;
}                  //0.14ms计数过长自动离开。
     }                        //高电平计数完毕               
    IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
    if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //高电平持续时间大于1.12ms则数据最高位补“1”
    N=0;
}//end for k
}//end for j

   if (IRCOM[2]!=~IRCOM[3])  // 判断有没有误码(有责放弃没有判断键码)
   { EX0=1;
     return;
}
     switch(IRCOM[2])
{   // 显示遥控上的字符按键
   case 0x45:
RELAY1=!RELAY1;  
break;
case 0x46:
    RELAY2=!RELAY2;
break;
case 0x47:
    RELAY3=!RELAY4;  
break;
case 0x44:
     RELAY4=!RELAY4;
break;
case 0x40:
      RELAY5=!RELAY5;
break;
case 0x43:
      RELAY6=!RELAY6;
break;
case 0x07:
      RELAY7=!RELAY7;
break;
case 0x15:
      RELAY1=!RELAY1;
break;
   case 0x09:

break;
case 0x19:
    ........
break;
case 0x0d:
    ........
break;  
case 0x16:  
    .........;
break;
case 0x0c:   
  .........
break;
case 0x18:
............   
break;
case 0x5e:
................  
break;
case 0x08:
    ..............
break;
case 0x1c:

break;
case 0x5a:

break;
   case 0x42:

break;
case 0x52:

break;
case 0x4a:

break;
}
     beep();
     EX0 = 1;
}

/**********************************************************/
void beep()
{
  unsigned char i;
  for (i=0;i<100;i++)
   {
   delay(4);
   BEEP=!BEEP;                 //BEEP取反
   }
  BEEP=1;                      //关闭蜂鸣器
}
/**********************************************************/
void delay(unsigned char x)    //x*0.14MS
{
unsigned char i;
  while(x--)
{
  for (i = 0; i<13; i++) {}
}
}

/**********************************************************/
void delay1(int ms)
{
unsigned char y;
  while(ms--)
{
  for(y = 0; y<250; y++)
  {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
  }
}
}

回复

使用道具 举报

ID:70769 发表于 2014-12-24 20:30 | 显示全部楼层
GOOD!!!
回复

使用道具 举报

ID:67573 发表于 2014-12-25 14:01 | 显示全部楼层
回复

使用道具 举报

ID:71125 发表于 2014-12-27 15:45 来自手机 | 显示全部楼层
有图纸吗?楼主
回复

使用道具 举报

ID:72947 发表于 2015-1-31 20:25 来自手机 | 显示全部楼层
谢谢楼主分享!!!
回复

使用道具 举报

ID:73964 发表于 2015-3-2 21:43 | 显示全部楼层
很不错的
回复

使用道具 举报

ID:73030 发表于 2015-3-3 10:25 来自手机 | 显示全部楼层
楼主挺强,不错
回复

使用道具 举报

ID:80482 发表于 2015-5-19 16:13 | 显示全部楼层
找了好久啊
回复

使用道具 举报

ID:194844 发表于 2017-5-1 19:42 | 显示全部楼层
有图纸吗?楼主
回复

使用道具 举报

ID:225259 发表于 2017-8-6 18:20 | 显示全部楼层
看不懂,发射的信号是怎样的?
回复

使用道具 举报

ID:251082 发表于 2017-12-24 11:51 | 显示全部楼层
拿来玩下谢谢分享
回复

使用道具 举报

ID:577916 发表于 2019-7-4 15:50 | 显示全部楼层

谢谢楼主分享!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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