<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í)驗(yàn)--交通燈

          單片機(jī)實(shí)驗(yàn)--交通燈

          作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
          一、實(shí)驗(yàn)?zāi)康?p>1、進(jìn)一步熟悉HNIST-2型單片機(jī)系統(tǒng)

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

          相關(guān)硬件電路;

          2、掌握單片機(jī)中斷的應(yīng)用和中斷處理程序的編寫方法;

          3、掌握單片機(jī)內(nèi)部定時/計(jì)數(shù)器的使用及編程方法

          。

          二、實(shí)驗(yàn)前準(zhǔn)備

          1、完成作業(yè)4

          2、根據(jù)實(shí)驗(yàn)內(nèi)容編寫好相關(guān)程序,并進(jìn)行Proteus仿真。

          三、實(shí)驗(yàn)內(nèi)容

          實(shí)驗(yàn)內(nèi)容為3項(xiàng),其中第1、2項(xiàng)必做。

          1、基本交通燈。

          根據(jù)圖3.2電路,用單片機(jī)的IO口控制4組紅綠黃共12個發(fā)光二極管,使發(fā)光二極管按照一定規(guī)則與次序發(fā)光與閃亮以實(shí)現(xiàn)模擬交通燈的功能。假設(shè)初始狀態(tài)為:(南北通行狀態(tài))南北綠燈、東西紅燈(25s);后轉(zhuǎn)為過度狀態(tài):南北黃燈、東西紅燈(5s);再轉(zhuǎn)為東西通行狀態(tài):東西綠燈、南北紅燈25(s)。再轉(zhuǎn)為過渡狀態(tài):東西黃燈、南北紅燈(5s),然后循環(huán)往復(fù)。

          要求采用定時器實(shí)現(xiàn)所需要的定時時間。

          2、鍵控交通燈。

          按一下K1鍵

          ,保持南北通行狀態(tài);按一下K2鍵

          ,保持東西通行狀態(tài);按一下K3鍵

          ,保持正常交通燈。

          要求在中斷中進(jìn)行按鍵處理。

          3、具有閃爍的交通燈。

          在2的基礎(chǔ)上增加,綠燈最后5s閃爍,即亮0.5S滅0.5S閃爍。

          四、實(shí)驗(yàn)原理圖

          圖3.2交通燈實(shí)驗(yàn)電路原理

          圖3.2共有4個按鍵K1、K2、K3、K4,分別連接到單片機(jī)P2.0、P2.1、P2.2、P2.3引腳,按鍵后對應(yīng)引腳為低電平,通過4個二極管D17、D18、D19、D20連接到P3.2(外部中斷0),這是二極管構(gòu)成的相與電路,即任意按一個鍵能在P3.2上產(chǎn)生一個低電平或下降,作為中斷觸發(fā)信號。

          五、軟件設(shè)計(jì)思想

          1、定時思想。

          采用定時器T0或T1的方式1定時500ms,每500ms中斷進(jìn)行計(jì)數(shù),計(jì)數(shù)10次即0.5s,計(jì)數(shù)20次即1s,對秒計(jì)數(shù)實(shí)現(xiàn)所需要的定時時間。

          2、亮燈控制思想。

          單片機(jī)控制燈引腳與燈對應(yīng)如下,0點(diǎn)亮。

          一共有四種狀態(tài)S0、S1、S2、S3,

          a、南北通行S0狀態(tài):

          南北綠燈、東西紅燈,P0=11110111=0xf7,P1=10011110=0x9e;

          南北通行S0

          b、過渡狀態(tài)S1:

          南北黃燈、東西紅燈,P0=11111011=0xfb,P1=10101110=0xae;?

          過渡狀態(tài)S1?

          c、東西通行狀態(tài)S2:

          東西綠燈、南北紅燈,P0=11111100=0xfc,P1=11110011=0xf3;?

          東西通行狀態(tài)S2?

          d、過渡狀態(tài)S3:

          東西黃燈、南北紅燈,P0=11111101=0xfd,P1=01110101=0x75;

          過渡狀態(tài)S3?

          設(shè)置一個秒計(jì)數(shù)單元SEC每秒+1,設(shè)置兩個控制值變量a,b。

          首先令SEC=0,a=0xfd,b=0x75,處于S0狀態(tài);

          SEC==25,a=0xfc,b=0xf3,處于S1狀態(tài);

          SEC==30,a=0xfb,b=0xae,處于S2狀態(tài);

          SEC==55,a=0xf7,b=0x9e,處于S3狀態(tài);

          SEC==60,SEC=0,a=0xfd,b=0x75,處于S0狀態(tài);

          P0=a,P1=b。

          3、交通燈鍵控

          按鍵后即進(jìn)入外部中斷0,在外部中斷0中斷程序中判斷:若是按K1鍵,控制南北通行狀態(tài),并將定時器T0關(guān)閉,即可保持南北通行狀態(tài);若是按K2鍵,控制東西通行狀態(tài),并將定時器T0中斷關(guān)閉,即可保持東西通行狀態(tài);若是按K3鍵,開啟定時器T0中斷,恢復(fù)正常交通燈。

          4、閃爍控制?

          在需要閃爍時,0.5s按正常顯示,0.5s全滅,即是閃爍效果。實(shí)現(xiàn)方法是:當(dāng)=0.5s的時刻,并且在南北通行的最后5s(19或在東西通行的最后5s(49,滅綠燈:P0=0xf9,P1==0x24,當(dāng)=1s的時刻,按正常顯示。

          六、實(shí)驗(yàn)源代碼

          #include//基本的交通燈程序

          #defineuintunsignedint

          uintflag=20;//定義計(jì)時器標(biāo)志

          uintsecond=0;//定義秒標(biāo)志

          voidmain()

          {

          TMOD=0x01;//選擇T0計(jì)時器的工作方式1

          TH0=(65536-50000)/256;//給TH0裝初始值為50000us

          TL0=(65536-50000)%6;//給TH1裝初始值

          TR0=1;//SCON中T0計(jì)時器打開

          ET0=1;//打開定時計(jì)數(shù)器T0中斷

          EA=1;//打開總中斷

          P2=0xf7;//交通燈賦初始狀態(tài)

          P3=0x9e;

          while(1)//等待時間,做出反應(yīng)

          {

          if(second==25)

          {P2=0xf7;P3=0x9e;}

          if(second==30)

          {P2=0xfb;P3=0xae;}

          if(second==55)

          {P2=0xfc;P3=0xf3;}

          if(second==60)

          {P2=0xfd;P3=0x75;}

          if(second>60)second=second`;

          }

          }

          voidT0_int(void)interrupt1

          {

          TH0=(65536-50000)/256;

          TL0=(65536-50000)%6;

          flag--;

          if(flag==0)

          {

          second++;//秒標(biāo)志加1

          flag=20;//重置計(jì)時器標(biāo)志

          }

          }

          #include//基本的交通燈程序

          #defineuintunsignedint

          sbitk1=P2^0;

          sbitk2=P2^1;

          sbitk3=P2^2;

          uintflag=5;//定義計(jì)時器標(biāo)志

          uintsecond=0;//定義秒標(biāo)志

          uintkey;//判斷按鍵是否按下的標(biāo)志

          voidmain()

          {

          TMOD=0x01;//選擇T0計(jì)時器的工作方式1

          TH0=(65536-5000)/256;//給TH0裝初始值為50000us

          TL0=(65536-5000)%6;//給TH1裝初始值

          TR0=1;//SCON中T0計(jì)時器打開

          ET0=1;//打開定時計(jì)數(shù)器T0中斷

          EX0=1;//開外部中斷0

          IT0=1;//外部中斷0觸發(fā)方式為跳變沿觸發(fā)

          PX0=1;//設(shè)置外部中斷0優(yōu)先級為1

          EA=1;//開總中斷

          P1=0xf7;//交通燈賦初始狀態(tài)

          P3=0x9e;

          while(1)//等待時間,做出反應(yīng)

          {

          if(second==10)

          {P1=0xf7;P3=0x9e;}

          if(second==20)

          {P1=0xfb;P3=0xae;}

          if(second==30)

          {P1=0xfc;P3=0xf3;}

          if(second==40)

          {P1=0xfd;P3=0x75;}

          if(second>40)second=second`;

          if(key==1){TR0=0;P1=0xf7;P3=0x9e;}//如果k1按下,南北通行

          if(key==2){TR0=0;P1=0xfc;P3=0xf3;}//如果k2按下,東西通行

          if(key==3)//如果k3按下,普通交通燈

          {

          TR0=1;

          TH0=(65536-5000)/256;

          TL0=(65536-5000)%6;

          }

          }

          }

          voidT0_int(void)interrupt1//定時計(jì)數(shù)器的中斷子程序

          {

          TH0=(65536-5000)/256;

          TL0=(65536-5000)%6;

          flag--;

          if(flag==0)

          {

          second++;//秒標(biāo)志加1

          flag=5;//重置計(jì)時器標(biāo)志

          }

          }

          voidX0_int(void)interrupt0//外部中斷0的中斷子程序

          {

          if(k1==0)key=1;//根據(jù)各按鍵情況設(shè)置按鍵標(biāo)志

          if(k2==0)key=2;

          if(k3==0)key=3;

          }



          評論


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