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

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)交通燈程及Proteus仿真文件 按鍵控制東西南北禁止通行等4種模式

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
“基礎(chǔ)篇綜合測(cè)試”項(xiàng)目1說(shuō)明
功能要求:
1、仿真開(kāi)始:東西(馬路)與南北(人行道)的所有紅、黃、綠燈熄滅,兩位數(shù)碼管不顯示。
2、K1按下松手:東西南北禁止通行
               東西( 馬路 )-- 紅燈 -- 常亮
               南北(人行道)-- 紅燈 -- 常亮
3、K2按下松手:東西南北謹(jǐn)慎通行
               東西( 馬路 )-- 黃燈 -- 亮0.5秒、滅0.5秒循環(huán)閃爍
               南北(人行道)-- 黃燈 -- 亮0.5秒、滅0.5秒循環(huán)閃爍
               要求使用定時(shí)器T0完成定時(shí)功能
4、K3按下松手:東西(馬路)通行,南北(人行道)禁止通行
               東西( 馬路 )-- 綠燈 -- 常亮
               南北(人行道)-- 紅燈 -- 常亮
5、K4按下松手:南北(人行道)有行人請(qǐng)求通行
               東西( 馬路 )--   紅  燈  亮  11  秒   -- 綠燈常亮
               南北(人行道)-- 綠燈亮8秒--黃燈亮3秒 -- 紅燈常亮
               要求使用定時(shí)器T1完成定時(shí)功能
6、在功能要求5的基礎(chǔ)上,使用兩位數(shù)碼管,顯示南北(人行道)通行倒計(jì)時(shí),即按鍵K4按下松手,兩位數(shù)碼管顯示11、10、09、08、.......、03、02、01、00。
    注:仿真電路不允許修改,所有按鍵均采用外部中斷0來(lái)檢測(cè)識(shí)別。



仿真電路如下所示:


單片機(jī)源程序如下:
  1. #include  <reg52.h>
  2. #include  <intrins.h>
  3. #define  uchar  unsigned char
  4. #define  uint  unsigned int

  5. unsigned char code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

  6. uchar key_mode=0;
  7. uint t,s,shi,ge,i;

  8. uchar RXD_time=11;

  9. sbit  H_RED=P1^0;         
  10. sbit  H_GREEN=P1^1;         
  11. sbit  H_YELLOW=P1^2;

  12. sbit  L_RED=P1^4;         
  13. sbit  L_GREEN=P1^5;         
  14. sbit  L_YELLOW=P1^6;  


  15. sbit  k1=P2^0;         
  16. sbit  k2=P2^1;   
  17. sbit  k3=P2^2;  
  18. sbit  k4=P2^3;   

  19. sbit  LED_com1=P2^6;        
  20. sbit  LED_com2=P2^7;
  21. //sbit  DX=P0;

  22. void delay_LED(unsigned int i)
  23. {
  24.    
  25.    unsigned int j;
  26.    
  27.    for(j=0;j<i;j++);
  28.    
  29. }


  30. void  int0()  interrupt  0     
  31. {
  32.         
  33.     if (k1==0)
  34.         {delay_LED(1000);
  35.         if(k1==0){                       
  36.          key_mode=1; }
  37.          while(!k1);
  38.          }
  39.                                                                                                
  40.         if (k2==0)
  41.         {delay_LED(1000);
  42.         if(k2==0){                  
  43.          key_mode=2;}
  44.          while(!k2)
  45.          ;}
  46.                                                                                                    
  47.         if (k3==0)
  48.         { delay_LED(1000);
  49.         if(k3==0){                  
  50.           key_mode=3; }
  51.            while(!k3);
  52.            }                        

  53.         if (k4==0)
  54.         {delay_LED(1000);
  55.         if(k4==0){               
  56.            key_mode=4; }
  57.            while(!k4);
  58.            }                 
  59.    }
  60. void display();

  61. void jinxing()
  62. {
  63.         if(key_mode==1)
  64.    {
  65.    H_RED=1;L_RED=1;}
  66.   
  67.                 }

  68. void dxnbshenxing()
  69. {  
  70.         if(key_mode==2)
  71.         {        //P1=0;
  72.                 TR0=1;
  73.                 H_RED=0;L_RED=0;
  74.         //H_RED=1;L_RED=1;        
  75.         if(i==5)                                 
  76.         {
  77.           H_YELLOW=~H_YELLOW;
  78.           L_YELLOW=~L_YELLOW;
  79.           i=0;
  80.         }

  81.                 }


  82.          }

  83. void kkk3()
  84. {
  85.         if(key_mode==3)
  86.         {        TR0=0;
  87.                 //P1=0;
  88.                 L_GREEN=1;
  89.                 H_RED=1;
  90.                  H_YELLOW=0;
  91.           L_YELLOW=0;
  92.                 }
  93.                      }

  94. void  KKK4()
  95. {
  96.     if (key_mode==4)
  97.         {        
  98.         TR0=0;
  99.                 TR1=1;
  100.         if(s<11){L_RED=1;
  101.                 L_GREEN=0;
  102.                 H_RED=0; }
  103.                 if(s<=8) {H_GREEN=1;}
  104.                 if(s>8){H_GREEN=0;}
  105.                 if(s<=3) {H_YELLOW=1;}
  106.                 if(s>3) {H_YELLOW=0;}
  107.                 if(s>=11)
  108.                 {
  109.                 L_GREEN=1;
  110.                  L_RED=0;
  111.                  H_RED=1;
  112.                  if(RXD_time ==0)
  113.                  {TR1=0;
  114.                     }
  115.                  }
  116.                                 }
  117.                                 }

  118. void display()
  119. {
  120.     if(key_mode==4)
  121.         {          shi=RXD_time/10;
  122.           ge=RXD_time%10;
  123.                  // int k=0;
  124.                   //for(k=0;k<2;k++)
  125.                           
  126.                     LED_com1=0;P0=table[shi];delay_LED(100);LED_com1=1;        delay_LED(100);               
  127.                         LED_com2=0;P0=table[ge];delay_LED(100);LED_com2=1;delay_LED(100);  
  128.                         
  129.                                                                                                                                                                         
  130.                          }                           
  131.                         
  132.                   
  133.                                                 }

  134.                
  135.                
  136.                
  137.                
  138. /////////////////////////////////////////////////////////////////
  139. //定時(shí)器T0服務(wù)函數(shù)                                                                                          ///
  140. //作用:黃燈0.5秒閃爍                                         ///
  141. /////////////////////////////////////////////////////////////////
  142. void  T0_int()  interrupt  1      
  143. {
  144.     //uint i;  
  145.            TH0=0X18  ;
  146.         TL0=0XFC  ;
  147.         i++;
  148.         

  149. }

  150. /////////////////////////////////////////////////////////////////
  151. //定時(shí)器T1服務(wù)函數(shù)                                                                                          ///
  152. //作用:南北(人行道)倒計(jì)時(shí)定時(shí)                              ///
  153. /////////////////////////////////////////////////////////////////
  154. void  T1_int()  interrupt  3     
  155. {
  156.     uint i;
  157.          TH1=0X18  ;
  158.         TL1=0XFC  ;
  159.         i++;
  160.               if(i==10)
  161.         { s++;
  162.            RXD_time --;
  163.              i=0;
  164.                  }
  165. }
  166.                                                                                                 
  167. void  main(void)
  168. {
  169.         IT0=1   ;               
  170.         EX0=1  ;        

  171.         TMOD=0X11   ;   
  172.          
  173.         TL0 = 0xFC;               
  174.         TH0 = 0x18;               
  175.         TF0 = 1;        
  176.         //TR0 = 1;        
  177.         ET0=1   ;           


  178.         TL1 = 0xFC;        
  179.         TH1 = 0x18;
  180.         TF1 = 1;        
  181.         //TR1 = 1;
  182.         ET1=1;
  183.                
  184.         EA=1;
  185.         P1=0x00;


  186. while(1){        jinxing();
  187.         dxnbshenxing();
  188.         kkk3();
  189.          KKK4();
  190.          display();
  191.            }


  192. }               
  193.                   
復(fù)制代碼

所有資料51hei附件下載:
基礎(chǔ)篇綜合測(cè)試 項(xiàng)目1yzf.zip (204.81 KB, 下載次數(shù): 48)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:262 發(fā)表于 2022-12-13 03:30 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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