课程设计题七:交通灯控制器[通俗易懂]

课程设计题七:交通灯控制器[通俗易懂]要求:1、红灯和绿灯相互转换时经过黄灯,黄灯闪烁三次(6秒);2、主干道方向通行30秒,辅干道方向通行20秒,单独左转信号15秒;先直行信号,后左转信号。3、设手动、自动、特殊情况三种方式。4、特殊情况时所有路口红灯都亮,给120、110等通行。5、自动时显示各种状态倒计时。获取该程序+protues的方式:1、CSDN下载:https://download.c…

大家好,又见面了,我是你们的朋友全栈君。

要求:

1、红灯和绿灯相互转换时经过黄灯,黄灯闪烁三次(6秒);

2、主干道方向通行30秒,辅干道方向通行20秒,单独左转信号15秒;先直行信号,后左转信号。

3、设手动、自动、特殊情况三种方式。

4、特殊情况时所有路口红灯都亮,给120、110等通行。

5、自动时显示各种状态倒计时。

获取该 程序+protues 的方式:

1、CSDN下载:

https://download.csdn.net/download/qq_38351824/11286002

2、关注微信公众号下载:

     ① 关注微信公众号:Tech云  

     ②

课程设计题七:交通灯控制器[通俗易懂]

3、可以关注点赞并在下方评论,我给你邮箱发过去。

                           ——-由于明天开始旅游,这一块注释不全、程序也有点小bug,预计7月15日开始更新——-

一、Protues仿真图:

课程设计题七:交通灯控制器[通俗易懂]

课程设计题七:交通灯控制器[通俗易懂]

课程设计题七:交通灯控制器[通俗易懂]

课程设计题七:交通灯控制器[通俗易懂]

课程设计题七:交通灯控制器[通俗易懂]

二、程序源码:

因为注释非常的全,这里就不再进行讲解了。

/*******************************************************************************
================================================================================
【平    台】STC89C51_sumjess平台
【编    写】sumjess
【E-mail  】1371129880@qq.com
【软件版本】V2.0
【最后更新】2019年06月10日
【相关信息参考下列地址】
【网    站】
           https://blog.csdn.net/qq_38351824
           http://www.51hei.com/bbs/mcu-2-1.html
---------------------------------------------------------------------------------
【dev.env.】MDK4.02及以上版本
【Target  】STC89C51
第一次修订:2019/05/09
第二次修订:2019/05/21
第三次修订:2019/06/10
【problem 】
    (1)库内补充的不全面;
    (2)库内解释部分不全面;
    (3)库内还存在一定的bug;
【direction】
      下一步的目标就是把库继续集成!
【explain 】
      为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!
【warning】
      目前程序中暂无错误 !   
---------------------------------------------------------------------------------
没有完美的代码,只有不断的奉献,大家一起努力;
赠人玫瑰手留余香,欢迎大家反馈bug!
================================================================================
********************************************************************************/

#include <reg51.h>
#include <stdio.h>
#define uchar     unsigned char
#define uint      unsigned int

uchar h;
uint r=0;
uint s;
uchar flag=1;
uchar code  dis[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff,};
                 // 0     1	   2	3	 4	  5	   6	7	 8	  9	   -
sbit key = P3^5;

void delay(uint c) //延时程序
{
   uint i,j;
    for(i=0;i<c;i++)
	  for(j=0;j<100;j++);	
}

void t0(void) interrupt 0 using 1
{
  delay(2);
   if(INT0==0)
    {
      r++;
	  if(r==2)
	   {
	  	r=0;
	   }
	  r%=2;
	  if(r==0)
	   {
	    P0=0xeb;
        P1=0x00;
        P2=0xff;
	   }while(1)
	    {
	  	 if(INT0==0|INT1==0|T0==0)
		  {
		  delay(2);
		  if(INT0==0|INT1==0|T0==0)
		  	break;
		  }
		   if(key==0) {flag=0;break;}
	    }	  
    }
}

void t1(void) interrupt 2 using 1
{
  delay(2);
   if(INT1==0)
    {
	  r++;
	  if(r==2)
	   {
	  	r=0;
	   }
	  r%=2;
	  if(r==0)
	   {
	    P0=0xdd;
        P1=0x00;
        P2=0xff;
	   }while(1)
	    {
	  	 if(INT1==0|INT0==0|T0==0)
		  {
		   delay(2);
		   if(INT1==0|INT0==0|T0==0)
		  	break;
		  }
		   if(key==0) {flag=0;break;}
	    }
    }
}

void t2(void) interrupt 1 using 1
{
  TH0=0xff;
  TL0=0xff;
    delay(2);
     if(T0==0)
     {
	    P0=0xdb;
        P1=0x00;
        P2=0xff;
	   }
	   while(1)
	    {
	  	 if(INT0==0|INT1==0)
		  {	 
		    delay(2);
			if(INT0==0|INT1==0)
		  	break;
		  }
		  if(key==0) {flag=0;break;}
	    }
}



void main(void)
{
  TMOD=0x06;
  TH0=0xff;
  TL0=0xff;
  TR0=1;
  EA=1;
  EX0=1;
  EX1=1;
  ET0=1;
   
 while(1)
{
	flag=1;
  	if(flag==1){
     P0=0xeb;
     for(h=28;h>0;h--)
     {
       for(s=248;s>0;s--)
       {
	    if(flag==0) break;
        P1=0x00;
        P2=0xff;
        P1=0x01;
        P2=dis[h/10];
        delay(1);
		P1=0x00;
        P2=0xff;
        P1=0x02;
        P2=dis[h%10];
		delay(1);
		P1=0x00;
        P2=0xff;
		P1=0x04;
        P2=dis[(h+2)/10];
		delay(1);
		P1=0x00;
        P2=0xff;
		P1=0x08;
        P2=dis[(h+2)%10];
        delay(1);
       }
     }
	if(flag==0) break;
    delay(248);

    P0=0xf3;
     for(h=3;h>0;h--)
     {
	    if(flag==0) break;
        delay(392);
         P0=0xf3;
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0xaa;
        P2=dis[(h-1)%10];
         delay(600);
        P0=0xfb;
     }
   if(flag==0) break;
    delay(248);
     
    P0=0xdd;
     for(h=38;h>0;h--)
     {
	   if(flag==0) break;
       for(s=248;s>0;s--)
       {
	    if(flag==0) break;
		P1=0x00;
        P2=0xff;
        P1=0x01;
        P2=dis[(h+2)/10];
		 delay(1);
		P1=0x00;
        P2=0xff;
        P1=0x02;
        P2=dis[(h+2)%10];
		 delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x04;
        P2=dis[h/10];
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x08;
        P2=dis[h%10];
         delay(1);
       }
     }
   if(flag==0) break;
    delay(248); 

    P0=0xde;
     for(h=3;h>0;h--)
     {
	    if(flag==0) break;
        delay(392);
        P0=0xde;
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0xaa;
        P2=dis[(h-1)%10];
        delay(600);
        P0=0xdf;
      }
	 if(flag==0) break;
	 delay(248);
    } 
   } 
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125030.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android获取分辨率和像素密度「建议收藏」

    Android获取分辨率和像素密度「建议收藏」看了网上好多的代码说是获取的分辨率其实得到的是屏幕的宽和高。1.如何获取分辨率和像素密度2..实现代码如下 DisplayMetricslocalDisplayMetrics=newDisplayMetrics(); try{ DisplaylocalDisplay=getWindow().getWindowManager().getDefaultDispl

    2022年6月14日
  • python爬虫–selenium模块

    python爬虫–selenium模块

    2021年4月17日
  • ringbuffer 无锁队列_wear ring

    ringbuffer 无锁队列_wear ring最近常收到SOD框架的朋友报告的SOD的SQL日志功能报错:文件句柄丢失。经过分析得知,这些朋友使用SOD框架开发了访问量比较大的系统,由于忘记关闭SQL日志功能所以出现了很高频率的日志写入操作,从而偶然引起错误。后来我建议只记录出错的或者执行时间较长的SQL信息,暂时解决了此问题。但是作为一个热心造轮子的人,一定要看看能不能造一个更好的轮子出来。前面说的错误原因已经很直白了,就是频繁的日志写入导…

    2022年9月10日
  • HDU 1556-差分数组和线段树的对比分析-Color the ball

    HDU 1556-差分数组和线段树的对比分析-Color the ball差分数组数据结构详解戳这里!线段树数据结构详解戳这里!这两个数据结构的操作主要有两个:更新和查询。假设数据结构总长度为n。差分数组:更新时间复杂度O(1)查询时间复杂度O(n)线段树:更新时间复杂度O(logn)查询时间复杂度O(logn)因此,差分数组适用于多次更新,常量次查询,数据范围在1e7以内的情况;线段树适用于多次更新,多次查询,数据范围在1e5以内的…

    2022年5月7日
  • 阿基米德三角形「建议收藏」

    阿基米德三角形「建议收藏」已知抛物线\(C:x^2=2py\),弦\(AB\)过\(C\)的焦点\(F\),过\(A,B\)两点作抛物线\(C\)的两条切线,若两切线相交于点\(P\),则(1)

    2022年8月3日
  • python读取txt文本(python读取excel数据)

    #coding:utf8dict_data={}withopen(‘dict_2data.txt’,’r’)asdf:forkvin[d.strip().split(”)fordindf]:printkv[0].decode(‘utf8’)dict_data[kv[0].decode(‘utf8’)]=kv[1]printdict_dataforkin…

    2022年4月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号