【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
相关推荐
萧技电创EIIA3 小时前
基于stc12单片机的PID恒温烙铁设计
单片机·嵌入式硬件·pid过程控制
光子物联单片机4 小时前
STM32G474单片机开发入门(八)内部FLASH详解及读写实战
stm32·单片机·嵌入式硬件·mcu
BreezeJuvenile4 小时前
通用定时器_输入捕获介绍及案例实操
stm32·单片机·嵌入式硬件·输入捕获·通用定时器
时空自由民.5 小时前
无人机系统耗电,低功耗管理问题解决方法(chatgpt)
单片机·嵌入式硬件·无人机
时空自由民.5 小时前
无人机系统耗电,低功耗管理问题解决方法(腾讯元宝)
单片机·嵌入式硬件·无人机
清风6666666 小时前
基于单片机的双档输出数字直流电压源设计
单片机·mongodb·毕业设计·nosql·课程设计
牛马大师兄7 小时前
STM32独立看门狗IWDG与窗口看门狗WWDG知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·嵌入式·看门狗
夜月yeyue7 小时前
STM32 Flash 访问加速器详解(ART Accelerator)
linux·单片机·嵌入式硬件·uboot·bootloard
国科安芯11 小时前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全
充哥单片机设计11 小时前
【STM32项目开源】基于STM32的智能厨房火灾燃气监控
stm32·单片机·嵌入式硬件