基于51单片机汽车自动照明灯超声波光敏远近光灯设计
1、系统功能介绍
-
系统构成:
- 本设计由STC89C52单片机+光照检测电路(光敏电阻)+超声波HC-SR04模块电路+4位高亮白色LED灯+黄绿LED指示灯电路+拨动开关电路+电源电路组成。
-
系统功能:
- 1、通过光敏电阻模块检测光照强度,正常情况下,白天灯不亮,晚上的时候开启远光灯,且光照阈值可以通过传感器上的电位器调节。
- 2、产品有自动模式和手动模式两种模式,模式通过拨动开关选择,具有模式指示灯。
- 3、自动模式:通过超声波模块检测距离,如果距离小于30cm,那么远光灯转化为近光灯,超过30cm,近光灯转化为远光灯。
- 4、手动模式,通过两个按键切换远近光灯。
-
可根据本篇文章完成毕业设计的开题报告、任务书、设计等
2、资料下载
- 资料下载链接:https://download.csdn.net/download/qq_39020934/85081256
- 更多设计视频:https://space.bilibili.com/3537120073353692
3、系统电路介绍
3.1、STC89C52单片机核心系统电路设计
- STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
STC89C52主要特性如下:
- (1)8K字节程序存储空间;
- (2)512字节数据存储空间;
- (3)内带4K字节EEPROM存储空间;
- (4)可直接使用串口下载
单片机最小系统电路图如下图所示
实物图:
3.2、LED信号指示灯电路设计
- LED灯即发光二极管,它是半导体二极管的一种,可以把电能转化成光能。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。在电路中,电阻的作用是限流,保护LED灯。只要单片机的控制引脚拉低,则LED灯亮,否则,LED灯不亮。
电路原理图:
实物图:
3.3、光照检测模块电路设计
- 本系统选择光照传感器模块对光照进行检测。
传感器参数:
- (1)可以检测周围环境的亮度和光强
- (2)灵敏度可调(图中蓝色数字电位器调节)
- (3)工作电压3.3V-5V
- (4)输出形式 a 模拟量电压输出,b 数字开关量输出(0和1)
- (5)电源指示灯(红色)和数字开关量输出指示灯(绿色)
- (6)比较器采用LM393芯片,工作稳定
使用说明:
- (1)光敏电阻模块对环境光强最敏感,一般用来检测周围环境的亮度和光强。
- (2)模块在无光条件或者光强达不到设定阈值时,DO口输出高电平,当外界环境光强超过设定阈值时,模块D0输出低电平;
- (3)小板数字量输出D0可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境的光强改变;
- (4)小板数字量输出DO可以直接驱动本店继电器模块,由此可以组成一个光电开关;
- (5)小板模拟量输出AO可以和AD模块相连,通过AD转换,可以获得环境光强更精准的数值
电路原理图:
实物图:
3.3、HC-SR04超声波避障传感器电路设计
- 本设计选择的超声波模块为HC-SR04 超声波模块,此本模块性能稳定,测度距离精确。可以提供20-400cm的非接触式距离感测功能,测量精度科大3mm,模块包括超声波发射器、超声波接收器和控制电路。能和国外的SRF05,SRF02等超声波测距模块相媲美。模块高精度,盲区(2cm)超近,稳定的测距是此产品成功走向市场的有力根据!
模块接线方式:
- (1) VCC接5V电源
- (2)trig(控制端)接单片机I/O口
- (3)echo(接收端)接单片机I/O口
- (4)GND接地线
电路原理图:
实物图:
4、程序设计
4.1、系统初始化
void SYSInit()
{
Init_Timer0(); //定时器0初始化
Ledy=0; //远光灯
Ledj=0; //近光灯
Leds=0; //手动灯
Ledz=0; //自动灯
DelayMs(100);
Ledy=1; //远光灯
Ledj=1; //近光灯
Leds=1; //手动灯
Ledz=1; //自动灯
}
4.2、超声波计算距离
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void Timer0_isr(void) interrupt 1
{
TH0 = 0x0FC;
TL0 = 0x66;
sysslot++;
if(sysslot%50==0) //定时出发超声波
{
TripFlag=1;
}
if(Val_Edg==1) //第一次检测到高电平 是触发
{
TestCount++; //开始记录高电平数据
Test_Flag=1; //置位
}
if(Test_Flag==1)
{
if(Val_Edg!=1) //开始变为低电平
{
DIS_MM=TestCount*340/2; //MM 计算测量长度测试距离=(高电平时间*声速(340M/S))/2;
Test_Flag=0;
TestCount=0;
}
}
}