1 基于51单片机停车场车位引导系统设计
1.1 功能概述
随着城市车辆数量的增加,停车难的问题愈加突出。停车场车位引导系统可以通过对车位状态的实时检测与显示,为驾驶员提供直观的停车信息,提升停车效率。本设计基于STC89C52单片机,结合红外对管传感器、LCD1602液晶显示屏、LED指示灯以及电源电路,实现了一个小型停车场车位引导系统的原型。
系统功能如下:
- 通过红外对管模块实时检测车位是否被占用,车位共设置为1车位、2车位、3车位三个。
- LCD1602液晶屏实时显示车位状态信息,包括每个车位是否占用、已占用车位数和剩余空车位数。
- 当红外对管检测到遮挡时,表示对应车位有车辆停放。
- 每个车位设有独立的状态指示灯,红灯表示车位已占用,绿灯表示车位空闲。
该系统结构简单、功能完整,既能实现对停车位的直观监控,也可作为智能停车场管理系统的基础模块进行扩展。
2 系统电路设计
2.1 单片机最小系统电路
本系统选用STC89C52单片机作为核心控制单元。STC89C52为兼容8051内核的单片机,具有较强的IO资源,适合多车位监测与显示控制。
STC89C52负责对红外对管信号采集、LCD显示控制、LED状态灯控制,是整个系统的“大脑”。
2.2 红外对管传感器电路
红外对管模块是检测车位是否被占用的关键部件。其基本原理为:红外发射管持续发射红外光,接收管接收反射光。当有车辆停入车位时,红外光被遮挡或反射信号发生变化,模块输出相应电平信号。
- 安装方式:每个车位对应一个红外对管模块。
- 接口方式:模块输出端直接接入单片机的GPIO口,例如P1.0、P1.1、P1.2,分别对应三个车位。
- 信号特性:输出为数字信号,低电平表示检测到遮挡(车位被占用),高电平表示未遮挡(车位空闲)。
通过该模块,系统能够实时判断每个车位的状态。
2.3 LCD1602液晶显示电路
LCD1602用于实时显示车位占用信息。
- 显示内容:
- 第一行显示各个车位的状态,例如:
S1:O S2:F S3:F,其中“O”代表占用,F代表空闲。 - 第二行显示统计信息,例如:
Used:1 Free:2。
- 第一行显示各个车位的状态,例如:
- 接口方式:LCD1602采用并行接口方式与单片机连接,使用P2口进行数据传输,P3口部分引脚作为控制信号。
- 电源需求:LCD供电电压为5V,电位器用于调节对比度。
该模块为用户提供直观的车位状态信息,方便驾驶员快速了解停车情况。
2.4 LED指示灯电路
为了让驾驶员在停车时快速找到车位,每个车位配备一个LED状态灯。
- 指示逻辑:
- 红灯亮:车位已占用。
- 绿灯亮:车位空闲。
- 电路连接:LED通过限流电阻与单片机IO口相连,例如车位1对应P1.4、车位2对应P1.5、车位3对应P1.6。
LED指示灯为驾驶员提供更直观的现场停车引导。
2.5 电源电路
系统统一采用5V电源,提供给单片机、传感器、LCD及LED使用。电源输入端增加电解电容与瓷片电容用于滤波,以保证电路稳定运行。
3 程序设计
程序设计是系统实现的核心,主要分为以下几个模块:主程序、红外检测模块、LCD显示模块、LED控制模块。
3.1 主程序设计
主程序负责系统的整体调度,包括车位检测、LCD显示与LED控制。
#include <reg52.h>
#include "lcd1602.h"
sbit IR1 = P1^0;
sbit IR2 = P1^1;
sbit IR3 = P1^2;
sbit LED1 = P1^4;
sbit LED2 = P1^5;
sbit LED3 = P1^6;
unsigned char used = 0, free = 0;
void main() {
LCD_Init();
while(1) {
unsigned char s1, s2, s3;
// 获取红外传感器状态
s1 = (IR1 == 0) ? 1 : 0; // 1=占用
s2 = (IR2 == 0) ? 1 : 0;
s3 = (IR3 == 0) ? 1 : 0;
used = s1 + s2 + s3;
free = 3 - used;
// LED控制
LED1 = s1 ? 1 : 0; // 占用时红灯亮
LED2 = s2 ? 1 : 0;
LED3 = s3 ? 1 : 0;
// LCD显示
LCD_ShowString(0,0,"S1:");
LCD_ShowChar(3,0,s1?'O':'F');
LCD_ShowString(6,0,"S2:");
LCD_ShowChar(9,0,s2?'O':'F');
LCD_ShowString(12,0,"S3:");
LCD_ShowChar(15,0,s3?'O':'F');
LCD_ShowString(0,1,"Used:");
LCD_ShowNum(5,1,used,1);
LCD_ShowString(8,1,"Free:");
LCD_ShowNum(13,1,free,1);
Delay_ms(500);
}
}
3.2 红外检测程序
红外检测模块通过采集IO口电平实现车位占用判断。
unsigned char Check_IR(sbit sensor) {
if(sensor == 0) return 1; // 被遮挡,车位占用
else return 0; // 未遮挡,车位空闲
}
3.3 LCD显示程序
LCD驱动函数用于显示车位状态与统计信息。
void LCD_ShowStatus(unsigned char s1, unsigned char s2, unsigned char s3, unsigned char used, unsigned char free) {
LCD_ShowString(0,0,"S1:");
LCD_ShowChar(3,0,s1?'O':'F');
LCD_ShowString(6,0,"S2:");
LCD_ShowChar(9,0,s2?'O':'F');
LCD_ShowString(12,0,"S3:");
LCD_ShowChar(15,0,s3?'O':'F');
LCD_ShowString(0,1,"Used:");
LCD_ShowNum(5,1,used,1);
LCD_ShowString(8,1,"Free:");
LCD_ShowNum(13,1,free,1);
}
3.4 LED控制程序
LED灯根据车位状态点亮红灯或绿灯。
void LED_Control(unsigned char s1, unsigned char s2, unsigned char s3) {
LED1 = s1 ? 1 : 0;
LED2 = s2 ? 1 : 0;
LED3 = s3 ? 1 : 0;
}
4 总结
本设计基于STC89C52单片机,结合红外对管传感器、LCD1602显示模块和LED指示灯,构建了一个三车位停车场车位引导系统。系统能够实时检测车位是否被占用,并通过LCD与LED为驾驶员提供直观的车位信息,解决了停车引导效率低的问题。其电路设计合理,程序逻辑清晰,具有较高的实用价值和扩展潜力,可作为智能停车场系统开发的重要参考方案。
171