找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
ID:107189 发表于 2016-3-6 14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:108142 发表于 2016-3-10 00:32 来自手机 | 只看该作者
我的微信SUN469923905请大神指教
回复

使用道具 举报

板凳
ID:194844 发表于 2017-5-1 19:35 | 只看该作者
verygood!
回复

使用道具 举报

地板
ID:154669 发表于 2017-5-2 10:46 | 只看该作者
有制作教程吗,
回复

使用道具 举报

5#
ID:95393 发表于 2017-5-23 02:53 来自手机 | 只看该作者
先做个记号,有空钻研一下程序
回复

使用道具 举报

6#
ID:204748 发表于 2017-5-28 13:11 来自手机 | 只看该作者
谢谢分享。谢谢奉献。谢谢楼主。
回复

使用道具 举报

7#
ID:272625 发表于 2018-2-20 00:43 | 只看该作者
楼主请教下,为什么程序编译通过,可烧录到单片机什么反应都没有。程序如下:/**********************BST-V51实验开发板例程************************
回复

使用道具 举报

8#
ID:272625 发表于 2018-2-20 00:43 | 只看该作者
/**********************BST-V51实验开发板例程************************
*  平台:BST-V51 + Keil U3 + STC89C52
*  名称:8路红外遥控开关控制器   
*  日期:2018-1-17
*  晶振:11.0592MHZ

(SAA3010T电视遥控器)

All rights reserved.

明浩 E-mail: pnzwzw@163.com

      pnzwzw@cdle.net

只用八路时可以用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; 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 0x0C: //1-8键控制已改为MP3通用遥控器

                P1_0 = ~P1_0;

                DT = 1;

                break;

                case 0x18:

                P1_1 = ~P1_1;

                DT = 1;

                break;

                case 0x5E:

                P1_2 = ~P1_2;

                DT = 1;

                break;

                case 0x08:

                P1_3 = ~P1_3;

                DT = 1;

                break;

                case 0x1C:

                P1_4 = ~P1_4;

                DT = 1;

                break;

                case 0x5A:

                P1_5 = ~P1_5;

                DT = 1;

                break;

                case 0x42:

                P1_6 = ~P1_6;

                DT = 1;

                break;

                case 0x52:

                P1_7 = ~P1_7;

                DT = 1;

                break;

                case 0x45: //按关闭电源键,关闭所有继电器

                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;//开始计数

}


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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