当前位置: 首页 > news >正文

【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;  //远光
       }
    }
 }

五、实验现象

演示视频:

http://www.dtcms.com/a/445508.html

相关文章:

  • Redis 有序集合解析
  • 用 C++ 快速搭建 WebSocket 服务及踩坑记录
  • 清华大学AI领导力AI时代领导力AI变革领导力培训师培训讲师专家唐兴通讲授数字化转型人工智能组织创新实践领导力国央企国有企业金融运营商制造业
  • pink老师html5+css3day04
  • 网站系统报价方案模板下载维普网论文收录查询
  • 【C++ STL栈和队列下】deque(双端队列) 优先级队列的模拟实现与仿函数的介绍
  • Linux-> TCP 编程1
  • [人工智能-综述-18]:AI重构千行百业的技术架构
  • gps定位网站建设梧州自助建站seo
  • [论文阅读] AI+教学 | 编程入门课的AI助手革命?ChatGPT的4大核心影响全解析
  • 设计模式学习(五)装饰者模式、桥接模式、外观模式
  • 邵阳网站建设上科互联百度网站如何建设
  • 使用Yocto构建qemu上的Linux系统
  • Scade One 图形建模 - 选择算符模型
  • 【Java SE 异常】原理、处理与实践详解​
  • CPP学习之哈希表
  • Java “并发工具类”面试清单(含超通俗生活案例与深度理解)
  • 2025 AI伦理治理破局:从制度设计到实践落地的探索
  • 力扣1984. 学生分数的最小差值
  • Android studio -kt构建一个app
  • 4.数据类型
  • Spring Boot SSE 流式输出,智能体的实时响应
  • Linux系统性能监控—sar命令
  • PostgreSQL备份不是复制文件?物理vs逻辑咋选?误删还能精准恢复到1分钟前?
  • 网站开发主管招聘wordpress 手机悬浮
  • 描述逻辑对人工智能自然语言处理中深层语义分析的影响与启示
  • 首屏加载耗时从5秒优化到1秒内:弱网与低端安卓机下的前端优化秘笈
  • 【新版】Elasticsearch 8.15.2 完整安装流程(Linux国内镜像提速版)
  • LeetCode 分类刷题:74. 搜索二维矩阵
  • 网站建设项目职责memcache安装wordpress