51单片机停车场车位管理系统仿真设计(仿真+程序+报告+讲解视频)
仿真版本:proteus 7.8
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0007
✨1 基本功能:
芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
1、按键模拟红外检测统计进出停车场车辆数量情况。
2、LED灯组模拟停车场车位停车情况,每停一辆车亮一盏灯。
3、LCD1602显示停车场车辆累计驶入数目,现停车辆数目,累计驶出车辆数目,现存停车位数目。
4、设有停满蜂鸣器报警,车位停满即报警,设有人工调整驶入驶出数目信息功能。
✨2 仿真图:
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后LCD1602显示当前的停车场的累计驶入驶出车流量,正在停车和剩余停车位数量,LED灯模拟停车位置,灯亮表示位置上有车辆停放。
✨3 程序设计:
main函数代码
部分代码
#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;
uchar beep_flag;
#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(num_car==16&&beep_flag){
beep=1;// { beep=0; delay_1ms(200); beep=1;}
delay_1ms(200);
beep = 0;
delay_1ms(200);
beep_flag = 0;
}else{
beep = 0;
}
if(!K1) // 汽车进入
{
delay_1ms(20);
if(!K1)
{
while(!K1)
;
if(num_car<16) { num_car++; if(num_jin<=255) { num_jin++;} }
write_sfm2(1,4,num_jin); //LCD1602显示驶入车
write_sfm2(1,12,num_chu); //LCD1602显示驶出车
write_sfm2(2,4,num_car); //LCD1602显示当前车位
write_sfm2(2,12,16-num_car); //LCD1602显示剩余车位
write_74hc595(num_2_led(num_car));
if(num_car==16)beep_flag=1;//蜂鸣器标志位置1
}
}
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);
write_74hc595(num_2_led(num_car));
if(num_car==16)beep_flag=1;//蜂鸣器标志位置1
}
}
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);
write_74hc595(num_2_led(num_car));
}
}
}
/***************主函数*****************/
void main()
{
beep = 0;
beep_flag = 0;
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 资料清单(提供资料清单所有文件):
0.常见使用问题及解决方法–必读!!!!
1.程序源码
2.仿真
-
功能要求
-
开题报告
5.设计报告
6.硬件框图
7、讲解视频
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找更多51 STM32单片机课程毕业设计.url