欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2631|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

求基于51單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:158732 發(fā)表于 2017-1-2 11:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
用AT89C51單片機(jī)控制一個(gè)交通信號(hào)燈系統(tǒng)。設(shè)A車道與B車道交叉組成十字路口,A是主車道,B是支道。設(shè)計(jì)要求如下:
1)        用發(fā)光的二極管模擬交通信號(hào)燈,用按鍵開關(guān)模擬車輛檢測(cè)信號(hào);
2)        正常情況下,A、B車道輪流放行,A車道放行50s,其中5s用于警告;B車道放行30s,其中5s用于警告。
3)        在交通繁忙時(shí),交通信號(hào)燈控制系統(tǒng)應(yīng)有手控開關(guān),可人為地改變信號(hào)燈的狀態(tài),以緩解交通擁堵情況。在B車道放行期間,若A車道有車而B車道無車,按下開關(guān)K1使A車道放行15s;在A車道放行期間,若B車道有車而A車道無車,按下開關(guān)K2使B車道放行15s。
4)        有緊急車輛通過時(shí),按下K3開關(guān)使A、B車道均為紅燈,禁行20s。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:196401 發(fā)表于 2017-5-4 10:49 | 只看該作者
#include<reg52.h> #include<bstv51.h> #define uchar unsigned char #define uint  unsigned int  sbit nbp1=P0^4;//南北方向數(shù)碼管第一位; sbit nbp2=P0^5;//南北方向數(shù)碼管第二位; sbit dxp1=P0^6;//東西方向數(shù)碼管第一位; sbit dxp2=P0^7;//東西方向數(shù)碼管第二位;  sbit hdnb=P0^2;//南北方向紅燈; sbit hddx=P0^0;//東西方向紅燈; sbit ldnb=P0^3;//南北方向綠燈; sbit lddx=P0^1;//東西方向綠燈; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,                       0x6d,0x7d,0x07,0x7f,0x6f};        //0-9 uchar num=30;num2,shi,ge;    void delayms(xms)           //延時(shí)函數(shù)x毫秒函數(shù) {    uint i,j;    for(i=xms;i>0;i--)      for(j=110;j>0;j--); }  void display(uchar shi,uchar ge) //南北數(shù)碼管顯示函數(shù) {     P1=table[shi]; nbp1=0;                                                        //選中南北方向數(shù)碼管第一位 delayms(3); nbp1=1;                                                //關(guān)閉南北方向數(shù)碼管第一位 P1=table[ge]; nbp2=0;                                                //選中南北第二位 delayms(3); nbp2=1;                                                //關(guān)閉南北方向數(shù)碼管第二位   P2=table[shi]; dxp1=0;                                                //選中南北方向數(shù)碼管第一位 delayms(3); dxp1=1;                                                //關(guān)閉南北方向數(shù)碼管第一位 P2=table[ge]; dxp2=0;                                                //選中南北第二位 delayms(3); dxp2=1;                 }  void T1_time()interrupt 3                        //定時(shí)器1中斷函數(shù) {    TH1=(65536-45872)/256;   TL1=(65536-45872)%256;   num2++;         if(num2==20)   {    num2=0;                                                   //說明計(jì)時(shí)夠一秒    num--;    if(num==0)     {          lddx=~lddx;                                                        hdnb=~hdnb;                                                    ldnb=~ldnb;        hddx=~hddx;            num=30;      }    }         shi=num/10;         ge=num%10; }   void main()                                           //主函數(shù) {    TMOD=0x10;    TH1=(65536-45872)/256;    TL1=(65536-45872)%256;    EA=1;    ET1=1;    TR1=1;    lddx=0;                                                //東西方向綠燈亮    hdnb=0;                                            //南北方向紅燈亮    ldnb=1;    hddx=1;  P1=0x00; P2=0x00; nbp1=1; dxp1=1; dxp2=1; nbp2=1;     while(1)    {    display(shi,ge);     } }

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:500398 發(fā)表于 2019-5-29 09:35 | 只看該作者
  /*#include<REG51.H>        */                                
#include<AT89X51.H>         
#define uchar unsigned char  
uchar code duanma[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar code weima[4]={0x0D,0x0E,0x07,0x0B};
uchar code deng[4]={0xDE,0xDD,0xF3,0xEB};
char SN=50,WE=60;         
char SN_G=50,WE_G=40,Y=10;   
uchar i,k=0,count=0;   
void delayms(uchar ms);
void light();       
void led();
sbit  K0=P3^7;
sbit  K1=P3^6;
sbit  K2=P3^3;
sbit  K3=P3^5;
/*程序初始化*/
void init(void)
{   
        /*12MHz */
    TMOD=0x01;
    TH1=(65536-50000)/256;         /*0x3C*/
    TL1=(65536-50000)%256;         /*0xB0*//*計(jì)50000個(gè)數(shù),用時(shí)50ms*/
    IT0=1;/*外部中斷0為邊沿觸發(fā)方式*/
    ET0=1;/*允許T0中斷*/
    TR0=1;/*啟動(dòng)計(jì)數(shù)器*/
    EA=1;/*CPU開放總中斷*/
    EX0=1;/*允許外部中斷0中斷,即允許響應(yīng)端口P3^2(K4)中斷*/
    EX1=1;/*允許外部中斷1中斷,即允許響應(yīng)端口P3^3(K2)中斷*/
}
/*延時(shí)ms毫秒*/
void delayms(uchar ms)
{
    uchar i;
           while(ms--)
          {
        for(i=0;i<200;i++)
                {}
          }       
}  
/*中斷0處理程序*/
void int0(void) interrupt 0
{   
    EA=0;/*CPU禁止響應(yīng)一切中斷*/
        P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/
       
    while(1)/*無條件循環(huán)*/
        {
           P2=weima[0],P0=duanma[(SN_G+Y)%10];/*南北方向數(shù)碼管顯示可通行時(shí)間的個(gè)位*/
       delayms(10); /*延時(shí)*/
                  
           P2=weima[1],P0=duanma[(SN_G+Y)/10];/*南北方向數(shù)碼管顯示可通行時(shí)間的十位*/
           delayms(10); /*延時(shí)*/
                  
       P2=weima[2],P0=duanma[(WE_G+Y)%10];/*東西方向數(shù)碼管顯示可通行時(shí)間的個(gè)位*/
           delayms(10); /*延時(shí)*/
                  
       P2=weima[3],P0=duanma[(WE_G+Y)/10];/*東西方向數(shù)碼管顯示可通行時(shí)間的十位*/
           delayms(10); /*延時(shí)*/

           /*設(shè)置南北方向通行時(shí)間*/
           if(K0==0)          /*P3^7=0*/
           {  
          delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
          if(K0==0)
                  {
             while(K0==0)/*當(dāng)松開K0開關(guān)時(shí),跳出空循環(huán),執(zhí)行后面的程序*/
             {
             }
                         SN_G++;/*南北方向綠燈時(shí)間+1*/
             if(SN_G==100)
             SN_G=0;/*由于使用的是兩位數(shù)碼管,當(dāng)南北方向綠燈時(shí)間加到100后清零*/
          }
           }
           /*設(shè)置東西方向通行時(shí)間*/
           if(K1==0)          /*P3^6=0*/
           {  
             delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
             if(K1==0)
                     {
               while(K1==0)/*當(dāng)松開K1開關(guān)時(shí),跳出空循環(huán),執(zhí)行后面的程序*/
               {
               }
                           WE_G++;/*東西方向綠燈時(shí)間+1*/
               if(WE_G==100)
               WE_G=0;/*由于使用的是兩位數(shù)碼管,當(dāng)東西方向綠燈時(shí)間加到100后清零*/
             }
           }
           /*返回*/
           if(K3==0)   /*P3^5=0*/
       {  
                delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
                    if(K3==0)
                    {
                        while(K3==0)/*當(dāng)松開K3開關(guān)時(shí),跳出空循環(huán),執(zhí)行后面的程序*/
                           {
                           }
                           count=0;/*清零*/
                           k=0;/*南北方向通車,東西方向不通車*/
                           SN=SN_G,WE=SN_G+Y;/*南北方向顯示時(shí)間為南北方向綠燈通行時(shí)間,東西方向顯示時(shí)間為南北方向綠燈通行時(shí)間加黃燈閃亮?xí)r間*/
               light();/*調(diào)用交通燈函數(shù)*/
                           led(); /*調(diào)用數(shù)碼管函數(shù)*/
                           EA=1; /*CPU開放總中斷*/       
                   break;/*跳出*/       
                    }                      
       }
    }
}
/*中斷1處理程序*/       
void int1(void) interrupt 2
{
        P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/
    EA=0;/*CPU禁止響應(yīng)一切中斷*/
        TR0=!TR0;/*計(jì)數(shù)器停止工作*/       
    while(1)/*無條件循環(huán)*/
        {/*數(shù)碼管掃描程序,*/
           P2=weima[0];/*顯示南北方向個(gè)位*/
           delayms(10);/*延時(shí)*/
           P2=weima[1];/*顯示南北方向十位*/
           delayms(10);/*延時(shí)*/
           P2=weima[2];/*顯示東西方向個(gè)位*/
           delayms(10);/*延時(shí)*/
           P2=weima[3];/*顯示東西方向十位*/
           delayms(10);/*延時(shí)*/
           /*返回*/   
       if(K3==0)    /*P3^5=0*/
       {  
              delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
                  if(K3==0)
                  {
                    while(K3==0)/*當(dāng)松開K3開關(guān)時(shí),跳出空循環(huán),執(zhí)行后面的程序*/
                        {
                        }
                    EA=1;/*CPU開放總中斷*/       
                        TR0=!TR0;/*啟動(dòng)計(jì)數(shù)器*/       
                break;/*跳出*/       
                  }                      
       }
        }
}
/*鍵盤程序*/
void  key()
{
        /*南北有車而東西無車*/
    if(K0==0)          /*K0=0*/
    {  
       delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
       if(K0==0)                         
       {
          while(K0==0)/*當(dāng)松開K0開關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/
          {  
            light();/*調(diào)用交通燈函數(shù)*/
                        led(); /*調(diào)用數(shù)碼管函數(shù)*/
          }
                  count=0;/*清零*/
          k=0;/*南北方向通車,東西方向不通車*/
          SN=SN_G,WE=SN_G+Y;/*南北方向顯示時(shí)間為南北方向綠燈通行時(shí)間,東西方向顯示時(shí)間為南北方向綠燈通行時(shí)間加黃燈閃亮?xí)r間*/
          light();/*調(diào)用交通燈函數(shù)*/
                  led(); /*調(diào)用數(shù)碼管函數(shù)*/
       }
    }
    /*南北無車而東西有車*/
    if(K1==0)          /*K1=0*/
    {  
       delayms(20);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
       if(K1==0)
       {
          while(K1==0)/*當(dāng)松開K1開關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/
          {
            light();/*調(diào)用交通燈函數(shù)*/
                        led(); /*調(diào)用數(shù)碼管函數(shù)*/
          }
                  count=0;/*清零*/
          k=1;/*南北方向不通車,東西方向通車*/
          SN=WE_G+Y,WE=WE_G;/*南北方向顯示時(shí)間為東西方向綠燈通行時(shí)間加黃燈閃亮?xí)r間,東西方向顯示時(shí)間為東西方向綠燈通行時(shí)間*/
          light();/*調(diào)用交通燈函數(shù)*/
                  led(); /*調(diào)用數(shù)碼管函數(shù)*/
           }
        }
}
/*定時(shí)函數(shù)*/
void time1(void) interrupt 1
{
        TH0=0x3c;
        TL0=0xb0;/*計(jì)50000個(gè)數(shù),用時(shí)50ms*/
        count++;         /*自增運(yùn)算*/
        if(count>=20)/*當(dāng)count大于或等于20時(shí),歷時(shí)1s,執(zhí)行程序*/
        {
           SN--;/*自減運(yùn)算*/
           WE--;/*自減運(yùn)算*/
           count=0;/*清零*/
           if(SN==0||WE==0)/*當(dāng)SN=0或者WE=0時(shí),執(zhí)行程序*/
           {
          k++;/*自增運(yùn)算*/
          if(k>3)/*當(dāng)k>3時(shí),執(zhí)行程序*/
          k=0;/*清零*/
          switch(k)/*switch        語句*/
          {   
             case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向顯示時(shí)間為南北方向綠燈通行時(shí)間,東西方向顯示時(shí)間為南北方向綠燈通行時(shí)間加黃燈閃亮?xí)r間*/
             case 1:SN=Y,WE=Y;break;        /*東西南北方向顯示時(shí)間均為黃燈閃亮?xí)r間*/
             case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向顯示時(shí)間為東西方向綠燈通行時(shí)間加黃燈閃亮?xí)r間,東西方向顯示時(shí)間為東西方向綠燈通行時(shí)間*/
             case 3:SN=Y,WE=Y;break;        /*東西南北方向顯示時(shí)間均為黃燈閃亮?xí)r間*/
          }
       }
        }
}
/*交通燈函數(shù)*/
void  light()
{         
    P1=deng[k];/*交通燈對(duì)應(yīng)著k的值變化*/
    if(P1==deng[1]&&count==0)/*當(dāng)南北方向亮黃燈且count=0時(shí),執(zhí)行程序*/
        {
           TH1=(65536-50000)/256;          
       TL1=(65536-50000)%256;/*延時(shí)50ms*/          
           P1=0xDF;/*南北方向黃燈熄滅,東西方向亮紅燈*/
        }
    else
        if(P1==deng[3]&&count==0)/*當(dāng)東西方向亮黃燈且count=0時(shí),執(zhí)行程序*/
        {
           TH1=(65536-300000)/256;          
       TL1=(65536-300000)%256;/*延時(shí)50ms*/
           P1=0xFB;/*南北方向亮紅燈,東西方向黃燈熄滅*/
        }
}
/*數(shù)碼管函數(shù)*/
void led()
{
        P2=weima[0],P0=duanma[SN%10];/*顯示南北方向個(gè)位*/
    delayms(10);/*延時(shí)*/
        P2=weima[1],P0=duanma[SN/10];/*顯示南北方向十位*/
        delayms(10);/*延時(shí)*/         
        P2=weima[2],P0=duanma[WE%10];/*顯示東西方向個(gè)位*/
        delayms(10);/*延時(shí)*/        
        P2=weima[3],P0=duanma[WE/10];/*顯示東西方向十位*/
        delayms(10); /*延時(shí)*/
}
/*主函數(shù)*/

void main(void)
{
        init();/*調(diào)用程序初始化函數(shù)*/
    while(1)/*無條件循環(huán)*/
        {
           key();/*調(diào)用鍵盤程序*/
           light();/*調(diào)用交通燈函數(shù)*/
           led(); /*調(diào)用數(shù)碼管函數(shù)*/  
        }
}  


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表