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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4768|回復(fù): 5
收起左側(cè)

單片機(jī)手掃紅外反射開(kāi)關(guān)問(wèn)題求助

[復(fù)制鏈接]
ID:140489 發(fā)表于 2018-6-14 21:02 | 顯示全部樓層 |閱讀模式
//紅外反射開(kāi)關(guān),接收頭HS0038B,發(fā)射管用pnp三極管驅(qū)動(dòng)
//第一次上電,燈亮1秒后熄滅,
//手擋一次開(kāi),再擋一次關(guān),如此循環(huán)
//實(shí)驗(yàn)板測(cè)試手擋一次開(kāi),再擋一次關(guān) 開(kāi)關(guān)正常;
//但是有一個(gè)問(wèn)題,如果手一直擋在前面,LED會(huì)不停的亮--滅        -- 亮--滅
//請(qǐng)大神們看下,這樣才能做到手擋在前面不移開(kāi),保持一種狀態(tài)
//控制部分寫(xiě)在大循環(huán)里和寫(xiě)在中斷里面一樣鎖不住
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit ir=P2^4;         //紅外發(fā)射
sbit ir_in=P3^2; //紅外接收
sbit led=P1^7;         //低電平LED亮
bit flag,flag2=1;
uint cont,cont1,s;
uchar clock;
//bit f1,f2;
void delay(uint z)           //ms
{
        uint x,y;
        for(x=z; x>0; x--)
                for(y=114; y>0; y--);
}


void fa_38k()          //38k 載波                         //接收頭前面有濾光片
{                                 
        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_();_nop_();_nop_();
}

void main()
{
        uint i=0;
        ir_in=1;
        TMOD |= 0X01;                          //T0定時(shí)器,模式1, 16位計(jì)數(shù)
        TH0 = (65536-10000)/256;  //10ms初值 @12MHz晶振
        TL0 = (65536-10000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        led=0;
        delay(1000);
        led=1;
        while(1)
        {  
                        if(flag)
                        {
                                fa_38k();  //發(fā)38K
                        }
                        else ir=1;           //停止發(fā)射

                                
//                                if(ir_in==1)         //沒(méi)有反射信號(hào)
//                                {
//                                        s=0;                 //延時(shí)變量清零
//                                        clock=0;          //自鎖標(biāo)志清零
//                                //        f2=0;
//                                        flag2=1;          //恢復(fù)發(fā)射
//                                }
//                                else if(clock==0) //有反射信號(hào)
//                                {        
//                                
//                                        s++;                  //消抖
//                                        if(s>2000)          //這里值取大些,增強(qiáng)抗干擾
//                                        {        
//                                                
//                                                s=0;
//                                                flag2=0;  //停止發(fā)射
//
//                                                clock=1;
//                                                led=!led;                  //
//                                        //        while(!ir_in);
//                                                
//                                        //        f2=1;
//                                                delay(1000);          //延時(shí)1秒,等手移開(kāi)后
//                                                
//                                        }
//                                }
                                
               
        }
}

void timer0() interrupt 1
{
        TH0 = (65536-10000)/256;  //重裝10ms初值
        TL0 = (65536-10000)%256;

        if(flag2==1)
        {
                cont++;
                if(cont==10)  
                {        
                        cont=0;
                        flag=!flag;         //發(fā)100ms 38K,停100ms
                }
        }
        
        flag2=0;  //停止發(fā)射
        if(ir_in==1)         //沒(méi)有反射信號(hào)
        {
                s=0;                 //延時(shí)變量清零
                clock=0;          //自鎖標(biāo)志清零

                flag2=1;          //恢復(fù)發(fā)射
        }
        else if(clock==0 && ir_in==0) //有反射信號(hào)
        {        
        
                s++;                  //消抖  這里值取大些,增強(qiáng)抗干擾
                if(s>8 && ir_in==0)          //
                {        
                        
                        s=0;
                        flag2=0;  //停止發(fā)射

                        clock=1;
                        led=!led;
                        while(!ir_in);        //加不加這句,手擋在前面不移開(kāi),LED都會(huì)不停 亮--滅
                        
                        flag2=0;  //停止發(fā)射
                        
                }
        }
}
回復(fù)

使用道具 舉報(bào)

ID:352148 發(fā)表于 2018-6-14 21:51 | 顯示全部樓層
這樣的問(wèn)題感覺(jué)都是延遲函數(shù)的鍋。。。
回復(fù)

使用道具 舉報(bào)

ID:386216 發(fā)表于 2020-6-3 09:06 | 顯示全部樓層
樓主問(wèn)題解決了嗎,我也在學(xué),能否發(fā)程序我學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:386216 發(fā)表于 2020-6-3 09:45 | 顯示全部樓層
感覺(jué)你定時(shí)器函數(shù)里面程序太多了,可能影響到38K載波那周期。現(xiàn)在調(diào)試好了嗎
回復(fù)

使用道具 舉報(bào)

ID:292518 發(fā)表于 2021-9-8 10:39 | 顯示全部樓層
樓主的程序修改好了嗎?
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2021-9-8 11:32 | 顯示全部樓層
while(!ir_in); 前關(guān)中斷就行了。不過(guò)中斷函數(shù)怎么這么用啊?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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