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

          新聞中心

          七彩燈綜合C程序

          作者: 時間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
          /*此程序是一款普通的彩燈,它的功能主要有四種模式:

          第一種模式:開機四種顏色以0.5秒速度循環(huán)1次,然后
          在白顏色上停止循環(huán),即顯示白光第二種模式:按下功
          能鍵后,它以1秒速度四種顏色不停的循環(huán)第三種模式:
          當按鍵按下后,它會記住第二種模式的顏色,比如第二種
          模式現(xiàn)在亮得是綠色,你按下按鍵時,它會先閃一下,然
          后在綠顏色上停下來第四模式:當你再按下開關(guān)時,它
          自動回到模式一下,(當然還可以寫出三種顏色)
          本程序是第一個版本,第二版功能更強大參見:
          http://www.51hei.com/mcu/1531.html*/
          #include
          #define uint unsigned int
          #define uchar unsigned char
          sbit RJ=P2^5;//紅燈IO口
          sbit GJ=P2^6;//綠燈IO口
          sbit BJ=P2^7;//蘭燈IO口
          sbit key=P1^4;//按鍵IO口
          uchar ding3,yin,x;//分別為定時器變量,標志位變量,以及顏色標志位變量
          bit a=1,b,c;//分別為模式1.2.3標志位
          /*******************************/
          /***********延時子程序***********/
          /*******************************/
          void delay(uint z)
          {
          uint x,y;
          for(x=100;x>0;x--)
          for(y=z;y>0;y--);
          }
          /*******************************/
          /********按鍵處理子程序********/
          /*******************************/
          void sk()
          {
          switch(yin)//執(zhí)行一鍵多功能程序
          {
          case 0:if(key==0)//如果0與yin比較相等,則執(zhí)行break前的所有內(nèi)容
          {
          delay(100);//延時
          if(key==0)//再次確認是否有按下
          {
          yin++;//將變量加1,此句很重要,作用是以使下次按下時好執(zhí)行下一開關(guān)語句
          a=0;//將a變?yōu)?
          c=0;
          b=1;//將b變?yōu)?,即打開按鍵程序中的第二段程序
          x=0;//清掉顏色計數(shù)變量,以便它從紅色開始循環(huán)
          while(!key);//按鍵放開了嗎?
          }
          }
          break;//退出開關(guān)語句
          case 1: if(key==0)//如果1與yin比較相等,則執(zhí)行大括號內(nèi)容
          {
          delay(100);//延時
          if(key==0)//再次確認是否有按下
          {
          yin++;//將變量加1,此句很重要,作用是以使下次按下時好執(zhí)行下一開關(guān)語句
          b=0;
          c=1;//打開第三種模式標志位,即鎖定狀態(tài)
          a=0;
          x=0;//清掉顏色計數(shù)變量,以便它從紅色開始循環(huán)
          while(!key);//按鍵放開了嗎?
          }
          }
          break;//退出開關(guān)語句
          case 2: if(key==0)//如果2與yin比較相等,則執(zhí)行大括號內(nèi)容
          {
          delay(100);//延時
          if(key==0)//再次確認是否有按下
          {
          b=0;//將b變?yōu)?,即關(guān)閉上一次功能
          c=0;//關(guān)閉上前面的功能
          a=1;//打開第1次功能,即0.5秒循環(huán)閃爍
          yin=0;
          x=0;//清掉顏色計數(shù)變量,以便它從紅色開始循環(huán)
          while(!key);//按鍵放開了嗎?
          }
          }
          break;//退出開關(guān)語句
          }
          }
          /*******************************/
          /*******三種模式顯示子程序******/
          /*******************************/
          void xian()
          {
          uchar m;//模式3變量
          if(a!=0)//第一種模式以0.5秒速度循環(huán)閃爍一次,然后在白光處停下來
          {
          if(ding3>=10)//定時器到了0.5秒嗎?
          {
          ding3=0;
          x++;//將標志位加1,以便進入下一種顏色
          switch(x)
          {
          case 1:RJ=1;GJ=0;BJ=0;//亮紅光
          break;
          case 2:RJ=0;GJ=1;BJ=0;//亮綠光
          break;
          case 3:RJ=0;GJ=0;BJ=1;//亮蘭光
          break;
          case 4:RJ=1;GJ=1;BJ=1;a=0;//亮白光,//將標志位a清0,以便再次循環(huán)
          break;
          }

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

          }
          }
          if(b!=0)//第二種模式以1秒速度一直循環(huán)閃爍。
          {
          if(ding3>=20)
          {
          ding3=0;
          x++;
          switch(x)
          {
          case 1:RJ=1;GJ=0;BJ=0;m=x;//將x變量內(nèi)給m保存起來,以便進入模式三時能準確的鎖定一種狀態(tài)
          break;
          case 2:RJ=0;GJ=1;BJ=0;m=x;
          break;
          case 3:RJ=0;GJ=0;BJ=1;m=x;
          break;
          case 4:RJ=1;GJ=1;BJ=1;m=x;x=0;
          break;
          }
          }
          }
          if(c!=0)//第三種模式記住模式二時按鍵按下的顏色,然后鎖定。
          {
          RJ=0;GJ=0;BJ=0;
          delay(550);
          switch(m)//判斷上一次模式三的狀態(tài),然后確定顯示哪種顏色
          {
          case 1:RJ=1;GJ=0;BJ=0;
          break;
          case 2:RJ=0;GJ=1;BJ=0;
          break;
          case 3:RJ=0;GJ=0;BJ=1;
          break;
          case 4:RJ=1;GJ=1;BJ=1;
          break;
          }
          c=0;//將標志位清0,以便再次循環(huán)
          }
          }
          /*******************************/
          /*************主程序************/
          /*******************************/
          void main()
          {
          RJ=0;//將R LED關(guān)閉
          GJ=0;//將G LED關(guān)閉
          BJ=0;//將B LED關(guān)閉
          TMOD=0X01;//寄存器工作方式
          EA=1;//開總中斷
          TR0=1;//開定時器
          ET0=1;//開定時器中斷
          TH0=(65536-50000)/256;//賦值給高位
          TL0=(65536-50000)%256;//賦值給低位
          while(1)
          {
          sk();//調(diào)用按鍵子程序
          xian();//調(diào)用顯示子程序
          }
          }
          void zhong() interrupt 1//T1中斷服務(wù)程序
          {
          TH0=(65536-50000)/256;//賦值給高位
          TL0=(65536-50000)%256;//賦值給低位
          ding3++;//將按鍵計數(shù)器加1
          }



          關(guān)鍵詞: 七彩燈定時器標志

          評論


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