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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2761|回復: 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

        }

}


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

使用道具 舉報

沙發
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的變量沒有定義,你確定程序沒有報錯嗎?
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

7#
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狀態
回復

使用道具 舉報

8#
ID:462827 發表于 2019-9-27 07:57 | 只看該作者
置標志位唄
回復

使用道具 舉報

9#
ID:140489 發表于 2019-9-27 08:09 | 只看該作者
bai_yun_123 發表于 2019-9-26 16:25
粗略的看了下,你有一個flag的變量沒有定義,你確定程序沒有報錯嗎?

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

使用道具 舉報

10#
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 載波
}
回復

使用道具 舉報

11#
ID:60656 發表于 2019-12-8 16:52 | 只看該作者
樓主用的什么接收管?只腳帶調制的 還是紅外光敏晶體管?
回復

使用道具 舉報

12#
ID:416239 發表于 2019-12-10 13:23 | 只看該作者
先初始化一下
回復

使用道具 舉報

13#
ID:292518 發表于 2021-9-8 14:23 | 只看該作者
樓主,能分享一下電路圖不?程序測試過了嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜一区 | 亚洲一区在线日韩在线深爱 | 成人在线观看亚洲 | 一级欧美视频 | 中文字幕精品一区 | 欧美国产一区二区 | 日本亚洲欧美 | 99久久婷婷国产精品综合 | 日韩av一区二区在线观看 | 国产精品久久久久久久久图文区 | 91亚洲国产 | 高清一区二区三区 | 黄瓜av| 精品视频一区二区 | 天天操 夜夜操 | 久操伊人 | 亚洲网站在线观看 | 美女天天操 | 国产玖玖 | 日韩在线不卡视频 | 欧美一级黑人aaaaaaa做受 | 91色综合 | av激情在线| 久久精品99 | 国产精品成av人在线视午夜片 | 国产97久久 | 麻豆视频在线免费看 | 欧美视频二区 | 国产精品亚洲一区二区三区在线 | 天堂久久网 | 中文字幕在线人 | 亚洲午夜视频在线观看 | 日韩国产欧美在线观看 | 国产精品麻| 午夜精品久久久 | 国产精品国产精品 | 999免费视频 | 伊人二区 | 国产 日韩 欧美 在线 | 蜜臀网 | 激情久久久久 |