久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
8路紅外遙控開關控制器(可擴展為32路)
[打印本頁]
作者:
51黑tt
時間:
2016-3-6 14:46
標題:
8路紅外遙控開關控制器(可擴展為32路)
本帖最后由 51黑tt 于 2016-3-6 14:47 編輯
論壇上有一些希望能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.
明浩 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;//開始計數
}
復制代碼
作者:
西林杰哥
時間:
2016-3-10 00:32
我的微信SUN469923905請大神指教
作者:
tomgay
時間:
2017-5-1 19:35
verygood!
作者:
gaoshucheng88
時間:
2017-5-2 10:46
有制作教程嗎,
作者:
474201428
時間:
2017-5-23 02:53
先做個記號,有空鉆研一下程序
作者:
820590074
時間:
2017-5-28 13:11
謝謝分享。謝謝奉獻。謝謝樓主。
作者:
都市郎
時間:
2018-2-20 00:43
樓主請教下,為什么程序編譯通過,可燒錄到單片機什么反應都沒有。程序如下:/**********************BST-V51實驗開發板例程************************
作者:
都市郎
時間:
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;//開始計數
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
成年人国产
|
丁香久久
|
狠狠的操
|
日韩欧美网站
|
国产精品一品二区三区的使用体验
|
欧美中文字幕在线观看
|
亚洲福利专区
|
亚洲视频在线播放
|
亚洲激情久久
|
在线成人免费视频
|
99精品网
|
日韩城人免费
|
亚洲欧美精品一区二区
|
香蕉视频国产
|
国产女人18毛片18精品
|
黄色大片免费观看
|
午夜精品视频
|
av一级在线
|
色天使在线视频
|
99国产在线视频
|
九色91
|
长河落日
|
一本一道久久a久久精品蜜桃
|
免费黄色小说网站
|
一区二区三区影视
|
日韩av专区
|
久久久久久中文字幕
|
日韩一区二区三区av
|
欧美精品二区三区四区免费看视频
|
黄色av免费
|
天堂网久久
|
视频爱爱免费视频爱爱太爽
|
一区二区不卡
|
亚洲三级黄色片
|
亚洲伊人av
|
91片黄在线观看
|
日韩精品久久久久久久酒店
|
国产香蕉av
|
99re视频在线
|
国产乡下妇女做爰视频
|
天天久久综合
|