找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 27860|回复: 28
收起左侧

DIY插座 STC15F104单片机红外遥控继电器(附程序源码)

  [复制链接]
ID:112693 发表于 2018-10-19 11:34 | 显示全部楼层 |阅读模式
本帖最后由 dragon19790000 于 2018-10-30 13:07 编辑

STC15F104单片机芯片制作,改装普通220V插座,简单方便,懒人福音(不用再弯腰去开开关了

制作出来的红外遥控插座实物图如下:

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

单片机源程序如下:
  1. //STC 15F104W
  2. #include<reg52.h>

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

  5. sbit IR=P3^2;//红外接口标志

  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); //声明函数  延时函数
  17. void Ir_work(void);                          //声明函数  红外工作函数
  18. void Ircordpro(void);                  //声明函数  红外处理函数

  19. void Keyscan(void)//键盘扫描
  20. {

  21.         if(!Key)//按键按下则开关电气
  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)//延时声明
  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//定时器声明
  56. {
  57.   irtime++;
  58. }

  59. void ex0_isr (void) interrupt 0 using 0//外部中断声明
  60. {
  61.   static unsigned char  i;             //接收红外信号处理
  62.   static bit startflag;                //是否开始处理标志位

  63. if(startflag)                        
  64.    {
  65.     if(irtime<63&&irtime>=33)//引导码 9ms+4.5ms
  66.                         i=0;
  67.                     irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是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)//定时器0初始化
  83. {

  84.   TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
  85.   TH0=0x00;//reload value
  86.   TL0=0x00;//initial value
  87.   ET0=1;//开中断
  88.   TR0=1;
  89. }

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

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

  99. Buzzer=0;

  100. Key=1;

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

  103. while(1)//主循环
  104.    {

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

  111.     if(irpro_ok)//处理遥控信号
  112.           {
  113.            Ir_work();
  114.             }
  115.    }
  116. }

  117.   void Ir_work(void)  //红外处理,此值可修改
  118.   {
  119.     switch(IRcord[2])//仅判断其中1个数据,如果防止串码,需要同时对比4个字节数据
  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)//红外码值处理函数
  140. {
  141.   unsigned char i, j, k;
  142.   unsigned char cord,value;

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

  145. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
1路红外继电器 15F104 ok 2018-10-19.rar (25.6 KB, 下载次数: 316)
回复

使用道具 举报

ID:386381 发表于 2018-10-19 21:39 来自手机 | 显示全部楼层
谢谢楼主分享,是不是什么遥控器都能用啊,要不要提前学习进去呀
回复

使用道具 举报

ID:112693 发表于 2018-10-19 23:19 | 显示全部楼层
先要搞清楚,遥控器的红外键值,修改C程序即可,我的手机是 小米 max2 自带红外遥控,遥控器和手机都能使用

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:424598 发表于 2018-11-13 07:03 | 显示全部楼层
为什么我烧录后,按所有红外按键都能亮然后就灭灯?
P3^4或将P3^4改P3^5都不行(代码内的P3^5部分已屏蔽)
回复

使用道具 举报

ID:280736 发表于 2018-11-13 12:38 | 显示全部楼层
谢谢!学习了!
回复

使用道具 举报

ID:399179 发表于 2018-11-13 21:01 来自手机 | 显示全部楼层
这个是自学习型的吗?
回复

使用道具 举报

ID:112693 发表于 2018-11-15 21:31 | 显示全部楼层
ssk7793 发表于 2018-11-13 07:03
为什么我烧录后,按所有红外按键都能亮然后就灭灯?
P3^4或将P3^4改P3^5都不行(代码内的P3^5部分已屏蔽)
...

为什么要修改?DIP
回复

使用道具 举报

ID:112693 发表于 2018-11-15 21:33 | 显示全部楼层
快乐眼泪 发表于 2018-11-13 21:01
这个是自学习型的吗?

不是学习型的,先做个红外解码器记录键值,然后把你要的键值写入本程序。就OK了
回复

使用道具 举报

ID:51443 发表于 2018-11-16 18:56 | 显示全部楼层

把P3.4改为推挽输出试试。即加上:P3M1=0x04;P3M0=0x08;这两句。
回复

使用道具 举报

ID:424598 发表于 2018-11-16 20:19 | 显示全部楼层

因为直接烧录你发的代码,按遥控器只有闪烁灯有反应,其它的没有反应我用的是简版遥控器

你这里有个定义红外接收用户码,我需要怎么修改?
#define        User_code                0xB649                //定义红外接收用户码

另说明,我烧录论坛里的
STC15F104W单双多路串口蓝牙控制继电器 源码+上位机源码
程序是可以正常使用的

但烧录
DIY插座 STC15F104单片机红外遥控继电器(附程序源码)

用STC八脚单片机STC15F104E制作红外遥控灯扇
都无法使用
TB2l6xCaJRopuFjSZFtXXcanpXa_!!675972385.jpg
回复

使用道具 举报

ID:51443 发表于 2018-11-17 16:29 | 显示全部楼层
ssk7793 发表于 2018-11-16 20:19
因为直接烧录你发的代码,按遥控器只有闪烁灯有反应,其它的没有反应我用的是简版遥控器

你这里有个定 ...

首先,你的遥控器的引导码若是9ms+4.5ms,那么,就只需要改那个0x02就行了。
回复

使用道具 举报

ID:424598 发表于 2018-11-17 20:12 | 显示全部楼层
职教电子 发表于 2018-11-17 16:29
首先,你的遥控器的引导码若是9ms+4.5ms,那么,就只需要改那个0x02就行了。

改了,没用
另外你板子上有二个三极管,但没有说明是什么三极管,能否说明一下?
还有烧录时选的频率是多少?11.0592还是12.000
回复

使用道具 举报

ID:320226 发表于 2018-11-17 20:53 | 显示全部楼层
楼主  你好 可以增加多几路继电器负载输出 口 吗 ? 如果增加输出口 程序要怎样修改
回复

使用道具 举报

ID:424598 发表于 2018-11-20 10:20 来自手机 | 显示全部楼层
问题找到了。看了另一个贴子,好像是io口冲突的问题,他把开关和蜂鸣器放在tx和rx就能用。稍后我整理一下。做个成品出来在发布。
回复

使用道具 举报

ID:112693 发表于 2018-11-20 19:27 | 显示全部楼层
ssk7793 发表于 2018-11-17 20:12
改了,没用
另外你板子上有二个三极管,但没有说明是什么三极管,能否说明一下?
还有烧录时选的频率是 ...

晶振频率设置 12M
回复

使用道具 举报

ID:112693 发表于 2018-11-20 19:33 | 显示全部楼层
ssk7793 发表于 2018-11-16 20:19
因为直接烧录你发的代码,按遥控器只有闪烁灯有反应,其它的没有反应我用的是简版遥控器

你这里有个定 ...

我是经过测试后,才发表的,注意两个三极管,一个是PNP的,另一个是NPN的,分别是高低电平起作用,制作时要搞清楚
另外,先要准确的记录你要使用的红外遥控器的键值,按三次以上,键值保持不变,才可以!否则说明你的红外解码键值有问题!
回复

使用道具 举报

ID:112693 发表于 2018-11-20 19:35 | 显示全部楼层
ssk7793 发表于 2018-11-17 20:12
改了,没用
另外你板子上有二个三极管,但没有说明是什么三极管,能否说明一下?
还有烧录时选的频率是 ...

三极管用了两个,一个NPN型,另一个PNP型,起作用就是起到开关作用,你先要补习一下模拟电路的三极管开关电路,辅助限流电阻不能省略!
回复

使用道具 举报

ID:112693 发表于 2018-11-20 19:39 | 显示全部楼层
vbnm 发表于 2018-11-17 20:53
楼主  你好 可以增加多几路继电器负载输出 口 吗 ? 如果增加输出口 程序要怎样修改

如果要增加多路继电器控制,就要更换单片机芯片,15f104 io口比较少,兼用换成 15f408!

程序需要改动,主要是对应红外键值和io口之间的连接
比如 case 0x00 P0.0口取反
               0x01 P0.1口取反..................
回复

使用道具 举报

ID:112693 发表于 2018-11-20 19:45 | 显示全部楼层
ssk7793 发表于 2018-11-20 10:20
问题找到了。看了另一个贴子,好像是io口冲突的问题,他把开关和蜂鸣器放在tx和rx就能用。稍后我整理一下。 ...

在制作过程中,我可以避开 TXD 和 RXD两个io口,是为了以后方便烧写程序!!!
如果就使用一个继电器模块的话,完全可以不适用 TXD 和 RXD,以后调试起来方便

还有就是两个三极管起开关作用,要搞清楚三极管的作用、和特性,辅助限流电阻不可缺少,本程序采用两种类型的三极管,有高电平导通和低电平导通,可以根据个人习惯自行更改!
回复

使用道具 举报

ID:424598 发表于 2018-11-21 09:58 来自手机 | 显示全部楼层
谢谢楼主的回复。
回复

使用道具 举报

ID:424598 发表于 2018-11-21 10:00 来自手机 | 显示全部楼层
谢谢楼主,虽然你贴里并没有说明一个键值要按三次以上才可以。建议发贴时关键性的东西能描述清楚。感谢你的回复。
回复

使用道具 举报

ID:51443 发表于 2018-11-26 13:55 | 显示全部楼层
仿制了一个很好用,由于非常稳定可靠,按键,蜂鸣,指示灯都没用,更便于安装。
回复

使用道具 举报

ID:445163 发表于 2018-12-12 22:19 来自手机 | 显示全部楼层
楼主能留个联系方式吗,最近在学
回复

使用道具 举报

ID:320226 发表于 2018-12-18 19:55 | 显示全部楼层
楼主  你好,能用这个芯片做多一路继电器输出吗?如果做多一路输出要怎样修改程序?
回复

使用道具 举报

ID:293063 发表于 2018-12-24 16:12 | 显示全部楼层
太美了,谢谢了
回复

使用道具 举报

ID:381390 发表于 2019-11-7 14:02 | 显示全部楼层
谢谢楼主分享,
回复

使用道具 举报

ID:1004243 发表于 2022-2-7 09:38 | 显示全部楼层
新手来学习stc 的 支持
回复

使用道具 举报

ID:1004243 发表于 2022-2-7 10:52 | 显示全部楼层
要是加个学习遥控器 编码 就完美了
回复

使用道具 举报

ID:1042572 发表于 2022-8-27 00:15 来自手机 | 显示全部楼层
Nice....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表