音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

8路紅外遙控開關(guān)控制器(可擴展為32路)

作者:liuli9230 欄目:單片機
論壇上有一些朋友希望能DIY多路的紅外遙控開關(guān),我在此做了一個DOME版的,同樣用我熟悉的SAA3010T的解碼程序(省下了不少時間),程序可以直接用于AT89C51AT89C2051或相容的芯片,用2051時,P1.0,P1.1要用10K電阻上拉。使用一體化接收頭時電源方面一定要做好濾波,如用大的濾波電容使直流更加的穩(wěn)定,用104(0.1UF)的小電容去掉高頻等等,只有這樣才能在一定程序上提高抗干擾性。在程序方面,我這里做的很簡單,用了遙控器的1-8號鍵做1-8的繼電器控制,按一下為繼電器通,再按一下為繼,二次按鍵的間隔時間大約在1秒鐘,這樣就可以避免按一次鍵會使繼電器返復通斷(按一次鍵的時間不定發(fā)送鍵值的次數(shù)也不定)。還用了遙控的電源按鍵,按下時所有斷電器關(guān)閉。這個電路如果使用AT89C51的話可以找到32路或更多的控制。有網(wǎng)友說要做兼容多遙控學習型的,我想也是可行的,那會用到IC2器件,存儲收到的數(shù)據(jù)做為學習,接收時再對比對,但是如果你的數(shù)據(jù)較多的話會造成速度慢等問題。我個人認為還是用專一的遙控器好點,比如說你用電視遙控去遙控電視和紅外開關(guān),當你要開電視或許同時會觸發(fā)到紅外開關(guān)。

                                            明浩 2004.03.28




實驗的實物圖



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; //設(shè)定時值為800us

if (IRCON<3)
{
if (IRCON2<8) //每中斷一次讀一次遙控接收頭的狀態(tài),每二次為遙控編碼中的一個位
{
IRCON2++;
IRCode[IRCON]=IRCode[IRCON]<<1; //每讀一次放入變量中的二進制的一個位,每次左移一位
IRCode[IRCON]=IRCode[IRCON] | P3_2; //每八次填滿一個字節(jié),一個字節(jié)存放遙控編碼4個位
}
else
{
IRCON++; //填滿一個字節(jié),指向下一個變量
IRCON2=0; //計數(shù)清零
}
}
else
{
TR0 = 0; //關(guān)閉定時器
ET0 = 0; //定時器0中斷關(guān)閉
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: //按關(guān)閉電源鍵,關(guān)閉所有繼電器
P1 = 0xFF;
DT = 1;
break;
}
}
}
}
}

//INT0中斷
void INT0Fun(void) interrupt 0 using 2
{
EX0 = 0; //外部中斷0關(guān)閉
ET0 = 1; //定時器0中斷打開
TH0=0xFD;
TL0=0x1E; //設(shè)定時值為800us

for (IRCON=0; IRCON<3; IRCON++)
IRCode[IRCON] = 0;
IRCON = 0;
IRCON2 = 0; //計數(shù)清零

TR0 = 1;//開始計數(shù)
}




「該帖子被 liuli9230 在 2007-5-16 22:38:21 編輯過」
2樓: >>參與討論
liuli9230

有興趣的來看一下,有利于自己

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
STC單片機選型指南
[原創(chuàng)]字模,做點陣時可用
單片機驅(qū)動標準PC機鍵盤的C51程序
高手指教
請教大蝦--STC89C52芯片
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號