迅维网

查看: 1351|回复: 4
打印 上一主题 下一主题

8路红外遥控开关控制器(可扩展为32路)

[复制链接]
跳转到指定楼层
1#
发表于 2016-3-23 09:34:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东青岛 来自 山东青岛

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x


论坛上有一些希望能DIY多路的红外遥控开关,我在此做了一个DOME版的,同样用我熟悉的SAA3010T的解码程序(省下了不少时间),程

序可以直接用于AT89C51或AT89C2051或相容的芯片,用2051时,P1.0,P1.1要用10K电阻上拉。使用一体化接收头时电源方面一定要做好滤波

,如用大的滤波电容使直流更加的稳定,用104(0.1uF)的小电容去掉高频等等,只有这样才能在一定程序上提高抗干扰性。在程序方面,

我这里做的很简单,用了遥控器的1-8号键做1-8的继电器控制,按一下为继电器通,再按一下为继,二次按键的间隔时间大约在1秒钟,这

样就可以避免按一次键会使继电器返复通断(按一次键的时间不定发送键值的次数也不定)。还用了遥控的电源按键,按下时所有断电器关

闭。这个电路如果使用AT89C51的话可以找到32路或更多的控制。有网友说要做兼容多遥控学习型的,我想也是可行的,那会用到IC2器件,

存储收到的数据做为学习,接收时再对比对,但是如果你的数据较多的话会造成速度慢等问题。我个人认为还是用专一的遥控器好点,比如

说你用电视遥控去遥控电视和红外开关,当你要开电视或许同时会触发到红外开关。









C51源码:
  • /*----------------------------------------
  • 8路红外遥控开关控制器
  • (SAA3010T电视遥控器)
  • All rights reserved.
  • 只用八路时可以用AT89C2051代替AT89C51
  • 一体化接收头输出端拉P3.2(int0),P1为控制输出端。
  • 可以扩展到32路或更多
  • 输出为低电平有效
  • ----------------------------------------*/
  • #include
  • static unsigned char data IRCode[3],IRCON,IRCON2;
  • static unsigned char data DT;
  • void main(void)
  • {
  • unsigned int de;
  • TMOD = 0x01; //定时器0方式1
  • EA = 1; //允许CPU中断
  • IT0 = 1; //INT0下降沿有效
  • EX0 = 1; //开INT0中断;
  • do
  • {
  • for (de=0; de<10000; de++)
  • P3_6 = 1;
  • for (de=0; de<10000; de++)
  • P3_6 = 0;
  • if (DT)
  • {
  • for (de=0; de<30000; de++) //这里起到按键值正确后会有一个延时,防止重复按键
  • P3_6 = 1;
  • for (de=0; de<30000; de++)
  • P3_6 = 0;
  • DT = 0;
  • }
  • EX0 = 1;
  • }
  • while(1);
  • }
  • //定时器0中断处理
  • void timeint(void) interrupt 1 using 2
  • {
  • TH0=0xFD;
  • TL0=0x1E; //设定时值为800us
  • if (IRCON<3)
  • {
  • if (IRCON2<8) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
  • {
  • IRCON2++;
  • IRCode[IRCON]=IRCode[IRCON]<<1; //每读一次放入变量中的二进制的一个位,每次左移一位
  • IRCode[IRCON]=IRCode[IRCON] | P3_2; //每八次填满一个字节,一个字节存放遥控编码4个位
  • }
  • else
  • {
  • IRCON++; //填满一个字节,指向下一个变量
  • IRCON2=0; //计数清零
  • }
  • }
  • else
  • {
  • TR0 = 0; //关闭定时器
  • ET0 = 0; //定时器0中断关闭
  • if ((IRCode[1]!=0xFF) && (IRCode[2]!=0xFF))
  • {
  • if (IRCode[1] == 0x55)
  • {
  • switch (IRCode[2])
  • {
  • case 0xAB: //1-8键控制
  • P1_0 = ~P1_0;
  • DT = 1;
  • break;
  • case 0xAC:
  • P1_1 = ~P1_1;
  • DT = 1;
  • break;
  • case 0xAD:
  • P1_2 = ~P1_2;
  • DT = 1;
  • break;
  • case 0xB2:
  • P1_3 = ~P1_3;
  • DT = 1;
  • break;
  • case 0xB3:
  • P1_4 = ~P1_4;
  • DT = 1;
  • break;
  • case 0xB4:
  • P1_5 = ~P1_5;
  • DT = 1;
  • break;
  • case 0xB5:
  • P1_6 = ~P1_6;
  • DT = 1;
  • break;
  • case 0xCA:
  • P1_7 = ~P1_7;
  • DT = 1;
  • break;
  • case 0xD2: //按关闭电源键,关闭所有继电器
  • P1 = 0xFF;
  • DT = 1;
  • break;
  • }
  • }
  • }
  • }
  • }
  • //INT0中断
  • void INT0Fun(void) interrupt 0 using 2
  • {
  • EX0 = 0; //外部中断0关闭
  • ET0 = 1; //定时器0中断打开
  • TH0=0xFD;
  • TL0=0x1E; //设定时值为800us
  • for (IRCON=0; IRCON<3; IRCON++)
  • IRCode[IRCON] = 0;
  • IRCON = 0;
  • IRCON2 = 0; //计数清零
  • TR0 = 1;//开始计数
  • }



2#
发表于 2016-3-23 09:39:22 | 只看该作者 来自: 内蒙古赤峰 来自 内蒙古赤峰
看着很好玩的样子 这效果是不是就是智能化

点评

是智能化,现在不都推广智能化吗  详情 回复 发表于 2016-3-23 17:56
是智能化,现在不都推广智能化吗  详情 回复 发表于 2016-3-23 17:56
是智能化,现在不都推广智能化吗  详情 回复 发表于 2016-3-23 17:56
回复 支持 反对

使用道具 举报

3#
发表于 2016-3-23 17:56:28 | 只看该作者 来自: 山东青岛 来自 山东青岛
一漂崛起 发表于 2016-3-23 09:39
看着很好玩的样子 这效果是不是就是智能化

是智能化,现在不都推广智能化吗

回复 支持 反对

使用道具 举报

4#
发表于 2016-3-23 17:56:28 | 只看该作者 来自: 山东青岛 来自 山东青岛
一漂崛起 发表于 2016-3-23 09:39
看着很好玩的样子 这效果是不是就是智能化

是智能化,现在不都推广智能化吗

回复 支持 反对

使用道具 举报

5#
发表于 2016-3-23 17:56:28 | 只看该作者 来自: 山东青岛 来自 山东青岛
一漂崛起 发表于 2016-3-23 09:39
看着很好玩的样子 这效果是不是就是智能化

是智能化,现在不都推广智能化吗

回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复