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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9542|回復: 4
打印 上一主題 下一主題
收起左側

基于51單片機的交通燈原理圖+程序

[復制鏈接]
跳轉到指定樓層
樓主
花了一個星期制作的交通燈仿真程序+原理圖,通過數碼管顯示路口的時間,通過led顯示紅綠燈。


#include<reg51.H>      // 對單片機的口進行了定義
#define uint unsigned int
#define uchar unsigned char
uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//段碼組合,共陽極
uchar code b[4]={0x01,0x02,0x04,0x08}; //位碼組合  
uchar code c[4]={0xcc,0xd4,0x78,0xb8};/*P1 綠紅、黃紅、紅綠、紅黃*/
     
//12MHz     
//*************************************************************************************
uchar NB=25,DX=30,NBG=25,DXG=15,H=5;    /*數碼管顯示值設置*/
uchar  i,k=0,cnt=0,j=0;
sbit K0=P3^4;      /*支干道通行*/
sbit K1=P3^5;      /*主干道通行*/
sbit K4=P3^6;      /*返回*/
sbit K3=P3^2;   /*設置時間*/
sbit K2=P3^3;   /*緊急剎車*/
void delay(uchar t);  /*定義延時程序*/
void key();    /*定義鍵盤程序*/
void display();   /*定義顯示程序*/
void settime();  /*定義時間設置顯示程序*/
//*************************程序初始*********************************************
void init(void)
{
TMOD=0x01;     /*使用定時器0模式一*/
TH0=0x3c;     /*(65536-5000)/256*/
TL0=0xb0;     /*(65536-5000)%256*/
IT0=1;      //開中斷
ET0=1;
TR0=1;
EA=1;
EX0=1;
EX1=1;
P1=c[k];      //開啟交通燈
}
//*************************中斷0處理程序***************************************
void int0(void) interrupt 0   // 通行時間設置
{  
  EA=0;
  P1=0xd8;    /*紅燈全亮*/
  
for(;;)
{
    settime();
     if(K1==0)       /*P3^6=0設置主干道通行時間*/
    {  
          delay(40);
          if(K1==0)
    {
             while(!K1)
             {settime();}
     DXG++;    /*主干道通行時間加1*/
             if(DXG==100)
             DXG=0;   
          }
    }
   
     if(K0==0)        /*P3^5=0設置支干道通行時間*/
    {  
             delay(40);
             if(K0==0)
       {
               while(!K0)
               {settime();}
      NBG++;      /*支干道通行時間加1*/
               if(NBG==100)
               NBG=0;  
             }
    }
   
    if(K4==0)          /*P3^7=0返回*/
       {  
         delay(40);
      if(K4==0)
      {
         while(!K4)
      {
      }
             k=0;P1=c[k];
      NB=NBG,DX=NBG+H;
         display();
      EA=1;
   
            break;
      }               
       }
    }
}

//***********************************中斷1處理程序********************
void int1(void) interrupt 2      //緊急情況
{              
        /*東西南北紅燈亮*/
EA=0;         
TR0=!TR0;           /*停止計數*/
for(;;)           /*主支干道顯示全為0*/
{  
  P1=0xd8,
  P0=a[0];
    P2=b[0];
    delay(20);
   
     P2=b[1];
    delay(20);
    P2=b[2];
    delay(20);
    P2=b[3];
    delay(20);
   
    if(K4==0)         /*返回*/
{
   delay(20);
  EA=1;
     
  P1=c[k];       /*返回緊急前狀態開始計數*/
  TR0=!TR0;      /*重啟計數*/
  break;         
  }
}
}
void time1(void) interrupt 1      /*交通燈控制程序*/
{
TH0=0x3c;          /*定時50ms*/
TL0=0xb0;            
cnt++;

if(cnt>=20)            /*每20*50ms=1s自減一*/
{
  NB--;
  DX--;
  cnt=0;
  if(NB==0||DX==0)
  {
   k++;
   if(k>3)         /*k取0,1,2,3*/
   k=0;
   switch(k)
   {
    case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break;   /*主干道通行顯示綠紅*/
       case 1:NB=H;j=1;P1=c[k];break;        /*主干道黃燈閃爍*/
    case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break;   /*支干道通行顯示紅綠*/
    case 3:DX=H;j=2;P1=c[k];break;        /*支干道黃燈閃爍*/
   }
  }   
}
}
void delay(uchar t)    //延時程序延時0.1*nms   
{
  uchar i;
  do
   {
     for(i=0;i<20;i++)
     ;;;
   } while(t--);
}
void settime()
{
    P2=b[0],P0=a[(NBG+H)%10]; /*顯示主干道通行時間  */
       delay(20);
   
    P2=b[1],P0=a[(NBG+H)/10];
    delay(20);
   
    P2=b[2],P0=a[(DXG+H)%10];  /*顯示支干道通行時間*/
    delay(20);
           
       P2=b[3],P0=a[(DXG+H)/10];
    delay(20);
}
void  key()    //鍵盤程序用KO K1模擬一道有車一道無車
{
     if(K1==0)        /*主干道有車支干道無車*/
    {  
       delay(40);
       if(K1==0)   
       {
          while(!K1)
          {  
            display();
          }
      k=0,P1=c[k];cnt=0;
          NB=NBG, DX=NBG+H;
         display();
       }
    }
    if(K0==0)         /*支干道有車主干道無車*/
    {  
       delay(40);
       if(K0==0)
       {
          while(!K0)
          {
           display();
          }
         k=2,P1=c[k];cnt=0;
          NB=DXG+H,DX=DXG;
            display();
    }
}
}
void display()       //顯示程序
{
  P2=b[0],P0=a[NB%10];      /*由k的不同值進入確定顯示數值*/
  delay(20);

  P2=b[1],P0=a[NB/10];
  delay(20);

  P2=b[2],P0=a[DX%10];
  delay(20);
         
  P2=b[3],P0=a[DX/10];
  delay(20);
}
void main(void)
{  //主程序
init();

for(;;)
{
   display();
   key();
   
   //黃燈閃爍程序
   while(j==1)           /*主干道黃燈閃爍*/
       {              
       P1=0xdc;         /*給黃燈一高電平黃燈滅*/   
    for(i=83;i>0;i--){display();}      /*執行for循環延時*/   
    P1=c[k];         /*再給黃燈一低電平黃燈亮*/
    for(i=83;i>0;i--){display();}
  }
while(j==2)
         {              /*支干道黃燈閃爍*/
      
    P1=0xf8;
    for(i=83;i>0;i--){display();}
    P1=c[k];
    for(i=83;i>0;i--){display();}
   }           
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:611613 發表于 2019-9-15 17:44 來自手機 | 只看該作者
為什么數碼管會亂碼
回復

使用道具 舉報

板凳
ID:720022 發表于 2020-4-1 13:56 來自手機 | 只看該作者
@qaz 發表于 2019-9-15 17:44
為什么數碼管會亂碼

你好,你弄這個程序了嗎?可以發我一份嗎?
回復

使用道具 舉報

地板
ID:853544 發表于 2020-12-3 10:02 | 只看該作者
你好,怎樣讓南北跟東西的燈亮的時間不一樣
回復

使用道具 舉報

5#
ID:939634 發表于 2021-6-24 17:13 | 只看該作者
你好,這個設計都做完后結果紅綠燈按了啟動數字那個還是下面顯示運行,沒亮
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品久久久久久久久 | 欧美一区二区在线免费观看 | 国产高潮好爽受不了了夜色 | 一区二区三区四区在线视频 | 噜啊噜在线 | 国产精品免费一区二区三区四区 | 婷婷激情五月网 | 欧美三区在线观看 | 国产精品久久国产精品久久 | 欧美一区在线看 | 中文字幕精品一区久久久久 | 在线免费观看毛片 | 国产亚洲日本精品 | 永久www成人看片 | 一区二区三区在线免费观看视频 | 亚欧洲精品在线视频免费观看 | 1级毛片| 中文成人在线 | 国产成人精品999在线观看 | 国产xxxx搡xxxxx搡麻豆 | 日韩欧美手机在线 | 99久久99 | 国产精品一区视频 | 久久久久91 | 天堂久久网 | www.jizzjizz| 色在线免费视频 | 国产精品18毛片一区二区 | 日韩午夜一区二区三区 | 黄色一级大片在线免费看产 | 国产成人精品综合 | 亚洲一区二区三区久久 | 亚洲成人精品在线观看 | 狠狠草视频 | 在线观看www高清视频 | 伊人久久在线观看 | 国产 日韩 欧美 中文 在线播放 | 亚洲一区二区三区在线播放 | 欧美性生活网 | 综合久久99 | h在线播放 |