標(biāo)題: 基于51單片機(jī)的紅綠燈程序+Proteus仿真 [打印本頁]

作者: csm_bert    時(shí)間: 2019-5-29 16:34
標(biāo)題: 基于51單片機(jī)的紅綠燈程序+Proteus仿真
用單片機(jī)AT89C51T0中斷模擬控制十字路口的交通信號指示燈(紅、綠、藍(lán))。


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char  
  3. #define uint unsigned int         
  4. //定義控制端口
  5. sbit   RED_A = P0^0;        //東西向指示燈
  6. sbit   YELLOW_A = P0^1;
  7. sbit   GREEN_A = P0^2;
  8. sbit   RED_B = P0^3;        //南北向指示燈
  9. sbit   YELLOW_B = P0^4;
  10. sbit   GREEN_B = P0^5;
  11. //定義全局變量
  12. uchar Time_Count =0;        //延時(shí)倍數(shù)
  13. uchar Flash_Count =0;        //閃爍次數(shù)
  14. uchar Operation_Type =1;     //操作類型變量

  15. //T0中斷子程序
  16. void   T0_INT () interrupt 1
  17. {  TH0 = -50000/256;
  18.    TL0 = -50000%256;
  19.    switch (Operation_Type)
  20.      { case 1:  //東西向綠燈與南北向紅燈亮5s
  21.               RED_A = 0; YELLOW_A = 0; GREEN_A = 1;
  22.               RED_B = 1; YELLOW_B = 0; GREEN_B = 0;
  23.               //5s后切換操作(50ms*100=5s)
  24.               if(++ Time_Count != 100) return;
  25.               Time_Count = 0;
  26.               Operation_Type = 2;       //進(jìn)入操作類型2
  27.               break;           
  28.          case 2:  //東西向黃燈開始閃爍,綠燈滅
  29.               if (++ Time_Count != 8) return;
  30.               Time_Count = 0;
  31.               YELLOW_A = ! YELLOW_A;
  32.               GREEN_A = 0;
  33.               //閃爍5次
  34.               if (++ Flash_Count != 10) return;
  35.               Flash_Count = 0;
  36.               Operation_Type = 3;        //進(jìn)入操作類型3
  37.               break ;
  38.      case 3:  //東西向紅燈與南北向綠燈亮5s
  39.               RED_A = 1; YELLOW_A = 0; GREEN_A = 0;
  40.               RED_B = 0; YELLOW_B = 0; GREEN_B = 1;
  41.               //南北向綠燈亮5s后切換
  42.               if(++ Time_Count != 100) return;
  43.               Time_Count = 0;
  44.               Operation_Type = 4;       //進(jìn)入操作類型4
  45.               break;
  46.       case 4:  //南北向黃燈開始閃爍,綠燈滅
  47.               if (++ Time_Count != 8) return;
  48.               Time_Count =0;
  49.               YELLOW_B = ! YELLOW_B;
  50.               GREEN_B = 0;
  51.               //閃爍5次
  52.               if (++ Flash_Count != 10) return;
  53.               Flash_Count = 0;
  54.               Operation_Type = 1;      //回到操作類型1
  55.               break ;      
  56.      }
  57. }
  58. //主程序
  59. void   main ()
  60. {   TMOD = 0x01;      //T0工作在方式1
  61.     TH0 = -50000/256;   //賦初值,計(jì)數(shù)50000次
  62.     TL0 = -50000%256;
  63.     EA=1 ;            //允許總中斷
  64.     ET0=1;            //允許T0中斷
  65.     TR0 = 1 ;          //啟動T0
  66.     while(1) ;
  67. }
復(fù)制代碼

所有資料51hei提供下載:
基于51單片機(jī)的紅綠燈.7z (32.8 KB, 下載次數(shù): 94)

作者: 143680436    時(shí)間: 2021-12-10 16:59
有protect的文件嗎




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