基于51单片机汽车智能灯光控制系统设计

基于51单片机汽车智能灯光控制系统仿真设计

(protues仿真+程序+原理图+PCB+设计说明书)

仿真图proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:C0049

硬件构成:
51单片机
LCD1602液晶
光敏电阻
超声波
ADC0832
LED灯

功能介绍

1.按键说明:从左边第一个起,减键、加键、设置键。单独一个控制为复位按键。

2.LCD1602液晶第一行显示超声波的距离,第二行显示光线的强弱。

3.可以设定超声波和光敏的下限值,并具有掉电保存功能,数据保存在STC单片机的内部。

4.用光敏传感器测光线亮度,低于设置值时自动开启灯光。

5.用超声波测距离,低于设置值时自动将远光灯变成近光灯,大于设置值时又会自动变换成远光。

硬件设计

根据本次设计的要求,设计出一款基于51单片机的自动切换远近光灯的设计。所以本次设计硬件部分,中央处理器采用了STC89C52RC单片机,另外使用两个灯珠代表远近光灯,感光部分采用了光敏电阻,因为光敏电阻输出的是电压模拟信号,单片机不能直接处理模拟信号,所以经过ADC0832进行转化成数字信号,还有显示部分采用了LCD1602液晶,还增加按键部分电路,可以选择手自动切换远近光灯,最后还是用了超声模块进行检测距离。

img

imgimg

仿真图

imgimgimg

原理图

img

源程序:

img

显示函数

void display()	//显示函数
 {
   if(state==0)	   //如果是非设置状态
   {
	   LCD1602_write(0,0x80); //第一行
	   LCD1602_writebyte("distance:"); //显示距离
	   if(S>99) LCD1602_write(1,0x30+S/100%10);
	   else LCD1602_writebyte(" ");
	   if(S>9) LCD1602_write(1,0x30+S/10%10);
	   else LCD1602_writebyte(" ");
	   LCD1602_write(1,0x30+S%10);
	   LCD1602_writebyte("cm   ");
	
	   LCD1602_write(0,0xC0);		//第二行
	   LCD1602_writebyte("light:");	 //显示光照强度
	   if(light>99) LCD1602_write(1,0x30+light/100%10);
	   else LCD1602_writebyte(" ");
	   if(light>9) LCD1602_write(1,0x30+light/10%10);
	   else LCD1602_writebyte(" ");
	   LCD1602_write(1,0x30+light%10);
	   LCD1602_writebyte("%        ");
   }
   else	  //设置状态
   {
   	   LCD1602_write(0,0x80);  //第一行
	   LCD1602_writebyte("dis_set:");  //设置距离
	   if(state==1&&s0)	LCD1602_writebyte("   ");	//闪烁效果
	   else
	   {
		   if(S_set>99) LCD1602_write(1,0x30+S_set/100%10);
		   else LCD1602_writebyte(" ");
		   if(S_set>9) LCD1602_write(1,0x30+S_set/10%10);
		   else LCD1602_writebyte(" ");
		   LCD1602_write(1,0x30+S_set%10);
	   }
	   LCD1602_writebyte("cm   ");
	
	   LCD1602_write(0,0xC0);	
	   LCD1602_writebyte("lig_set:"); //设置光照
	   if(state==2&&s0)	LCD1602_writebyte("   ");
	   else
	   {
		   if(light_set>99) LCD1602_write(1,0x30+light_set/100%10);
		   else LCD1602_writebyte(" ");
		   if(light_set>9) LCD1602_write(1,0x30+light_set/10%10);
		   else LCD1602_writebyte(" ");
		   LCD1602_write(1,0x30+light_set%10);
	   }
	   LCD1602_writebyte("%        ");
   }
 }

光照处理

void AD_dispose()	 //光照处理
{
	if(ad_count<10)		//读十次光照数据,取平均值,起到滤波的作用
	{
		ad_dat+=A_D(1);
		ad_count++;
	}
	else
	{
	   light=ad_dat/10;
	   light=(light*100)/255; //最大是255,所以这里扩大100倍除以255,可以得到百分比数据
	   ad_count=0;
	   ad_dat=0;
	}
}

main函数

void main()
 {  
   interrupt_int();	//调用定时器初始化函数
   LCD1602_cls();  //调用1602初始化函数
   read_memory();  //调用读存储
   init_measuring(); //调用超声波相应端口初始化
   while(1)
    {
	  display();  //显示函数
	  if(ir_ok)
	   {
	    ir_ok=0;
		 trigger(); //触发超声波启动
		 
		while(echo==0) //等待回声&&TH0<200
		{
		;	
		}	
		measuring(); //进行距离测量
		init_measuring(); //超声波相应端口初始化
		 
	   }
	   if(memory_flag) //如果存储标志位是1
	   {
	   	memory_flag=0;	//清0,
		memory();	   //执行一次存储函数
	   }
	   if(A_M)	  //如果是自动状态
	   {
	   	led1=0;	   //自动模式指示灯点亮
		led2=1;
		police(); //执行自动处理函数
	   }
	   else	  //否则
	   {
	   	led2=0;	 //手动指示灯点亮
		led1=1;
	   }
	   AD_dispose(); //调用AD处理函数
	   switch(beam)	//根据beam的值,切换远近光灯状态
	   {
	   	case 0:LED_1=1;LED_2=1;break;  //关闭
		case 1:LED_1=1;LED_2=0;break;	//近光
		case 2:LED_1=0;LED_2=1;break;  //远光
	   }
	}
 }

器件清单:

img

设计说明书:

设计背景

随着日益成熟的交通网络的发展,汽车成为了人类出行不可缺少的交通工具。交通事故的频繁发生成为了人们日渐担忧的问题,人们更加关心汽车的安全性能。根据报道的数据显示,我国夜间发生的交通事故中,70%左右是由于违章使用氙气灯造成灯光炫目,使驾驶员无法看清前方路况而发生的。照明系统是汽车主动安全的重要组成部分之一,如今汽车前照灯灯光光型单一的传统照明系统已经无法跟上当前汽车安全性能发展的趋势;所以,为了减少交通事故的发生,考虑到汽车的人性化设计。本文采用 STC89C52 单片机设计了一款自动切换远近光的汽车前照灯系统。这种前照灯系统更加智能化,能消除存在的安全隐患。

目标、研究内容和技术要求

结合所学课程的基础专业知识和基本技能,熟悉单片机机其他硬件的相关知识,完成以下工作:

第一步,查阅资料,选择合适的硬件,确定硬件系统框图

第二步,使用AD画图;

第三步,画图程序流程图,并使用KEIL完成程序的编写。

第四步,调试。

实现功能

1、检测环境光强。

2、实现自动切换远近光灯。

3、增加手动切换远近光。

4、使用液晶显示实时数据

img

设计资料清单

全部资料

img

程序设计完成后写到存储器中,在单片机运行时程序只需从存储器中读取出来运行。用来存放程序的存储器,我们称之为程序存储器(只读存储器),简称ROM。而在单片机运行时,数据将随着程序的运行发生变化,我们将存放数据的存储器称为数据存储器(随机存储器),简称RAM。   单片机的存储器又可分为片内和片外存储器。片内存储器是在单片机内部的存储器,通常容量有限。当单片机程序很大,同时单片机运行时的数据较大,片内存储器容量不够,就需要对单片机扩展外部存储器,这就是片外存储器。   综上所述,51单片机有两种存储器:程序存储器和数据存储器。51单片机同时拥有4个存储空间(物理结构上):片内ROM、片外ROM、片内RAM和片外RAM。图2-1所示为51单片机存储器地址空间,其中使用最频繁的是片内数据存储器,应重点掌握。   程序存储器 程序存储器用于存放用户程序、数据和表格等信息,其存储单元只能读不能写。51单片机程序存储器有16位地址,可寻址的范围为64KB,因此片外程序存储器最大容量为64KB,而片内程序存储器容量为4KB。程序存储器在物理结构上分为片内程序存储器和片外程序存储器两个部分,在逻辑结构上(即用户使用角度)为一个部分,采用同一指令(MOVC指令)进行数据读取,用外部引脚进行区分低4KB空间使用的是片内程序存储器还是片外程序存储器。   对于8031单片机来说,它的内部没有ROM,因此,在实际使用时,必须对它扩展外部程序存储器,最大可扩展空间地址为64KB,此时8031单片机的端必须接地,强制CPU从外部程序存储器读取程序。对于内部有ROM的8051,8751,89C51,89S51等单片机,正常运行时,则需接高电平,使CPU先读内部程序存储器中的程序,当PC值超过内部ROM的容量时,才会转而读外部程序存储器中的程序。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BT-BOX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值