久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2375|回復: 2
收起左側

求基于51單片機的交通燈控制系統設計

[復制鏈接]
ID:158732 發表于 2017-1-2 11:17 | 顯示全部樓層 |閱讀模式
用AT89C51單片機控制一個交通信號燈系統。設A車道與B車道交叉組成十字路口,A是主車道,B是支道。設計要求如下:
1)        用發光的二極管模擬交通信號燈,用按鍵開關模擬車輛檢測信號;
2)        正常情況下,A、B車道輪流放行,A車道放行50s,其中5s用于警告;B車道放行30s,其中5s用于警告。
3)        在交通繁忙時,交通信號燈控制系統應有手控開關,可人為地改變信號燈的狀態,以緩解交通擁堵情況。在B車道放行期間,若A車道有車而B車道無車,按下開關K1使A車道放行15s;在A車道放行期間,若B車道有車而A車道無車,按下開關K2使B車道放行15s。
4)        有緊急車輛通過時,按下K3開關使A、B車道均為紅燈,禁行20s。
回復

使用道具 舉報

ID:196401 發表于 2017-5-4 10:49 | 顯示全部樓層
#include<reg52.h> #include<bstv51.h> #define uchar unsigned char #define uint  unsigned int  sbit nbp1=P0^4;//南北方向數碼管第一位; sbit nbp2=P0^5;//南北方向數碼管第二位; sbit dxp1=P0^6;//東西方向數碼管第一位; sbit dxp2=P0^7;//東西方向數碼管第二位;  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)           //延時函數x毫秒函數 {    uint i,j;    for(i=xms;i>0;i--)      for(j=110;j>0;j--); }  void display(uchar shi,uchar ge) //南北數碼管顯示函數 {     P1=table[shi]; nbp1=0;                                                        //選中南北方向數碼管第一位 delayms(3); nbp1=1;                                                //關閉南北方向數碼管第一位 P1=table[ge]; nbp2=0;                                                //選中南北第二位 delayms(3); nbp2=1;                                                //關閉南北方向數碼管第二位   P2=table[shi]; dxp1=0;                                                //選中南北方向數碼管第一位 delayms(3); dxp1=1;                                                //關閉南北方向數碼管第一位 P2=table[ge]; dxp2=0;                                                //選中南北第二位 delayms(3); dxp2=1;                 }  void T1_time()interrupt 3                        //定時器1中斷函數 {    TH1=(65536-45872)/256;   TL1=(65536-45872)%256;   num2++;         if(num2==20)   {    num2=0;                                                   //說明計時夠一秒    num--;    if(num==0)     {          lddx=~lddx;                                                        hdnb=~hdnb;                                                    ldnb=~ldnb;        hddx=~hddx;            num=30;      }    }         shi=num/10;         ge=num%10; }   void main()                                           //主函數 {    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);     } }

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:500398 發表于 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*//*計50000個數,用時50ms*/
    IT0=1;/*外部中斷0為邊沿觸發方式*/
    ET0=1;/*允許T0中斷*/
    TR0=1;/*啟動計數器*/
    EA=1;/*CPU開放總中斷*/
    EX0=1;/*允許外部中斷0中斷,即允許響應端口P3^2(K4)中斷*/
    EX1=1;/*允許外部中斷1中斷,即允許響應端口P3^3(K2)中斷*/
}
/*延時ms毫秒*/
void delayms(uchar ms)
{
    uchar i;
           while(ms--)
          {
        for(i=0;i<200;i++)
                {}
          }       
}  
/*中斷0處理程序*/
void int0(void) interrupt 0
{   
    EA=0;/*CPU禁止響應一切中斷*/
        P1=0xF6,P0=duanma[0];/*東西南北方向均紅燈亮,P0口輸出0*/
       
    while(1)/*無條件循環*/
        {
           P2=weima[0],P0=duanma[(SN_G+Y)%10];/*南北方向數碼管顯示可通行時間的個位*/
       delayms(10); /*延時*/
                  
           P2=weima[1],P0=duanma[(SN_G+Y)/10];/*南北方向數碼管顯示可通行時間的十位*/
           delayms(10); /*延時*/
                  
       P2=weima[2],P0=duanma[(WE_G+Y)%10];/*東西方向數碼管顯示可通行時間的個位*/
           delayms(10); /*延時*/
                  
       P2=weima[3],P0=duanma[(WE_G+Y)/10];/*東西方向數碼管顯示可通行時間的十位*/
           delayms(10); /*延時*/

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

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


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: com.国产 | 国产精品1区| 国精产品一区二区三区 | 天天操精品视频 | 麻豆久久久9性大片 | 91精品国产高清一区二区三区 | 成人精品鲁一区一区二区 | 日韩成人免费视频 | 日韩精品一区二区三区在线播放 | 女生羞羞网站 | 日本一区二区高清视频 | 亚洲三级在线 | www.av7788.com| 日本黄色高清视频 | 国产成人精品区一区二区不卡 | 久久久亚洲 | 91精品国产91 | 91久久| 人人做人人澡人人爽欧美 | 97精品国产97久久久久久免费 | 亚洲天堂成人在线视频 | 国产成人精品久久 | 久久亚洲综合 | a级毛片免费高清视频 | 精品国产一区二区三区久久久蜜月 | 激情小视频 | 免费能直接在线观看黄的视频 | 欧美黄 片免费观看 | 91av在线视频观看 | 中文字幕一区二区三区四区五区 | 精品国产视频 | 国产精品一区二区欧美黑人喷潮水 | 久久在线看 | 在线一区视频 | 黄色大片免费播放 | 成人a免费 | 中文字幕高清在线 | 国产97碰免费视频 | 国产精品视频综合 | 妞干网福利视频 | 欧美亚洲网站 |