基于51单片机的停车场车位管理系统(程序+仿真+原理图+软件)

基于51单片机的停车场车位管理系

1、主要功能

该系统由:电源模块、传感器模块、显示模块、手动键盘输入模块、车辆车位模拟模块等模块组成。可以实现控制的开启、显示停车场现有车辆数和已停放过车辆数、人工的设置总车位数以及剩余车位数的数值显示等功能。总共拥有16个模拟的停车位,用来显示车辆停放的具体位置。

2、仿真实验

在这里插入图片描述

3、程序代码

在这里插入图片描述

/**
  ************************************* Copyright ****************************** 
  File name: // main.c
  Author:Kevin
  Version: //1.0
  Description: // 基于51单片机的停车场车位管理系统
  Others: // 其它内容的说明
  Log: // 公众号:Kevin的学习站
  ******************************************************************************
 */

#include <reg52.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535
#include <intrins.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;

#include "lcd1602.h"

/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}

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);  
		  }
	}				
}			

/***************主函数*****************/
void main()
{
    init_1602();
    write_string(1,0,"Jin:    Chu:");
    write_string(2,0,"Car:      P:");
	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(0);
	while(1)
	{
		key();					//独立按键程序
	}
}

4、原理图

在这里插入图片描述

5、资源获取

在这里插入图片描述
百度网盘链接:

链接:https://pan.baidu.com/s/1NWg8EdI-6MJoonAWQcVTsg 
提取码:j7b1 
解压密码在公众号:Kevin的学习站,回复:052获取!

项目的仿真和程序工程已经放在下面公众号里面,可以关注公众号:Kevin的学习站,输入关键字:“052”,就可以获取啦!创作不易,但您的点赞、关注、收藏就是对我最大的鼓励!
在这里插入图片描述

设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。编制一程序模拟该停车场的管理。(2) 实现要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。(2) 实现提示:汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(’A’,1,5)表示1号牌照车在5时刻到达,而(’D’,5,20)表示5号牌照车在20时刻离去。整个程序可以在输入信息为(’E’,0,0)时结束。本题可用顺序存储结构和链式存储结构来实现。本人的一个数据结构课程设计(用C++源码实现,供大家学习参考之用,有不妥之处望指正)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin的学习站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值