基于51单片机的十字路口交通红绿灯控制系统仿真原理图方案设计

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

硬件设计系统

原理图:

在这里插入图片描述
仿真图
在这里插入图片描述
时钟电路模块
时钟电路模块
时钟电路由一个晶体振荡器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中断服务函数    		 */

  • 36
    点赞
  • 272
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值