找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于Proteus的51单片机交通灯仿真+源代码

[复制链接]
跳转到指定楼层
#
51单片机交通灯仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #define uchar     unsigned char
  4. #define uint      unsigned int

  5. uchar h;
  6. uint r=0;
  7. uint s;
  8. uchar code  dis[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,
  9.                   0X92,0X82,0Xf8,0X80,0X90,0Xff,};
  10. void delay(uint c)
  11. {
  12.    uint i,j;
  13.     for(i=0;i<c;i++)
  14.           for(j=0;j<100;j++);
  15.        
  16. }

  17. //interrupt 1
  18. void t0(void) interrupt 0 using 1
  19. {
  20.   delay(2);
  21.    if(INT0==0)
  22.     {
  23.       r++;
  24.           if(r==2)
  25.            {
  26.                   r=0;
  27.            }
  28.           r%=2;
  29.           if(r==0)
  30.            {
  31.             P0=0xeb;
  32.         P1=0x00;
  33.         P2=0xff;
  34.            }while(1)
  35.             {
  36.                    if(INT0==0|INT1==0|T0==0)
  37.                   {
  38.                   delay(2);
  39.                   if(INT0==0|INT1==0|T0==0)
  40.                           break;
  41.                   }

  42.             };
  43.           
  44.     }

  45. }

  46. //interrupt 2
  47. void t1(void) interrupt 2 using 1
  48. {
  49.   delay(2);
  50.    if(INT1==0)
  51.     {
  52.           r++;
  53.           if(r==2)
  54.            {
  55.                   r=0;
  56.            }
  57.           r%=2;
  58.           if(r==0)
  59.            {
  60.             P0=0xdd;
  61.         P1=0x00;
  62.         P2=0xff;
  63.            }while(1)
  64.             {
  65.                    if(INT1==0|INT0==0|T0==0)
  66.                   {
  67.                    delay(2);
  68.                    if(INT1==0|INT0==0|T0==0)
  69.                           break;
  70.                   }
  71.             };
  72.     }
  73. }

  74. //interrupt 3
  75. void t2(void) interrupt 1 using 1
  76. {
  77.   TH0=0xff;
  78.   TL0=0xff;
  79.     delay(2);
  80.      if(T0==0)
  81.        {
  82.             P0=0xdb;
  83.         P1=0x00;
  84.         P2=0xff;
  85.            }while(1)
  86.             {
  87.                    if(INT0==0|INT1==0)
  88.                   {         
  89.                     delay(2);
  90.                         if(INT0==0|INT1==0)
  91.                           break;
  92.                   }

  93.             };

  94. }



  95. void main(void)
  96. {
  97.   TMOD=0x06;
  98.   TH0=0xff;
  99.   TL0=0xff;
  100.   TR0=1;
  101.   EA=1;
  102.   EX0=1;
  103.   EX1=1;
  104.   ET0=1;
  105.   
  106.   
  107. while(1)
  108. {

  109.     P0=0xeb;
  110.      for(h=28;h>0;h--)
  111.      {
  112.        for(s=248;s>0;s--)
  113.        {
  114.         P1=0x00;
  115.         P2=0xff;
  116.         P1=0x01;
  117.         P2=dis[h/10];
  118.          delay(1);
  119.                 P1=0x00;
  120.         P2=0xff;
  121.         P1=0x02;
  122.         P2=dis[h%10];
  123.                  delay(1);
  124.                 P1=0x00;
  125.         P2=0xff;
  126.                 P1=0x04;
  127.         P2=dis[(h+2)/10];
  128.                  delay(1);
  129.                 P1=0x00;
  130.         P2=0xff;
  131.                 P1=0x08;
  132.         P2=dis[(h+2)%10];
  133.          delay(1);
  134.        }
  135.      }

  136.     delay(248);

  137.     P0=0xf3;
  138.      for(h=3;h>0;h--)
  139.      {
  140.         delay(392);
  141.          P0=0xf3;
  142.          delay(1);
  143.         P1=0x00;
  144.         P2=0xff;
  145.         P1=0xaa;
  146.         P2=dis[(h-1)%10];
  147.          delay(600);
  148.         P0=0xfb;
  149.      }

  150.     delay(248);
  151.      
  152.     P0=0xdd;
  153.      for(h=38;h>0;h--)
  154.      {
  155.        for(s=248;s>0;s--)
  156.        {
  157.             
  158.                 P1=0x00;
  159.         P2=0xff;
  160.         P1=0x01;
  161.         P2=dis[(h+2)/10];
  162.                  delay(1);
  163.                 P1=0x00;
  164.         P2=0xff;
  165.         P1=0x02;
  166.         P2=dis[(h+2)%10];
  167.                  delay(1);
  168.         P1=0x00;
  169.         P2=0xff;
  170.         P1=0x04;
  171.         P2=dis[h/10];
  172.          delay(1);
  173.         P1=0x00;
  174.         P2=0xff;
  175.         P1=0x08;
  176.         P2=dis[h%10];
  177.          delay(1);
  178.        }
  179.      }

  180.     delay(248);

  181.     P0=0xde;
  182.      for(h=3;h>0;h--)
  183.      {
  184.         delay(392);
  185.         P0=0xde;
  186.          delay(1);
  187.         P1=0x00;
  188.         P2=0xff;
  189.         P1=0xaa;
  190.         P2=dis[(h-1)%10];
  191.         delay(600);
  192.         P0=0xdf;
  193.       
  194.      }

  195.          delay(248);
  196.      
  197.    }
  198.   
  199. }
复制代码

所有资料51hei提供下载:
C51交通灯.zip (82.17 KB, 下载次数: 105)


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

使用道具 举报

楼主
ID:756400 发表于 2020-6-19 12:05 | 只看该作者
花里胡哨呀。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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