找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3121|回复: 3
打印 上一主题 下一主题
收起左侧

原创单片机红外反射开关源码,有详细注释,可以做小便池前面的开关

[复制链接]
跳转到指定楼层
楼主
ID:140489 发表于 2018-3-8 08:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机源程序如下:
  1. //红外反射开关,接收头HS0038B,发射管用pnp三极管驱动
  2. //第一次上电,灯亮1秒后熄灭,
  3. //有人在开关前面,延时约1秒,灯亮,人离开后,延时X 秒后灯灭
  4. //如果灯还没灭,人又来到开关前面,灯长亮,人离开后,延时X 秒后灯灭
  5. //实验板测试正常
  6. //哪位大神有更好的方法来实现这个功能,也希望发出来
  7. #include <reg52.h>
  8. #include <intrins.h>
  9. #define uchar unsigned char
  10. #define uint  unsigned int

  11. sbit ir=P2^4;         //红外发射
  12. sbit ir_in=P3^2; //红外接收
  13. sbit led=P1^7;
  14. bit flag,flag2;
  15. uint cont,cont1;

  16. bit f1,f2;
  17. void delay(uint z)           //ms
  18. {
  19.         uint x,y;
  20.         for(x=z; x>0; x--)
  21.                 for(y=114; y>0; y--);
  22. }


  23. void fa_38k()          //38k 载波                         //接收头前面有滤光片,发射管要用黑色热缩套管套起来
  24. {                                  //不是很准,没有逻辑分析仪,搞不准,现在的反射距离在60厘米左右(发射管串100欧电阻)
  25.         ir=0;                  //如果有逻辑分析仪,把频率调准,反射距离肯定要远些
  26.         _nop_();_nop_();_nop_();_nop_();
  27.         _nop_();_nop_();_nop_();_nop_();
  28.         
  29.         ir=1;
  30.         _nop_();_nop_();_nop_();_nop_();
  31.         _nop_();_nop_();_nop_();_nop_();
  32.         _nop_();_nop_();_nop_();_nop_();
  33.         _nop_();_nop_();_nop_();_nop_();
  34.         _nop_();//_nop_();
  35. }

  36. void main()
  37. {
  38.         uint i;
  39.         ir_in=1;
  40.         TMOD |= 0X01;                          //T0定时器,模式1, 16位计数
  41.         TH0 = (65536-10000)/256;  //10ms初值 @12MHz晶振
  42.         TL0 = (65536-10000)%256;
  43.         EA=1;
  44.         ET0=1;
  45.         TR0=1;
  46.         led=0;
  47.         delay(1000);
  48.         led=1;
  49.         while(1)
  50.         {
  51.                 if(flag)
  52.                 {
  53.                         fa_38k();  //发38K
  54.                 }
  55.                 else ir=1;           //停止发射
  56.            
  57.                
  58.                 if(ir_in==0)  //如果红外接收的输出端为0,表示前面有反射物体
  59.                 {        
  60.                         i++;          //这句起消抖的作用 ,i取大些,抗干扰能力强些
  61.                         if((ir_in==0) && (i>15000)) //确认反射物体还在开关前面,这里i的延时灯点亮的速度
  62.                         {                                                //i越小,灯点亮越快,i的数值如果设定20000,可以不要下面那句delay(2000);
  63.                                 i=0;                         //消抖计时变量清0
  64.                         //        delay(1000);         //延时2秒后,这里不加延时也可以,看自己的喜好
  65.                                 led=0;                         //亮灯
  66.                                 f1=1;                         //延时计时标志置1
  67.                                 cont1=0;                 //延时计时变量清零
  68.                                 while(!ir_in);         //判断反射物体是否离开,如果没离开,程序就停在这里,
  69.                                                                  //灯一直亮,相当于按键的松手检测
  70.                         }
  71.                 }

  72.                 if(cont1==1000 && ir_in==1)  //松手+延时时间到后,这里是设定延时10秒
  73.                 {
  74.                         f1=0;                                          //延时计时标志清0
  75.                         cont1=0;                                  //延时关灯计时变量清0
  76.                         led=1;                                          //关灯
  77.                 }

  78.         }
  79. }

  80. void timer0() interrupt 1
  81. {
  82.         TH0 = (65536-10000)/256;  //重装10ms初值
  83.         TL0 = (65536-10000)%256;
  84.         cont++;
  85.         if(cont==10)  
  86.         {        
  87.                 cont=0;
  88.                 flag=!flag;         //发100ms 38K,停100ms
  89.         }
  90.         
  91.         if(f1)
  92.         {
  93.                 cont1++;
  94.         }        
  95. }

复制代码


评分

参与人数 2黑币 +55 收起 理由
kkggg12345 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:387856 发表于 2020-3-10 12:05 | 只看该作者
能不能不用红外接收头,用红外对管,程序能做到防太阳光。高手能不能搞
回复

使用道具 举报

板凳
ID:140489 发表于 2020-3-10 14:28 | 只看该作者
可以做的,红外对管的反射距离比较近,只能做到10几厘米
回复

使用道具 举报

地板
ID:964852 发表于 2021-11-19 10:59 来自手机 | 只看该作者
大神,能否发下红外对管的参考点代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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