久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2660|回復: 12
收起左側

單片機紅外反射開關程序問題求助

  [復制鏈接]
ID:140489 發表于 2019-9-26 10:31 | 顯示全部樓層 |閱讀模式
//紅外反射開關,接收頭HS0038B,發射管用pnp三極管驅動
//第一次上電,燈亮1秒后熄滅,
//手擋一次開,再擋一次關,如此循環
//實驗板測試手擋一次開,再擋一次關 開關正常;
//但是有一個問題,如果手一直擋在前面,LED會不停的亮--滅        -- 亮--滅
//請大神們看下,怎樣才能做到手擋在前面不移開,保持一種狀態
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit ir=P2^4;    //紅外發射
sbit ir_in=P3^2; //紅外接收
sbit led=P1^1;        //

uint cont,cont1;
bit flag_key;         //按鍵按下標志
bit key_lock=0;


void delay(uint z)           //ms
{
        uint x,y;
        for(x=z; x>0; x--)
                for(y=114; y>0; y--);
}


void fa_38k()          //38k 載波                         //接收頭前面有濾光片,發射管要用黑色熱縮套管套起來
{                                  //不是很準,沒有邏輯分析儀,搞不準,現在的反射距離在60厘米左右(發射管串100歐電阻)
        ir=0;                  
        _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();

        ir=1;
        _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
        _nop_();//_nop_();
}

void main()
{
        TMOD |= 0X01;                          //T0定時器,模式1, 16位計數
        TH0 = (65536-1000)/256;  //1ms初值 @12MHz晶振
        TL0 = (65536-1000)%256;


        ET0=1;
        TR0=1;
        led=0;
        delay(500);
        led=1;
        while(1)
        {
                if(flag==0 )
                {
                        fa_38k();  //發38K
                }
                else ir=1;           //停止發射






        if(ir_in==0)          //手擋住
        {
                flag_key=1;
                cont1++;
                key_lock=1;        
        }
        else flag_key=0; //手移開
        
        if(flag_key==1 && cont1==100)
        {         
                  ir=1;
                 cont1=0;
                 led = !led;
                 delay(1000);

        }

        
        if(ir_in==1) cont1=0;        //這句抗干擾很好,遙控器對著按,都沒反應                        



        }
}

void timer0() interrupt 1
{
        TH0 = (65536-1000)/256;  //重裝1ms初值
        TL0 = (65536-1000)%256;
                cont++;
        if(cont==100)  
        {        
                cont=0;
                flag=!flag;         //發100ms 38K,停100ms

        }

}


回復

使用道具 舉報

ID:213173 發表于 2019-9-26 15:01 | 顯示全部樓層
設一個標志位,手擋置1,移開復位0,LED的滅除受時間控制外還受此標志控制。這樣手擋在前面不移開,保持亮狀態。
回復

使用道具 舉報

ID:616758 發表于 2019-9-26 16:14 | 顯示全部樓層
請問解決了么
回復

使用道具 舉報

ID:616759 發表于 2019-9-26 16:25 | 顯示全部樓層
粗略的看了下,你有一個flag的變量沒有定義,你確定程序沒有報錯嗎?
回復

使用道具 舉報

ID:616759 發表于 2019-9-26 16:36 | 顯示全部樓層
我看了下,有一部分邏輯我不知道,準確的說不知道你幾個變量的用處,我提議把 if(ir_in==0)          //手擋住  改成while循環,  里面加個if(ir_in==1) 判斷,continue跳出當前循環,不知道count1的用處,可能需要那個改的這個循環外面
回復

使用道具 舉報

ID:160500 發表于 2019-9-26 18:16 | 顯示全部樓層
這個程序有BUG,38k發射應該用一個中斷或定時器自動生成。主程序只控制發射還是不發射
回復

使用道具 舉報

ID:277550 發表于 2019-9-27 00:59 | 顯示全部樓層

        if(ir_in==0)          //手擋住
        {
                flag_key=1;
                cont1++;
                key_lock=1;        
        }
        else flag_key=0; //手移開
        
        if(flag_key==1 && cont1==100)
        {         
                  ir=1;
                 cont1=0;
                 led = !led;
                 delay(1000);

        }



計數器都是100就切換led狀態
回復

使用道具 舉報

ID:462827 發表于 2019-9-27 07:57 | 顯示全部樓層
置標志位唄
回復

使用道具 舉報

ID:140489 發表于 2019-9-27 08:09 | 顯示全部樓層
bai_yun_123 發表于 2019-9-26 16:25
粗略的看了下,你有一個flag的變量沒有定義,你確定程序沒有報錯嗎?

我發帖的時候誤刪了,工程里面有定義的
回復

使用道具 舉報

ID:140489 發表于 2019-9-27 09:49 | 顯示全部樓層
程序已經改好了,抗干擾能力強,用遙控器對著不停的按,都不會有誤動作;隔著5mm厚的玻璃也能感應
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit ir=P2^4;    //紅外發射
sbit ir_in=P3^2; //紅外接收
sbit led=P1^1;

#define const_key_time1 20  //感應去抖動延時的時間
uint uiKeyTimeCnt1=0; //感應去抖動延時計數器
uchar ucKeyLock1=0;   //感應觸發后自鎖的變量標志


bit fw; //

void delay(uint z)           //
{
        uint x,y;
        for(x=z; x>0; x--)
//            for(y=50; y>0; y--); //1.38 ms
                        for(y=10; y>0; y--);  //340us
}

         
void main()
{
        
        TMOD |= 0x02;        //設置定時器模式 8位自動重裝
        TL0 = 0xF4;                //設置定時初值                  13us        @11.0592KHz
        TH0 = 0xF4;                //設置定時重載值               
        EA=1;
    ET0=1;
    TR0=1;
    led=0;
    delay(3000);
    led=1;
    while(1)
    {
     
                delay(2);        //間隔700us發一次340us 38k 載波
                fw=1;
                delay(1);
                fw=0;  
                        
                if(ir_in==1)        //沒有感應 要及時清零一些標志
                {
               
                        ucKeyLock1=0;   //感應自鎖標志清零
                        uiKeyTimeCnt1=0;//感應去抖動延時計數器清零
               
                }
                else if(ucKeyLock1==0)//有感應,且是第一次感應
                {       
                        ++uiKeyTimeCnt1;  //延時計數器
                        if(uiKeyTimeCnt1>const_key_time1)
                        {
                                uiKeyTimeCnt1=0;
                                ucKeyLock1=1; //自鎖置位,避免一直觸發
                                led = !led;
                        }               
                }
        }
}

void timer0() interrupt 1
{
        if(fw)
        ir=!ir;                   //發38k 載波
}
回復

使用道具 舉報

ID:60656 發表于 2019-12-8 16:52 | 顯示全部樓層
樓主用的什么接收管?只腳帶調制的 還是紅外光敏晶體管?
回復

使用道具 舉報

ID:416239 發表于 2019-12-10 13:23 | 顯示全部樓層
先初始化一下
回復

使用道具 舉報

ID:292518 發表于 2021-9-8 14:23 | 顯示全部樓層
樓主,能分享一下電路圖不?程序測試過了嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 秋霞电影一区二区 | 久久av一区二区三区 | 日韩在线观看中文字幕 | 99国产精品99久久久久久 | 在线观看视频91 | 亚洲综合在线视频 | 国产精品中文字幕在线播放 | 国产精品视频一二三区 | 免费九九视频 | www.日韩欧美| 国产一区欧美 | 成人福利片 | 精品一区二区三区免费毛片 | 99爱视频 | 亚洲一二三视频 | 欧美自拍另类 | 国产999精品久久久久久绿帽 | 中文在线a在线 | 99精品热视频 | 福利视频亚洲 | 中文字幕一区二区三区在线乱码 | 91综合网| 特级毛片爽www免费版 | 日韩免费激情视频 | 亚洲视频一区在线观看 | 小h片免费观看久久久久 | 成人福利电影 | 亚洲精品久久久久久久久久久 | 99精品久久久久 | 久久91| 天天草天天爱 | 久久国产日本 | 精品一区国产 | 日韩欧美在线观看视频网站 | 欧美区在线 | 麻豆久久久 | 精品免费国产视频 | 日韩日韩日韩日韩日韩日韩日韩 | 国产一区二区三区 | 久久精品国产一区二区电影 | 91国产精品 |