找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1323|回复: 0
打印 上一主题 下一主题
收起左侧

单片机控制交通灯系统 四个方向,每个方向9个交通灯 支持485通信

[复制链接]
跳转到指定楼层
楼主
ID:366152 发表于 2018-7-6 14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
四个方向,每个方向9个交通灯,单片机串行控制,支持485通信
全部资料51hei下载地址:
交通灯系统控制模块.rar (71.27 KB, 下载次数: 16)

  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <hc595.h>
  4. #include <shumaguan.h>
  5. #define  NOP() _nop_()
  6. #define  uchar         unsigned char
  7. #define  uint   unsigned int
  8. #define FOSC 11059200L      //System frequency
  9. #define BAUD 9600           //UART baudrate


  10. sbit RS485E=P3^7;

  11. uint count;
  12. uchar second,cnt;
  13. uchar YELLOW_warning = 5;
  14. uchar GREEN_pass = 10;
  15. uchar WORK = 1;

  16. uchar a;
  17. uchar buff_on;
  18. uchar cnt_buff;
  19. uchar rs485[5];

  20. void InitTimer0(void)
  21. {
  22.     TMOD = 0x01;
  23.     TH0 = 0x0F8;
  24.     TL0 = 0x0CD;
  25.     EA = 1;
  26.     ET0 = 1;
  27.     TR0 = 1;
  28. }

  29. void Timer0Interrupt(void) interrupt 1
  30. {
  31.     TH0 = 0x0F8;
  32.     TL0 = 0x0CD;
  33.     count++;
  34.         if(count == 500)
  35.         {
  36.                 count = 0;
  37.                 second++;

  38.                 if(second % (GREEN_pass) == 0 || second % (YELLOW_warning + GREEN_pass)  == 0 )
  39.                 {
  40.                        
  41.                         cnt++;
  42.                         if(cnt == 12)cnt=0;
  43.                     
  44.                 }
  45.                 if(second == YELLOW_warning + GREEN_pass )
  46.                 second = 0;
  47.                 Test(cnt);
  48.         }
  49.        
  50. }

  51. void InitUART(void)
  52. {
  53.     TMOD |= 0x20;
  54.     SCON |= 0x50;
  55.     TH1 = TL1 = -(FOSC/12/32/BAUD); //Set auto-reload vaule
  56.     PCON = 0x00;
  57.     ES = 1;
  58.     TR1 = 1;
  59. }

  60. void UARTInterrupt(void) interrupt 4
  61. {
  62.     if(RI)
  63.     {                      
  64.         a = SBUF;
  65.                 if(a==0x55)
  66.                 {
  67.                    buff_on =1;
  68.                    cnt_buff = 0;
  69.                 }
  70.                 if(buff_on)
  71.                 {
  72.                     rs485[cnt_buff]=a;
  73.                     cnt_buff++;
  74.                         if(cnt_buff==5)
  75.                         {
  76.                                 cnt_buff=0;
  77.                             buff_on =0;
  78.                         }
  79.                          
  80.                 }
  81.                 RI = 0;
  82.     }
  83.         else
  84.            TI = 0;
  85.                                        
  86. }


  87. //void T0Interrupt(void) interrupt 0
  88. //{
  89. //           uchar i        ;
  90. //        TR0 = 0;
  91. //    GREEN_pass++;
  92. //    if(GREEN_pass == 26)
  93. //        GREEN_pass = 10;
  94. //        for(i=0;i<100;i++)
  95. //        {
  96. //           LED_HC595SendData(S,GREEN_pass);
  97. //           LED_HC595SendData(X,GREEN_pass);
  98. //           LED_HC595SendData(Z,GREEN_pass);
  99. //           LED_HC595SendData(Y,GREEN_pass);
  100. //        }
  101. //        TR0 = 1;
  102. //}

  103. //void T1Interrupt(void) interrupt 2
  104. //{
  105. //    WORK =!WORK;
  106. //        TR0=!TR0;
  107. //}

  108. void main(void)
  109. {  
  110.    InitTimer0();
  111.    InitUART();
  112. //   IT0=1;       //???μ??′¥·¢
  113. //   EX0=1;
  114. //   IT1=1;       //???μ??′¥·¢
  115. //   EX1=1;

  116.    SG3 = 0;
  117.    XG3 = 0;
  118.    ZG3 = 0;
  119.    YG3 = 0;
  120.    EA = 1;

  121.    RS485E=0;

  122.    T_HC595SendData(S,GREEN,STRAT);
  123.    T_HC595SendData(Z,RED,STRAT);
  124.    T_HC595SendData(X,GREEN,STRAT);
  125.    T_HC595SendData(Y,RED,STRAT);
  126.   while(1)
  127.   {         

  128.              
  129. //          LED_HC595SendData(S,rs485[0]);
  130. //          LED_HC595SendData(X,rs485[1]);
  131. //          LED_HC595SendData(Z,rs485[2]);
  132. //          LED_HC595SendData(Y,rs485[3]);

  133.      if(WORK )
  134.          {
  135.                   switch(cnt)
  136.          {
  137.                   case 0:
  138.                          LED_HC595SendData(S,GREEN_pass - second);
  139.                                   LED_HC595SendData(X,GREEN_pass - second);
  140.                                   LED_HC595SendData(Z,(GREEN_pass+YELLOW_warning)*3 - second);
  141.                                   LED_HC595SendData(Y,(GREEN_pass+YELLOW_warning)*3 - second);
  142.                                  break;
  143.                  case 1:
  144.                          LED_HC595SendData(S,GREEN_pass+YELLOW_warning - second);
  145.                                   LED_HC595SendData(X,GREEN_pass+YELLOW_warning - second);
  146.                                   LED_HC595SendData(Z,(GREEN_pass+YELLOW_warning)*3 - second);
  147.                                   LED_HC595SendData(Y,(GREEN_pass+YELLOW_warning)*3 - second);
  148.                                  break;
  149.                  case 2:
  150.                          LED_HC595SendData(S,GREEN_pass  - second);
  151.                                   LED_HC595SendData(X,GREEN_pass  - second);
  152.                                   LED_HC595SendData(Z,(GREEN_pass+YELLOW_warning)*2 - second);
  153.                                   LED_HC595SendData(Y,(GREEN_pass+YELLOW_warning)*2 - second);
  154.                                  break;
  155.                 case 3:
  156.                          LED_HC595SendData(S,GREEN_pass +YELLOW_warning - second);
  157.                                   LED_HC595SendData(X,GREEN_pass +YELLOW_warning - second);
  158.                                   LED_HC595SendData(Z,(GREEN_pass+YELLOW_warning)*2 - second);
  159.                                   LED_HC595SendData(Y,(GREEN_pass+YELLOW_warning)*2- second);
  160.                                  break;
  161.                  case 4:
  162.                          LED_HC595SendData(S,GREEN_pass - second);
  163.                                   LED_HC595SendData(X,GREEN_pass - second);
  164.                                   LED_HC595SendData(Z,(GREEN_pass+YELLOW_warning) - second);
  165.                                   LED_HC595SendData(Y,(GREEN_pass+YELLOW_warning) - second);
  166.                                  break;
  167.                  case 5:
  168.                          LED_HC595SendData(S,GREEN_pass +YELLOW_warning - second);
  169.                                   LED_HC595SendData(X,GREEN_pass +YELLOW_warning - second);
  170.                                   LED_HC595SendData(Z,GREEN_pass+YELLOW_warning - second);
  171.                                   LED_HC595SendData(Y,GREEN_pass+YELLOW_warning - second);
  172.                                  break;
  173.                   case 6:
  174.                          LED_HC595SendData(Z,GREEN_pass - second);
  175.                                   LED_HC595SendData(Y,GREEN_pass - second);
  176.                                   LED_HC595SendData(S,(GREEN_pass+YELLOW_warning)*3 - second);
  177.                                   LED_HC595SendData(X,(GREEN_pass+YELLOW_warning)*3 - second);
  178.                                  break;
  179.                  case 7:
  180.                          LED_HC595SendData(Z,GREEN_pass+YELLOW_warning - second);
  181.                                   LED_HC595SendData(Y,GREEN_pass+YELLOW_warning - second);
  182.                                   LED_HC595SendData(S,(GREEN_pass+YELLOW_warning)*3 - second);
  183.                                   LED_HC595SendData(X,(GREEN_pass+YELLOW_warning)*3 - second);
  184.                                  break;
  185.                  case 8:
  186.                          LED_HC595SendData(Z,GREEN_pass  - second);
  187.                                   LED_HC595SendData(Y,GREEN_pass  - second);
  188.                                   LED_HC595SendData(S,(GREEN_pass+YELLOW_warning)*2 - second);
  189.                                   LED_HC595SendData(X,(GREEN_pass+YELLOW_warning)*2 - second);
  190.                                  break;
  191.                 case 9:
  192.                          LED_HC595SendData(Z,GREEN_pass +YELLOW_warning - second);
  193.                                   LED_HC595SendData(Y,GREEN_pass +YELLOW_warning - second);
  194.                                   LED_HC595SendData(S,(GREEN_pass+YELLOW_warning)*2 - second);
  195.                                   LED_HC595SendData(X,(GREEN_pass+YELLOW_warning)*2- second);
  196.                                  break;
  197.                  case 10:
  198.                          LED_HC595SendData(Z,GREEN_pass - second);
  199.                                   LED_HC595SendData(Y,GREEN_pass - second);
  200.                                   LED_HC595SendData(S,GREEN_pass+YELLOW_warning - second);
  201.                                   LED_HC595SendData(X,GREEN_pass+YELLOW_warning - second);
  202.                                  break;
  203.                  case 11:
  204.                          LED_HC595SendData(Z,GREEN_pass +YELLOW_warning - second);
  205.                                   LED_HC595SendData(Y,GREEN_pass +YELLOW_warning - second);
  206.                                   LED_HC595SendData(S,GREEN_pass+YELLOW_warning - second);
  207.                                   LED_HC595SendData(X,GREEN_pass+YELLOW_warning - second);
  208.                                  break;
  209.          }
  210.          
  211.          
  212.          }
  213.          else
  214.          {
  215.                  T_HC595SendData(S,RED,STRAT);
  216.         T_HC595SendData(Z,RED,STRAT);
  217.         T_HC595SendData(X,RED,STRAT);
  218.         T_HC595SendData(Y,RED,STRAT);

  219.          }

  220.         if(rs485[0]==0x55 && rs485[4] == 0x44 )
  221.         {
  222.            if( (rs485[3]==0||rs485[3]==0x011) && (rs485[1]<25 && rs485[2]<15))
  223.            {
  224.                       GREEN_pass = rs485[1];
  225.                 YELLOW_warning = rs485[2];
  226.                 if(rs485[3] == 0x11)
  227.                 {
  228.                 WORK = 0;
  229.                 TR0 = 0;
  230.                 }
  231.                 else
  232.                 {
  233.                 WORK = 1;
  234.                 TR0 = 1;
  235.                 }
  236.            }
  237.                
  238.    }                 

  239.   }
  240. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表