基于51单片机的超声波红外检测停车场管理车位系统proteus仿真程序设计

硬件设计

(末尾附文件)

仿真图1
基于超声波的车位检测系统 三个超声波检测三个车位,LCD显示剩余的车位,具有LED指示;:
在这里插入图片描述
在这里插入图片描述
仿真图2:
基于红外对管的车位检测系统,两个按键模拟红外对管,LCD显示剩余的车位,具有LED指示,车辆超出后蜂鸣器报警提示;
在这里插入图片描述
在这里插入图片描述

程序设计

软件设计是设计中很重要的部分。它关系到一个系统能否实现其预定的要求。

主程序设计
主程序是软件设计的总体框架,因此主程序的流程图的设计决定了程序编写的好坏,该主程序的功能是扫描键盘,作出逻辑判断,控制各种中断,数据送入显示模块。其流程图如图所示。
在这里插入图片描述
在判断车辆是否进出中:本系统使用了两个传感器,一个用来检测出去的车,一个检测进来的车。当两个传感器同时检测到车的时候,说明进出的是车辆。当一个传感器检测到车辆时,开门。当两个传感器都检测到时,通过逻辑判断,剩余车位数进行加减。
增加键
在此程序中,剩余车位不超过最大车位数.流程图如图所示:
在这里插入图片描述

主程序
#include <reg52.h>	          //调用单片机头文件
#define uchar unsigned char   //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	  //无符号整型 宏定义	变量范围0~65535
#include <intrins.h>
#include "lcd1602.h"
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit beep = P1^7;   //蜂鸣器IO口定义
sbit SH = P3^5;
sbit ST = P3^6;
sbit DS = P3^7;
uchar num_jin;
uchar num_chu;
uchar num_car;
//1ms延时函数
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}
//74HC595函数
void write_74hc595(unsigned int num)
{
	int i;	
	ST = 0;
	for(i=0; i<16; i++)
	{
		SH = 0;
		if (num & 0x0001)   {DS = 1;}
		Else               {DS = 0;}
		SH = 1;
		num >>= 1;
	}
	ST = 1;
}
unsigned int num_2_led(unsigned int num)
{
	int i;
	unsigned int ret=0;
	if (num > 16) 
	    return 0xFFFF;
	for(i=0;i<num;i++)
	{
		ret |= 1<<i;
	}
	return ret;
}
//独立按键程序
void key()	   
{
	if(!K1)	       //  汽车进入(模拟传感器的监测)
	{
		delay_1ms(20);
		if(!K1)
		{
            while(!K1);
			if(num_car==16)	 { beep=0; 	delay_1ms(200);  beep=1;}
            if(num_car<16)	 { num_car++;  if(num_jin<=255) { num_jin++;}  }
			write_sfm2(1,4,num_jin); 
			write_sfm2(1,12,num_chu);  
			write_sfm2(2,4,num_car); 
		    write_sfm2(2,12,16-num_car);  
			write_74hc595(num_2_led(num_car));
		  }
	}	
	if(!K2)	       //   汽车驶出(模拟传感器的监测)
	{
		delay_1ms(20);
		if(!K2)
		  {
            while(!K2);
            if(num_car>=1) {	num_car--;  if(num_chu<=255) { num_chu++;}  }	
		    write_sfm2(1,4,num_jin); 
			write_sfm2(1,12,num_chu);  
			write_sfm2(2,4,num_car); 
		    write_sfm2(2,12,16-num_car);  
			write_74hc595(num_2_led(num_car));
		  }
	}	
	if(!K3)	       //  人工调节    手动修改小区内停车位
	{
		delay_1ms(20);
		if(!K3)
		{
           while(!K3);
 		   if(num_car<16)	 { num_car++; }
		   write_sfm2(1,4,num_jin); 
		   write_sfm2(1,12,num_chu);  
		   write_sfm2(2,4,num_car); 
		   write_sfm2(2,12,16-num_car);  
		 }
	}	
	if(!K4)	       //   人工调节   手动修改小区内停车位
	{
		delay_1ms(20);
		if(!K4)
		 {
            while(!K4);
            if(num_car>=1) {	num_car--;  }	
		    write_sfm2(1,4,num_jin); 
			write_sfm2(1,12,num_chu);  
			write_sfm2(2,4,num_car); 
		    write_sfm2(2,12,16-num_car);  
		  }
	}				
}			

.
文件仅供参考、

链接:https://pan.baidu.com/s/1ztS96VCr8BqJqfTh0-xGSA
提取码:9mk3

.