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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)交通燈設(shè)計(jì)源程序

          單片機(jī)交通燈設(shè)計(jì)源程序

          作者: 時(shí)間:2014-01-13 來源:網(wǎng)絡(luò) 收藏
          #include reg51.h>
          #include intrins.h>
          #define uchar unsigned char
          #define uint unsigned int
          sbit k1=P1^6;
          sbit k2=P1^7;
          sbit k3=P2^7;
          sbit k4=P3^0;
          sbit yellowled_nb=P1^4; //南北黃燈
          sbit yellowled_dx=P1^1; //東西黃燈
          uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共陰
          uchar data dig; //位選
          uchar data led; //
          uchar data buf[4];
          uchar data sec_dx=20;//東西數(shù)碼指示值
          uchar data sec_nb=20;//南北數(shù)碼指示值
          uchar data set_timedx=20;
          uchar data set_timenb=20;//倒計(jì)時(shí)設(shè)置的鍵值保存
          uchar data b;//定時(shí)器中斷次數(shù)
          bit time;//燈狀態(tài)循環(huán)標(biāo)志
          bit int0_time;//中斷強(qiáng)行標(biāo)志
          bit set;//調(diào)時(shí)方向切換鍵標(biāo)志
          void delay(int ms);//延時(shí)子程序
          void key();//按鍵掃描子程序
          void key_to1();//鍵處理子程序
          void key_to2();
          void display();//顯示子程序
          void main()
          {
          TMOD=0X01;
          TH0=0X3C;
          TL0=0XB0;
          EA=1;
          ET0=1;
          TR0=1;
          EX0=1;
          EX1=1;
          P1=0Xf3;// 東西通行
          while(1)
          {
          key(); //調(diào)用按鍵掃描程序
          display(); //調(diào)用顯示程序
          }
          }
          void key() //按鍵掃描子程序
          {
          if(k1!=1)
          {
          delay(10);
          if(k1!=1)
          {
          while(k1!=1);
          key_to1();
          }
          }
          if(k2!=1)
          {
          delay(10);
          if(k2!=1)
          {
          while(k2!=1);
          key_to2();
          }
          }
          if(k4!=1)
          {
          delay(10);
          if(k4!=1)
          {
          while(k4!=1);
          set=!set;
          }
          }
          if(k3!=1int0_time==1)
          {
          TR0=1; //啟動(dòng)定時(shí)器
          sec_nb=20;
          sec_dx=20;
          int0_time=0;//清標(biāo)志
          } else if(k3!=1int0_time==0)
          {
          TR0=1;
          set_timenb=sec_nb;
          set_timedx=sec_dx; //設(shè)置的鍵值返回保存
          }
          }
          void display()
          {
          buf[1]=sec_dx/10; //第1位 東西秒十位
          buf[2]=sec_dx%10; //第2位 東西秒個(gè)位
          buf[3]=sec_nb/10; //第3位 南北秒十位
          buf[0]=sec_nb%10; //第4位 南北秒個(gè)位
          P0=table[buf[led]];
          delay(2); //先延時(shí),提前顯示一位了
          P2=dig;
          dig=_crol_(dig,1);
          led++;
          if (led==4)
          {led=0;
          dig=0xfe;
          }
          }
          void time0(void) interrupt 1 using 1 //定時(shí)中斷子程序
          {
          b++;
          if(b==10) // 定時(shí)器中斷次數(shù)。
          {
          b=0;
          sec_dx--;
          sec_nb--;
          /******************南北黃燈閃爍判斷*************************/
          if(sec_nb==3time==0)
          {
          yellowled_nb=1;//南北黃燈亮
          delay(300);
          yellowled_nb=0;
          }
          if(sec_nb==2time==0)
          {
          yellowled_nb=1;//南北黃燈亮
          delay(300);
          yellowled_nb=0;
          }
          if(sec_nb==1time==0)
          {
          yellowled_nb=1;
          delay(300);
          yellowled_nb=0;
          }
          /*******************東西黃燈閃判斷************************/
          if(sec_dx==3time==1)
          {
          yellowled_dx=1;//南北黃燈亮
          delay(300);
          yellowled_dx=0;
          }
          if(sec_dx==2time==1)
          {
          yellowled_dx=1;//南北黃燈亮
          delay(300);
          yellowled_dx=0;
          }
          if(sec_dx==1time==1)
          {
          yellowled_dx=1;
          delay(300);
          yellowled_dx=0;
          }
          /*******************************************/
          if(sec_dx==0||sec_nb==0) //東西或南北先到達(dá)1S時(shí)即開始重新計(jì)時(shí)
          {
          sec_dx=set_timedx;
          sec_nb=set_timenb; //第一次循環(huán)結(jié)束重置
          if(time==1)
          {
          P1=0XF3; //東西通行
          }
          else
          {
          P1=0xde; //南北通行
          }
          time=!time; //取反
          }
          }
          }
          void key_to1()
          {
          TR0=0; //關(guān)定時(shí)器
          if(set==0)
          sec_nb++; //南北加1S
          else
          sec_dx++;//東西加1S
          if(sec_nb==100)
          sec_nb=1;
          if( sec_dx==100)
          sec_dx=1;//加到100置1
          }
          void key_to2()
          {
          TR0=0;//關(guān)定時(shí)器
          if(set==0)
          sec_nb--; //南北減1S
          else
          sec_dx--; //東西減1S
          if(sec_nb==0)
          sec_nb=99;
          if( sec_dx==0 )
          sec_dx=99;//減到1重置99


          評(píng)論


          相關(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); })();