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

          新聞中心

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

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

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

          void int0init()//外部中斷O初始化,按P3。2
          {
          IT0=1;//設(shè)為下降沿觸發(fā)方式。IT0=0為低電平觸發(fā)。因?yàn)榧t外輸入高時(shí),接收為低,要從低開始計(jì)時(shí)
          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)//如果兩個中斷的時(shí)間為1.125MS,說明傳的是0,1.125/0.255=4.4個irtime,
          //如果兩個中斷的時(shí)間為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//定時(shí)器0中斷函數(shù)
          {
          irtime++;/*irtime為字符型,最大為255,輸入開始時(shí)讀一次irtime
          然后清0,結(jié)束再讀一次,irtime乘以255就是一次掃描定時(shí)的時(shí)間*/
          }
          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即可
          //說明這時(shí)檢測到了引導(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)閉
          看屁屁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); })();