欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 原創(chuàng)單片機(jī)紅外反射開關(guān)源碼,有詳細(xì)注釋,可以做小便池前面的開關(guān) [打印本頁]

作者: lids    時(shí)間: 2018-3-8 08:43
標(biāo)題: 原創(chuàng)單片機(jī)紅外反射開關(guān)源碼,有詳細(xì)注釋,可以做小便池前面的開關(guān)
51單片機(jī)源程序如下:
  1. //紅外反射開關(guān),接收頭HS0038B,發(fā)射管用pnp三極管驅(qū)動
  2. //第一次上電,燈亮1秒后熄滅,
  3. //有人在開關(guān)前面,延時(shí)約1秒,燈亮,人離開后,延時(shí)X 秒后燈滅
  4. //如果燈還沒滅,人又來到開關(guān)前面,燈長亮,人離開后,延時(shí)X 秒后燈滅
  5. //實(shí)驗(yàn)板測試正常
  6. //哪位大神有更好的方法來實(shí)現(xiàn)這個功能,也希望發(fā)出來
  7. #include <reg52.h>
  8. #include <intrins.h>
  9. #define uchar unsigned char
  10. #define uint  unsigned int

  11. sbit ir=P2^4;         //紅外發(fā)射
  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 載波                         //接收頭前面有濾光片,發(fā)射管要用黑色熱縮套管套起來
  24. {                                  //不是很準(zhǔn),沒有邏輯分析儀,搞不準(zhǔn),現(xiàn)在的反射距離在60厘米左右(發(fā)射管串100歐電阻)
  25.         ir=0;                  //如果有邏輯分析儀,把頻率調(diào)準(zhǔn),反射距離肯定要遠(yuǎn)些
  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定時(shí)器,模式1, 16位計(jì)數(shù)
  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();  //發(fā)38K
  54.                 }
  55.                 else ir=1;           //停止發(fā)射
  56.            
  57.                
  58.                 if(ir_in==0)  //如果紅外接收的輸出端為0,表示前面有反射物體
  59.                 {        
  60.                         i++;          //這句起消抖的作用 ,i取大些,抗干擾能力強(qiáng)些
  61.                         if((ir_in==0) && (i>15000)) //確認(rèn)反射物體還在開關(guān)前面,這里i的延時(shí)燈點(diǎn)亮的速度
  62.                         {                                                //i越小,燈點(diǎn)亮越快,i的數(shù)值如果設(shè)定20000,可以不要下面那句delay(2000);
  63.                                 i=0;                         //消抖計(jì)時(shí)變量清0
  64.                         //        delay(1000);         //延時(shí)2秒后,這里不加延時(shí)也可以,看自己的喜好
  65.                                 led=0;                         //亮燈
  66.                                 f1=1;                         //延時(shí)計(jì)時(shí)標(biāo)志置1
  67.                                 cont1=0;                 //延時(shí)計(jì)時(shí)變量清零
  68.                                 while(!ir_in);         //判斷反射物體是否離開,如果沒離開,程序就停在這里,
  69.                                                                  //燈一直亮,相當(dāng)于按鍵的松手檢測
  70.                         }
  71.                 }

  72.                 if(cont1==1000 && ir_in==1)  //松手+延時(shí)時(shí)間到后,這里是設(shè)定延時(shí)10秒
  73.                 {
  74.                         f1=0;                                          //延時(shí)計(jì)時(shí)標(biāo)志清0
  75.                         cont1=0;                                  //延時(shí)關(guān)燈計(jì)時(shí)變量清0
  76.                         led=1;                                          //關(guān)燈
  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;         //發(fā)100ms 38K,停100ms
  89.         }
  90.         
  91.         if(f1)
  92.         {
  93.                 cont1++;
  94.         }        
  95. }

復(fù)制代碼



作者: liuhailan5757    時(shí)間: 2020-3-10 12:05
能不能不用紅外接收頭,用紅外對管,程序能做到防太陽光。高手能不能搞
作者: lids    時(shí)間: 2020-3-10 14:28
可以做的,紅外對管的反射距離比較近,只能做到10幾厘米
作者: xhl-xy    時(shí)間: 2021-11-19 10:59
大神,能否發(fā)下紅外對管的參考點(diǎn)代碼




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1