找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2054|回复: 2
收起左侧

通过程序概述一下交通灯是怎样运行工作的,要详细一点 谢谢

[复制链接]
ID:260597 发表于 2017-12-16 13:12 | 显示全部楼层 |阅读模式
#include<reg52.h>
sbit RED1=P0^0;
sbit YELLOW1=P0^1;
sbit GREEN1=P0^2;
sbit RED2=P0^4;
sbit YELLOW2=P0^5;
sbit GREEN2=P0^6;
void delay(long dly)
{
while(dly--);
}
void main()
{
signed int i,x,y,z;
while(1)
{
RED1=0;YELLOW1=1;GREEN1=1;//南北红
RED2=1;YELLOW2=1;GREEN2=0;//东西绿
    x=10,y=7,z=3;
    for(i=0;i<10;i++)
     {
     P2=((x/10)<<4)+x%10;   //nanbeihong
     x--;
     if(y>0)     
     {         
       P1=((y/10)<<4)+y%10;   //dongxilv   
       y--;   
       delay(15000);  
     }  
      else
   {  
       RED2=1;YELLOW2=0;GREEN2=1;   //dongxihuang
       P1=((z/10)<<4)+z%10;
    RED2=1;YELLOW2=0;GREEN2=1;
    delay(7500);
    RED2=1;YELLOW2=1;GREEN2=1;
    delay(7500);  
          z--;
       }
      }
      
RED1=1;YELLOW1=1;GREEN1=0;//南北绿
RED2=0;YELLOW2=1;GREEN2=1;//东西红
x=18,y=15,z=3;
    for(i=0;i<18;i++)     //dongxihong
     {
     P1=((x/10)<<4)+x%10;
     x--;
     if(y>0)
     {
       P2=((y/10)<<4)+y%10;    //nanbeilv
       y--;
    delay(15000);
     }
            //nanbeihuang
      else
     {
          RED1=1;YELLOW1=0;GREEN1=1;
    P2=((z/10)<<4)+z%10;
    RED1=1;YELLOW1=0;GREEN1=1;
    delay(7500);
    RED1=1;YELLOW1=1;GREEN1=1;
    delay(7500);
    z--;
      }
    }
         
}   
}

回复

使用道具 举报

ID:111634 发表于 2017-12-16 18:22 | 显示全部楼层
先学理论,打基础,否则,问题多多,事倍功半。
回复

使用道具 举报

ID:155507 发表于 2017-12-16 19:25 | 显示全部楼层
  1. // 模拟交通信号灯的程序
  2. // 典型的51红绿灯程序,用89C51,S51, 分别定义了 P0.0,0.1,0.2 ,P0.4,0.5,0.6 接外部输出,会自动运行。

  3. #include <reg52.h>

  4. sbit RED1   =P0^0; // 南北交通信号灯
  5. sbit YELLOW1=P0^1;
  6. sbit GREEN1 =P0^2;

  7. sbit RED2   =P0^4; // 东西交通信号灯
  8. sbit YELLOW2=P0^5;
  9. sbit GREEN2 =P0^6;

  10. /*------------------------------------------------
  11. uS延时函数,含有输入参数 long dly,无返回值
  12. long 是定义无符号字符变量,其值的范围是
  13. -2147483648~+2147483647 这里使用晶振12M,精确延时请使用汇编,大致延时
  14. 长度如下 T=dly x 2 + 5 uS
  15. ------------------------------------------------*/
  16. void delay(long dly)
  17. {
  18.         while(dly--);
  19. }

  20. void main()
  21. {
  22.         int i,x,y,z;
  23.         while(1)
  24.         {
  25.                 RED1=0;YELLOW1=1;GREEN1=1;//南北红
  26.                 RED2=1;YELLOW2=1;GREEN2=0;//东西绿
  27.                 x=10,y=7,z=3;
  28.                 for(i=0;i<10;i++)
  29.                 {                                                  //2位的数码管模块 进行硬件译码
  30.                         P2=((x/10)<<4)+x%10;   //nanbeihong 驱动数码管显示 要显示的数字的BCD码数组
  31.                         x--;
  32.                         if(y>0)     
  33.                         {                                                     //2位的数码管模块 送入的 BCD译码器 转码      
  34.                                 P1=((y/10)<<4)+y%10;   //dongxilv  驱动数码管显示  
  35.                                 y--;   
  36.                                 delay(15000);   //大致延时30mS
  37.                         }  
  38.                         else
  39.                         {  
  40.                                 RED2=1;YELLOW2=0;GREEN2=1;   //dongxihuang
  41.                                 P1=((z/10)<<4)+z%10;        // 驱动数码管显示 要显示的数字的BCD码数组
  42.                                 RED2=1;YELLOW2=0;GREEN2=1;
  43.                                 delay(7500); //大致延时15mS
  44.                                 RED2=1;YELLOW2=1;GREEN2=1;
  45.                                 delay(7500);  //大致延时15mS
  46.                                 z--;
  47.                         }
  48.                 }
  49.                
  50.                 RED1=1;YELLOW1=1;GREEN1=0;//南北绿
  51.                 RED2=0;YELLOW2=1;GREEN2=1;//东西红
  52.                 x=18,y=15,z=3;
  53.                 for(i=0;i<18;i++)     //dongxihong
  54.                 {
  55.                         P1=((x/10)<<4)+x%10; //驱动数码管显示
  56.                         x--;
  57.                         if(y>0)
  58.                         {
  59.                                 P2=((y/10)<<4)+y%10;    //nanbeilv 驱动数码管显示
  60.                                 y--;
  61.                                 delay(15000); //大致延时30mS
  62.                         }
  63.                         //nanbeihuang
  64.                         else
  65.                         {
  66.                                 RED1=1;YELLOW1=0;GREEN1=1;
  67.                                 P2=((z/10)<<4)+z%10; // 驱动数码管显示
  68.                                 RED1=1;YELLOW1=0;GREEN1=1;
  69.                                 delay(7500); //大致延时15mS
  70.                                 RED1=1;YELLOW1=1;GREEN1=1;
  71.                                 delay(7500); //大致延时15mS
  72.                                 z--;
  73.                         }
  74.                 }
  75.                
  76.         }   
  77. }

复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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