基于51单片机红外避障车辆高速汽车测速仪表设计
1 系统功能介绍
本设计题目为 基于 51 单片机的红外避障车辆高速汽车测速仪表设计。系统以 STC89C52 单片机 为核心控制器,结合 红外避障传感器、LCD1602 液晶、蜂鸣器及电源模块,实现了一个简易的人体反应测试与测速系统。设计思想来源于物理学中的速度测量原理,即通过已知的两点之间的固定距离以及经过该距离所消耗的时间,进而计算出瞬时速度。
整个系统主要功能如下:
-
测速功能
系统采用 两路红外避障传感器。当被测试对象经过第一个红外传感器时,系统记录起始时间;当对象经过第二个红外传感器时,系统记录结束时间。结合两传感器之间的固定间距(默认 1 米),系统实时计算速度并在 LCD1602 液晶 上显示。 -
提示功能
为了确保被测人员或被测车辆明确知道测试已开始,当第一个红外避障传感器检测到遮挡时,蜂鸣器会鸣叫一声作为提示音。 -
数据显示功能
LCD1602 液晶模块可实时显示测速结果,包括测速值以及提示信息,方便使用者查看。 -
人机交互功能
测试过程中无需额外操作,系统自动检测与计算,使用便捷,功能直观。
通过该系统,能够实现一个低成本、稳定可靠的简易测速测试仪表,既可用于人体反应测试,也可应用于小车测速等教学实验中。
2 系统电路设计
系统硬件电路主要由以下几个部分组成:单片机核心电路、红外避障传感器电路、LCD1602 液晶显示电路、蜂鸣器电路、电源电路。以下逐一介绍各部分设计原理与功能。
2.1 STC89C52 单片机核心电路
本设计采用 STC89C52RC 单片机 作为控制核心,它是基于 8051 内核的 8 位单片机,具有以下特点:
- 片内拥有 8KB Flash 程序存储器,足以容纳测速程序;
- 提供丰富的 I/O 端口,可直接连接红外传感器、液晶显示与蜂鸣器;
- 内置定时器/计数器,能够进行高精度时间测量,这是测速的关键环节;
- 工作电压范围宽,兼容常见 +5V 电源系统。
单片机在系统中主要负责 传感器数据采集、时间计算、速度运算、数据显示与蜂鸣器提示。
2.2 红外避障传感器电路
测速部分的关键在于 两个红外避障传感器。其基本工作原理如下:
- 红外发射管持续发射红外光;
- 当被测物体经过传感器前方时,遮挡红外光,导致光敏三极管输出电平变化;
- 单片机检测到该电平变化,从而判定目标经过传感器的时刻。
设计中使用两个红外传感器,布置在直线通道上,间距固定为 1 米:
- 第一个红外传感器:当检测到物体时,单片机立即记录起始时间,并触发蜂鸣器响一声作为提示。
- 第二个红外传感器:当检测到物体时,单片机记录结束时间,并计算两次时间差。
通过时间差和已知的距离,系统可计算速度:
v=st v = \frac{s}{t} v=ts
其中,s=1 ms = 1 \, \text{m}s=1m,ttt 为起始与结束的时间差,单位为秒。
2.3 LCD1602 液晶显示电路
LCD1602 液晶是本系统的人机交互接口,主要功能是 实时显示测速结果。其特点:
- 一次可显示两行,每行 16 个字符;
- 通过 4 位或 8 位并行方式与单片机通信;
- 显示速度直观,刷新快,适合实时数据显示。
在本设计中,LCD 用于显示以下内容:
- 欢迎界面或提示信息;
- 实际测速结果,单位为 m/s。
2.4 蜂鸣器电路
蜂鸣器用于在检测到被测物体经过 第一个传感器 时鸣叫一声,提示用户测试已开始。
- 采用有源蜂鸣器,由单片机直接输出高低电平驱动;
- 工作电压 5V,驱动简单;
- 与 LCD1602、传感器等模块形成良好的交互效果。
2.5 电源电路
系统整体由 +5V 电源供电,电源部分应保证稳定性:
- 使用常见的 7805 稳压芯片或 USB 5V 电源输入;
- 适当增加电解电容与陶瓷电容滤波,确保传感器与单片机工作稳定。
3 程序设计
程序是整个测速系统的核心。系统采用 C 语言编写,并基于 Keil 编译环境,通过 STC-ISP 下载到单片机。程序设计包括:主程序、传感器检测程序、定时器计时程序、速度计算程序、LCD 显示程序、蜂鸣器程序 等。
3.1 主程序框架
#include <reg52.h>
#include "lcd1602.h"
#include "delay.h"sbit IR1 = P1^0; // 第一个红外传感器
sbit IR2 = P1^1; // 第二个红外传感器
sbit BEEP = P2^5; // 蜂鸣器unsigned int start_time = 0;
unsigned int end_time = 0;
unsigned int speed = 0;
bit flag = 0;void main()
{LCD_Init();LCD_ShowString(0,0,"Speed Measure");LCD_ShowString(1,0,"Wait...");Timer0_Init();while(1){if(IR1 == 0 && flag == 0) // 第一个红外触发{start_time = TH0*256 + TL0;LCD_ShowString(1,0,"Start!");BEEP = 0; delay_ms(200); BEEP = 1;flag = 1;}if(IR2 == 0 && flag == 1) // 第二个红外触发{end_time = TH0*256 + TL0;speed = 1000 / ((end_time - start_time) / 12); // 距离=1m,12MHz时钟换算LCD_ShowNum(1,0,speed,4);LCD_ShowString(1,5,"cm/s");flag = 0;}}
}
3.2 定时器初始化程序
void Timer0_Init(void)
{TMOD |= 0x01; // 定时器0,方式1TH0 = 0;TL0 = 0;TR0 = 1; // 启动定时器
}
3.3 延时程序
void delay_ms(unsigned int ms)
{unsigned int i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);
}
3.4 LCD 显示程序(部分示例)
void LCD_ShowString(unsigned char x, unsigned char y, char *str)
{LCD_SetCursor(x,y);while(*str != '\0'){LCD_WriteData(*str);str++;}
}
3.5 蜂鸣器控制
蜂鸣器的控制非常简单,输出低电平即响,高电平关闭:
void Beep_Once(void)
{BEEP = 0;delay_ms(200);BEEP = 1;
}
4 总结
本设计基于 STC89C52 单片机,利用 红外避障传感器、LCD1602 液晶与蜂鸣器 构建了一个简易的 人体反应测速系统。系统以 定时器计时法为核心算法,结合两个红外传感器的检测,实现了 已知距离下的速度计算。
设计的主要特点包括:
- 硬件电路简单,仅需单片机、红外传感器、液晶与蜂鸣器;
- 测速方法直观,通过两点定距法实现速度测量,物理意义明确;
- 数据显示直观,LCD1602 清晰显示测速结果;
- 提示功能完善,蜂鸣器在测试开始时给出提示音;
- 应用场景广泛,可用于小车测速、人体反应测试、教学实验。
本系统具有 低成本、易实现、稳定性好 的优点,为单片机教学与实验性研究提供了一个良好的实例。