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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 最牛的LED遙控控制器---調(diào)整無閃爍

          最牛的LED遙控控制器---調(diào)整無閃爍

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

          /****************************************/
          /***********遙控解碼低電平檢測***********/
          /****************************************/
          uint Low()
          {
          TL0=0;
          TH0=0;
          TR0=1;
          while(!IR&&(TH0&0x80)==0);
          TR0=0;
          return TH0*256+TL0;
          }
          /****************************************/
          /***********遙控解碼高電平檢測***********/
          /****************************************/
          uint High()
          {
          TL0=0;
          TH0=0;
          TR0=1;
          while(IR&&(TH0&0x80)==0);
          TR0=0;
          return TH0*256+TL0;
          }
          /****************************************/
          /************AD轉(zhuǎn)換處理子函數(shù)************/
          /****************************************/
          void ADzhuan()
          {
          if(!power)//如果此標(biāo)志位為1,則執(zhí)行AD轉(zhuǎn)換
          dat = adzhang1();
          }
          /****************************************/
          /**************LED閃爍子函數(shù)*************/
          /****************************************/
          void LEDflash()
          {
          if(flash==1)//如果此標(biāo)志位為1,則執(zhí)行閃爍程序
          {
          if(flashnum>=(shudu*800))//定時器時間到了嗎?
          {
          bit kl;//定義一個標(biāo)志位
          flashnum=0;//到了就清0
          kl=~kl;//將它取反,以便形成亮滅變化
          if(kl==0)//如果為1,就讓LED亮
          dat=100;//等級為100,就最亮
          else//否則滅
          dat=0;//等級為0就為熄滅
          }
          }
          }
          /****************************************/
          /**************LED漸變子函數(shù)*************/
          /****************************************/
          void LEDjian()
          {
          if(jian==1)//如果此標(biāo)志位為1,則執(zhí)行漸變程序
          {
          bit a;//定義一個標(biāo)志位
          if(flashnum>=(shudu*100))//定時器時間到了嗎?
          {
          flashnum=0;//到了就清0
          if(a==0)//如果為0就執(zhí)行漸亮子函數(shù)
          {
          dat++;//時間到了就自動加1
          if(dat>100)//如果加到大于100
          {
          a=1;//將標(biāo)志位變?yōu)?
          dat=100;//將變量變?yōu)樽盍翣顟B(tài)
          }
          }
          else//如果a為1就執(zhí)行漸暗子函數(shù)
          {
          dat--;//時間到了就自動減1
          if(dat<(0-1))//如果減到小于0了,就將它變?yōu)?
          {
          a=0;//標(biāo)志位變?yōu)?,以便執(zhí)行漸亮子函數(shù)
          dat=0;
          }
          }
          }
          }
          }

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

          /**********************************************/
          /**************LED綜合子函數(shù)*************/
          /**********************************************/
          void zonghe()
          {
          uchar ci,ii;
          bit a,fla;//定義一個標(biāo)志位
          bit kl;//定義一個標(biāo)志位
          if(zeng==1)
          {
          if(flashnum>=(shudu*100))//定時器時間到了嗎?
          {
          flashnum=0;
          ii++;
          if(ii>7)
          {
          ii=0;
          if(fla==1)
          {

          kl=~kl;//將它取反,以便形成亮滅變化
          if(kl==0)//如果為1,就讓LED亮
          dat=100;//等級為100,就最亮
          else//否則滅
          dat=0;//等級為0就為熄滅
          ci++;
          if(ci>=30)
          {
          ci=0;
          fla=0;
          }
          }
          }
          if(fla==0)
          {
          if(a==0)//如果為0就執(zhí)行漸亮子函數(shù)
          {
          dat++;//時間到了就自動加1
          if(dat>100)//如果加到大于100
          {
          a=1;//將標(biāo)志位變?yōu)?
          dat=100;//將變量變?yōu)樽盍翣顟B(tài)
          }
          }
          else//如果a為1就執(zhí)行漸暗子函數(shù)
          {
          dat--;//時間到了就自動減1
          if(dat<(0-1))//如果減到小于0了,就將它變?yōu)?
          {
          a=0;//標(biāo)志位變?yōu)?,以便執(zhí)行漸亮子函數(shù)
          dat=0;
          ci++;
          if(ci>=4)
          {
          fla=1;
          ci=0;
          }
          }
          }
          }
          }
          }
          }
          /****************************************/
          /************遙控解碼核心部分************/
          /****************************************/
          void decode()
          {
          while(1)
          {
          restart:
          while(IR)/******空閑時處理其它的事情,即當(dāng)遙控沒有按下時,處理其它事情******/
          {
          ADzhuan();
          LEDflash();
          LEDjian();
          zonghe();
          }/******空閑時處理其它的事情,即當(dāng)遙控沒有按下時,處理其它事情******/
          temp=Low();
          if(tempc(9500)) continue;//引導(dǎo)脈沖低電平9000
          temp=High();
          if(tempc(5000)) continue;//引導(dǎo)脈沖高電平4500
          for(i=0;i<4;i++) //4個字節(jié)
          {
          for(j=0;j<8;j++) //每個字節(jié)8位
          {
          temp=Low();
          if(tempc(800)) goto restart;
          temp=High();
          if(tempc(2000)) goto restart;
          IRBUF[i]>>=1;
          if(temp>c(1120))
          {
          IRBUF[i]|=0x80;

          }
          }
          }
          return;
          }

          }
          /****************************************/
          /*********遙控解碼鍵值處理子函數(shù)********/
          /****************************************/
          void numzhi()
          {
          switch(IRBUF[2])//判斷數(shù)組2鍵值注:因?yàn)橹挥械?組才是按鍵碼,所以判斷數(shù)組2

          {
          /****************如果此鍵按下了,則遙控開關(guān)機(jī)****************11111**/
          case 0x58:
          flag=~flag;
          if(flag==0)
          dat=100;//dat為100時最亮
          else
          dat=0;//為0時熄滅
          jian=0;//將漸變變量置0,以防止?jié)u變子程序動作
          flash=0;//將閃爍變量置0,以防止跳變子程序動作
          zeng=0;//將綜合程序變量置0,以防止綜合子程序動作
          break;

          /***如果此鍵按下了,每按一次亮度會增加1個等級 共為100等級**22222**/
          case 0x1b:if(flag==0)
          {

          dat+=dengji;
          if(dat>=100)
          dat=100;
          jian=0;//將漸變變量置0,以防止?jié)u變子程序動作
          flash=0;//將閃爍變量置0,以防止跳變子程序動作
          zeng=0;//將綜合程序變量置0,以防止綜合子程序動作
          }
          break;

          /***如果此鍵按下了,每按一次亮度會減小1個等級 共為100等級**33333**/
          case 0x1f:if(flag==0)
          {
          dat-=dengji;
          if(dat<=(0-1))
          dat=0;
          jian=0;//將漸變變量置0,以防止?jié)u變子程序動作
          flash=0;//將閃爍變量置0,以防止跳變子程序動作
          zeng=0;//將綜合程序變量置0,以防止綜合子程序動作

          }
          break;

          /***每按一次跳變和漸變速度會減小1個等級 共為60等級,并寫入改變的數(shù)值,以便開機(jī)記憶**44444**/
          case 0x0f:if(flag==0)
          {
          shudu-=1;
          if(shudu<=1)
          shudu=1;
          sector(0x0200);//擦除EEPROM,擦除地址為0X200
          write(0x0200,shudu);//寫入EEPROM,寫入地址為0X200
          }
          break;

          /***每按一次跳變和漸變速度會增加1個等級 共為60等級,并寫入改變的數(shù)值,以便開機(jī)記憶**55555**/
          case 0x1a:if(flag==0)
          {
          shudu+=1;
          if(shudu>=30)
          shudu=30;
          sector(0x0200);//擦除EEPROM,擦除地址為0X200
          write(0x0200,shudu);//寫入EEPROM,寫入地址為0X200
          }
          break;

          /*********如果此鍵按下了,則執(zhí)行手動調(diào)光與遙控切換,兩者不能同時工作***********66666**/
          case 0x1e:if(flag==0)
          {
          flash=1;//進(jìn)入遙控后,讓它先進(jìn)入關(guān)機(jī)狀態(tài)
          dat=0;
          power=~power;//手動調(diào)光與遙控切換標(biāo)志位
          jian=0;//將漸變變量置0,以防止?jié)u變子程序動作
          flash=0;//將閃爍變量置0,以防止跳變子程序動作
          zeng=0;//將綜合程序變量置0,以防止綜合子程序動作
          }
          break;

          /***********************如果此鍵按下了,則執(zhí)行漸變子函數(shù)*******************77777**/
          case 0x0e:if(flag==0)
          {
          jian=~jian;
          dat=0;
          flash=0;//將閃爍變量置0,以防止跳變子程序動作
          zeng=0;//將綜合程序變量置0,以防止綜合子程序動作
          }
          break;
          /***********************如果此鍵按下了,則執(zhí)行跳變子函數(shù)*******************88888**/
          case 0x19:if(flag==0)
          {
          flash=~flash;
          dat=0;
          jian=0;//將漸變變量置0,以防止?jié)u變子程序動作
          zeng=0;//將綜合程序變量置0,以防止綜合子程序動作
          }
          break;
          case 0x1d:if(flag==0)
          {
          zeng=~zeng;
          dat=0;
          }
          break;

          }
          }
          /****************************************/
          /***************主程序部分***************/
          /****************************************/
          main()
          {
          TMOD=0x11;//設(shè)置定時器0定時器1工作方式為1的狀態(tài)下工作
          EA=1;

          TR0=1;//設(shè)置定時器0
          ET0=1;
          TL0=0;
          TH0=0;

          TR1=1;//設(shè)置定時器1
          ET1=1;
          TH1=(65536-20)/256; //定時器初值
          TL1=(65536-20)%256;
          shudu=read(0x0200);//開機(jī)讀取EEPROM里面的速度變量shudu,從而形成斷電記憶功能
          while(1)
          {
          decode();//調(diào)用解碼子函數(shù)
          numzhi();//調(diào)用遙控鍵值子函數(shù)
          }
          }
          /****************************************/
          /***************定時器1部分**************/
          /****************************************/
          void zhong3() interrupt 3 //利用PWM來改變亮度
          {

          TH1=(65536-20)/256; //定時器0設(shè)定約1000us中斷一次
          TL1=(65536-20)%256;
          num++;//PWM定時器
          flashnum++;//閃爍漸變變量
          if(num>=100)//此PWM等級為100,它由變量num與dat完成
          num=0;
          if(numLED=0;//如果計數(shù)器變量小于PWM時,LED亮
          else
          LED=1;

          }
          /****************************************/
          /***************定時器0部分**************/
          /****************************************/
          void zhong1() interrupt 1//用來產(chǎn)生遙控解碼計時
          {
          TL0=0;
          TH0=0;
          }


          上一頁 1 2 下一頁

          關(guān)鍵詞: LED遙控控制器無閃

          評論


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