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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)紅外遙控電風(fēng)扇程序

          51單片機(jī)紅外遙控電風(fēng)扇程序

          作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏

          /*------------------------------------------------
          外部中斷0初始化
          ------------------------------------------------*/
          void EX0init(void)
          {
          IT0 = 1; //指定外部中斷0下降沿觸發(fā),INT0 (P3.2)
          EX0 = 1; //使能外部中斷
          EA = 1; //開總中斷
          }

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

          /*------------------------------------------------
          定時器0中斷處理
          ------------------------------------------------*/

          void tim0_isr (void) interrupt 1 using 1
          {
          irtime++; //用于計(jì)數(shù)2個下降沿之間的時間
          }

          /*------------------------------------------------
          外部中斷0中斷處理
          ------------------------------------------------*/
          void EX0_ISR (void) interrupt 0 //外部中斷0服務(wù)函數(shù)
          {
          static unsigned char i; //接收紅外信號處理
          static bit startflag; //是否開始處理標(biāo)志位

          if(startflag)
          {
          if(irtime<63&&irtime>=33)//引導(dǎo)碼 TC9012的頭碼,9ms+4.5ms
          i=0;
          irdata[i]=irtime;//存儲每個電平的持續(xù)時間,用于以后判斷是0還是1
          irtime=0;
          i++;
          if(i==33)
          {
          irok=1;
          i=0;
          }
          }
          else
          {
          irtime=0;
          startflag=1;
          }

          }

          /*------------------------------------------------
          鍵值處理
          ------------------------------------------------*/

          void Ir_work(void)//紅外鍵值散轉(zhuǎn)程序
          {
          switch(IRcord[2])//判斷第三個數(shù)碼值
          {
          case 0x0c:P1=0xff;P2=0x28;D1=0; break;//1 顯示相應(yīng)的按鍵值
          case 0x18:P1=0xff;P2=0xcd;D2=0;break;//2
          case 0x5e:P1=0xff;P2=0x6d;D3=0;break;//3
          case 0x16:P1=0xff;P2=0xfe;break;//0
          case 0x07:LD=0;break;
          case 0x15:LD=1;break;
          //case 0x07:P1=0xff;D7=0;break;//7
          //case 0x15:P1=0xff;D8=0;break;//8
          //case 0xd9:DataPort=dofly_DuanMa[9];break;//9
          //case 0x16:DataPort=dofly_DuanMa[1];break;//1 顯示相應(yīng)的按鍵值
          //case 0x19:DataPort=dofly_DuanMa[2];break;//2
          //case 0x0d:DataPort=dofly_DuanMa[3];break;//3
          //case 0x0c:DataPort=dofly_DuanMa[1];break;//1 顯示相應(yīng)的按鍵值
          //case 0x18:DataPort=dofly_DuanMa[2];break;//2
          //case 0x5e:DataPort=dofly_DuanMa[3];break;//3
          // case 0x08:DataPort=dofly_DuanMa[4];break;//4
          //case 0x1c:DataPort=dofly_DuanMa[5];break;//5
          //case 0x5a:DataPort=dofly_DuanMa[6];break;//6
          //case 0x42:DataPort=dofly_DuanMa[7];break;//7
          // case 0x52:DataPort=dofly_DuanMa[8];break;//8
          //case 0x4a:DataPort=dofly_DuanMa[9];break;//9
          default:break;
          }

          irpro_ok=0;//處理完成標(biāo)志

          }
          /*------------------------------------------------
          紅外碼值處理
          ------------------------------------------------*/
          void Ircordpro(void)//紅外碼值處理函數(shù)
          {
          unsigned char i, j, k;
          unsigned char cord,value;

          k=1;
          for(i=0;i<4;i++) //處理4個字節(jié)
          {
          for(j=1;j<=8;j++) //處理1個字節(jié)8位
          {
          cord=irdata[k];
          if(cord>7)//大于某值為1,這個和晶振有絕對關(guān)系,這里使用12M計(jì)算,此值可以有一定誤差
          value|=0x80;
          if(j<8)
          {
          value>>=1;
          }
          k++;
          }
          IRcord[i]=value;
          value=0;
          }
          irpro_ok=1;//處理完畢標(biāo)志位置1
          }

          /*------------------------------------------------
          主函數(shù)
          ------------------------------------------------*/
          void main(void)
          {
          EX0init(); //初始化外部中斷
          TIM0init();//初始化定時器
          LCD1602=0;
          cs88=0;
          // DataPort=0xfe; //取位碼 第一位數(shù)碼管選通,即二進(jìn)制1111 1110
          LATCH2=1; //位鎖存
          LATCH2=0;
          P2=0x00;
          while(1)//主循環(huán)
          {
          if(irok) //如果接收好了進(jìn)行紅外處理
          {
          Ircordpro();
          irok=0;
          }

          if(irpro_ok) //如果處理好后進(jìn)行工作處理,如按對應(yīng)的按鍵后顯示對應(yīng)的數(shù)字等
          {
          Ir_work();
          }
          }
          }


          上一頁 1 2 下一頁

          評論


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