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

QQ登錄

只需一步,快速開始

搜索
查看: 4330|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)紅外對(duì)射進(jìn)出門開關(guān)燈程序(已在廁所中使用)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
做它的目的是提示廁所內(nèi)有人  不用走近后才被里面的人提示  其他人在遠(yuǎn)處看到裝在外面的燈亮了就知道里面有人 紅外接收頭遮擋后重新接收到38khz信號(hào)會(huì)有一個(gè)低脈沖  通過判斷兩個(gè)接收頭遮擋的先后順序判斷進(jìn)出  按鍵可以切換進(jìn)出判斷

缺點(diǎn)是發(fā)射的38khz信號(hào)里不含有加密數(shù)據(jù) 接收端沒有解碼判斷 容易受到太陽(yáng)光干擾造成進(jìn)出不亮不滅   
進(jìn)去時(shí)蜂鳴器響一聲 出來響兩聲  如果受到太陽(yáng)光干擾就沿著進(jìn)或出的方向靠近接收端揮手就能開燈或關(guān)燈   燈開啟后延時(shí)七八分鐘自動(dòng)熄滅

制作出來的實(shí)物圖如下:


電路原理圖如下:



單片機(jī)源程序如下:
發(fā)射38khz方波
;12MHZ

                 ORG 0000H
                 SJMP STA
                 ORG 000BH
                 LJMP T0ISR
                 ORG 0030H
STA:
        ;         MOV TMOD,#02H                   ;AT89C2051        12MHZ
        ;         MOV TL0,#0B2H;#064H        ;
        ;         MOV TH0,#0FFH;#0FFH        ;
        ;         SETB TR0
        ;         SETB ET0
        ;         SETB EA
        ;         SJMP $
              MOV TMOD,#00010010B  ;STC15F104W         12MHZ
              MOV TH0,#0F4H           
              MOV TL0,#0F4H              
              SETB ET1
              SETB ET0
              SETB EA
              SETB TR1
              SETB TR0
                          SJMP $
T0ISR:
                 CPL P3.4
                 CPL P3.5
                 RETI
         END

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
接收
;12MHZ

               
                 SETB P3.3;IN1 紅外接收頭輸入端
                SETB P3.4;IN2 紅外接收頭輸入端
                SETB P3.5;LED 遮擋、延時(shí)指示        
                CLR  P3.1;OUT 輸出控制電器
                SETB P3.0;蜂鳴器                 
                SETB P3.2;切換 A<=>B
                X EQU 04H;切換標(biāo)志位        
        SETB X
                LCALL DELAY;
                LCALL DELAY;
                CLR  P3.0;蜂鳴器
                MOV  60H,#00
        MOV  61H,#00
                MOV  62H,#00
                MOV  63H,#00 ;自動(dòng)熄滅延時(shí)
MAIN1:        MOV  66H,#00
        MOV  67H,#00
                MOV  68H,#00
            SETB P3.5;LED 遮擋、延時(shí)指示               
                LCALL DELAY;

                LCALL DELAY;            
                LCALL DELAY;
                LCALL DELAY;
                LCALL DELAY;
                LCALL DELAY;
                LCALL DELAY;            
                LCALL DELAY;
                LCALL DELAY;
                LCALL DELAY;
                LCALL DELAY;
                LCALL DELAY;
                LCALL DELAY;
                LCALL DELAY;                        
MAIN0:  JNB P3.4,KK111;         IN1;  關(guān)燈
        JNB P3.3,KK222;         IN2   開燈        
                JNB P3.2,QIEHUAN;切換 A<=>B        
            DJNZ 62H,MAIN0
        DJNZ 61H,MAIN0
            DJNZ 60H,MAIN0
                DJNZ 63H,MAI ;自動(dòng)熄滅延時(shí)
            CLR P3.1; OUT  輸出關(guān)閉
MAIN:   JNB P3.4,KK111;         IN1;  關(guān)燈
        JNB P3.3,KK222;         IN2   開燈        
                JNB P3.2,QIEHUAN;切換 A<=>B        
                LJMP MAIN;
MAI:    MOV  60H,#240
       MOV  61H,#240
           MOV  62H,#240
           LJMP MAIN0;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
QIEHUAN:LCALL DELAY;
                LCALL DELAY;
        JNB P3.2,MAIN;
        CPL X;
                SETB P3.0;蜂鳴器
        JNB P3.2,$
                LCALL DELAY;
                CLR  P3.0;蜂鳴器
        LJMP MAIN1
////////////////////////////////////
KK111: MOV  66H,#50
       MOV  67H,#240
           MOV  68H,#240
           CLR P3.5;LED 遮擋、延時(shí)指示
RLA:   JB P3.3,RLL;         IN2
       JNB X,QH1;切換 A<=>B
QH2:   CLR P3.1; OUT        輸出關(guān)閉
       SETB P3.0;蜂鳴器
           LCALL DELAY;
           CLR  P3.0;蜂鳴器
           LCALL DELAY;
           SETB P3.0;蜂鳴器
           LCALL DELAY;
           CLR  P3.0;蜂鳴器
           LJMP MAIN1;
////////////////////////////////////////////
RLL:   DJNZ 68H,RLA
       DJNZ 67H,RLA
           DJNZ 66H,RLA        
           LJMP MAIN1;   
////////////////////////////////////      
KK222: MOV  66H,#50
       MOV  67H,#240
           MOV  68H,#240
           CLR P3.5;  LED 遮擋、延時(shí)指示
RRA:   JB P3.4,RRR;         IN1
           JNB X,QH2;切換 A<=>B
QH1:   SETB P3.1; OUT         輸出開啟
           SETB P3.0;蜂鳴器
           LCALL DELAY;
           CLR  P3.0;蜂鳴器
           MOV  60H,#240
       MOV  61H,#240
           MOV  62H,#240
           MOV  63H,#20
            LJMP MAIN1;
///////////////////////////////////////            
RRR:   DJNZ 68H,RRA
       DJNZ 67H,RRA
           DJNZ 66H,RRA        
           LJMP MAIN1;
////////////////////////////////////////
;秒延時(shí)子程序
DELAY: MOV R4,#5;10
           MOV R5,#248;248
       MOV R6,#248;
D10:   DJNZ R6,D10;
       DJNZ R5,D10;$
       DJNZ R4,D10
       RET
       END;


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:253767 發(fā)表于 2020-5-8 07:18 | 只看該作者
謝謝分享!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:282850 發(fā)表于 2020-5-8 14:24 | 只看該作者
思路很好,盒子及整體做工優(yōu)秀。與我一樣是實(shí)戰(zhàn)派
回復(fù)

使用道具 舉報(bào)

地板
ID:305511 發(fā)表于 2020-5-9 13:11 | 只看該作者
挺有意思的!
回復(fù)

使用道具 舉報(bào)

5#
ID:584814 發(fā)表于 2020-5-15 07:35 | 只看該作者
去掉單片機(jī)可有效降低成本和故障率
回復(fù)

使用道具 舉報(bào)

6#
ID:261025 發(fā)表于 2020-5-27 21:08 | 只看該作者
man1234567 發(fā)表于 2020-5-15 07:35
去掉單片機(jī)可有效降低成本和故障率

還有一個(gè)版本我沒發(fā)  數(shù)碼管顯示進(jìn)去+1 出來-1  減到0關(guān)閉燈  用的是2.3寸數(shù)碼管 單片機(jī)用的是貼片的 和數(shù)碼管固定在一起
回復(fù)

使用道具 舉報(bào)

7#
ID:1075398 發(fā)表于 2025-3-3 15:51 | 只看該作者
我也做了一個(gè)類似功能的,也是放廁所門口,程序是請(qǐng)人幫寫的,有問題, 會(huì)自已亮,會(huì)不到時(shí)間滅,會(huì)很長(zhǎng)時(shí)間不滅,湊合用了好幾年了,改天發(fā)圖片上來
回復(fù)

使用道具 舉報(bào)

8#
ID:1075398 發(fā)表于 2025-3-3 16:00 | 只看該作者
把它改為C語言版,誰驗(yàn)證一下#include <stc15.h> #include <intrins.h>  // 發(fā)射部分代碼 #if 0 // 發(fā)射代碼,通過定義宏切換發(fā)射/接收 /************** 發(fā)射程序 **************/ sbit TxPin1 = P3^4; // 38kHz輸出引腳 sbit TxPin2 = P3^5;  void Timer0_Init() {     TMOD = 0x12;    // 定時(shí)器0模式2(8位自動(dòng)重裝)     TH0 = 0xF4;     // 12MHz下產(chǎn)生38kHz方波     TL0 = 0xF4;     ET0 = 1;        // 允許定時(shí)器0中斷     EA = 1;         // 開總中斷     TR0 = 1;        // 啟動(dòng)定時(shí)器0 }  void main() {     P3M0 = 0x00;    // 設(shè)置P3為準(zhǔn)雙向口     P3M1 = 0x00;     Timer0_Init();     while(1); }  void Timer0_ISR() interrupt 1 {     TxPin1 = !TxPin1; // 翻轉(zhuǎn)輸出     TxPin2 = !TxPin2; }  #else /************** 接收程序 **************/ sbit RxPin1 = P3^3;   // 紅外輸入1 sbit RxPin2 = P3^4;   // 紅外輸入2 sbit LED = P3^5;      // 狀態(tài)指示燈 sbit Out = P3^1;      // 控制輸出 sbit Buzzer = P3^0;   // 蜂鳴器 sbit Switch = P3^2;   // 模式切換  bit X = 1;            // 切換標(biāo)志 unsigned char counter[8]; // 60H-67H  void delay() {        // 約10ms延時(shí)     unsigned char i = 5;     while(i--) {         unsigned char j = 248;         while(j--) {             unsigned char k = 248;             while(k--);         }     } }  void main() {     // IO初始化     P3M0 = 0x00; P3M1 = 0x00; // 準(zhǔn)雙向模式     RxPin1 = RxPin2 = LED = Switch = 1;     Out = 0;     Buzzer = 1;          X = 1;     delay(); delay();     Buzzer = 0;          // 計(jì)數(shù)器初始化     for(unsigned char i=0; i<8; i++) counter[i] = 0;      while(1) {         LED = 1;         // 初始延時(shí)(約130ms)         for(int i=0; i<13; i++) delay();                  while(1) {             // 輸入檢測(cè)             if(!RxPin2) {        // 關(guān)燈檢測(cè)                 counter[6] = 50; counter[7] = 240; counter[0] = 240;                 LED = 0;                 // 防抖動(dòng)檢測(cè)                 while(counter[0]-- || counter[7]-- || counter[6]--) {                     if(RxPin1) {                         if(!X) { // 模式B                             Out = 0;                             Buzzer = 1; delay(); Buzzer = 0; delay();                             Buzzer = 1; delay(); Buzzer = 0;                             goto RESTART;                         }                         break;                     }                 }                 goto RESTART;             }                          if(!RxPin1) {        // 開燈檢測(cè)                 counter[6] = 50; counter[7] = 240; counter[0] = 240;                 LED = 0;                 while(counter[0]-- || counter[7]-- || counter[6]--) {                     if(RxPin2) {                         if(X) { // 模式A                             Out = 1;                             Buzzer = 1; delay(); Buzzer = 0;                             counter[0] = counter[1] = counter[2] = 240;                             counter[3] = 20;                             goto RESTART;                         }                         break;                     }                 }                 goto RESTART;             }                          if(!Switch) {        // 模式切換                 delay(); delay();                 if(!Switch) {                     X = !X;                     Buzzer = 1; delay(); Buzzer = 0;                 }                 while(!Switch);                 goto RESTART;             }                          // 自動(dòng)關(guān)閉檢測(cè)             if(!--counter[2] && !--counter[1] && !--counter[0] && !--counter[3]) {                 Out = 0;                 break;             }         }                  RESTART: // 重啟循環(huán)         counter[3] = 20; // 重置自動(dòng)關(guān)閉定時(shí)         counter[0] = counter[1] = counter[2] = 240;     } } #endif
回復(fù)

使用道具 舉報(bào)

9#
ID:1075398 發(fā)表于 2025-3-4 10:41 | 只看該作者
Lthrwy 發(fā)表于 2025-3-3 15:51
我也做了一個(gè)類似功能的,也是放廁所門口,程序是請(qǐng)人幫寫的,有問題, 會(huì)自已亮,會(huì)不到時(shí)間滅,會(huì)很長(zhǎng)時(shí)間不滅, ...

就是這樣

墻開關(guān).jpg (1.68 MB, 下載次數(shù): 0)

墻開關(guān).jpg
回復(fù)

使用道具 舉報(bào)

10#
ID:325985 發(fā)表于 2025-3-4 16:06 | 只看該作者
那如果搞個(gè)雙穩(wěn)態(tài)電路不是也能實(shí)現(xiàn)這個(gè)功能嗎?是不是簡(jiǎn)單多了呢。
回復(fù)

使用道具 舉報(bào)

11#
ID:1075398 發(fā)表于 2025-3-5 08:43 | 只看該作者
是問我嗎?我這個(gè)原來是打算帶3路輸出,實(shí)際上只作了2路,一路控?zé)?一路控風(fēng)扇, 進(jìn)入的話,先開燈,稍延時(shí)才開風(fēng)扇,出來的話,先關(guān)燈,風(fēng)扇會(huì)繼續(xù)延時(shí)一小會(huì)兒才關(guān)掉, 所以用雙穩(wěn)態(tài)可能不能達(dá)到相要的效果, 再說用MCU電路可能會(huì)比較簡(jiǎn)單一些
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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