找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 30469|回復(fù): 31
收起左側(cè)

DIY插座 STC15F104單片機(jī)紅外遙控繼電器(附程序源碼)

  [復(fù)制鏈接]
ID:112693 發(fā)表于 2018-10-19 11:34 | 顯示全部樓層 |閱讀模式
STC15F104單片機(jī)芯片制作,改裝普通220V插座,簡(jiǎn)單方便,懶人福音(不用再?gòu)澭ラ_(kāi)開(kāi)關(guān)了

制作出來(lái)的紅外遙控插座實(shí)物圖如下:

STC 15F104 ir.JPG 01.JPG 02.JPG 04.JPG 03.JPG 20181030125742.jpg

單片機(jī)源程序如下:
  1. //STC 15F104W
  2. #include<reg52.h>

  3. #define TURE 1
  4. #define FALSE 0

  5. sbit IR=P3^2;//紅外接口標(biāo)志

  6. sbit Relay=P3^4;//繼電器1輸出端口
  7.            
  8. sbit Buzzer=P3^3;//蜂鳴器

  9. sbit Key=P3^5;//按鍵

  10. unsigned char irtime;//紅外用全局變量
  11. unsigned char i;
  12. bit flag;
  13. bit irpro_ok,irok;
  14. unsigned char IRcord[4];
  15. unsigned char irdata[33];

  16. void Delay(unsigned char mS); //聲明函數(shù)  延時(shí)函數(shù)
  17. void Ir_work(void);                          //聲明函數(shù)  紅外工作函數(shù)
  18. void Ircordpro(void);                  //聲明函數(shù)  紅外處理函數(shù)

  19. void Keyscan(void)//鍵盤掃描
  20. {

  21.         if(!Key)//按鍵按下則開(kāi)關(guān)電氣
  22.         {
  23.                  Delay(10);//去抖

  24.     if(!Key)
  25.     {
  26.             while(!Key)
  27.             {};

  28.         Delay(10);//去抖

  29.         while(!Key)
  30.             {};
  31.             {
  32.              Relay=!Relay;
  33.                          Buzzer=!Buzzer;
  34.                          Delay(500);
  35.                          Buzzer=!Buzzer;
  36.             }
  37.     }
  38.     }
  39. }

  40. void Delay(unsigned char mS)//延時(shí)聲明
  41.         {
  42.         unsigned char us,usn;

  43.         while(mS!=0)
  44.         {
  45.                 usn = 4;
  46.                 while(usn!=0)
  47.                 {
  48.                      us=0xf0;
  49.                      while (us!=0) {us--;};
  50.                      usn--;
  51.                 }

  52.                      mS--;

  53.         }
  54.         }

  55. void tim0_isr (void) interrupt 1 using 1//定時(shí)器聲明
  56. {
  57.   irtime++;
  58. }

  59. void ex0_isr (void) interrupt 0 using 0//外部中斷聲明
  60. {
  61.   static unsigned char  i;             //接收紅外信號(hào)處理
  62.   static bit startflag;                //是否開(kāi)始處理標(biāo)志位

  63. if(startflag)                        
  64.    {
  65.     if(irtime<63&&irtime>=33)//引導(dǎo)碼 9ms+4.5ms
  66.                         i=0;
  67.                     irdata[i]=irtime;//存儲(chǔ)每個(gè)電平的持續(xù)時(shí)間,用于以后判斷是0還是1
  68.                     irtime=0;
  69.                     i++;
  70.                             if(i==33)
  71.                               {
  72.                                    irok=1;
  73.                                  i=0;
  74.                                   }
  75.           }
  76.            else
  77.                 {
  78.                 irtime=0;
  79.                 startflag=1;
  80.                 }
  81.         }

  82. void TIM0init(void)//定時(shí)器0初始化
  83. {

  84.   TMOD=0x02;//定時(shí)器0工作方式2,TH0是重裝值,TL0是初值
  85.   TH0=0x00;//reload value
  86.   TL0=0x00;//initial value
  87.   ET0=1;//開(kāi)中斷
  88.   TR0=1;
  89. }

  90. void EX0init(void)         //外部定時(shí)初始化
  91. {
  92. IT0 = 1;   //INT0 (P3.2)
  93. EX0 = 1;   //Enable EX0 Interrupt
  94. EA = 1;  
  95. }

  96. void main(void)          //主函數(shù)
  97. {
  98. Relay=1;

  99. Buzzer=0;

  100. Key=1;

  101. EX0init(); // 初始化
  102. TIM0init();

  103. while(1)//主循環(huán)
  104.    {

  105.         Keyscan();//按鍵掃描
  106.     if(irok)
  107.           {   
  108.            Ircordpro();
  109.             irok=0;
  110.           }

  111.     if(irpro_ok)//處理遙控信號(hào)
  112.           {
  113.            Ir_work();
  114.             }
  115.    }
  116. }

  117.   void Ir_work(void)  //紅外處理,此值可修改
  118.   {
  119.     switch(IRcord[2])//僅判斷其中1個(gè)數(shù)據(jù),如果防止串碼,需要同時(shí)對(duì)比4個(gè)字節(jié)數(shù)據(jù)
  120.               {
  121.            case 0x02: Relay=!Relay;   // 0x02 紅外遙控 用戶碼 可自行更改
  122.                                           Delay(10);
  123.                               Buzzer=!Buzzer;
  124.                                           Delay(500);
  125.                                           Buzzer=!Buzzer;
  126.                                           Delay(400);
  127.                                           Buzzer=!Buzzer;
  128.                                           Delay(500);
  129.                                           Buzzer=!Buzzer;                                         
  130.                                          
  131.                                           break;
  132.                
  133.                default:break;
  134.               }
  135.                   irpro_ok=0;
  136.               IRcord[1]=0;//清除值,防止誤碼
  137.               IRcord[2]=0;
  138.   }

  139. void Ircordpro(void)//紅外碼值處理函數(shù)
  140. {
  141.   unsigned char i, j, k;
  142.   unsigned char cord,value;

  143.   k=1;
  144. ……………………

  145. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
1路紅外繼電器 15F104 ok 2018-10-19.rar (25.6 KB, 下載次數(shù): 321)


回復(fù)

使用道具 舉報(bào)

ID:386381 發(fā)表于 2018-10-19 21:39 來(lái)自手機(jī) | 顯示全部樓層
謝謝樓主分享,是不是什么遙控器都能用啊,要不要提前學(xué)習(xí)進(jìn)去呀
回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2018-10-19 23:19 | 顯示全部樓層
先要搞清楚,遙控器的紅外鍵值,修改C程序即可,我的手機(jī)是 小米 max2 自帶紅外遙控,遙控器和手機(jī)都能使用

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2018-11-13 07:03 | 顯示全部樓層
為什么我燒錄后,按所有紅外按鍵都能亮然后就滅燈?
P3^4或?qū)3^4改P3^5都不行(代碼內(nèi)的P3^5部分已屏蔽)
回復(fù)

使用道具 舉報(bào)

ID:280736 發(fā)表于 2018-11-13 12:38 | 顯示全部樓層
謝謝!學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:399179 發(fā)表于 2018-11-13 21:01 來(lái)自手機(jī) | 顯示全部樓層
這個(gè)是自學(xué)習(xí)型的嗎?
回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2018-11-15 21:31 | 顯示全部樓層
ssk7793 發(fā)表于 2018-11-13 07:03
為什么我燒錄后,按所有紅外按鍵都能亮然后就滅燈?
P3^4或?qū)3^4改P3^5都不行(代碼內(nèi)的P3^5部分已屏蔽)
...

為什么要修改?DIP
回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2018-11-15 21:33 | 顯示全部樓層
快樂(lè)眼淚 發(fā)表于 2018-11-13 21:01
這個(gè)是自學(xué)習(xí)型的嗎?

不是學(xué)習(xí)型的,先做個(gè)紅外解碼器記錄鍵值,然后把你要的鍵值寫(xiě)入本程序。就OK了
回復(fù)

使用道具 舉報(bào)

ID:51443 發(fā)表于 2018-11-16 18:56 | 顯示全部樓層

把P3.4改為推挽輸出試試。即加上:P3M1=0x04;P3M0=0x08;這兩句。
回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2018-11-16 20:19 | 顯示全部樓層

因?yàn)橹苯訜浤惆l(fā)的代碼,按遙控器只有閃爍燈有反應(yīng),其它的沒(méi)有反應(yīng)我用的是簡(jiǎn)版遙控器

你這里有個(gè)定義紅外接收用戶碼,我需要怎么修改?
#define        User_code                0xB649                //定義紅外接收用戶碼

另說(shuō)明,我燒錄論壇里的
STC15F104W單雙多路串口藍(lán)牙控制繼電器 源碼+上位機(jī)源碼
程序是可以正常使用的

但燒錄
DIY插座 STC15F104單片機(jī)紅外遙控繼電器(附程序源碼)

用STC八腳單片機(jī)STC15F104E制作紅外遙控?zé)羯?/a>
都無(wú)法使用
51hei.jpg
回復(fù)

使用道具 舉報(bào)

ID:51443 發(fā)表于 2018-11-17 16:29 | 顯示全部樓層
ssk7793 發(fā)表于 2018-11-16 20:19
因?yàn)橹苯訜浤惆l(fā)的代碼,按遙控器只有閃爍燈有反應(yīng),其它的沒(méi)有反應(yīng)我用的是簡(jiǎn)版遙控器

你這里有個(gè)定 ...

首先,你的遙控器的引導(dǎo)碼若是9ms+4.5ms,那么,就只需要改那個(gè)0x02就行了。
回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2018-11-17 20:12 | 顯示全部樓層
職教電子 發(fā)表于 2018-11-17 16:29
首先,你的遙控器的引導(dǎo)碼若是9ms+4.5ms,那么,就只需要改那個(gè)0x02就行了。

改了,沒(méi)用
另外你板子上有二個(gè)三極管,但沒(méi)有說(shuō)明是什么三極管,能否說(shuō)明一下?
還有燒錄時(shí)選的頻率是多少?11.0592還是12.000
回復(fù)

使用道具 舉報(bào)

ID:320226 發(fā)表于 2018-11-17 20:53 | 顯示全部樓層
樓主  你好 可以增加多幾路繼電器負(fù)載輸出 口 嗎 ? 如果增加輸出口 程序要怎樣修改
回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2018-11-20 10:20 來(lái)自手機(jī) | 顯示全部樓層
問(wèn)題找到了?戳肆硪粋(gè)貼子,好像是io口沖突的問(wèn)題,他把開(kāi)關(guān)和蜂鳴器放在tx和rx就能用。稍后我整理一下。做個(gè)成品出來(lái)在發(fā)布。
回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2018-11-20 19:27 | 顯示全部樓層
ssk7793 發(fā)表于 2018-11-17 20:12
改了,沒(méi)用
另外你板子上有二個(gè)三極管,但沒(méi)有說(shuō)明是什么三極管,能否說(shuō)明一下?
還有燒錄時(shí)選的頻率是 ...

晶振頻率設(shè)置 12M
回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2018-11-20 19:33 | 顯示全部樓層
ssk7793 發(fā)表于 2018-11-16 20:19
因?yàn)橹苯訜浤惆l(fā)的代碼,按遙控器只有閃爍燈有反應(yīng),其它的沒(méi)有反應(yīng)我用的是簡(jiǎn)版遙控器

你這里有個(gè)定 ...

我是經(jīng)過(guò)測(cè)試后,才發(fā)表的,注意兩個(gè)三極管,一個(gè)是PNP的,另一個(gè)是NPN的,分別是高低電平起作用,制作時(shí)要搞清楚
另外,先要準(zhǔn)確的記錄你要使用的紅外遙控器的鍵值,按三次以上,鍵值保持不變,才可以!否則說(shuō)明你的紅外解碼鍵值有問(wèn)題!
回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2018-11-20 19:35 | 顯示全部樓層
ssk7793 發(fā)表于 2018-11-17 20:12
改了,沒(méi)用
另外你板子上有二個(gè)三極管,但沒(méi)有說(shuō)明是什么三極管,能否說(shuō)明一下?
還有燒錄時(shí)選的頻率是 ...

三極管用了兩個(gè),一個(gè)NPN型,另一個(gè)PNP型,起作用就是起到開(kāi)關(guān)作用,你先要補(bǔ)習(xí)一下模擬電路的三極管開(kāi)關(guān)電路,輔助限流電阻不能省略!
回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2018-11-20 19:39 | 顯示全部樓層
vbnm 發(fā)表于 2018-11-17 20:53
樓主  你好 可以增加多幾路繼電器負(fù)載輸出 口 嗎 ? 如果增加輸出口 程序要怎樣修改

如果要增加多路繼電器控制,就要更換單片機(jī)芯片,15f104 io口比較少,兼用換成 15f408!

程序需要改動(dòng),主要是對(duì)應(yīng)紅外鍵值和io口之間的連接
比如 case 0x00 P0.0口取反
               0x01 P0.1口取反..................
回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2018-11-20 19:45 | 顯示全部樓層
ssk7793 發(fā)表于 2018-11-20 10:20
問(wèn)題找到了?戳肆硪粋(gè)貼子,好像是io口沖突的問(wèn)題,他把開(kāi)關(guān)和蜂鳴器放在tx和rx就能用。稍后我整理一下。 ...

在制作過(guò)程中,我可以避開(kāi) TXD 和 RXD兩個(gè)io口,是為了以后方便燒寫(xiě)程序。!
如果就使用一個(gè)繼電器模塊的話,完全可以不適用 TXD 和 RXD,以后調(diào)試起來(lái)方便

還有就是兩個(gè)三極管起開(kāi)關(guān)作用,要搞清楚三極管的作用、和特性,輔助限流電阻不可缺少,本程序采用兩種類型的三極管,有高電平導(dǎo)通和低電平導(dǎo)通,可以根據(jù)個(gè)人習(xí)慣自行更改!
回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2018-11-21 09:58 來(lái)自手機(jī) | 顯示全部樓層
謝謝樓主的回復(fù)。
回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2018-11-21 10:00 來(lái)自手機(jī) | 顯示全部樓層
謝謝樓主,雖然你貼里并沒(méi)有說(shuō)明一個(gè)鍵值要按三次以上才可以。建議發(fā)貼時(shí)關(guān)鍵性的東西能描述清楚。感謝你的回復(fù)。
回復(fù)

使用道具 舉報(bào)

ID:51443 發(fā)表于 2018-11-26 13:55 | 顯示全部樓層
仿制了一個(gè)很好用,由于非常穩(wěn)定可靠,按鍵,蜂鳴,指示燈都沒(méi)用,更便于安裝。
回復(fù)

使用道具 舉報(bào)

ID:445163 發(fā)表于 2018-12-12 22:19 來(lái)自手機(jī) | 顯示全部樓層
樓主能留個(gè)聯(lián)系方式嗎,最近在學(xué)
回復(fù)

使用道具 舉報(bào)

ID:320226 發(fā)表于 2018-12-18 19:55 | 顯示全部樓層
樓主  你好,能用這個(gè)芯片做多一路繼電器輸出嗎?如果做多一路輸出要怎樣修改程序?
回復(fù)

使用道具 舉報(bào)

ID:293063 發(fā)表于 2018-12-24 16:12 | 顯示全部樓層
太美了,謝謝了
回復(fù)

使用道具 舉報(bào)

ID:381390 發(fā)表于 2019-11-7 14:02 | 顯示全部樓層
謝謝樓主分享,
回復(fù)

使用道具 舉報(bào)

ID:1004243 發(fā)表于 2022-2-7 09:38 | 顯示全部樓層
新手來(lái)學(xué)習(xí)stc 的 支持
回復(fù)

使用道具 舉報(bào)

ID:1004243 發(fā)表于 2022-2-7 10:52 | 顯示全部樓層
要是加個(gè)學(xué)習(xí)遙控器 編碼 就完美了
回復(fù)

使用道具 舉報(bào)

ID:1042572 發(fā)表于 2022-8-27 00:15 來(lái)自手機(jī) | 顯示全部樓層
Nice....
回復(fù)

使用道具 舉報(bào)

ID:637591 發(fā)表于 2025-2-24 19:57 | 顯示全部樓層
樓主大佬,這是我照著您的程序弄得程序不知道為啥遙控不好使,但按鍵好使,紅外接到p3.5口,按鍵接到p3.4口,使p3.3和p3.3輸出不同電平,按鍵每次按下對(duì)應(yīng)輸出4種狀態(tài),遙控器上的1234按鍵也能控制輸出對(duì)應(yīng)的4種狀態(tài)。

stc15f104w紅外.zip

35.44 KB, 下載次數(shù): 0, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

ID:637591 發(fā)表于 2025-2-24 20:01 | 顯示全部樓層
1.jpg
回復(fù)

使用道具 舉報(bào)

ID:637591 發(fā)表于 2025-3-3 20:17 | 顯示全部樓層
好了 成功了

stc15f104w紅外--成功.zip

35.76 KB, 下載次數(shù): 0, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表