久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7286|回復: 7
收起左側

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

[復制鏈接]
ID:107189 發表于 2016-3-6 14:46 | 顯示全部樓層 |閱讀模式
本帖最后由 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源碼:
  1. /*----------------------------------------

  2. 8路紅外遙控開關控制器
  3. (SAA3010T電視遙控器)

  4. All rights reserved.

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

  7. 只用八路時可以用AT89C2051代替AT89C51
  8. 一體化接收頭輸出端拉P3.2(int0),P1為控制輸出端。
  9. 可以擴展到32路或更多
  10. 輸出為低電平有效
  11. ----------------------------------------*/

  12. #include <AT89x51.h>

  13. static unsigned char data IRCode[3],IRCON,IRCON2;
  14. static unsigned char data DT;

  15. void main(void)
  16. {
  17. unsigned int de;

  18. TMOD = 0x01; //定時器0方式1
  19. EA = 1; //允許CPU中斷
  20. IT0 = 1; //INT0下降沿有效
  21. EX0 = 1; //開INT0中斷;
  22. do
  23. {
  24. for (de=0; de<10000; de++)
  25. P3_6 = 1;
  26. for (de=0; de<10000; de++)
  27. P3_6 = 0;
  28. if (DT)
  29. {
  30. for (de=0; de<30000; de++) //這里起到按鍵值正確后會有一個延時,防止重復按鍵
  31. P3_6 = 1;
  32. for (de=0; de<30000; de++)
  33. P3_6 = 0;
  34. DT = 0;
  35. }
  36. EX0 = 1;
  37. }
  38. while(1);
  39. }

  40. //定時器0中斷處理
  41. void timeint(void) interrupt 1 using 2
  42. {
  43. TH0=0xFD;
  44. TL0=0x1E; //設定時值為800us

  45. if (IRCON<3)
  46. {
  47. if (IRCON2<8) //每中斷一次讀一次遙控接收頭的狀態,每二次為遙控編碼中的一個位
  48. {
  49. IRCON2++;
  50. IRCode[IRCON]=IRCode[IRCON]<<1; //每讀一次放入變量中的二進制的一個位,每次左移一位
  51. IRCode[IRCON]=IRCode[IRCON] | P3_2; //每八次填滿一個字節,一個字節存放遙控編碼4個位
  52. }
  53. else
  54. {
  55. IRCON++; //填滿一個字節,指向下一個變量
  56. IRCON2=0; //計數清零
  57. }
  58. }
  59. else
  60. {
  61. TR0 = 0; //關閉定時器
  62. ET0 = 0; //定時器0中斷關閉
  63. if ((IRCode[1]!=0xFF) && (IRCode[2]!=0xFF))
  64. {
  65. if (IRCode[1] == 0x55)
  66. {
  67. switch (IRCode[2])
  68. {
  69. case 0xAB: //1-8鍵控制
  70. P1_0 = ~P1_0;
  71. DT = 1;
  72. break;
  73. case 0xAC:
  74. P1_1 = ~P1_1;
  75. DT = 1;
  76. break;
  77. case 0xAD:
  78. P1_2 = ~P1_2;
  79. DT = 1;
  80. break;
  81. case 0xB2:
  82. P1_3 = ~P1_3;
  83. DT = 1;
  84. break;
  85. case 0xB3:
  86. P1_4 = ~P1_4;
  87. DT = 1;
  88. break;
  89. case 0xB4:
  90. P1_5 = ~P1_5;
  91. DT = 1;
  92. break;
  93. case 0xB5:
  94. P1_6 = ~P1_6;
  95. DT = 1;
  96. break;
  97. case 0xCA:
  98. P1_7 = ~P1_7;
  99. DT = 1;
  100. break;
  101. case 0xD2: //按關閉電源鍵,關閉所有繼電器
  102. P1 = 0xFF;
  103. DT = 1;
  104. break;
  105. }
  106. }
  107. }
  108. }
  109. }

  110. //INT0中斷
  111. void INT0Fun(void) interrupt 0 using 2
  112. {
  113. EX0 = 0; //外部中斷0關閉
  114. ET0 = 1; //定時器0中斷打開
  115. TH0=0xFD;
  116. TL0=0x1E; //設定時值為800us

  117. for (IRCON=0; IRCON<3; IRCON++)
  118. IRCode[IRCON] = 0;
  119. IRCON = 0;
  120. IRCON2 = 0; //計數清零

  121. TR0 = 1;//開始計數
  122. }

  123.   
復制代碼




回復

使用道具 舉報

ID:108142 發表于 2016-3-10 00:32 來自觸屏版 | 顯示全部樓層
我的微信SUN469923905請大神指教
回復

使用道具 舉報

ID:194844 發表于 2017-5-1 19:35 | 顯示全部樓層
verygood!
回復

使用道具 舉報

ID:154669 發表于 2017-5-2 10:46 | 顯示全部樓層
有制作教程嗎,
回復

使用道具 舉報

ID:95393 發表于 2017-5-23 02:53 來自觸屏版 | 顯示全部樓層
先做個記號,有空鉆研一下程序
回復

使用道具 舉報

ID:204748 發表于 2017-5-28 13:11 來自觸屏版 | 顯示全部樓層
謝謝分享。謝謝奉獻。謝謝樓主。
回復

使用道具 舉報

ID:272625 發表于 2018-2-20 00:43 | 顯示全部樓層
樓主請教下,為什么程序編譯通過,可燒錄到單片機什么反應都沒有。程序如下:/**********************BST-V51實驗開發板例程************************
回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲高清久久 | 亚洲国产一区二区三区在线观看 | 91久久精品一区二区三区 | 性做久久久久久免费观看欧美 | 欧美中文字幕 | 日韩图区 | 日本淫视频| 久久69精品久久久久久国产越南 | 日韩中文字幕 | 中文精品久久 | 精品91久久 | 久久综合香蕉 | 羞羞的视频免费观看 | 亚洲国产成人av好男人在线观看 | 亚洲精品一区二区三区中文字幕 | 欧美区日韩区 | 激情av在线 | 999免费视频 | 男人天堂久久久 | 亚洲欧美在线一区 | 午夜视频一区 | 亚洲久久 | 一级做a爰片性色毛片16美国 | 免费国产精品久久久久久 | 福利视频网站 | 国产永久免费 | 欧美一级在线 | 久久久精品影院 | 欧美一级大黄 | 国产高清在线 | 红桃成人在线 | 亚洲日韩中文字幕一区 | 欧美男人的天堂 | 91久久看片 | 性高湖久久久久久久久 | h在线| 国产精品精品视频一区二区三区 | 在线观看中文字幕dvd播放 | 99精品视频免费观看 | 久久曰视频 | 超碰人人爱|