【51单片机】【protues仿真】基于51单片机汽车智能灯光控制系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示超声波的距离,光线的强弱

2、按键​设定超声波和光敏的下限值,并具有掉电保存功能

3、光敏传感器测光线亮度,低于设置值时自动开启灯光

4、超声波测距离,自动切换远光灯和近光灯

二、使用步骤

基于51单片机的汽车智能灯光控制系统通过光敏检测、超声波测距和模式切换实现自动/手动控制。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、超声波传感器

4、LED灯模块

5、数模传感器模块

6、LCD1602显示模块

四、软件设计

#include <reg52.h>

#include "LCD1602.H"

#include "eeprom52.H"

#include "adc0832.H"

uint time=0;

int S=0; //测量距离

sbit echo=P2^3; //超声波接口定义

sbit trig=P2^4;

bit ir_ok=0; //定时测量标志位

sbit led1=P1^4;

sbit led2=P1^6; //手动自动LED指示灯灯接口定义

sbit LED_1=P2^0;

sbit LED_2=P2^1; //远近光灯接口定义

sbit key1=P3^2; //设置

sbit key2=P3^3; //增加

sbit key3=P3^4; //减小

sbit key4=P3^5; //手动/自动

sbit key5=P3^6; //远光 //近光

sbit key6=P3^7; //手动关灯

bit key1_flag=0;

bit key2_flag=0;

bit key3_flag=0;

bit key4_flag=0;

bit key5_flag=0;

bit key6_flag=0; //按键标志位

uchar sec1=0,sec2=0,ms=0; //sec1、sec2按键长按标志位,ms定时自加变量

uchar light_set=50,S_set=30,state; //光照设置值,距离设置值,设置变量

bit s0; //液晶闪烁效果标志位

bit memory_flag=0; //存储标志位

uchar light=0,ad_count; //光照值,滤波用累加变量

uint ad_dat=0; //ad数据

uchar beam;//0关闭 1近光 2远光

bit A_M=0;//0手动

uchar count; //中断累加变量

long int distance; //测量所得距离

void memory() //存储函数

{

SectorErase(0x2000); //清扇区

byte_write(0x2000,S_set/256);

byte_write(0x2001,S_set%256); //往扇区存设置距离

byte_write(0x2002,light_set); //往扇区存设置光强

}

void read_memory() //读存储函数

{

S_set=byte_read(0x2000)*256+byte_read(0x2001); //将存的数据读出来

light_set=byte_read(0x2002); //

if(S_set>400||light_set>100||S_set==0||light_set==0) //判断数据不正常,重新赋值

{

S_set=30;

light_set=50;

}

}

void trigger() //测量启动函数

{

trig=0;

nop(); //空语句,用来占用时间

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

nop();

trig=1;

}

void delayt(uint x) //延时函数

{

uchar j;

while(x-- > 0)

{

for(j = 0;j < 125;j++)

{

;

}

}

}

void init_measuring()

{

trig=1;

echo=1;

count=0;

}

void measuring() //启动测距信号

{

uchar l;

uint h,y;

TR0 = 1;

while(echo==1)

{

;

}

TR0 = 0;

l = TL0;

h = TH0;

y = (h << 8) + l;

y = y - 0xfc66;//us部分

distance = y + 1000 * count;//计算总时间,单位是微秒

TL0 = 0x66;

TH0 = 0xfc;

delayt(30);

S = 3453* distance / 200000;//原始为:(0.34毫米/us)*时间/2//

}

void interrupt_int() //定时器初始化

{

TMOD=0x11; //定时器0,定时器1都用模式1

TH0=0x00;

TL0=0x00; //定时器0赋初值0

ET0=1; //使能定时器0

TR0=0; //先不打开定时器0

TH1=0x3c;

TL1=0xb0; //定时器1赋值50ms

ET1=1;

TR1=1; //打开定时器1

EA=1; //打开总中断

}

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();

switch(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; //远光

}

}

}

五、实验现象

演示视频:

相关推荐
电子科技圈10 小时前
芯科科技第三代无线SoC现已全面供货
嵌入式硬件·mcu·物联网·网络安全·智能家居·智能硬件·iot
zm10 小时前
数据结构整理
单片机·嵌入式硬件
爱吃汽的小橘11 小时前
异步串口通信和逻辑分析仪
运维·服务器·网络·单片机·嵌入式硬件·fpga开发
m0_5557629011 小时前
伺服滑差补偿方案
单片机
用户61204149221311 小时前
C语言做的物联网设备数据采集模拟器
c语言·后端·敏捷开发
猫头虎11 小时前
HAMi 2.7.0 发布:全面拓展异构芯片支持,优化GPU资源调度与智能管理
嵌入式硬件·算法·prompt·aigc·embedding·gpu算力·ai-native
.ZGR.11 小时前
C语言:数组的增删查改2.0
c语言·开发语言
沐欣工作室_lvyiyi12 小时前
基于单片机的智能家居窗帘控制系统设计(论文+源码)
单片机·嵌入式硬件·毕业设计·智能家居·智能窗帘
R-G-B12 小时前
【18】C实战篇——C语言 文件读写【fputc、fgetc、fputs、fgets】
c语言·c语言文件读写·fputc·fgetc·fputs·fgets