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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 自制51單片機(jī)常用頭文件(紅外解碼)

          自制51單片機(jī)常用頭文件(紅外解碼)

          作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
          /*--------------------------------------------------------------------------

          IR.H

          本文引用地址:http://www.ex-cimer.com/article/201611/317355.htm

          The user function is C51.
          Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun
          All rights reserved.
          --------------------------------------------------------------------------*/
          #ifndef __IR_H__
          #define __IR_H__

          #define uchar unsigned char
          #define uint unsigned int

          #define IRIN P3_2 // 紅外引腳
          #define BEEP P3_7 // 蜂鳴器引腳

          uchar IRCOM[4]; // IRCOM[0]和IRCOM[1]存放用戶編碼;IRCOM[2]鍵值碼暫存
          // IRCOM[3]鍵值反碼存放.

          /*======================================== 紅外解碼部分 ======================================================*/

          /*****************************************************
          函 數(shù) 名:void DelayIR(uchar number)
          功 能:延時(shí)程序
          說(shuō) 明:對(duì)紅外信號(hào)進(jìn)行解碼時(shí)的時(shí)間比較
          入口參數(shù):無(wú)
          返 回 值:無(wú)
          *****************************************************/
          void DelayIR(uchar number)//number*0.14MS
          {
          uchar i;

          while (number--)
          {
          for(i=13; i>0; i--);
          }
          }

          /*****************************************************
          函 數(shù) 名:void Delay_bell(void)
          功 能:蜂鳴器延時(shí)程序
          說(shuō) 明:對(duì)蜂鳴器發(fā)音延時(shí)
          入口參數(shù):無(wú)
          返 回 值:無(wú)
          *****************************************************/
          void Delay_bell(void)
          {
          uint i;

          for(i=0; i<20000; i++)
          {
          ;
          }
          }

          /*****************************************************
          函 數(shù) 名:void Buzzer(num)
          功 能:蜂鳴器發(fā)音程序
          說(shuō) 明:對(duì)密碼輸入正確與否、按鍵等的提示
          入口參數(shù):無(wú)
          返 回 值:無(wú)
          *****************************************************/
          void Buzzer(num)
          {
          while (num--)
          {
          BEEP = 0; // 燈亮
          Delay_bell(); // 延時(shí)
          BEEP = 1; // 燈滅
          Delay_bell(); // 延時(shí)
          }
          }

          /*****************************************************
          函 數(shù) 名:void IR_IN()
          功 能:紅外解碼
          說(shuō) 明:把紅外編碼信號(hào)進(jìn)行解碼,并存放在IRCOM[]中
          入口參數(shù):無(wú)
          返 回 值:無(wú)
          *****************************************************/
          // 外中斷0,紅外數(shù)據(jù)接收
          void IR_IN()
          {
          uchar i,j,k,num = 0;

          do // 讀引導(dǎo)碼
          {
          for (i=0; i<4; i++)
          {
          if (IRIN == 0)
          {
          break;
          }
          if (i == 3)
          {
          return;
          }
          }

          DelayIR(20);
          }while (IRIN == 1); // 確認(rèn)IR信號(hào)出現(xiàn)


          while (!IRIN)
          {
          DelayIR(1); // 等IR變?yōu)楦唠娖?br />}

          // 讀4字節(jié)按鍵編碼 = 16位的用戶碼+8位鍵值碼+8位鍵值反碼

          for (j=0; j<4; j++) // 解碼原理:0 = 0.8ms的低電平+0.4ms的高電平;
          { // 1 = 0.8ms的低電平+1.6ms的高電平
          for (k=0; k<8; k++) // 8位一接收
          {
          while (IRIN)
          {
          DelayIR(1); // 等 IR 變?yōu)榈碗娖?br />}

          while (!IRIN)
          {
          DelayIR(1); // 等 IR 變?yōu)楦唠娖?br />}

          while (IRIN) // 計(jì)算IR高電平時(shí)長(zhǎng)
          {
          DelayIR(1);
          num++;

          if (num >= 30)
          {
          return;
          }
          }

          IRCOM[j] = IRCOM[j] >> 1; // 接收數(shù)據(jù)右移一位

          if (num >= 8)
          {
          IRCOM[j] = IRCOM[j] | 0x80; // 電平長(zhǎng)度大于等于8,則寫入高電平
          }

          num = 0;
          } // 讀完一字節(jié)
          } // 按鍵4字節(jié)讀完
          // 接收數(shù)據(jù)檢測(cè)
          if (IRCOM[2] != ~IRCOM[3]) // 8位鍵碼!=8位鍵反碼:按鍵錯(cuò)誤
          {
          return;
          }

          Buzzer(1); // 有鍵按下,蜂鳴器響一聲
          }

          /*===================================
          DT9122D 遙控器

          ****** 紅外遙控器鍵值表 ***********

          | 10 | 03 | 01 | 06 |
          - - - - - - - - - - - - - - - - - - -
          | 09 | 1D | 1F | 0D |
          - - - - - - - - - - - - - - - - - - -
          | 19 | 1B | 11 | 15 |
          - - - - - - - - - - - - - - - - - - -
          | 17 | 12 | 16 | 4C |
          - - - - - - - - - - - - - - - - - - -
          | 40 | 48 | 04 | 00 |
          - - - - - - - - - - - - - - - - - - -
          | 02 | 05 | 54 | 4D |
          - - - - - - - - - - - - - - - - - - -
          | 0A | 1E | 0E | 1A |
          - - - - - - - - - - - - - - - - - - -
          | 1C | 14 | 0F | 0C |
          =====================================*/

          #endif



          評(píng)論


          技術(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); })();