【TB作品】atmega16 超声波倒车雷达,ATMEGA16单片机,Proteus仿真

ATmega16超声波倒车雷达设计课程报告

1. 项目背景

随着汽车数量的增加,停车场景变得更加复杂,尤其是在狭窄的空间内停车时,司机往往难以判断车尾与障碍物之间的距离。超声波倒车雷达通过超声波传感器检测障碍物距离,并通过蜂鸣器和显示屏提示司机,有效地提高了倒车的安全性。本项目使用ATmega16单片机实现一个简单的超声波倒车雷达系统,通过超声波测距传感器获取距离数据,并在LCD显示屏上显示距离,同时通过蜂鸣器提示距离的远近。

2. 系统概述

2.1 系统组成

  1. ATmega16单片机:核心控制器,负责超声波测距、数据处理和显示控制。
  2. 超声波传感器:用于发射和接收超声波信号,测量障碍物距离。
  3. LCD1602显示屏:显示障碍物距离信息。
  4. 蜂鸣器:根据距离的远近发出不同频率的报警声,提示司机。

2.2 系统原理

  1. 超声波测距:超声波传感器通过发射超声波并接收反射波,计算超声波往返时间,从而得到障碍物的距离。
  2. 数据处理:ATmega16单片机通过计时器记录超声波信号的往返时间,并根据公式计算距离。
  3. 显示与报警:距离数据通过LCD1602显示屏实时显示,同时根据距离的远近通过蜂鸣器发出不同频率的报警声。

3. 硬件设计

3.1 硬件连接

  1. 超声波传感器

    • TRIG(触发端)连接到ATmega16的PB1,用于发射超声波。
    • ECHO(回波端)连接到ATmega16的PB0,用于接收反射回来的超声波信号。
  2. LCD1602显示屏

    • 数据端口和控制端口连接到单片机的PORTD,用于显示距离信息。
  3. 蜂鸣器

    • 连接到ATmega16的PD0,用于发出报警声。

3.2 硬件配置

  1. I/O口配置

    • 将PB1配置为输出模式,用于触发超声波发射。
    • 将PB0配置为输入模式,用于接收超声波反射信号。
    • 将PORTD配置为输出模式,用于驱动LCD显示屏和蜂鸣器。
  2. 定时器配置

    • 使用定时器0进行计时,记录超声波信号的往返时间。

4. 软件设计

4.1 功能模块

  1. 初始化模块:初始化LCD显示屏、超声波传感器及定时器。
  2. 测距模块:通过超声波传感器测量障碍物距离。
  3. 显示模块:在LCD1602显示屏上实时显示障碍物距离。
  4. 报警模块:根据距离的远近,通过蜂鸣器发出不同频率的报警声。

4.2 主要函数

  1. delay_ms():毫秒级延时函数,用于实现延时操作。
  2. delay_10us():微秒级延时函数,用于超声波触发信号。
  3. dispaly():显示距离信息到LCD1602显示屏上。
  4. timer0_ovf():定时器0溢出中断服务函数,用于记录计时器溢出次数。
  5. main():主函数,初始化系统并实现主控制流程。

4.3 系统流程

  1. 系统初始化:初始化LCD显示屏、超声波传感器及定时器,并显示初始信息。
  2. 距离测量:通过触发超声波传感器,测量障碍物距离,并计算距离值。
  3. 显示距离:将计算的距离值显示在LCD1602显示屏上。
  4. 报警控制:根据距离的远近,通过蜂鸣器发出不同频率的报警声。

5. 详细实现

5.1 延时函数

实现毫秒级和微秒级延时,用于控制超声波触发信号和系统延时:

c 复制代码
void delay_ms(int time) {
    int i;
    for (; time > 0; time--)
        for (i = 0; i < 1000; i++)
            ;
}

void delay_10us(void) {
    int i;
    for (i = 0; i < 500; i++)
        ;
}

5.2 显示函数

将距离值显示在LCD1602显示屏上:

c 复制代码
void dispaly(void) {
    unsigned char cnt;
    LCD_write_str(0, 0, "Distance:");
    cnt = 0;
    xianshi[cnt++] = distance % 100000 / 10000 + '0';
    xianshi[cnt++] = distance % 10000 / 1000 + '0';
    xianshi[cnt++] = distance % 1000 / 100 + '0';
    xianshi[cnt++] = distance % 100 / 10 + '0';
    xianshi[cnt++] = distance % 10 + '0';
    xianshi[cnt++] = 'c';
    xianshi[cnt++] = 'm';
    xianshi[cnt++] = 0;
    LCD_write_str(4, 1, xianshi);
}

5.3 定时器中断服务函数

记录定时器溢出次数,用于计算超声波信号的往返时间:

c 复制代码
#pragma interrupt_handler timer0_ovf:10
void timer0_ovf(void) {
    sr4_time_cnt++;
    if (sr4_time_cnt == 1000)
        sr4_time_cnt = 0;
}

5.4 主函数

初始化系统,测量距离并控制显示和报警:

c 复制代码
void main(void) {

    while (1) {
        delay_ms(10);
        sys_t++;
        if (sys_t == 20) {
            sys_t = 0;
            sr4_time_cnt = 0; // 中断溢出次数
            sr4_time = 0; // 时间
            TCNT0 = 0; // 给定时器赋初值
            PORTB |= 0x02; // PB1输出高电平 trig
            delay_10us(); // 延时10us
            PORTB &= (~0x02); // PB1输出低电平 trig
            while ((PINB & 0x01) == 0); // PB0 echo==0的时候一直停在这里等
            TCCR0 = 0x01; // 配置定时器工作普通模式
            while (PINB & 0x01); // PB0 echo==1的时候一直停在这里等
            TCCR0 = 0x00; // 配置定时器 不工作
            sr4_time = 255 * sr4_time_cnt + TCNT0; // 往返时间 单位us
            distance = sr4_time * 0.0173 + 1; // 计算距离 单位cm
            dispaly();

            if (distance < 200) {
                prio = distance / 20; // prio就是档次 每20cm是一个档次
            }
        }
        if (distance < 200) {
            sys_tt++;
            if (sys_tt > prio) { // prio越小 声音就越急促
                sys_tt = 0;
                PORTD &= ~0X01; // 打开蜂鸣器
                delay_ms(10);
                PORTD |= 0X01; // 关闭蜂鸣器
            }
        } else {
            PORTD |= 0X01; // 打开蜂鸣器
        }
    }
}

6. 总结

通过本项目的设计与实现,学习者可以深入理解超声波测距的原理和应用,掌握ATmega16单片机的硬件配置及编

资源

复制代码
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2
相关推荐
笨笨饿1 天前
#58_万能函数的构造方法:ReLU函数
数据结构·人工智能·stm32·单片机·硬件工程·学习方法
FreakStudio1 天前
无硬件学LVGL:基于Web模拟器+MiroPython速通GUI开发—布局与空间管理篇
python·单片机·嵌入式·面向对象·并行计算·电子diy
三品吉他手会点灯1 天前
STM32F103 学习笔记-21-串口通信(第4节)—串口发送和接收代码讲解(中)
笔记·stm32·单片机·嵌入式硬件·学习
项目題供诗1 天前
STM32-LED闪烁&LED流水灯&蜂鸣器(四)
stm32·单片机·嵌入式硬件
xiangw@GZ1 天前
EMC原理:四大抗扰度测试原理
单片机·嵌入式硬件
I_Am_Zou1 天前
STM32实战系列|智能摄像头巡检系统完整演示:第一讲
stm32·单片机·嵌入式硬件
发发就是发1 天前
USB系统架构概述:从一次诡异的枚举失败说起
驱动开发·单片机·嵌入式硬件·算法·fpga开发
发发就是发1 天前
TTY子系统与线路规程:那个让我深夜抓狂的串口“丢包”问题
linux·服务器·驱动开发·单片机·嵌入式硬件
终将超越过去2 天前
ASRPRO使用
单片机·物联网
玩转单片机与嵌入式2 天前
一个成熟的嵌入式AI系统,是长什么样子的?
人工智能·单片机·嵌入式硬件·嵌入式ai