电子制作天地网站欢迎您的光临,欢迎提出宝贵意见或建议。本站信息产业部备案: 粤ICP备05114582号
8路红外遥控开关控制器(可扩展为32路)
Infrared remote control switch

时间:2007-12-31 7:43:44 来源:未知 作者:未知 编辑: 【关闭


8路红外遥控开关控制器(可扩展为32路),Infrared remote control switch

关键字:遥控开关,遥控开关电路,红外遥控电路,89C51

C51程序:

C51源码:

/*----------------------------------------

8路红外遥控开关控制器
(SAA3010T电视遥控器)

Copyright 2004/3/27
http://www.cdle.net
http://bbs.cdle.net

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

2007615193243.rar


◆相关文章◆
◆ 编辑推荐 ◆
用户:
更多评论
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。60个字以内
留言:
验证码:

免责声明:
●本站所有内容均来自网络,以学习为目的,如果侵犯了您的利益,请来信告知,立即删除,站长邮件为"diy+dzdiy.com",请将"+"变更为"@"
●电子制作存在风险,请注意人身安全,如果您在根据本站电路进行制作过程中发生伤害,本站不负任何责任。

版权所有:www.dzdiy.com ? 2001-2019 本站信息产业部备案: 粤ICP备05114582号