51单片机项目(3)——基于51单片机的交通灯设计_基于c51单片机的交通灯设计

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

3. 车辆识别与分类:国内研究者利用计算机视觉和机器学习技术进行车辆的实时识别和分类,可以通过交通灯系统实时获取车辆信息,并根据不同类别的车辆需求进行智能优化和调度。

国外研究现状:
        1. 基于无线传感器网络的智能交通灯:国外研究者利用无线传感器网络和通信技术,可以实现车辆和交通灯之间的实时通信和联动,从而实现更高效的交通流调节和优化。

2. 混合智能优化算法:国外研究者将遗传算法、模拟退火算法等智能优化算法应用于交通灯调度,通过优化交通灯的时间配比和相位控制,以实现最佳的交通流畅性和通行效率。

3. 自适应交通灯控制算法:国外研究者提出了多种自适应交通灯控制算法,通过实时数据的获取和处理,可以根据交通流量和车辆需求等动态调整交通灯的时序和配时,以提高交通的效率和安全性。

综上所述,国内外对智能交通灯的研究主要集中在实时交通流量监测、交通流量预测、车辆识别分类、无线传感器网络、智能优化算法和自适应控制算法等方面。这些研究为智能交通灯的设计和优化提供了重要的理论和技术基础,并在实际应用中取得了一定的成果和效益。未来,随着人工智能技术的不断发展和应用,智能交通灯将能够更好地适应和应对不断变化的交通需求和挑战。

3.设计原理

设计思路在代码里面已经讲的很详细了,就不多赘述。直接给出代码:

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;
 //数码管控制端口
sbit LSA=P2^2;       
sbit LSB=P2^1;
sbit LSC=P2^3;
sbit LSD=P2^4;

sbit k2=P3^2;//按键控制
sbit k3=P3^3;



sbit led1=P1^0;//南北 绿 
sbit led2=P1^1;//南北 黄 
sbit led3=P1^2; //南北 红


sbit led4=P1^3;//东西  绿 
sbit led5=P1^4;//东西 黄
sbit led6=P1^5; //东西 红



u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

u8 sum2,sum1=0;
u16 i,j;
u16 js;//计数变量
u8 aa,bb;     //中间变量
u8 nbshi,dxshi,moshi; //时间中间标记
u8 nbshi1,dxshi1,moshi1; //时间中间标记1
u8 huangshi=5;//黄灯时间
u8 nbzlshi=30;    //南北各灯时间 直行    绿灯				
u8 nbzhshi=20;  //南北各灯时间 直行   红灯
		

					
u8 dxzlshi=15;   //东西各灯时间	直行  绿灯			
u8 dxzhshi=35;  //东西各灯时间	直行  红灯


u8 dxhshi,nbhshi;  //南北 东西红灯时间	中间变量

bit INT1_0;	//中断标志								
/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}



/*******************************************************************************
* 函 数 名         : Timer0Init
* 函数功能		   : 定时器0初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer0Init()
{
	TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

	TH0=0XFC;	//给定时器赋初值,定时1ms
	TL0=0X18;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器			
}

void hlhdeng(u8 deng)
{
  switch(deng)
			{
				case 0x00:         //东西直行 绿灯
					if(sum1==0)
          led1=1; // 绿     // 南北 灯         
					led2=1; //黄
					led3=0; //红	
	        if(sum1==0)
          led4=0; // 绿       //东西 灯   
					led5=1; // 黄 
					led6=1; //红
	    
	      
						
				break;
				case 0x01:            //东西直行 黄灯
						if(sum1==0)
					 led1=1; // 绿     // 南北 灯         
					led2=1; //黄
					led3=0; //红	
	        if(sum1==0)
          led4=1; // 绿       //东西 灯   
					led5=0; // 黄 
					led6=1; //红
	    
	      
				break;
				case 0x02:            // 南北 直行 绿
					if(sum1==0)
					led1=0; // 绿     // 南北 灯         
					led2=1; //黄
					led3=1; //红	
	        if(sum1==0)
          led4=1; // 绿       //东西 灯   
					led5=1; // 黄 
					led6=0; //红
				break;
					case 0x03:            // 南北 直行 黄
						if(sum1==0)
					led1=1; // 绿     // 南北 灯         
					led2=0; //黄
					led3=1; //红	
	         if(sum1==0)
          led4=1; // 绿       //东西 灯   
					led5=1; // 黄 
					led6=0; //红
				break;
			
			}
}
/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能		   : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/

void smg(u8 nbshi,u8 dxshi)
{
	 LSA=1; LSB=1;LSC=0; LSD=1;  
	       
		aa=nbshi/10;
		P0=smgduan[aa];         //显示南北方向时间的十位
		delay(50);
	 LSA=1; LSB=1;LSC=1; LSD=0; 
	            
		bb=nbshi%10;
		P0=smgduan[bb];          //显示南北方向时间的个位
		delay(50);
		
	   LSA=0; LSB=1;LSC=1; LSD=1; 
		aa=dxshi/10;
		P0=smgduan[aa];            //显示东西方向时间的十位
		delay(50);
	
	    LSA=1; LSB=0;LSC=1; LSD=1;               
		bb=dxshi%10;
		P0=smgduan[bb];            //显示东西方向时间的个位
		delay(50);

}

void nbzh(u8 nbshi,u8 dxshi,u8 moshi)      //南北直行 黄
{
	hlhdeng(moshi);   //4种

  smg(nbshi,dxshi); //南北 东西 

}
/*******************************************************************************
* 函 数 名         : Int1Init()
* 函数功能		   : 设置外部中断1
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Int0Init()
{
	//设置INT0
	IT0=1;//跳变沿出发方式(下降沿)
	EX0=1;//打开INT0的中断允许。	
	EA=1;//打开总中断	
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	Timer0Init();//定时器中断初始化
	 Int0Init(); // 外部中断0初始化
  
	nbshi=nbzhshi;  //南北红灯时间
	dxshi=dxzlshi;  //东西 绿灯  
	while(1)
	{
			
     
	   if(INT1_0==0)           //非夜间模式 正常运行
      {  
	     	nbzh(nbshi,dxshi,moshi);			   	
	   	js++;
	   	if(js>=200)
	   	{
	   		js=0;
	   		if(moshi==0 && dxshi<5)	//东西直行 绿灯
                { 
                 sum1=1;
	             led4=!led4;
                }
	   	  if(moshi==2 && nbshi<5)	//南北 绿
               { 
                 sum1=1;
	   		 led1=!led1; 
               }
	   	
	      }
	   }
      else                    //夜间模式 黄灯常量
      {  
         led1=1;
         led2=!led2;
         led3=1;
         
         led4=1;
         led5=!led5;
         led6=1;
         moshi=0;    //模式重新归为0
         j=0;
         
          LSA=1; LSB=1;LSC=1; LSD=1; //数码管灭
         delay(50000);     //延时500ms
      }
	}					
}


/*******************************************************************************
* 函 数 名         : void Timer0() interrupt 1
* 函数功能		   : 定时器0中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer0() interrupt 1
{
	

	TH0=0XFC;	//给定时器赋初值,定时1ms
	TL0=0X18;
			
				i++;
			if(i==1000)                       //1s进入一次
			{
				 i=0;	    
								if(moshi==0)	//东西直行 绿灯
								{


**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/f3c83b033ae901c1980665d4cd6531f7.png)
![img](https://img-blog.csdnimg.cn/img_convert/9a5542727f534ac643c5b267e7fcc7d1.png)

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
[外链图片转存中...(img-NmJV9GNx-1715673769334)]
[外链图片转存中...(img-28g5vzsF-1715673769334)]

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值