日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 8路紅外遙控開(kāi)關(guān)控制器(可擴(kuò)展為32路)

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

          作者: 時(shí)間:2011-02-27 來(lái)源:網(wǎng)絡(luò) 收藏

          在此給出的只是一個(gè)DEMO,主要著重于的應(yīng)用上,安全方面請(qǐng)大家自行考慮增加。


          論壇上有一些希望能DIY多路的紅外遙控開(kāi)關(guān),我在此做了一個(gè)DOME版的,同樣用我熟悉的SAA3010T的解碼程序(省下了不少時(shí)間),程

          序可以直接用于AT89C51或AT89C2051或相容的芯片,用2051時(shí),P1.0,P1.1要用10K電阻上拉。使用一體化接收頭時(shí)電源方面一定要做好濾波

          ,如用大的濾波電容使直流更加的穩(wěn)定,用104(0.1uF)的小電容去掉高頻等等,只有這樣才能在一定程序上提高抗干擾性。在程序方面,

          我這里做的很簡(jiǎn)單,用了遙控器的1-8號(hào)鍵做1-8的繼電器控制,按一下為繼電器通,再按一下為繼,二次按鍵的間隔時(shí)間大約在1秒鐘,這

          樣就可以避免按一次鍵會(huì)使繼電器返復(fù)通斷(按一次鍵的時(shí)間不定發(fā)送鍵值的次數(shù)也不定)。還用了遙控的電源按鍵,按下時(shí)所有斷電器關(guān)

          閉。這個(gè)電路如果使用AT89C51的話可以找到32路或更多的控制。有網(wǎng)友說(shuō)要做兼容多遙控學(xué)習(xí)型的,我想也是可行的,那會(huì)用到IC2器件,

          存儲(chǔ)收到的數(shù)據(jù)做為學(xué)習(xí),接收時(shí)再對(duì)比對(duì),但是如果你的數(shù)據(jù)較多的話會(huì)造成速度慢等問(wèn)題。我個(gè)人認(rèn)為還是用專一的遙控器好點(diǎn),比如

          說(shuō)你用電視遙控去遙控電視和紅外開(kāi)關(guān),當(dāng)你要開(kāi)電視或許同時(shí)會(huì)觸發(fā)到紅外開(kāi)關(guān)。

          明浩 2004.03.28


          實(shí)驗(yàn)的實(shí)物圖
          點(diǎn)擊放大
          原理圖-1 點(diǎn)擊放大(圖上31腳(EA/VPP)應(yīng)接+5V)
          點(diǎn)擊放大
          原理圖-2 點(diǎn)擊放大


          鍵值編碼

          HEX文件下載:04032801_1_8COM.rar

          C51源碼:

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

          8路紅外遙控開(kāi)關(guān)控制器
          (SAA3010T電視遙控器)

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

          All rights reserved.

          明浩 E-mail: pnzwzw@163.com
          pnzwzw@cdle.net

          只用八路時(shí)可以用AT89C2051代替AT89C51
          一體化接收頭輸出端拉P3.2(int0),P1為控制輸出端。
          可以擴(kuò)展到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; //定時(shí)器0方式1
          EA =1; //允許CPU中斷
          IT0 =1; //INT0下降沿有效
          EX0 =1; //開(kāi)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++) //這里起到按鍵值正確后會(huì)有一個(gè)延時(shí),防止重復(fù)按鍵
          P3_6 =1;
          for (de=0; de30000; de++)
          P3_6 =0;
          DT =0;
          }
          EX0 =1;
          }
          while(1);
          }

          //定時(shí)器0中斷處理
          void timeint(void) interrupt 1 using 2
          {
          TH0=0xFD;
          TL0=0x1E; //設(shè)定時(shí)值為800us

          if (IRCON3)
          {
          if (IRCON28) //每中斷一次讀一次遙控接收頭的狀態(tài),每二次為遙控編碼中的一個(gè)位
          {
          IRCON2++;
          IRCode[IRCON]=IRCode[IRCON]1; //每讀一次放入變量中的二進(jìn)制的一個(gè)位,每次左移一位
          IRCode[IRCON]=IRCode[IRCON] | P3_2; //每八次填滿一個(gè)字節(jié),一個(gè)字節(jié)存放遙控編碼4個(gè)位
          }
          else
          {
          IRCON++; //填滿一個(gè)字節(jié),指向下一個(gè)變量
          IRCON2=0; //計(jì)數(shù)清零
          }
          }
          else
          {
          TR0 =0; //關(guān)閉定時(shí)器
          ET0 =0; //定時(shí)器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; //定時(shí)器0中斷打開(kāi)
          TH0=0xFD;
          TL0=0x1E; //設(shè)定時(shí)值為800us

          for (IRCON=0; IRCON3; IRCON++)
          IRCode[IRCON] =0;
          IRCON =0;
          IRCON2 =0; //計(jì)數(shù)清零

          TR0 =1;//開(kāi)始計(jì)數(shù)



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉