编程加实践(单片机):求利用89C51 CPU编写红绿灯程序

要求:①正常交通灯演示。②发光二极管中的黄灯开始闪烁,其它灯熄灭。3、发光二极管开始循环显示,即发光除了一个全亮,其余二极管熄灭,并且从左到右不断循环。
设计参数:
如果P3.0为1的话,正常运行交通灯
如果P3.1为1的话,正常运行交通灯
如果P3.1为0的话,依次点亮灯
如果P3.0为0的话,停止交通灯,只有黄灯闪烁
最好在每个语句后加注释,多谢!发送至tuzi.8341@163.com

仅供参考

功能说明:

利用单片机P1端口控制6个交通信号灯,并使用定时/计数器T0作定时,实现交通信号灯控制。

在马路的十字路过东西南北各设置红、黄、绿3种信号灯。由P1.0~P1.2控制南北方向,其中P1.0为红灯,P1.1为黄灯,P1.2为绿灯。P1.3~P1.5控制东西方向,其中P1.3为红灯,P1.4为黄灯,P1.5为绿灯。

/* 文件名:JT 21-3.c */

/* 程序功能:交通信号灯控制 */

  #include <AT89X51.H>          /* 头文件 */  

  char count;                   /* 声明count为字符变量 */

  bit flag;                     /* 声明flag为位变量 */

  char sum =0;                   /* 声明sum为字符变量并赋初始值0 */

  xhd( );                       /* 信号灯函数xhd( ) */

 /* ――――――――  主函数(主程序) ―――――――――――*/

  main( )                       /* 主函数 */

    {  

    TMOD=0x01;                  /* 设定T0为模式1 */

    TH0=-(50000/256);           /* 设定时器初始值50000 */

    TL0=-(50000%256);  

    EA=1;                       /* 总允许中断 */

    ET0=1;                      /* 允许定时器T0中断 */

    TR0=1;                      /* 启动定时器工作 */

  

    P1=0xff;                    /* P1初始值,关闭所有信号灯 */

    xhd( );                     /* 调用信号灯函数 */

  }

 /* ――――――― 中断函数(中断服务程序) ―――――――― */

  T0_srv( ) interrupt 1 using 1  /* 中断服务程序 */

  {

    TH0=-(50000/256);            /* 重装定时器初始值 */

    TL0=-(50000%256); 

    count++;                     /* count加1 */ 

    if(count==20)                /* 判断count是否等于20 */

     { 

      count=0;                   /* count清0,以便从新计数 */

      flag=1;                    /* 标志位为1 */

     } 

  }

 /* ――――――――  信号灯函数(子程序) ―――――――― */

   xhd( )                        /* 信号灯函数 */

   {                             

     while(1)                    /* 无限循环 */ 

     {

 /* ―――――――――――――*/

       P1_3=0; P1_2=0;           /*东西红灯亮,南北绿灯亮 */ 

       while( sum<15)            /* 循环15次,延时15秒 */

        {

          while( ! flag );       /* 等待1秒 */

          flag=0;                /* 标志位清0 */

          sum++;                 /* sum加1 */

        }

      sum=0;                     /* sum清0,以便从新计数 */

 /* ―――――――――――――*/

      P1_2=1; P1_1=0;            /* 南北绿灯灭,黄灯亮 */      

  while( sum<3)                  /* 循环3次,延时3秒 */

   {

     while(! flag);

     flag=0;

     sum++;

    }

   sum=0;

 /*―――――――――――――*/

   P1_1=1; P1_0=0;               /* 南北黄灯灭,红灯亮 */

   P1_3=1; P1_5=0;               /* 东西红灯灭,绿灯亮 */

  while( sum<10)                 /* 延时10秒 */

   {

    while(! flag);

    flag=0;

    sum++;

   }

  sum=0;

 /* ―――――――――――――*/

  P1_5=1; P1_4=0;                /*东西绿灯灭,黄灯亮 */

  while( sum<3)                  /* 延时3秒 */

    {

     while(! flag);

     flag=0;

     sum++;

    }

   sum=0;

 /* ――――――――――――― */

   P1_4=1; P1_0=1;               /* 东西黄灯灭,南北红灯灭 */ 

  }

 }



温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-11
^_^,安装一个KEILC程序,它的安装目录下面有一个交通灯的完整例子

^_^
第2个回答  2009-05-11
安装一个KEILC程序,它的安装目录下面有一个交通灯的完整例子
第3个回答  2012-12-18
亲,,你做出来了吗,我们也做这样的,,你现在有吗,给我发一份
第4个回答  2009-05-12

编程加实践(单片机):求利用89C51 CPU编写红绿灯程序
回答:^_^,安装一个KEILC程序,它的安装目录下面有一个交通灯的完整例子 ^_^

89C51单片机红绿灯程序是什么?
若亮则转移到黄灯闪烁程序\\x0d\\x0a JNB ACC.1,SS2 ;判断南北方向黄灯是否亮,若亮则转移到黄灯闪烁程序\\x0d\\x0a MOV P1,A\\x0d\\x0a LCALL DY1S\\x0d\\x0aSS:MOV A,R1\\x0d\\x0a INC A\\x0d\\x0a DJNZ R2,F3\\x0d\\x0a SJMP MAIN\\x0d\\x0a\\x0d\\x0a...

求大佬教教怎么用89c51单片机实现模拟路灯
1. 准备材料:89c51单片机、LED灯、电阻、面包板、杜邦线等。2. 连接电路:将89c51单片机与LED灯连接起来。将LED的正极连接到单片机的一个IO口,将LED的负极通过一个适当大小的电阻连接到单片机的地线。3. 编写程序:使用C语言编写程序,通过控制IO口的高低电平来控制LED灯的亮灭。以下是一个简单的示例...

跪求单片机89C51控制交通灯的课程设计
现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序利用keil工具对源程序进行编写和编译。再利用编程器编译好的文件烧写到到单片机进行演示验证。再将烧写好的AT89C52从编程器上取下在 放到‘S51增强型单片机实验板’进行通电我们就看到了LED1到LED8的‘流水’效果了 2)工作环境 PC机一台,Proteus...

求个89c51单片机 汇编语言设计的LED跑马灯的程序
main: ;主程序循环点亮 mov p1,#00h ;全亮 lcall delay ;延时一段时间 mov a,#0feh ;每次只亮一个灯。loop: mov p1,a ;输出到p1 lcall delay ; 延时 rl a ;循环左移。ajmp loop ; 跳转main继续循环 delay: mov r5,#20 ;延时子程序1闪烁灯调用 d1:mov r6,#20 ...

求编程单片机89c51,要求:按key1(P3.4,p3.5)键三次后,P1口的LED灯全部点...
晶振4MHZ,按键key1为P3.4,P3.5接口 功能:按 key1键三次,P1灯亮,再按一次灭,如此重复 \/ include<reg51.h> sbit key1 = P3^4;\/ void delay40us(uint time)输入参数:time 输出参数:无 函数功能:延时程序40us \/ void delay40us(unsigned int time){ unsigned char ks;while(...

89C51单片机 4*4矩阵键盘加流水灯问题,求个汇编程序代码。
;其实很简单,都不用判断键值,有键按下暂停2S程序如下:ORG 0000H LJMP STA ORG 000BH LJMP T0ISR ORG 0030H STA:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV 30,#0FEH MOV R2,#0 CLR 00H LOOP:MOV P1,#0F0H MOV A,P1 CJNE A,#0F0H,LOOP1 SJMP LOOP...

单片机89c51,总共8个开关,倒着控制8个灯, 求图和程序
case P1_1==0:P2_6=1;break;case P1_2==0:P2_5=1;break;case P1_3==0:P2_4=1;break;case P1_4==0:P2_3=1;break;case P1_5==0:P2_2=1;break;case P1_6==0:P2_1=1;break;case P1_7==0:P2_0=1;break;)P1口接SW,SW另一端接地 P2口接LED,LED另一端接地 ...

89C51单片机汇编程序题
ADD A,#2H ;指针指向R2,R0、R1已经处理过了 MOV R0,A ;把当前寄存器组R2的地址送R0,设置指向寄存器的指针 MOV R1,#22H ;设置目标地址指针指向22H M1: MOV A,@R0 ;22H以后依据题意使用循环,寄存器的内容送A MOV @R1,A ;A的内容送目标地址 INC R0 INC R1 CJNE R1,...

MSC-51单片机交通灯论文
编写好源程序后,采用keil软件对其进行编译,使其生成单片机可以识别的.hex文件,再把此文件导入单片机89C51中即可。硬件电路和源程序及目标文件都设计完后,我们可以采用相关软件进行仿真,以使交通信号灯控制系统的设计更加准确,可靠。设计者采用PROTUES软件进行仿真调试,仿真时注意此软件使用,从而进一步熟悉...

相似回答