標(biāo)題: 通過程序概述一下交通燈是怎樣運(yùn)行工作的,要詳細(xì)一點(diǎn) 謝謝 [打印本頁]

作者: 877140465    時間: 2017-12-16 13:12
標(biāo)題: 通過程序概述一下交通燈是怎樣運(yùn)行工作的,要詳細(xì)一點(diǎn) 謝謝
#include<reg52.h>
sbit RED1=P0^0;
sbit YELLOW1=P0^1;
sbit GREEN1=P0^2;
sbit RED2=P0^4;
sbit YELLOW2=P0^5;
sbit GREEN2=P0^6;
void delay(long dly)
{
while(dly--);
}
void main()
{
signed int i,x,y,z;
while(1)
{
RED1=0;YELLOW1=1;GREEN1=1;//南北紅
RED2=1;YELLOW2=1;GREEN2=0;//東西綠
    x=10,y=7,z=3;
    for(i=0;i<10;i++)
     {
     P2=((x/10)<<4)+x%10;   //nanbeihong
     x--;
     if(y>0)     
     {         
       P1=((y/10)<<4)+y%10;   //dongxilv   
       y--;   
       delay(15000);  
     }  
      else
   {  
       RED2=1;YELLOW2=0;GREEN2=1;   //dongxihuang
       P1=((z/10)<<4)+z%10;
    RED2=1;YELLOW2=0;GREEN2=1;
    delay(7500);
    RED2=1;YELLOW2=1;GREEN2=1;
    delay(7500);  
          z--;
       }
      }
      
RED1=1;YELLOW1=1;GREEN1=0;//南北綠
RED2=0;YELLOW2=1;GREEN2=1;//東西紅
x=18,y=15,z=3;
    for(i=0;i<18;i++)     //dongxihong
     {
     P1=((x/10)<<4)+x%10;
     x--;
     if(y>0)
     {
       P2=((y/10)<<4)+y%10;    //nanbeilv
       y--;
    delay(15000);
     }
            //nanbeihuang
      else
     {
          RED1=1;YELLOW1=0;GREEN1=1;
    P2=((z/10)<<4)+z%10;
    RED1=1;YELLOW1=0;GREEN1=1;
    delay(7500);
    RED1=1;YELLOW1=1;GREEN1=1;
    delay(7500);
    z--;
      }
    }
         
}   
}


作者: zl2168    時間: 2017-12-16 18:22
先學(xué)理論,打基礎(chǔ),否則,問題多多,事倍功半。
作者: angmall    時間: 2017-12-16 19:25
  1. // 模擬交通信號燈的程序
  2. // 典型的51紅綠燈程序,用89C51,S51, 分別定義了 P0.0,0.1,0.2 ,P0.4,0.5,0.6 接外部輸出,會自動運(yùn)行。

  3. #include <reg52.h>

  4. sbit RED1   =P0^0; // 南北交通信號燈
  5. sbit YELLOW1=P0^1;
  6. sbit GREEN1 =P0^2;

  7. sbit RED2   =P0^4; // 東西交通信號燈
  8. sbit YELLOW2=P0^5;
  9. sbit GREEN2 =P0^6;

  10. /*------------------------------------------------
  11. uS延時函數(shù),含有輸入?yún)?shù) long dly,無返回值
  12. long 是定義無符號字符變量,其值的范圍是
  13. -2147483648~+2147483647 這里使用晶振12M,精確延時請使用匯編,大致延時
  14. 長度如下 T=dly x 2 + 5 uS
  15. ------------------------------------------------*/
  16. void delay(long dly)
  17. {
  18.         while(dly--);
  19. }

  20. void main()
  21. {
  22.         int i,x,y,z;
  23.         while(1)
  24.         {
  25.                 RED1=0;YELLOW1=1;GREEN1=1;//南北紅
  26.                 RED2=1;YELLOW2=1;GREEN2=0;//東西綠
  27.                 x=10,y=7,z=3;
  28.                 for(i=0;i<10;i++)
  29.                 {                                                  //2位的數(shù)碼管模塊 進(jìn)行硬件譯碼
  30.                         P2=((x/10)<<4)+x%10;   //nanbeihong 驅(qū)動數(shù)碼管顯示 要顯示的數(shù)字的BCD碼數(shù)組
  31.                         x--;
  32.                         if(y>0)     
  33.                         {                                                     //2位的數(shù)碼管模塊 送入的 BCD譯碼器 轉(zhuǎn)碼      
  34.                                 P1=((y/10)<<4)+y%10;   //dongxilv  驅(qū)動數(shù)碼管顯示  
  35.                                 y--;   
  36.                                 delay(15000);   //大致延時30mS
  37.                         }  
  38.                         else
  39.                         {  
  40.                                 RED2=1;YELLOW2=0;GREEN2=1;   //dongxihuang
  41.                                 P1=((z/10)<<4)+z%10;        // 驅(qū)動數(shù)碼管顯示 要顯示的數(shù)字的BCD碼數(shù)組
  42.                                 RED2=1;YELLOW2=0;GREEN2=1;
  43.                                 delay(7500); //大致延時15mS
  44.                                 RED2=1;YELLOW2=1;GREEN2=1;
  45.                                 delay(7500);  //大致延時15mS
  46.                                 z--;
  47.                         }
  48.                 }
  49.                
  50.                 RED1=1;YELLOW1=1;GREEN1=0;//南北綠
  51.                 RED2=0;YELLOW2=1;GREEN2=1;//東西紅
  52.                 x=18,y=15,z=3;
  53.                 for(i=0;i<18;i++)     //dongxihong
  54.                 {
  55.                         P1=((x/10)<<4)+x%10; //驅(qū)動數(shù)碼管顯示
  56.                         x--;
  57.                         if(y>0)
  58.                         {
  59.                                 P2=((y/10)<<4)+y%10;    //nanbeilv 驅(qū)動數(shù)碼管顯示
  60.                                 y--;
  61.                                 delay(15000); //大致延時30mS
  62.                         }
  63.                         //nanbeihuang
  64.                         else
  65.                         {
  66.                                 RED1=1;YELLOW1=0;GREEN1=1;
  67.                                 P2=((z/10)<<4)+z%10; // 驅(qū)動數(shù)碼管顯示
  68.                                 RED1=1;YELLOW1=0;GREEN1=1;
  69.                                 delay(7500); //大致延時15mS
  70.                                 RED1=1;YELLOW1=1;GREEN1=1;
  71.                                 delay(7500); //大致延時15mS
  72.                                 z--;
  73.                         }
  74.                 }
  75.                
  76.         }   
  77. }

復(fù)制代碼





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1