在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 1T-12T單片機中斷方式格力空調(diào)遙控器(YB0F2)解碼

            1T-12T單片機中斷方式格力空調(diào)遙控器(YB0F2)解碼

            作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
            格力空調(diào)遙控器(YB0F2)解碼

            CUP:STC89C52RC晶振:11.0569MHz
            直接如串口輸出 波特率:57600
            ************************************ 說 明 **********************************************
            解碼方式:
            以一個9ms的低電平和4.5ms的高電平為引導(dǎo)碼,后跟35位二進制代碼接著0.565ms低電平和20MS高電平跟32位二進制代碼
            前4個字節(jié)每個字節(jié)為8位,中間1個字節(jié)只有3位,接著為20MS高電平,跟后4個字節(jié)每個字節(jié)為8位
            以低電平為0.565ms、高電平為0.56ms、 周期為1.125ms的組合表示"0";
            以低電平為0.565ms、高電平為1.685ms、周期為2.25ms的組合表示"1"。
            注意:經(jīng)過紅外接收頭解調(diào)后單片機接收到的高低電平是和遙控器發(fā)射時是相反的一個過程
            *兼容1T-12T單片機中斷方式紅外接收數(shù)據(jù),并通過串口發(fā)送
            程序編輯: lbq69147794022/07/2011

            本文引用地址:http://www.biyoush.com/article/201611/321340.htm

            #include
            typedef unsigned char uint8;
            sbit Ir_Pin = P3^2;
            uint8 Ir_Buf[9]; //用于保存解碼結(jié)果

            void int1_init(void)
            {
            IT0 = 1; //下降沿有效
            EX0 = 1;
            EA = 1;
            }

            void uart_init(void)
            {
            TMOD = 0x21;

            SCON = 0x50;
            PCON |= 0x80;
            TH1 = 0xff; //57600bps @ 11.0592MHz
            TL1 = 0xff;
            TR1 = 1;
            }


            void UART_Send_Byte(uint8 dat)
            {
            SBUF = dat;
            while (TI == 0);
            TI = 0;
            }

            unsigned int Ir_Get_Low()
            {
            TL0 = 0;
            TH0 = 0;
            TR0 = 1;
            while (!Ir_Pin && (TH0 & 0x80)==0);//一直計到Ir_Pin不等0與計到大于1.085*32768=35553.28us
            TR0 = 0;
            return (TH0 * 256 + TL0);//返回T1 高八位和低八位計數(shù)值
            }

            unsigned int Ir_Get_High()
            {
            TL0 = 0;
            TH0 = 0;
            TR0 = 1;
            while (Ir_Pin && (TH0 & 0x80)==0);//一直計到Ir_Pin不等1與計到大于1.085*32768=35553.28us
            TR0 = 0;
            return (TH0 * 256 + TL0);//返回T1 高八位和低八位計數(shù)值
            }

            main()
            {
            uart_init();
            int1_init();
            while (1);
            }

            void int1_isr() interrupt 0
            {
            unsigned int temp;
            char i,j;
            temp = Ir_Get_Low();
            if ((temp < 7833) || (temp > 8755)) //引導(dǎo)脈沖低電平8500~9500us
            return;//不在這范圍則說明出錯//1.085*7833=8498us ~ 1.085*8755=9499us
            temp = Ir_Get_High();
            if ((temp < 3686) || (temp > 4608)) //引導(dǎo)脈沖高電平4000~5000us
            return; //不在這范圍則說明出錯//1.085*3686=3999us ~ 1.085*4608=4999us

            for (i = 0; i < 4; i++) //4個字節(jié)
            {
            for (j = 0; j < 8; j++) //每個字節(jié)8位
            {
            temp = Ir_Get_Low();
            if ((temp < 184) || (temp > 737)) //200~800us
            return;//不在這范圍則說明出錯//1.085*200=217us ~ 1.085*800=868us
            temp = Ir_Get_High();
            if ((temp < 184) || (temp > 1843)) //200~2000us
            return;//不在這范圍則說明出錯//1.085*200=217us ~ 1.085*2000=2170us
            Ir_Buf[i] >>= 1;//先將它自動補0
            if (temp > 1032) //1120us//1.085*1032=1119us
            Ir_Buf[i] |= 0x80;//如果大于1119us才將它設(shè)為1
            }
            }

            for (i = 4; i <= 4; i++) //1個字節(jié)
            {Ir_Buf[i] = 0;
            for (j = 0; j < 3; j++) //每個字節(jié)8位
            {
            temp = Ir_Get_Low();
            if ((temp < 184) || (temp > 737)) //200~800us
            return;//不在這范圍則說明出錯//1.085*200 = 217us ~ 1.085*800 = 868us
            temp = Ir_Get_High();
            if ((temp < 184) || (temp > 1843)) //200~2000us
            return;//不在這范圍則說明出錯//1.085*200 = 217us ~ 1.085*2000 = 2170us
            Ir_Buf[i] <<= 1;//先將它自動補0
            if (temp > 1032) //1120us//1.085*1032 = 1119us
            Ir_Buf[i] |= 0x01;//如果大于1119us才將它設(shè)為1
            }
            }

            //delay21ms();//實測波形只20ms但如果只延時20ms讀出會出錯故延時21ms
            temp = Ir_Get_Low();
            if ((temp < 184) || (temp > 737)) //200~800us
            return;//不在這范圍則說明出錯//1.085*200 = 217us ~ 1.085*800 = 868us
            temp = Ir_Get_High();
            if ((temp < 17498) || (temp > 19354)) //19~21ms
            return;//不在這范圍則說明出錯//1.085*17498 = 18985us ~ 1.085*19354 = 20999us

            for (i = 5; i < 9; i++) //4個字節(jié)
            {
            for (j = 0; j < 8; j++) //每個字節(jié)8位
            {
            temp = Ir_Get_Low();
            if ((temp < 184) || (temp > 737)) //200~800us
            return;//不在這范圍則說明出錯//1.085*200 = 217us ~ 1.085*800 = 868us
            temp = Ir_Get_High();
            if ((temp < 184) || (temp > 1843)) //200~2000us
            return;//不在這范圍則說明出錯//1.085*200 = 217us ~ 1.085*2000 = 2170us
            Ir_Buf[i] >>= 1;//先將它自動補0
            if (temp > 1032) //1120us//1.085*1032 = 1119us
            Ir_Buf[i] |= 0x80;//如果大于1119us才將它設(shè)為1
            }
            }

            for(i = 0;i < 9;i++) //通過串口將代碼發(fā)出
            {
            UART_Send_Byte(Ir_Buf[i]);//將9個字節(jié)的遙控鍵值通過串口輸出
            }
            }



            評論


            技術(shù)專區(qū)

            關(guān)閉