<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          CUP:STC89C52RC晶振:11.0569MHz
          直接如串口輸出 波特率:57600
          ************************************ 說 明 **********************************************
          解碼方式:
          以一個9ms的低電平和4.5ms的高電平為引導(dǎo)碼,后跟35位二進(jìn)制代碼接著0.565ms低電平和20MS高電平跟32位二進(jìn)制代碼
          前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)后單片機(jī)接收到的高低電平是和遙控器發(fā)射時(shí)是相反的一個過程
          *兼容1T-12T單片機(jī)中斷方式紅外接收數(shù)據(jù),并通過串口發(fā)送
          程序編輯: lbq69147794022/07/2011

          本文引用地址:http://www.ex-cimer.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);//一直計(jì)到Ir_Pin不等0與計(jì)到大于1.085*32768=35553.28us
          TR0 = 0;
          return (TH0 * 256 + TL0);//返回T1 高八位和低八位計(jì)數(shù)值
          }

          unsigned int Ir_Get_High()
          {
          TL0 = 0;
          TH0 = 0;
          TR0 = 1;
          while (Ir_Pin && (TH0 & 0x80)==0);//一直計(jì)到Ir_Pin不等1與計(jì)到大于1.085*32768=35553.28us
          TR0 = 0;
          return (TH0 * 256 + TL0);//返回T1 高八位和低八位計(jì)數(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;//先將它自動補(bǔ)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;//先將它自動補(bǔ)0
          if (temp > 1032) //1120us//1.085*1032 = 1119us
          Ir_Buf[i] |= 0x01;//如果大于1119us才將它設(shè)為1
          }
          }

          //delay21ms();//實(shí)測波形只20ms但如果只延時(shí)20ms讀出會出錯故延時(shí)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;//先將它自動補(bǔ)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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();