精华内容
下载资源
问答
  • 电路仿真软件是当代重要软件之一,缺乏电路仿真软件,模拟运行环境将无法搭建。...交通信号灯作为管制交通流量、提高道路通行能力的有效手段,对减少交通事故有明显效果。但是车流量是随时变化的,...

    电路仿真软件是当代重要软件之一,缺乏电路仿真软件,模拟运行环境将无法搭建。对于电路仿真软件,虽然市面上类别众多,但知名电路仿真软件为proteus。本文对于电路仿真软件的介绍,为基于proteus的交通灯控制电路设计,一起来了解下吧。

    城市道路错综复杂,相互交错,交通灯是城市交通的重要指挥系统。交通信号灯作为管制交通流量、提高道路通行能力的有效手段,对减少交通事故有明显效果。但是车流量是随时变化的,而传统的交通灯模式采用的是定时控制,反而容易造成交通堵塞。因此设计一种基于Proteus与单片机的交通灯控制系统的设计与仿真,对减少交通事故,缓解交通阻塞,提高畅通率具有很重要的现实意义.

    1、系统设计方案

    东西、南北两干道交于一个十字路口,各干道有一组交通指示灯,每一个状态方向上均有一组红、绿灯,即一组交通指示灯都有左转、直行、右转3组红、绿灯和一个黄灯,指示车辆和行人安全通行.红灯点亮禁止通行,绿灯点亮允许通行.黄灯闪烁提示人们注意交通灯状态即将切换.

    1.1、系统硬件电路的设计

    利用单片机设计应用系统应考虑在满足设计要求的前提下,硬件电路要尽可能地简单,最大限度地用程序设计完成系统的各项功能.因此本文以STC89C52单片机为控制核心,设计交通灯的控制系统.在该系统中STC89C52和外围电路的各个模块进行信息交流并且进行相应的控制,系统组成框图如图1所示.

    8e48acd281e1b84ea864c8043abbe096.png

    图1 交通灯系统组成框图

    该系统由时钟电路、复位电路、控制系统电路、LED交通灯显示电路、七段数码管显示时间电路、自动和手动按键控制电路等组成.主控制器采用STC89C52单片机.P1口设置红、绿灯点亮和黄灯闪烁的功能,P0、P2口来显示时间,P3口设置系统工作模式.用发光二极管实现交通灯的红绿黄灯,时间的显示则采用七段数码管实现.

    1.2、系统软件电路的设计

    1)LED交通灯显示模块

    89C52单片机P1口对LED交通灯进行控制,在不同的状态时控制相应的LED交通灯状态.

    2)数码管显示模块

    89C52单片机P0口进行时间倒计时段选,P2.0~P2.3端口进行数码管时间显示位选,用T2中断定时每2ms对七段数码管刷新一次.

    3)键盘控制模块

    89C52单片机P3.0~P3.3口与P3.6口外部键盘控制交通灯自动和手动状态及手动控制时的不同状态进行实时扫描,进入相应的运行状态.

    2、系统工作模式

    2.1、自动控制模式

    本系统启动为自动控制模式.最初为南北直行方向导通即直行为绿灯,其余为红灯,并且数码管从15s开始倒计时,当倒计时至8s时黄灯开始闪烁(1s完成闪烁一次),闪烁3s后,即倒计时至5s时,南北方向左转和右转变为绿灯,直行为红灯;当倒计时至0s时,路口进入禁行等待状态,即绿灯全部熄灭红灯点亮,并且数码管从3s开始倒计时,同时黄灯开始闪烁3s;当倒计时再次为0s,黄灯闪烁完毕后,南北方向数码管从18s开始倒计时,同时东西直行方向导通即为绿灯,其余为红灯,并且数码管从15s开始倒计时,当倒计时至8s时黄灯开始闪烁(1s完成闪烁一次),闪烁3s后,即倒计时至5s时,东西方向左转和右转变为绿灯,直行为红灯;当倒计时至0s时,路口进入禁行等待状态,即绿灯全部熄灭红灯点亮,并且数码管从3s开始倒计时,同时黄灯开始闪烁3s;当倒计时再次为0s,黄灯闪烁完毕后,东西方向数码管从18s开始倒计时,同时南北直行方向导通即为绿灯,其余为红灯,并且数码管从15s开始倒计时,以此方式循环.

    2.2、手动控制模式

    1)当系统工作在自动模式时,如果按下当前正在导通状态的手动控制按键时,系统直接进入该导通状态,并且南北和东西方向的数码管均显示99;如果按下不是当前正在导通状态的手动控制按键时,系统将对当前正在导通的状态进行3s的黄灯闪烁倒计时状态,当倒计时结束后,系统将进入所按下的键的导通状态,同时南北和东西方向的数码管均显示99;此时再按下其余的手动控制按键时,系统将进入所按下的键的导通状态.

    2)当系统工作在手动模式时,如果按下自动控制按键时,系统将对当前正在导通的状态进行3s的黄灯闪烁倒计时状态,当倒计时结束后,系统将进入最初的自动控制模式.

    3)当系统工作时,如果系统处在南北直行方向导通时,此时南北方向的人行横道导通,人们可以通过人行横道穿越东西方向的人行横道;同理如果系统处在东西直行方向导通时,此时东西方向的人行横道导通,人们可以通过人行横道穿越南北方向的人行横道.

    3、Proteus仿真设计

    通过Proteus软件对系统硬件设计和软件设计结合仿真,程序代码通过Keil编辑、编译后生成HEX文件,然后通过点击单片机加载程序,实现硬件与程序的结合仿真.系统仿真结果如图2所示.

    de9eba084e8d4e423babcf8a5155e907.png

    图2 基于Proteus和Keil的仿真结果

    本文设计的交通灯控制系统以单片机STC89S52为主控制器,利用Proteus软件绘制硬件电路,利用Keil进行编程,然后进行整合仿真,实现了预定的功能.本系统分别在每一路,即南北和东西方向分别设有三路交通信号灯进行控制,即左转红绿灯、直行红绿灯、右行红绿灯,每个方向的三路交通灯同时运行.除此之外,本系统还设置了自动和手动两种模式可供选择,一般情况下,本系统在自动状态下运行,如果在交通运行高峰时,交警就会进行疏导,在此时,交警可以将本系统切换到手动模式,对交通进行疏导,特别适合在炎热和阴雨等不好的天气状况.本系统实用性较强、操作相对简单、扩展功能较强并且成本较低、功耗小,具有非常广泛的应用前景。

    展开全文
  • 本文给读者提供了基于单片机的交通灯信号控制器设计方案,给出了源程序供读者设计参考。
  • 交通信号灯.SchDoc

    2020-12-01 18:21:22
    基于51单片机设计交通信号灯,这个是完整的电路原理,其中数码管用的是两个一位红色共阳数码管(因为手头只有这些材料了)
  • 交通信号灯控制器 在十字路口东西南北各设置红、黄、绿三种信号灯,如1所示。正常情况下,东西、南北方向轮流放行。当东西方向(A线)放行、南北方向(B线)禁行时,东西方向(A线)绿灯亮25秒,然后黄灯亮5秒,南北方向...
  • 从网上找了一份资料,满足了基本的需要,但没有实现远程控制的功能,于是我将代码和电路图进行了修改,使其能进行远程通信 代码 #include <reg52.h> //头文件 #define uchar unsigned char #...

    从网上找了一份资料,满足了基本的需要,但没有实现远程控制的功能,于是我将代码和电路图进行了修改,使其能进行远程通信

    代码

    #include <reg52.h> //头文件
    #define uchar unsigned char
    #define uint unsigned int //宏定义
    sfr T2MOD = 0xC9;
    
    uchar data buf[4];			//秒显示的变量
    uchar data sec_dx = 20;		//东西数默认
    uchar data sec_nb = 30;		//南北默认值
    uchar data set_timedx = 20; //设置东西方向的时间
    uchar data set_timenb = 30; //设置南北方向的时间
    
    uchar data num_che_dx = 0; //设置变量用于记录东西通行车量的个数
    uchar data num_che_nb = 0; //设置变量用于记录南北通行车辆的个数
    
    uchar data xianshi_fx = 0; //显示方式
    int n;
    uchar data countt0, countt1; //定时器0中断次数
    //定义6组开关
    sbit k1 = P1 ^ 5;	//夜间模式
    sbit k2 = P1 ^ 4;	//禁止
    sbit k3 = P3 ^ 4;	//确认
    sbit k4 = P1 ^ 6;	//东西通行
    sbit k5 = P1 ^ 7;	//南北通行
    sbit hw_dx = P3 ^ 5; //使用此引脚接红外探头检测"东西"方向通过的车辆当检测到南北有车辆通行时,该引脚会呈现低电平
    sbit hw_nb = P3 ^ 6; //使用此引脚接红外探头检测"南北"方向通过的车辆当检测到南北有车辆通行时,该引脚会呈现低电平
    sbit k6 = P3 ^ 7;	//切换方向
    
    sbit Red_nb = P2 ^ 6;	//南北红灯标志
    sbit Yellow_nb = P2 ^ 5; //南北黄灯标志
    sbit Green_nb = P2 ^ 4;  //南北绿灯标志
    
    sbit Red_dx = P2 ^ 3;	//东西红灯标志
    sbit Yellow_dx = P2 ^ 2; //东西黄灯标志
    sbit Green_dx = P2 ^ 1;  //东西绿灯标志
    
    sbit Buzz = P3 ^ 3;
    bit set = 0;	 //调时方向切换键标志 =1时,南北,=0时,东西
    bit dx_nb = 0;   //东西南北控制位
    bit shanruo = 0; //闪烁标志位
    bit yejian = 0;  //夜间黄灯闪烁标志位
    
    uchar code table[11] = {
    	//共阴极字型码
    	0x3f, //--0
    	0x06, //--1
    	0x5b, //--2
    	0x4f, //--3
    	0x66, //--4
    	0x6d, //--5
    	0x7d, //--6
    	0x07, //--7
    	0x7f, //--8
    	0x6f, //--9
    	0x00  //--NULL
    };
    
    //函数的声明部分
    void delay(int ms); //延时子程序
    void key();			//按键扫描子程序
    void key_to1();		//键处理子程序
    void key_to2();
    void key_to3();
    void key_to4();
    void key_to5();
    void display(); //显示子程序
    void logo();	//开机LOGO
    void Buzzer();
    //主程序
    void main()
    {
    	TMOD = 0X11; //定时器设置
    	TH1 = 0X3C;
    	TL1 = 0XB0;
    	TH0 = 0X3C; //定时器0置初值 0.05S
    	TL0 = 0XB0;
    
    	T2MOD = 0x01; //自动重载
    	T2CON = 0x30; //T2用做发送接收时钟
    	TH2 = 0xFF;   //9600波特率,11.0592Mhz晶振
    	TL2 = 0xDC;
    	RCAP2H = 0xFF;
    	RCAP2L = 0xDC;
    	SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据,可变波特率
    	PCON = 0X00; //波特率不加倍
    	TR2 = 1;	 //启动T2
    
    	ES = 1;				 //开串口中断
    	EA = 1;				 //开总中断
    	ET0 = 1;			 //定时器0中断开启
    	ET1 = 1;			 //定时器1中断开启
    	TR0 = 1;			 //启动定时0
    	TR1 = 0;			 //关闭定时1
    	EX0 = 1;			 //开外部中断0
    	EX1 = 1;			 //开外部中断1
    	logo();				 //开机初始化
    	P2 = 0Xc3;			 // 开始默认状态,东西绿灯,南北黄灯
    	sec_nb = sec_dx + 5; //默认南北通行时间比东西多5秒
    	while (1)			 //主循环
    	{
    		key();	 //调用按键扫描程序
    		display(); //调用显示程序
    	}
    }
    
    void key_to1() //夜间模式设置函数
    {
    	TR0 = 0; //关定时器
    	P2 = 0x00;
    	TR1 = 1;
    	sec_dx = 00; //四个方向的时间都为00
    	sec_nb = 00;
    }
    
    void key_to2() //禁止通行模式设置函数
    {
    	TR0 = 0;   //关定时器
    	P2 = 0x00; //灭显示
    	Red_dx = 1;
    	Red_nb = 1; //全部置红灯
    	TR1 = 0;
    	sec_dx = 00; //四个方向的时间都为00
    	sec_nb = 00;
    }
    
    void key_to3() //确认设置函数
    {
    	TR0 = 1;			 //启动定时器0
    	xianshi_fx = 0;		 //设置重新显示
    	sec_nb = set_timenb; //从中断回复,仍显示设置过的数值
    	sec_dx = set_timedx; //显示设置过的时间
    	TR1 = 0;			 //关定时器1
    	if (set == 0)		 //时间倒时到0时
    	{
    		P2 = 0X00;			 //灭显示
    		Green_dx = 1;		 //东西绿灯亮
    		Red_nb = 1;			 //南北红灯亮
    		sec_nb = sec_dx + 5; //回到初值
    	}
    	else
    	{
    		P2 = 0x00; //南北绿灯,东西红灯
    		Green_nb = 1;
    		Red_dx = 1;
    		sec_dx = sec_nb + 5;
    	}
    }
    
    void key_to4() //东西通行设置函数
    {
    	TR0 = 0;	  //关定时器0
    	TR1 = 0;	  //关定时器1
    	P2 = 0x00;	//灭显示
    	Green_dx = 1; //东西方向置绿灯
    	Red_nb = 1;   //南北方向为红灯
    	sec_dx = 00;  //四个方向的时间都为00
    	sec_nb = 00;
    }
    
    void key_to5() //南北通行设置函数
    {
    	TR0 = 0;	  //关定时器0
    	TR1 = 0;	  //关定时器1
    	P2 = 0x00;	//灭显示
    	Green_nb = 1; //置南北方向为绿灯
    	Red_dx = 1;   //东西方向为红灯
    	sec_nb = 00;  //四个方向的时间都为00
    	sec_dx = 00;
    }
    
    //函数的定义部分
    void key(void) //按键扫描子程序
    {
    	if (k1 != 1) //当K1(夜间模式)按下
    	{
    		display();   //调用显示,用于延时消抖
    		if (k1 != 1) //如果确定按下
    		{
    			key_to1(); //夜间模式设置函数
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k1 != 1); //等待按键释放
    		}
    	}
    	if (k2 != 1) //当K2(禁止)键按下时
    	{
    		display();   //调用显示,用于延时消抖
    		if (k2 != 1) //如果确定按下
    		{
    			key_to2(); //停止通行设置函数
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k2 != 1); //等待按键释放
    		}
    	}
    	if (k3 != 1) //当K3(确认)键按下时
    	{
    		display();   //调用显示,用于延时消抖
    		if (k3 != 1) //如果确定按下
    		{
    			key_to3();
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k3 != 1); //等待按键释放
    		}
    	}
    
    	if (k4 != 1) //当K4(东西通行)键按下时
    	{
    		display();   //调用显示,用于延时消抖
    		if (k4 != 1) //如果确定按下
    		{
    			key_to4(); //东西通行函数
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k4 != 1); //等待按键释放
    		}
    	}
    
    	if (k5 != 1) //当K5(南北通行)键按下时
    	{
    		display();   //调用显示,用于延时消抖
    		if (k5 != 1) //如果确定按下
    		{
    			key_to5(); //南北通行函数
    			do
    			{
    				display();	 //调用显示,用于延时
    			} while (k5 != 1); //等待按键释放
    		}
    	}
    
    	if (hw_dx != 1) //东西红外探头
    	{
    		display();		//调用显示,用于延时消抖和按键检测方法基本相同
    		if (hw_dx != 1) //如果确定有车辆经过
    		{
    			if (dx_nb == 0) //东西通行的时间
    			{
    				num_che_dx++; //用于记录东西绿灯时经过的车辆数
    			}
    			else
    			{
    				Buzz = 0; //蜂鸣器开
    			}
    			while (hw_dx != 1)
    				; //等待释放
    			{
    				display(); //调用显示,用于延时
    			}
    			Buzz = 1; //蜂鸣器关
    		}
    	}
    
    	if (hw_nb != 1) //南北红外探头
    	{
    		display();		//调用显示,用于延时消抖和按键检测方法基本相同
    		if (hw_nb != 1) //如果确定有车辆经过
    		{
    			if (dx_nb == 1) //东西通行的时间
    			{
    				num_che_nb++; //用于记录南北绿灯时经过的车辆数
    			}
    			else
    			{
    				Buzz = 0; //蜂鸣器开
    			}
    			while (hw_nb != 1)
    				; //等待释放
    			{
    				display(); //调用显示,用于延时
    			}
    			Buzz = 1; //蜂鸣器关
    		}
    	}
    	if (k6 != 1) //(查看)键按下
    	{
    		display();   //调用显示,用于延时消抖
    		if (k6 != 1) //如果确定按下
    		{
    			xianshi_fx++;
    			if (xianshi_fx >= 3)
    				xianshi_fx = 2;
    			while (k6 != 1)
    				; //等待按键释放
    			{
    				display(); //调用显示,用于延时
    			}
    		}
    	}
    }
    void display(void) //显示子程序
    {
    
    	if (xianshi_fx == 0) //正常显示
    	{
    		buf[1] = sec_nb / 10; //第1位 东西显示秒十位
    		buf[2] = sec_nb % 10; //第2位 东西显示秒个位
    		buf[3] = sec_dx / 10; //第3位 南北显示秒十位
    		buf[0] = sec_dx % 10; //第4位 南北显示秒个位
    	}
    	if (xianshi_fx == 1) //查看通行时间
    	{
    		buf[1] = set_timenb / 10; //第1位 东西通行秒十位
    		buf[2] = set_timenb % 10; //第2位 东西通行秒个位
    		buf[3] = set_timedx / 10; //第3位 南北通行秒十位
    		buf[0] = set_timedx % 10; //第4位 南北通行秒个位
    	}
    
    	if (xianshi_fx == 2) //查看红外计数值
    	{
    		buf[1] = num_che_nb / 10; //第1位 东西红外计数值十位
    		buf[2] = num_che_nb % 10; //第2位 东西红外计数值个位
    		buf[3] = num_che_dx / 10; //第3位 南北红外计数值十位
    		buf[0] = num_che_dx % 10; //第4位 南北红外计数值个位
    	}
    
    	P1 = 0xff;			// 初始灯为灭的
    	P0 = 0x00;			灭显示
    	P1 = 0xfe;			//片选LED1
    	P0 = table[buf[1]]; //送东西时间十位的数码管编码
    	delay(1);			//延时
    	P1 = 0xff;			//关显示
    	P0 = 0x00;			//灭显示
    
    	P1 = 0xfd;			//片选LED2
    	P0 = table[buf[2]]; //送东西时间个位的数码管编码
    	delay(1);			//延时
    	P1 = 0xff;			//关显示
    	P0 = 0x00;			//关显示
    	P1 = 0Xfb;			//片选LED3
    
    	P0 = table[buf[3]]; //送南北时间十位的数码管编码
    	delay(1);			//延时
    	P1 = 0xff;			//关显示
    	P0 = 0x00;			//关显示
    	P1 = 0Xf7;			//片选LED4
    	P0 = table[buf[0]]; //送南北时间个位的数码管编码
    	delay(1);			//延时
    }
    
    void time0(void) interrupt 1 using 1 //定时中断子程序
    {
    	TH0 = 0X3C;		   //重赋初值
    	TL0 = 0XB0;		   //12m晶振50ms//重赋初值
    	TR0 = 1;		   //重新启动定时器
    	countt0++;		   //软件计数加1
    	if (countt0 == 10) //加到10也就是半秒
    	{
    		if ((sec_nb <= 5) && (dx_nb == 0) && (shanruo == 1)) //东西黄灯闪
    		{
    			Green_dx = 0;
    			Yellow_dx = 0;
    			Buzz = 0; //蜂鸣器关
    		}
    		if ((sec_dx <= 5) && (dx_nb == 1) && (shanruo == 1)) //南北黄灯闪
    		{
    			Green_nb = 0;
    			Yellow_nb = 0;
    			Buzz = 0; //蜂鸣器关
    		}
    	}
    
    	if (countt0 == 20) // 定时器中断次数=20时(即1秒时)
    	{
    		countt0 = 0; //清零计数器
    		sec_dx--;	//东西时间减1
    		sec_nb--;	//南北时间减1
    
    		if ((sec_nb <= 5) && (dx_nb == 0) && (shanruo == 1)) //东西黄灯闪
    		{
    			Green_dx = 0;
    			Yellow_dx = 1;
    			Buzz = 1; //蜂鸣器关
    		}
    		if ((sec_dx <= 5) && (dx_nb == 1) && (shanruo == 1)) //南北黄灯闪
    		{
    			Green_nb = 0;
    			Yellow_nb = 1;
    			Buzz = 1; //蜂鸣器关
    		}
    		if (sec_dx == 0 && sec_nb == 5) //当东西倒计时到0时,重置5秒,用于黄灯闪烁时间
    		{
    			sec_dx = 5;
    			shanruo = 1;
    		}
    		if (sec_nb == 0 && sec_dx == 5) //当南北倒计时到0时,重置5秒,用于黄灯闪烁时间
    		{
    			sec_nb = 5;
    			shanruo = 1;
    		}
    		if (dx_nb == 0 && sec_nb == 0) //当黄灯闪烁时间倒计时到0时,
    		{
    			Buzz = 1;  //蜂鸣器开
    			P2 = 0x00; //重置东西南背方向的红绿灯
    			Green_nb = 1;
    			Red_dx = 1;
    			dx_nb = !dx_nb;
    			shanruo = 0;
    			if (num_che_nb > set_timenb / 2) //如果此时南北通行的车辆数大于预设通行量
    				set_timenb = set_timenb + 5;
    			if (num_che_nb == 0) //如果南北方向无车辆通行,每次递减5秒
    				set_timenb = set_timenb - 5;
    			if (set_timenb <= 15)
    				set_timenb = 15;
    			sec_nb = set_timenb;	 //重赋南北方向的起始值
    			sec_dx = set_timenb + 5; //重赋东西方向的起始值
    			num_che_nb = 0;			 //清零
    		}
    
    		if (dx_nb == 1 && sec_dx == 0) //当黄灯闪烁时间到
    		{
    			P2 = 0X00;						 //重置东西南北的红绿灯状态
    			Green_dx = 1;					 //东西绿灯亮
    			Red_nb = 1;						 //南北红灯亮
    			dx_nb = !dx_nb;					 //取反
    			shanruo = 0;					 //闪烁
    			if (num_che_dx > set_timedx / 2) //如果此时南北通行的车辆数大于预设通行量
    				set_timedx = set_timedx + 5;
    			if (num_che_dx == 0) //如果东西方向无车辆通行,每次递减5秒
    				set_timedx = set_timedx - 5;
    			if (set_timedx <= 15)
    				set_timedx = 15;
    			sec_dx = set_timedx;	 //重赋东西方向的起始值
    			sec_nb = set_timedx + 5; //重赋南北方向的起始值
    			num_che_dx = 0;			 //清零
    		}
    	}
    }
    void time1(void) interrupt 3 //定时中断子程序
    {
    	TH1 = 0X3C;		   //重赋初值
    	TL1 = 0XB0;		   //12m晶振50ms//重赋初值
    	countt1++;		   //软件计数加1
    	if (countt1 == 10) // 定时器中断次数=10时(即0.5秒)
    	{
    		Yellow_nb = 0; //南北黄灯灭
    		Yellow_dx = 0; //东西黄灯灭
    	}
    	if (countt1 == 20) // 定时器中断次数=20时(即1秒时)
    	{
    		countt1 = 0;   //清零计数器
    		Yellow_nb = 1; //南北黄灯亮
    		Yellow_dx = 1; //东西黄灯亮
    	}
    }
    
    //外部中断0
    void int0(void) interrupt 0 using 1
    {
    }
    
    //外部中断1
    void int1(void) interrupt 2 using 1
    {
    }
    
    void Com_Int(void) interrupt 4 //串口中断子函数
    {
    	uchar i;
    	uchar receive_data, ruturn_data[8];
    
    	EA = 0;
    
    	if (RI == 1) //当硬件接收到一个数据时,RI会置位
    	{
    		RI = 0;
    		receive_data = SBUF; //接收到的数据
    
    		if (receive_data == '1') //夜间模式
    		{
    			key_to1();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '1';
    			ruturn_data[4] = '\0';
    		}
    		else if (receive_data == '2') //停止模式
    		{
    			key_to2();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '2';
    			ruturn_data[4] = '\0';
    		}
    		else if (receive_data == '3') //确认(重现)模式
    		{
    			key_to3();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '3';
    			ruturn_data[4] = '\0';
    		}
    		else if (receive_data == '4') //东西通行模式
    		{
    			key_to4();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '4';
    			ruturn_data[4] = '\0';
    		}
    		else if (receive_data == '5') //南北通行模式
    		{
    			key_to5();
    			display();
    			ruturn_data[0] = 'o';
    			ruturn_data[1] = 'k';
    			ruturn_data[2] = '-';
    			ruturn_data[3] = '5';
    			ruturn_data[4] = '\0';
    		}
    		else
    		{
    			ruturn_data[0] = 'e';
    			ruturn_data[1] = 'r';
    			ruturn_data[2] = 'r';
    			ruturn_data[3] = '0';
    			ruturn_data[4] = 'r';
    			ruturn_data[5] = '\0'; //错误命令
    		}
    	}
    	for (i = 0; i < 8; i++)
    	{
    		SBUF = ruturn_data[i]; //将要发送的数据放入到发送寄存器
    		while (!TI)
    			;   //等待发送数据完成
    		TI = 0; //清除发送完成标志位
    	}
    	EA = 1;
    }
    void logo() //开机的Logo  "- - - -"
    {
    	for (n = 0; n < 50; n++) //循环显示----50次
    	{
    		P0 = 0x40; //送形“-”
    		P1 = 0xfe; //第一位显示
    		delay(1);  //延时
    		P1 = 0xfd; //第二位显示
    		delay(1);  //延时
    		P1 = 0Xfb; //第三位显示
    		delay(1);  //延时
    		P1 = 0Xf7; //第四位显示
    		delay(1);  //延时
    		P1 = 0xff; //灭显示
    	}
    }
    
    void delay(int ms) //延时子程序
    {
    	uint j, k;
    	for (j = 0; j < ms; j++) //延时ms
    		for (k = 0; k < 124; k++)
    			; //大约1毫秒的延时
    }
    

    仿真图

    在这里插入图片描述

    功能效果

    正常运行
    在这里插入图片描述
    停止模式(红灯全亮)
    在这里插入图片描述
    深夜模式(黄灯全亮)
    在这里插入图片描述
    东西通行模式

    在这里插入图片描述
    南北通行模式
    在这里插入图片描述
    查看预设的时间
    在这里插入图片描述
    查看车流量在这里插入图片描述

    原理图

    在这里插入图片描述

    展开全文
  • 2018-12-20 11:48 上传点击文件名下载附件设计任务设计一个有一条主干道和一条支干道汇合形成的十字交叉路口的交通信号灯控制电路。  基本要求:1、通行,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。红灯...

    2018-12-20 11:48 上传

    点击文件名下载附件

    设计任务

    设计一个有一条主干道和一条支干道汇合形成的十字交叉路口的交通信号灯控制电路。  基本要求:

    1、通行,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。红灯亮禁止通行;绿灯亮允许通行;黄灯亮提醒司机将行使中的车辆靠在禁行线之外。

    2、主、支干道交替通行,主干道每次放行60s,支干道每次放行50s,在每次有亮绿灯变成红灯的转换过程中,要求亮5s的黄灯作为过渡。

    3、 十字路口要有数字显示,作为时间提示,以便人们更直观地把握时间。具体要求主、支干道通行时间及黄灯的时间均以秒作为单位,采用倒计时的方式显示。

    4、 画出电路原理图。

    5、 进行电路的仿真与调试。设计目的

    1、巩固加深对电子线路的基本知识,提高综合运用专业知识的能力;

    2、培养学生查阅参考文献,独立思考、设计、钻研专业知识相关问题的能力;

    3、通过实际制作安装电子线路,学会单元电路以及整机电路的调试与分析方法;

    4、掌握相关电子线路工程技术规范以及常规电子元器件的性能技术指标;

    5、了解电气图国家标准以及电气制图国家标准,并利用电子multisim正确绘制电路图;

    6、培养严肃认真的工作作风与科学态度,建立严谨的工程技术观念;

    7、培养工程实践能力、创新能力和综合设计能力。倒计数电路设计

    根据主干道与支干道红绿灯交替状况可知:当主干道绿灯亮60s开始计时,支干道亮红灯,当到第0s时,主干道黄灯亮;倒计时5秒,只干道亦亮红灯,再主干道为红灯,此时从50s开始计时,支干道绿灯亮。当倒计时末第0秒时,只干道亮黄灯5秒。如此循环往复,整个倒计时器完成。

    由此可知,倒计数器的时钟脉冲应为秒脉冲,控制倒计数器开始工作和停止工作的都是主控制器。由于是由灯亮控制相应倒计时器,根据百度所查加减计数器元件中我们可以用74LS190、74LS191、74LS193、CD4518等集成元件实现倒计数的设计,亦可利用所学74LS161外加非门做成十进制减计数器,而由74LS190N是十进制可逆计数器,考虑到元件连接的简单性,我采用74LS190设计倒计数器。控制电路与显示电路模块仿真

    主干道黄灯倒计时模块仿真如图

    主干道红灯倒计时模块仿真如图

    主干道绿灯倒计时模块仿真如图

    系统总述系统由三大部分组成分别为:主控制器、倒计数器、显示管译码器。整个系统内含有一个开关控制总体电路的工作,开关闭合后输入信号通过脉冲发生器变成秒脉冲,然后秒脉冲输入到倒计数器,变成周期为5秒的脉冲,并且每个周期里只有一个下降沿和一个上升沿,使主控制器工作以便控制指示灯的工作和显示管译码器的工作。接入倒计时器的秒脉冲起到计时的作用,每次来一个脉冲倒计时器就变化一下(即为递减一次)耗时一秒。然后把倒计时的信号通过显示管译码器译码输入到显示管内显现出来,以通知路人红灯离转换到绿灯还需要多长时间。在交通灯的变换过程中,绿灯变成红灯时中间有个过渡时期即绿灯停止计时后黄灯亮五秒秒钟后红灯才亮,中间穿插黄灯这个时间内是为了提醒路人过斑马线的赶快走过十字路口,没有过斑马线的就在斑马线前停一会,等下次绿灯亮时再过十字路口。

    交通灯是城市交通监管系统的重要组成部分,对于保证机动车辆的安全运行,维持城市道路的顺畅起到了重要的作用。随着车辆的日益增多,交通问题将日趋严重。可通过多修建道路或 车辆的办法来解决,但道路的增加是有限的,而限制撤了会使汽车及其相关产业受到压制。目前,发达国家的交通主要是向智能化交通方向发展。交通灯是管理城市交通的重要工具,交通灯对道路交通流的影响近年来引起广大学者的广泛注意。目前绝大部分交通灯其时间都是设定好的,不管是车流高峰还是低谷,红绿灯的时间都固定不变,还有一些交通灯能根据简单划分的时间段来调整时间,但控制起来都不是很灵活,这使得城市车流的调节不能达到最优。

    本论文在电子线路仿真的基础上,结合实际,采用模拟逻辑的测试方法,对整个道路的交通现状进行简单的统计。经过模拟仿真得出整个系统的都可以实现预定的功能,具有一定的实用性。

    展开全文
  • 用红、绿、黄三色发光二极管作信号灯。主干道为东西向,有红、绿、黄三个灯;支干道为南北向,也有红、绿、黄三个灯。红灯亮禁止通行;绿灯亮允许通行;黄灯亮则给行驶中的车辆有时间停靠到禁行线之外。 2).由于...
  • 交通信号灯控制器

    2012-01-12 10:11:08
    交通信号灯控制器 传的是一个文件夹 内含电路图以及设计报告等 电路图是用老师要求的用multisim2001做的 华北电力大学电子技术课程设计用 有兴趣可以参考一下
  • 设计一个十字路口交通信号灯控制器,其要求如下: 1.满足如4.1顺序工作流程。 中设南北方向的红、黄、绿灯分别为NSR、NSY、NSG,东西方向的红、 黄、绿灯分别为EWR、EWY、EWG。 它们的工作方式,有些必须是并行...
  • 自从交通灯诞生以来,其内部的电路控制系统就不断的被改进。设计方法也开始多种多样,从而使交通灯显得更加智能化。 可编程控制器(PLC)以微处理器为核心,普遍采用依据继电接触器控制系统电气原理编制的梯形语言...
  • 1)本系统管理在东西南北方向行驶的的车辆通过十字路口,在十字路口正中,面对各方向悬挂红绿黄三色信号灯及表示禁止(或允许)通过时间的数码显示牌。2)使用基本数字集成电路设计,没有用单片机。3)附有Max+Plus2...
  • 0 引言随着自动化控制技术和微电子技术的迅猛发展,PLC作为前沿的工业控制器,具有体积小、可靠性高、易操作、灵活性强、抗干扰能力强等一系列...交通灯控制工艺:南北、东西向的十字路口,均设有红、黄、绿三只信号
  • 硬件设计系统 (末尾附文件) 原理: 仿真 时钟电路模块 时钟电路模块 时钟电路由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。时钟电路用于产生单片机工作所需的时钟信号,而时序所研究的是指令执行中各...

    硬件设计系统

    (末尾附文件)

    原理图:

    在这里插入图片描述
    仿真图
    在这里插入图片描述
    时钟电路模块
    时钟电路模块
    时钟电路由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。时钟电路用于产生单片机工作所需的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地工作。其电路如图3.4所示:
    在这里插入图片描述

    图3.4 时钟电路模块

    3.2.2复位电路模块
    电容在上接高电平,电阻在下接地,中间为RST。这种复位电路为高电平复位。其工作原理是:通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程度,即为低电平,单片机开始正常工作。其电路如图3.5所示:

    在这里插入图片描述
    图3.5 复位电路模块

    道口交通灯指示采用红、黄、绿发光二极管进行提示。其图如图3.7所示:

    在这里插入图片描述
    当R=1000欧时,按公式A=(5-1.8)/R计算,电路中的电流大小应为A=3.2mA。由于每个路口的通行双向指示处理相同,因此每个端口应具有6.4mA的吸收电流能力。

    时间显示电路模块
    考虑设计需要,我们在各个方向分别用二位数码管用来显示倒计时时间,构成交通提示信息,形象逼真。本系统使用数码管完成倒计时显示功能。以方向东西为为例,数码管显示的数值从绿灯的设置时间最大值往下减,每秒钟减1,一直减到0。然后又从红灯的设置时间最大值往下减,一直减到0。接下来又显示绿灯时间,如此循环。
    系统共有4个二位的LED 数码管,分别放置在模拟交通灯上方。
    道口通行剩余时间采用红色7段数码管显示,采用共阴数码管,如用单片机P0口加上拉电阻驱动,P3.0/P3.1来控制数码管的位。其显示电路如图3.8所示:
    在这里插入图片描述
    系统电源模块电路
    由于该系统中 51 单片机及二极管工作电压均为 5V 电压,所以要保证系统稳定可靠的工作,需要设计一个可以稳定提供 5V 电压的供电系统。本设计采用外置3节5号电池作为系统的供电电源,该系统电源电路设计如图3.9所示:
    在这里插入图片描述
    按键输入模块
    由于该系统具有夜间模式,紧急模式和交通灯倒计时时间设定功能,所有需要加上这些功能键,如下图3.10所示:

    在这里插入图片描述
    夜间模式:按下夜间模式按键进入,四方向红灯长亮,再次按下按键退出。
    紧急模式:按下紧急模式按键进入,四方向黄灯闪烁,再次按下按键退出。
    设定倒计时时间:按下设定键后,进入设定状态,先设定南北方向,再次按下按键设定东西方向,设定好后,按下按键退出,正常运行。

    部分代码

    #include<reg51.h>
    #include<intrins.h>	   //包含库文件
    sbit smg1=P3^0;		   //定义南北方向数码管低位
    sbit smg2=P3^1;		   //定义南北方向数码管高位
    sbit smg3=P3^2;		   //定义东西方向数码管低位
    sbit smg4=P3^3;		   //定义东西方向数码管高位
    sbit N_green=P2^0;	   //定义北向绿灯端口
    sbit N_red=P2^1;	   //定义北向红灯端口
    sbit N_yellow=P2^2;	   //定义北向黄灯端口	   
    
    sbit S_green=P2^7;	   //定义南向绿灯端口
    sbit S_red=P2^6;	   //定义南向红灯端口
    sbit S_yellow=P2^5;	   //定义南向黄灯端口
    
    sbit W_green=P1^0;	   //定义西向绿灯端口
    sbit W_red=P1^1;	   //定义西向红灯端口
    sbit W_yellow=P1^2;	   //定义西向黄灯端口   
    
    sbit E_green=P1^7;	   //定义东向绿灯端口
    sbit E_red=P1^6;	   //定义东向红灯端口
    sbit E_yellow=P1^5;	   //定义东向黄灯端口
    
    sbit k0=P3^4;		   //定义复位按键
    sbit k1=P3^5;		   //定义夜间模式按键
    sbit k2=P3^6;		   //定义紧急模式按键
    sbit menu=P3^7;		   //定义设定时间按键
    sbit zj=P1^3;		   //定义时间加按键
    sbit jx=P1^4;		   //定义时间键按键
    
    int kkk=0,fk=0;
    int djs22,js1=0,djs21,flgaa,nbdjs=20,dxdjs=20;	//以上为临时变量
    int js=0,djs=20,djs1=20;                        //初始倒计时时间
    int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};	  //共阴极数码管段值
    /************以下为函数声明*************/
    void jtd();
    void jtda();
    void jtdb();
    void djsxs();
    void yj();
    void jj();
    void jtday();
    void jtdby();
    
    /*****************************************************/
    /*             函数名:delayms				    	 */
    /*           功能:产生毫秒级延时					 */
    /*****************************************************/
    void delayms(int x)
    {
    char i;
    while(x--)
     {
      for(i=150;i>0;i--); 
     }
    }
    /*****************************************************/
    /*             函数名:Timer0_init()			 	 */
    /*             功能:定时器0初始化					 */
    /*****************************************************/
    void Timer0_init()
    {
          js=0;
    	  TMOD=0x01;	  	//定义定时器0工作模式	
          TH0=0x4c;			//赋初值高位
    	  TL0=0x00;			//赋初值低位
          TR0=1;			//启动定时器
    	  ET0=1;			//开中断
    	  EA=1;				//开全局中断
    }
    /*****************************************************/
    /*        函数名:timer0() interrupt 1 using 1	     */
    /*             功能:定时器0中断服务函数    		 */
    

    链接:https://pan.baidu.com/s/1ONKFb_h68vU5-QjCyGJMZw
    提取码:zro6

    展开全文
  • Java实现的信号灯

    2019-12-02 23:01:58
    设计实现一个简单的交通信号灯模型,如 2-1 所示。要求当定时时间到 的时候,该逻辑电路即发出一个信号给交通灯,交通灯模型则根据当前 状态下的信号进行信号颜色切换(当前是绿灯信号,则变为黄灯亮;若 当前是...
  • 第五次按“设置键”时,系统退出设置状态,回到交通信号灯状态,并且东西向先通行,南北向后通行 软件设计:采用Keil C开发环境与语言 1)软件模块:根据上述工作流程和设计要求,软件设计可以分为以下几个功能...
  • ­­­­­­­­­­­­­­­一、设计内容 利用8253定时器、8255等接口,设计电路,模拟十字路口交通灯控制。二、设计原理及方案2.1 8255A的内部结构及引脚功能8255A的内部结构8255A的内部结构如1所示,它由...
  •   当前,大量的信号灯电路正向着数字化、小功率、多样化、方便人、车、路三者关系的协调,多值化方向发展随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门...
  • 主要内容有交通灯模拟系统设计方案,主要功能,各功能模块的介绍,电路设计,硬件部分设计,软件部分设计,模拟系统的仿真调试,设计方法以及课程设计的心得体会等等。 该设计中用光二极管来模拟信号灯,紧急车的...
  • 呼吸 呼吸:我们将通过脉宽调制技术来实现“呼吸”,实现LED的亮度由最暗...实现原理:如上所示,脉冲信号的周期为T,高电平脉冲宽度为t,占空比为t/T。为了实现PWM脉宽调制,我们需要保持周期T不变,调整...
  • (8)简单信号处理电路设计 (9)音箱分频器设计 (10)有源RC滤波器应用 • 报告标题,作者姓名,班级,学号 • 对于题目的简要描述 • 方案和电路原理的描述,理论分析和计算  报告要求 国家电工电子教学基地...
  •  中9个单元电路分别为交通灯控制器JTDKZ:根据主、支干道传感器信号SM、SB以及来自时基发生电路的时钟信号CLK,发出主、支干道指示的控制信号,同时向各定时单元、显示控制单元发出使能控制信号EN45、EN25、EN...
  • 单片机控制交通灯说明书

    千次阅读 2009-01-04 21:57:00
    单片机控制交通灯说明书一、设计思路 如何使主干道通车时间 ,可任意设置;...怎样采用倒计时的方式,用两位十进制数字显示红、绿、黄色信号灯的倒计时时间。二、电路图 二、 使用材料1、单片机89c51 
  •  中9个单元电路分别为交通灯控制器JTDKZ:根据主、支干道传感器信号SM、SB以及来自时基发生电路的时钟信号CLK,发出主、支干道指示的控制信号,同时向各定时单元、显示控制单元发出使能控制信号EN45、EN25、EN...
  • 交通信号灯用于道路平面交叉路口,通过对车辆、行人发出行进或停止的指令,使人与人、车与车之间尽可能减少相互干扰,从而提高路口的通行能力,保障路口畅通和安全。本文介绍了一种城市十字路口交通信号灯控制系统。...
  • 在许多领域中计时器均得到普遍应用,诸如在体育比赛,定时报警器、游戏中的倒计时,交通信号灯、红绿灯、行人灯、交通信号控制机、还可以用来做为各种药丸,药片,胶囊在指定时间提醒用药等等,由此可见计时器在现代...
  • 电子设计.doc

    2019-05-28 11:58:28
    0201、声光触摸控制延时照明灯电路 0202、电压电阻转换模块 0203、电子电路百科全书 0204、电子电路大全 0205、电子设计开关电路 0206、MSP430F149开发板常用经典例程资料 0207、MSP430449系列16位超低功耗单片机...
  • 城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。,然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,如何...
  • 掌握Proteus软件的使用方法,学习利用静态内存芯片扩展系统存储器的电路设计方法,理解奇偶地址、数据总线高字节、低字节和奇偶内存芯片的对应关系; 学会在Proteus软件环境中绘制系统的连线,并且掌握内存映射到...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

交通信号灯电路设计图