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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于單片機的紅外發(fā)射C語言程序

          基于單片機的紅外發(fā)射C語言程序

          作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
          #include

          sbit P3_4 = P2^1;

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

          static bit OP; //紅外發(fā)射管的亮滅
          static unsigned int count; //延時計數(shù)器
          static unsigned int endcount; //終止延時計數(shù)
          static unsigned char flag; //紅外發(fā)送標志
          char iraddr1; //十六位地址的第一個字節(jié)
          char iraddr2; //十六位地址的第二個字節(jié)

          void SendIRdata(char p_irdata);
          void delay();

          void main(void)
          {
          count = 0;
          flag = 0;
          OP = 0;
          P3_4 = 0;

          EA = 1; //允許CPU中斷
          TMOD = 0x11; //設定時器0和1為16位模式1
          ET0 = 1; //定時器0中斷允許


          TH0 = 0xFF;
          TL0 = 0xE8; //設定時值0為38K 也就是每隔26us中斷一次
          TR0 = 1;//開始計數(shù)

          iraddr1=3;
          iraddr2=252;


          do{
          unsigned char i;
          delay();
          SendIRdata(12);
          }while(1);
          }

          //定時器0中斷處理
          void timeint(void) interrupt 1
          {
          TH0=0xFF;
          TL0=0xE8; //設定時值為38K 也就是每隔26us中斷一次
          count++;

          if (flag==1)
          {
          OP=~OP;
          }
          else
          {
          OP = 0;
          }
          P3_4 = OP;
          }


          void SendIRdata(char p_irdata)
          {
          int i;
          char irdata=p_irdata;

          //發(fā)送9ms的起始碼
          endcount=223;
          flag=1;
          count=0;
          do{}while(count

          //發(fā)送4.5ms的結果碼
          endcount=117;
          flag=0;
          count=0;
          do{}while(count

          //發(fā)送十六位地址的前八位
          irdata=iraddr1;
          for(i=0;i<8;i++)
          {

          //先發(fā)送0.56ms的38KHZ紅外波(即編碼中0.56ms的低電平)
          endcount=10;
          flag=1;
          count=0;
          do{}while(count

          //停止發(fā)送紅外信號(即編碼中的高電平)
          if(irdata-(irdata/2)*2) //判斷二進制數(shù)個位為1還是0
          {
          endcount=41; //1為寬的高電平
          }
          else
          {
          endcount=15; //0為窄的高電平
          }
          flag=0;
          count=0;
          do{}while(count

          irdata=irdata>>1;
          }

          //發(fā)送十六位地址的后八位
          irdata=iraddr2;
          for(i=0;i<8;i++)
          {
          endcount=10;
          flag=1;
          count=0;
          do{}while(count

          if(irdata-(irdata/2)*2)
          {
          endcount=41;
          }
          else
          {
          endcount=15;
          }
          flag=0;
          count=0;
          do{}while(count

          irdata=irdata>>1;
          }

          //發(fā)送八位數(shù)據(jù)
          irdata=p_irdata;
          for(i=0;i<8;i++)
          {
          endcount=10;
          flag=1;
          count=0;
          do{}while(count

          if(irdata-(irdata/2)*2)
          {
          endcount=41;
          }
          else
          {
          endcount=15;
          }
          flag=0;
          count=0;
          do{}while(count

          irdata=irdata>>1;
          }

          //發(fā)送八位數(shù)據(jù)的反碼
          irdata=~p_irdata;
          for(i=0;i<8;i++)
          {
          endcount=10;
          flag=1;
          count=0;
          do{}while(count

          if(irdata-(irdata/2)*2)
          {
          endcount=41;
          }
          else
          {
          endcount=15;
          }
          flag=0;
          count=0;
          do{}while(count

          irdata=irdata>>1;
          }

          endcount=10;
          flag=1;
          count=0;
          do{}while(count flag=0;
          }

          void delay()
          {
          int i,j;
          for(i = 0; i < 400; i++){
          for(j = 0; j < 200; j++){
          }
          }
          }



          評論


          技術專區(qū)

          關閉
          看屁屁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); })();