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

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

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8路红外遥控开关控制器(可扩展为32路)

8路红外遥控开关控制器(可扩展为32路) 作 者:明浩 出 处:磁动力工作室 在此给出的只是一个DEMO,主要着重于单片机的应用上,安全方面请大家自行考虑增加。   论坛上有一些希望能DIY多路的红外遥控开关,我在此做了一个DOME版的,同样用我熟悉的SAA3010T的解码程序(省下了不少时间),程 序可以直接用于AT89C51或AT89C2051或相容的芯片,用2051时,P1.0,P1.1要用10K电阻上拉。使用一体化接收头时电源方面一定要做好滤波 ,如用大的滤波电容使直流更加的稳定,用104(0.1uF)的小电容去掉高频等等,只有这样才能在一定程序上提高抗干扰性。在程序方面, 我这里做的很简单,用了遥控器的1-8号键做1-8的继电器控制,按一下为继电器通,再按一下为继,二次按键的间隔时间大约在1秒钟,这 样就可以避免按一次键会使继电器返复通断(按一次键的时间不定发送键值的次数也不定)。还用了遥控的电源按键,按下时所有断电器关 闭。这个电路如果使用AT89C51的话可以找到32路或更多的控制。有网友说要做兼容多遥控学习型的,我想也是可行的,那会用到IC2器件, 存储收到的数据做为学习,接收时再对比对,但是如果你的数据较多的话会造成速度慢等问题。我个人认为还是用专一的遥控器好点,比如 说你用电视遥控去遥控电视和红外开关,当你要开电视或许同时会触发到红外开关。                                             明浩 2004.03.28 实验的实物图 原理图-1 点击放大(图上31脚(EA/VPP)应接+5V) 原理图-2 点击放大 键值编码 单片机HEX文件下载1_8COM.rar C51源码: /*---------------------------------------- 8路红外遥控开关控制器 (SAA3010T电视遥控器) Copyright 2004/3/27 All rights reserved. 明浩 E-mail: pnzwzw@163.com        pnzwzw@ 只用八路时可以用AT89C2051代替AT89C51 一体化接收头输出端拉P3.2(int0),P1为控制输出端。 可以扩展到32路或更多 输出为低电平有效 ----------------------------------------*/ #include AT89x51.h 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; de10000; de++) P3_6 = 1; for (de=0; de10000; de++) P3_6 = 0; if (DT) { for (de=0; de30000; de++) //这里起到按键值正确后会有一个延时,防止重复按键 P3_6 = 1; for (de=0; de30000; de++) P3_6 = 0; DT = 0; } EX0 = 1; } while(1); } //定时器0中断处理 void timeint(void) interrupt 1 using 2 { TH0=0xFD; TL0=0x1E; //设定时值为800us if (IRCON3) { if (IRCON28) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位 { 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

文档评论(0)

cynthia_h + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档