单片机交通灯控制系统

一、实验目的

掌握单片机的综合应用设计。

二、实验仪器、材料

Keil软件、proteus软件

三、实验内容及要求

完成以下任务:十字路口的交通灯控制系统,四组灯对应十字路口的四个方向,用两位的数码管显示剩余的时间。

四、实验原理

五、实验过程及原始记录(包括原理图程序代码)

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar shuzi[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  
//p0控制LED灯是否亮
sbit ew_red=P0^0;        //东西红灯,低电平亮
sbit ew_yellow=P0^1;   
sbit ew_green=P0^2;
sbit sn_red=P0^3;
sbit sn_yellow=P0^4;
sbit sn_green=P0^5;
//p2口控制段码
sbit P2_0=P2^0;  
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7; 
//控制数码管位码
sbit P1_0=P1^0; 
sbit P1_1=P1^1;	//p1_0,p1_1控制东西灯位码
sbit P1_2=P1^2; 
sbit P1_3=P1^3;	//p1_2,p1_3控制南北灯位码
//按键控制
sbit P3_3=P3^3; //南北通行按键
sbit P3_4=P3^4; //全部禁止按键
//定义变量
int s=0,n=0;

void time(void) interrupt 1 //中断,产生1s
{
     TH0=(65536-50000)/256;		//0.05s=50ms
	 TL0=(65536-50000)%256;
	 n++;
	 if(n==20)	//设置频率,即倒计时速率
	 {n=0;
	 s++;}
	 if(s==60)	 //设置交通灯循环一次的时间
	 s=0;
}

void ew_allow()		   //东西绿灯,南北红灯
{
	 ew_red=1;
	 ew_yellow=1;
	 ew_green=0;  //低电平亮
	 sn_red=0;
	 sn_yellow=1;
	 sn_green=1;
}
void ew_wait()		   //东西黄灯,南北红灯
{
	 ew_red=1;
	 ew_yellow=0;
	 ew_green=1;
	 sn_red=0;
	 sn_yellow=1;
	 sn_green=1;
}
void sn_allow()		   //东西红灯,南北绿灯
{
	 ew_red=0;
	 ew_yellow=1;
	 ew_green=1;
	 sn_red=1;
	 sn_yellow=1;
	 sn_green=0;
}
void sn_wait()			//东西红灯,南北黄灯
{
	 ew_red=0;  //低电平亮
	 ew_yellow=1;
	 ew_green=1;
	 sn_red=1;
	 sn_yellow=0;
	 sn_green=1;
}

void delay()
{	 int i;
     int j;
	 for(i=0;i<100;i++)
	    for(j=0;j<10;j++);
}
void chushi()			 //P1初始化
{
	 P1_0=0;
	 P1_1=0;
	 P1_2=0;
	 P1_3=0;
}
   
void jinzhi()			 //按下禁止按钮后四个方向都禁止(都为红灯),且时间显示为99
{
     chushi();
     P2=shuzi[9]; 
     P1_0=1;
     P1_2=1; 
	 delay();
	 chushi();
     P1_1=1;  
     P1_3=1;
	 ew_red=0;
	 ew_yellow=1;
	 ew_green=1;
	 sn_red=0;
	 sn_yellow=1;
	 sn_green=1;
	 delay();
}

void display_led()		  //LED灯显示
{
	 if(s<=27)	 //东西方向与南北方向时间间隔3s(即黄灯时间)
	 ew_allow();  //东西绿灯,南北红灯
	 else if(s<=30)   
	 ew_wait();		   //东西黄灯,南北红灯
	 else if(s<=57)	   //3s
	 sn_allow();	 //东西红灯,南北绿灯
	 else if(s<=60) 
	 sn_wait();
	 else
	  jinzhi();
}
void display_shuzi1()	   //绿灯以及黄灯的倒计时显示
{
    if(s<=27)
	{
	   chushi();
	   P2=shuzi[(27-s)/10];  
	   P1_1=0;
	   P1_0=1;
	   delay();
	   chushi();
	   P2=shuzi[(27-s)%10]; 
	   P1_1=1; //个位
	   P1_0=0; //十位
	   delay();
	 }
	 else if(s<=30)
	{
	   chushi();
	   P2=shuzi[(30-s)/10];
	   P1_1=0;
	   P1_0=1;
	   delay();
	   chushi();
	   P2=shuzi[(30-s)%10];
	   P1_1=1;
	   P1_0=0;
	   delay();
	 }
	 else if(s<=57)
	{
	   chushi();
	   P2=shuzi[(57-s)/10];
	   P1_3=0;
	   P1_2=1;
	   delay();
	   chushi();
	   P2=shuzi[(57-s)%10];
	   P1_3=1;
	   P1_2=0;
	   delay();
	 }
	 else if(s<=60)
	{
	   chushi();
	   P2=shuzi[(60-s)/10];
	   P1_3=0;
	   P1_2=1;
	   delay();
	   chushi();
	   P2=shuzi[(60-s)%10];
	   P1_3=1;
	   P1_2=0;
	   delay();
	 }
	 else
	   jinzhi();
}

void display_shuzi2()		//红灯的倒计时显示
{ 
	  if(s<=30)
	  {
	   chushi();
	   P2=shuzi[(30-s)/10];
	   P1_3=0;	  //个位
	   P1_2=1;	 //十位
	   chushi();
	   P2=shuzi[(30-s)%10];
	   P1_3=1;
	   P1_2=0;
	   delay();
	  }	   
	  else if(s<=60)
	  {
	   chushi();
	   P2=shuzi[(60-s)/10];
	   P1_1=0;
	   P1_0=1;
	   delay();
	   chushi();
	   P2=shuzi[(60-s)%10];
	   P1_1=1;
	   P1_0=0;
	   delay();
	 }
	 else
	  jinzhi();
}

void display_shuzi3()
{
	if(s<=60)
	{
	  chushi();
	  P2=0;
 	  delay();
	  chushi();
	  P2=0;
	  delay();
	}
	if(s==61)
	jinzhi();
}
  
void panduan()			       	//按键的判断
{
	  if(P3_3==0)				//按下时切换到南北绿灯刚亮起的时间段
	  s=31;
	  if(P3_4==0)				//按下时实现全部禁止(按下南北通行解除禁止)
	  s=61;
}

void main()
{
     TMOD=0x01;
	 TH0=(65536-50000)/256;	  //高8位
	 TL0=(65536-50000)%256;	  //低8位
	 EA=1;
	 ET0=1;
	 TR0=1;
	 while(1)
	 {		  
		  display_led();	 
		  display_shuzi1();
		  display_shuzi2();
		  display_shuzi3();
		  panduan();
	 }
}     

六、实验结果及分析(程序仿真分析)

 

微机原理及接口技术课程设计交通灯 序言 十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。在交通灯的通行与禁止时间控制显示中,通常要么东西、南北两方向各50秒;要么根据交通规律,东西方向60秒,南北方向40秒,时间控制都是固定的。交通灯的时间控制显示,以固定时间值预先“固化”在单片机中,每次只是以一定周期交替变化。但是,实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受认为因素的影响。采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。它不顾当前道路上交通车辆数的实际情况变化,其最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞,导致城市交通效率的下降。 目前,有一种使用“模糊控制”技术控制交通灯的方法。能够根据十字路口两个方向上车辆动态状况,自动判断红绿灯时间间隔,以保证最大车流量,减少道口的交通堵塞。但是却不像定时控制,能用数字显示器显示当前灯色剩余时间,以便于驾驶员随时掌握自己的驾驶动作,及
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值