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

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

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

1.51单片机交通灯的课题意义

51单片机交通灯的课题意义

交通灯是城市道路交通中的重要组成部分,它通过不同颜色的信号指示车辆和行人的通行状态,提高交通流畅性和交通安全性。在现代社会,随着车辆数量的不断增加和交通流量的日益复杂化,设计和控制一套高效可靠的交通灯系统成为一个重要的课题。基于51单片机的交通灯课题具有以下重要意义:

1.交通安全性:交通灯作为道路交通管理的重要工具之一,可以通过精确的控制来保障交通的安全性。通过51单片机技术,我们可以实现对交通灯颜色和时间的精确控制,以确保交通流量的合理分配和道路的通行安全。

2.交通流畅性:合理的交通灯控制可以优化交通流畅性,减少车辆拥堵和行人等待时间。通过对交通流量的实时监测和处理,51单片机可以根据道路情况动态调整交通灯信号,确保交通的高效运行。

3.资源利用效率:交通灯的合理控制可以减少能源的浪费和交通设施的磨损。通过51单片机的精确控制,可以根据实际需求调整交通灯的亮灭时间,避免不必要的能源消耗,延长交通设备的使用寿命。

4.科技创新:基于51单片机技术的交通灯设计和控制是现代科技的创新应用之一。通过这个课题,学生可以掌握51单片机的编程和电路设计技巧,培养创新思维和实践能力,为未来的科技领域打下坚实的基础。

总之,基于51单片机的交通灯课题在提高交通安全性、优化交通流畅性、节约资源和促进科技创新等方面具有重要意义。同时,这个课题还可以培养学生的实践能力和创新意识,为他们未来的发展奠定坚实的基础。

2.智能交通灯的国内外研究现状

智能交通灯是应用人工智能技术的一种交通信号灯系统,可以根据交通流量、道路情况和车辆需求等信息进行智能调节和优化,以提高交通流畅性和交通安全性。以下是智能交通灯在国内外的研究现状:

国内研究现状:
        1. 实时交通流量监测:国内研究者通过传感器、摄像头等技术获取实时交通流量信息,例如通过车辆轨迹追踪,边缘计算和图像处理等技术,实现智能交通灯的实时交通流量监测,并根据监测结果进行优化调整。

2. 基于深度学习的交通流量预测:国内研究者利用深度学习算法,通过历史数据和实时数据的训练,可以准确地预测交通流量的变化趋势,进而实现智能交通灯的动态调节和优化。

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                    //夜间模式 黄灯常量
      {  


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

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

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

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

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

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

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

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

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值