微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机作业:交通控制系统 遇到一个问题 求解答

单片机作业:交通控制系统 遇到一个问题 求解答

时间:10-02 整理:3721RD 点击:

  1. #include<reg52.h>
  2. sbit P1_0=P1^0;          //          南北左转绿灯  
  3. sbit P1_1=P1^1;          //          南北左转红灯
  4. sbit P1_2=P1^2;          //          南北直行绿灯  
  5. sbit P1_3=P1^3;          //          南北直行红灯       
  6. sbit P1_4=P1^4;           //          南北右转绿灯
  7. sbit P1_5=P1^5;           //          南北右转红灯       
  8. sbit P1_6=P1^6;           //    南北行人绿灯       
  9. sbit P1_7=P1^7;           //    南北行人红灯         

  10. sbit P2_0=P2^0;          //     东西左转绿灯
  11. sbit P2_1=P2^1;          //          东西左转红灯
  12. sbit P2_2=P2^2;          //          东西直行绿灯
  13. sbit P2_3=P2^3;          //          东西直行红灯
  14. sbit P2_4=P2^4;           //          东西右转绿灯
  15. sbit P2_5=P2^5;           //          东西右转红灯
  16. sbit P2_6=P2^6;           //    东西行人绿灯
  17. sbit P2_7=P2^7;           //    东西行人红灯

  18. sbit P3_4=P3^4;
  19. sbit P3_5=P3^5;
  20. sbit P3_0=P3^0;
  21. sbit P3_1=P3^1;


  22. unsigned char temp,bai,shi,ge,num;
  23. unsigned int z;
  24. char point =20,time =100,i=1;



  25. //延时程序
  26. void delay(unsigned int z)
  27. {
  28.         unsigned int x,y;
  29.         for(x=z;x>0;x--)
  30.                 for(y=110;y>0;y--);

  31. }


  32. display()
  33. {
  34.   
  35. unsigned char code table[]={
  36. 0x3f,0x06,0x5b,0x4f,
  37. 0x66,0x6d,0x7d,0x07,
  38. 0x7f,0x6f,0x77,0x7c,
  39. 0x39,0x5e,0x79,0x71};

  40.         while(1)
  41.                 {
  42.                 shi=temp/10;
  43.                 ge=temp%10;
  44.                 P3_0=0x00;
  45.                 P0=table[shi];
  46.                 delay(5);
  47.         P3_1=0x00;
  48.                 P0=table[ge];
  49.         delay(5);
  50.                
  51.                 }
  52. }  

  53. //紧急情况中断程序
  54. void EX0_INT()interrupt 0
  55. {
  56.         i=~1;
  57. }

  58. void main ()
  59. {       
  60.         TMOD |= 0x01;                  //T0初始化
  61.         TH0=0X3C;
  62.         TL0=0XB0;
  63.         TR0=1;
  64.         EA=1;ET0=1;EX0=1;IT0=1;//开中断

  65.         TMOD |= 0x10;                   //T1初始化
  66.         temp=60;
  67.         num=0;
  68.         P2=0x00;
  69.         TH1=(65536-45872)/256;               
  70.         TL1=(65536-45872)%256;
  71.         ET1=1;
  72.         TR1=1;
  73.         PT1=1;
  74.        



  75.         while (1)
  76.         {
  77.                 if(i==1)  //判断是否为紧急情况
  78.                  {                          //正常执行程序
  79.                         if(time>80)       
  80.                         {
  81.                                  P2_2=0X00;                   //东西绿灯亮
  82.                                 P1_3=0x00;                  //南北红灯亮
  83.                                 P2_6=0x00;            //东西行人绿灯开
  84.                                 P1_1=0X00;                      //南北左转红灯亮
  85.                                 P1_5=0X00;                 // 南北右转红灯亮
  86.                             P2_1=0X00;                    //东西左转红灯亮
  87.                                 P2_5=0X00;                    // 东西右转红灯亮
  88.                                 P1_7=0X00;         //南北行人红灯亮

  89.                         }
  90.                         else if (time>90)           //10s后 南北允许左转
  91.                         {                                          
  92.                                  P1_0=0x00;                   //南北左转绿灯亮
  93.                                  P1_1=0xff;                  //南北左转红色灭                 
  94.                                
  95.                         }         
  96.                         else if (time>80)            //10s后 南北允许右转
  97.                         {          P1_1=0x00;                //南北左转红灯亮
  98.                                  P1_0=0xff;               //南北左转绿灯灭
  99.                                  P1_4=0x00;                   //南北右转绿灯亮
  100.                                  P1_5=0xff;                   //南北右转红灯灭

  101.                         }
  102.                         else if(time>78)           //2s
  103.                         {
  104.                                 P2_2=~P2_2;                   //东西绿灯闪烁3s
  105.                         }
  106.                         else if (time>77)          //1s后

  107.                         {          P1_4=0xff;                   //南北右转绿灯灭
  108.                                  P1_5=0x00;                           //南北左转红灯亮
  109.                        
  110.                        
  111.                                 P1_3=0xff;              //南北直行红灯灭
  112.                                 P1_2=0x00;                  //南北直行绿灯亮
  113.                                 P1_6 =0x00;                 //南北行人绿灯亮
  114.                                 P1_7=0xff;                 //南北行人红灯灭

  115.                                 P2_2=0Xff;            //东西直行绿灯灭
  116.                                 P2_3=0x00;            //东西直行红灯亮
  117.                        
  118.                         }
  119.                         else if(time >67)   //10s后允许东西左转
  120.                         {
  121.                                 P2_0=0x00;                //东西左转绿灯亮
  122.                                 P2_1=0xff;                //东西左转红灯灭
  123.                         }

  124.                         else if (time>57)   //10s后允许东西右转
  125.                         {
  126.                                  P2_0=0xff;                //东西左转绿灯灭
  127.                                 P2_1=0x00;                //东西左转红灯亮
  128.                                 P2_4=0x00;      //东西右转绿灯亮
  129.                                 P2_5=0xff;                        //东西右转红灯灭
  130.                         }
  131.                         else if (time>47)          //  10s后
  132.                         {
  133.                                         P1_2=~P1_2;   //南北直行绿灯闪烁       
  134.                        
  135.                         }
  136.                         else if (time>37)
  137.                         {
  138.                                         P1_2=0xff;       //南北直行绿灯灭
  139.                                         P1_3=0x00;      //南北直行红灯亮
  140.                                         P1_6 =0xff;                //南北行人绿灯灭
  141.                                     P1_7=0x00;                 //南北行人红灯亮


  142.                        
  143.                         }
  144.                        
  145.                         }
  146.                         else
  147.                         {
  148.                           
  149.                         }
  150.                         display();                       

  151.                  }       
  152.         else   //紧急情况执行程序  完善中
  153.         {
  154.                

  155.         }  
  156.        
  157. }
  158.        

  159. void t0int() interrupt 1  //T0中断子程序
  160. {
  161.          if(i==1)
  162.          {
  163.                  TH0=0X3C;
  164.                 TL0=0XB0;
  165.                 point--;        //50MS 20次  共1s
  166.                 if (point==0)
  167.                 {
  168.                         point=15;
  169.                         if(time==0)
  170.                         time=100;
  171.                         else
  172.                         time--;
  173.                
  174.                 }
  175.          
  176.          }
  177.          else;

  178. }

  179. void T1_time()interrupt 1
  180. {          if(i==1)
  181.         {
  182.                 TH1=(65536-45872)/256;               
  183.                 TL1=(65536-45872)%256;
  184.                 num++;
  185.                 if(num==40)
  186.                         {
  187.                                 num=0;
  188.                                 temp--;
  189.                                 if(temp==0)
  190.                                         {
  191.                                         temp=60;       
  192.                                         }
  193.                         }
  194.         }       
  195. }

复制代码


附电路图



仿真结果显示


我感觉显示部分的代码没问题啊  为什么运行结果老是不对 我想要60s倒计时

代码有些繁杂 还没来得及优化 将就看吧0.0

有些部分 还没有完善 目前 交通灯显示部分  计时部分 是完好的   

刚才仿真 led也不正常了  把显示电路的代码去掉就正常了 是不是T0 T1优先级的问题呢

有偿代做  1002925094                       

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top