找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1383|回复: 1
收起左侧

51单片机红绿黄智能交通灯Proteus仿真程序

[复制链接]
ID:1054434 发表于 2022-12-1 16:15 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. //unsigned char digtub[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  3. unsigned char digtub[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
  4.                                         0x90};

  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;
  8. sbit lred=P2^0;//东西方红灯
  9. sbit lgreen=P2^1;//东西方绿灯
  10. sbit lyellow=P2^7;//东西方黄灯
  11. sbit rred=P2^5;        //南北方红灯
  12. sbit rgreen=P3^0;//南北方绿灯
  13. sbit ryellow=P2^6;


  14. sbit L1=P3^4;
  15. sbit L2=P3^5;
  16. typedef unsigned int u16;
  17. typedef unsigned char u8;
  18. u8  dat[4];
  19. void show();
  20. void delay(u16 ms)
  21. {
  22. u16 j;
  23. for(ms;ms>0;ms--)
  24. for(j=0;j<120;j++);
  25. }

  26. void timer_init()
  27. {
  28. TMOD|=0X01;
  29. TH0=(65536-50000)/256;
  30. TL0=(65536-50000)%256;
  31. TR0=1;
  32. ET0=1;
  33. EA=1;
  34. }
  35. void interr() interrupt 1
  36. {
  37. static u16 num=0;
  38. static u16 i=31,a;
  39. static u16 k=56,j;
  40. static u16 q=26,b,l;
  41. static u16 p=0;
  42. TH0=(65536-50000)/256;
  43. TL0=(65536-50000)%256;
  44. num++;

  45. if(num==20)
  46.     {
  47.         num=0;
  48.         i--;
  49.         k--;
  50.         q--;
  51.         if(j==2&&i==0){i=5;j=3;}
  52.         if(j==3&&i==0){i=30;k=55;a=0;b=0;j=0;}
  53.         if(i>=5&&!a)lred=0;
  54.         else{lred=1;}
  55.         if(i<5&&i>=0&&j==3){a=1;lyellow=~lyellow;lgreen=1;}
  56.           if(i<5&&i>=0&&!b){a=1;lyellow=~lyellow;lgreen=1;}
  57.         if(i<=0){i=k;lyellow=1;b=1;lgreen=0;a=1;j=2;}                                                                                    
  58.         
  59.         if(q==0&&!l){q=5;l=1;}
  60.         if(q<=0&&l==3){q=25;l=0;}
  61.         if(q==0&&l==1){q=30;l=3;}
  62.    
  63.         if(q>0&&!l){rgreen=0; rred=1;ryellow=1;}
  64.         if(q<=5&&q>0&&l==1){ryellow=~ryellow;rgreen=1;}
  65.         if(q>5&&l==3){rred=0;ryellow=1;}
  66.         if(q<=5&&q>0&&l==3){ryellow=~ryellow;rred=1;}
  67.                
  68.         dat[0]=digtub[i/10];        
  69.         dat[1]=digtub[i%10];        
  70.         dat[2]=digtub[q/10];
  71.     dat[3]=digtub[q% 10];                                                                             
  72.         

  73.         }
  74. }
  75. void main()
  76. { u8 g;
  77. timer_init();
  78. while(1)
  79. {
  80. show();
  81. delay(20);

  82.   for(g=0;g<2;g++)
  83.   {
  84.   P1=0XFF;
  85.   switch(g)
  86.   {
  87.   case 0:L1=1;L2=0;
  88.   P1=dat[2];delay(10); break;
  89.   case 1: L1=0;L2=1;
  90.    P1=dat[3];
  91.    delay(10);        break;
  92.    default:break;
  93.   }
  94.   }  
  95. }
  96. }

  97. void show()
  98. {
  99. u16 i;

  100. for(i=0;i<2;i++)
  101.   {
  102.                                              /*1278为东西方向数码管,3456为南北方向数码管*/
  103.   switch(i)
  104.        { P0=0XFF;
  105.            case 1:LSA=0;LSB=0;LSC=0;P0=dat[0];delay(10);break;         //1        
  106.           case 0:LSA=1;LSB=0;LSC=0;P0=dat[1];delay(10);P1=0XFF;break;          //2
  107.                                                                                                                            
  108.            //case 2:LSA=1;LSB=1;LSC=1;P1=dat[1];delay(10); break;        //8
  109.            //case 3:LSA=0;LSB=1;LSC=1;P1=dat[0];delay(10);break;  //7
  110.          //  case 0:LSA=0;LSB=0;LSC=1;P1=dat[0];delay(10);break; //5
  111.           //case 1:LSA=1;LSB=0;LSC=1;P1=dat[1];delay(10); break; //6
  112.           // case 7:LSA=1;LSB=1;LSC=0;P1=dat[0];delay(10); break; //4
  113.            //case 8:LSA=0;LSB=1;LSC=0;P1=dat[1];delay(10);break;//3                                                                                                                                          
  114.            default:break;
  115.            }
  116.   }



  117. }
复制代码

Keil代码与Proteus仿真下载:
红绿黄智能交通灯.7z (78.19 KB, 下载次数: 81)
回复

使用道具 举报

ID:1025912 发表于 2022-12-5 15:07 | 显示全部楼层
顶一下,学习中!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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