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

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 紅外解碼程序(用1602顯示碼值)

      紅外解碼程序(用1602顯示碼值)

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

      void int0init()//外部中斷O初始化,按P3。2
      {
      IT0=1;//設(shè)為下降沿觸發(fā)方式。IT0=0為低電平觸發(fā)。因?yàn)榧t外輸入高時,接收為低,要從低開始計(jì)時
      EX0=1;//外部中斷打開
      EA=1;//總中斷打開
      }

      void irpros()//紅外提取處理程序
      {
      uchar i,k,j,irvalue;
      k=1;//第一k=0是引導(dǎo)碼,不須要。所以從K=1開始提取編碼,把K=0的引導(dǎo)碼去掉
      for(j=0;j<4;j++)//共有四個碼,所以循環(huán)四次
      {
      for(i=0;i<8;i++)//每個碼八位,循環(huán)八次
      {
      irvalue=irvalue>>1;//irvalue低位在前,高位在后,所以右移,判斷8次,右移7次
      if(irdata[k]>6)//如果兩個中斷的時間為1.125MS,說明傳的是0,1.125/0.255=4.4個irtime,
      //如果兩個中斷的時間為1.125MS,說明傳的是1,2.25/0.255=8.8個irtime,
      //我取中斷值6;如果irdata大于6,說明是1,小于6說明是0;
      {
      irvalue=irvalue|0x80;
      }
      k++;//每提一次,K自增一次,一共要33次
      }
      ircode[j]=irvalue;
      }
      irprosok=1;
      beep=0;
      delay(3);
      beep=1;
      }
      void irwork()
      {
      disp[0]=ircode[0]/16;//取高四位
      disp[1]=ircode[0]%16;//取低四位
      disp[2]=ircode[1]/16;//取高四位
      disp[3]=ircode[1]%16;//取低四位
      disp[4]=ircode[2]/16;//取高四位
      disp[5]=ircode[2]%16;//取低四位
      disp[6]=ircode[3]/16;//取高四位
      disp[7]=ircode[3]%16;//取低四位
      }
      void display()
      {
      write_com(0x80);
      write_dat(Tab[disp[0]]);
      write_dat(Tab[disp[1]]);
      write_dat(Tab[disp[2]]);
      write_dat(Tab[disp[3]]);
      write_dat(Tab[disp[4]]);
      write_dat(Tab[disp[5]]);
      write_dat(Tab[disp[6]]);
      write_dat(Tab[disp[7]]);
      }
      void main()
      {
      init_1602();
      timer0init();
      int0init();
      while(1)
      {
      if(irreceok)//判斷接收是否OK
      {
      irpros();//接收OK就要處理.把數(shù)據(jù)從irdata中提出來
      irreceok=0;//要把irreceok清0,為下一次接收做準(zhǔn)備
      }
      if(irprosok)
      {
      irwork();//如果處理OK,把數(shù)據(jù)分離,可以去顯示
      irprosok=0;//要把irprosok清0,為下一次處理做準(zhǔn)備
      }
      display();//顯示函數(shù)還沒寫,有待完善

      }

      }

      void timer0() interrupt 1//定時器0中斷函數(shù)
      {
      irtime++;/*irtime為字符型,最大為255,輸入開始時讀一次irtime
      然后清0,結(jié)束再讀一次,irtime乘以255就是一次掃描定時的時間*/
      }
      void int0() interrupt 0//外部中斷0函數(shù),這是關(guān)鍵
      {
      if(startflag)//如果startflag=1就開始接數(shù)據(jù)
      {
      if(irtime>30) //接收引導(dǎo)碼,引導(dǎo)碼有9MS,9/0.256=33.15,在這就取32即可
      //說明這時檢測到了引導(dǎo)碼
      {
      bitnum=0;//收到引導(dǎo)碼后,bitnum清O準(zhǔn)備裝數(shù)據(jù)
      }
      irdata[bitnum]=irtime;//第1個bitnum=0的數(shù)據(jù)被裝入數(shù)組。
      irtime=0;//清0就不會對下次有影響
      bitnum++; //不停地給數(shù)組加入新數(shù)據(jù)

      if(bitnum==33)//如果bitmun=33,說明一幀數(shù)據(jù)傳完
      {
      bitnum=0;//bitnum清0為接收下一幀做準(zhǔn)備
      irreceok=1;//主函數(shù)只要判斷irreceok是否為1做出后面的決定
      }

      }
      else //
      {
      startflag=1;
      irtime=0;
      }
      }


      上一頁 1 2 下一頁

      關(guān)鍵詞: 紅外解碼1602顯示碼

      評論


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

      關(guān)閉