摘要

随着汽车的普及程度越来越高,人们对汽车的便捷停车管理提出了新的要求,既要求方便快捷,又要求精准计算停车费。传统的汽车入库计时计费不仅需要耗费大量的人工去计算,还易出现计算错误。因此,设计一款数字化的汽车入库系统具有一定的现实意义。STC89C52作为最为基本的单片机,其结构设计比较基础,在程序方面编码较为简单,所以通过STC89C52来操作的停车收费系统在价格方面具有很大的优势。本设计以该芯片为控制核心,采用射频卡刷卡进行车辆数据的采集,利用按键模块校准当前时间以及设置计费基准。单片机接收到车辆信息数据后,对车辆停车时间进行计费,并根据计费基准计费。通过制作实物进行系统的整体测试,验证了设计的合理性和正确性。

引言

背景和意义

当前,随着国家国力的不断壮大、经济的迅猛增长,汽车销量也在不断地增加。据统计,截至2020年全年中国汽车销量累计超过2500万辆。伴随着城市建设速度的加快,许多住宅小区、事业单位等基本上都配备有停车场。然而,停车场所是有限的,车辆的逐年增多无疑是对社会汽车管理的一大考验,这就导致汽车停放的管理层面面临着较大的压力。
如果按照传统的方式来进行人工收费,就必须有专门的收费人员在停车场进行值班,收费人员不仅要负责对车辆进行收费,还要对停车场进行管理,长此以往容易出现收费错误,耗时又耗力。
停车收费系统作为现代智能技术的发展产物,在汽车管理中起到了不可或缺的重要作用,具有降低人工损耗、自动打开门禁、自动计时计费的功能,大大提高了停车场的运作效率。在单片机领域中,STC89C52单片机的结构较为简单、应用广泛,因此,本文以STC89C52单片机为设计核心,使系统具有制造成本低廉、操作简单、方便快捷等优势。

国外研究现状

目前,国外的停车场管理系统经过多年的发展,大部分都已经开始进入了非常智能的收费阶段,并且大部分配备了具有停车车位引导系统、停车车位查询的系统,使停车场管理系统功能日益丰富。
据了解,美国的智慧停车产业链和生态圈已经在使用“停车诱导”,其核心是用无线传感器实时采集泊位占用信息,同时也提供停车支付服务;在日本,几乎所有的停车场在大街上都有醒目的停车诱导标志,自动显示停车场的空满状态、价格信息等,驾车者可以通过互联网来实时查询当前停车场状态;新加坡人口密度大,基本上都是全自动化停车场,有效缓解了停车位紧张的问题,车主只需要把车子停在入口处,走出电梯开动停车程序,然后输入个人密码,这时,系统就会自动寻找合适的停车位[1]。

设计方案

汽车出入库计时计费系统是以STC89C52单片机为核心,由数据采集、按键输入、液晶显示、蜂鸣器报警以及电机模块组成。数据采集模块包括射频卡FRID-RC522和时钟芯片,用于实时更新当前时间和采集停车入库时间。其中,射频卡的作用是通过刷卡调用当前车辆信息,然后将此信息送入STC89C52单片机中,单片机经过软件编程执行计时计费功能,电机运行,打开门禁。外围电路使用按键来设置相关信息,然后再通过单片机对数据进行处理,在整个过程中通过蜂鸣器报警提示操作是否成功,所涉及到的信息都将在液晶上进行实时显示。

数据采集模块

数据采集模块是以RFID-RC522芯片为核心部件,与DS1302时钟芯片共同完成数据采集功能。RFID技术的工作原理是通过读卡器的芯片寄存器对读卡器进行信息读取的控制。当寄存器发出“读”命令时,接收来自标签芯片发出的产品信息,并将该信号进行解码。该标签的读写可以根据所使用的结构和技术进行,是RFID系统的信息处理和控制中心[2]。时钟芯片全程进行时间信息的更新,将出入场的时间与RC522所采集到的编号信息一同传送到单片机当中进行处理。

C522是高度集成的非接触式读写卡芯片,能够克服接触式读写卡芯片外露、必须与读卡设备接触才可读写数据的弊端,RFID技术的基本工作原理为:标签进入阅读器之后,接收阅读器发出的射频信号,凭借感应电流所获得的能量发送出存储在芯片中的产品信息,或者由标签主动发送某一频率的信号,阅读器读取信息并解码后,送至中央信息系统进行有关数据处理
在本设计中,将RC522的1~4脚接到单片机上进行信号传输,RC522经过第一次刷卡行为之后,将信号通过MISO引脚输出到单片机中进行计时和金额计算;第二次刷卡行为之后,单片机将处理后的信号通过MOSI输入到RC522中。在上述两次刷卡过程中,单片机是主设备,RC522是从设备。
RFID模块使用方便,价格相比于其他射频要便宜得多,读卡距离也比较远。它是采用3.3V电压,只需要通过SPI接口的几条杜邦线就能直接与用户任何CPU主板相连接进行通信,并且在此基础上能够保证模块工作稳定且可靠。

按键输入模块

独立按键键盘是由若干个按键与单片机的I/O口一一对应连接,通过读取单片机I/O的电平状态来确认哪个按键被按下,一般一个独立式按键对应一个功能,可以通过按键的组合来实现多个功能[3]。本模块通过键盘来进行收费标准、时间设置及查询功能的设置。

在单片机应用系统中,键盘是输入数据的主要方式。现在使用的基本上都是独立键盘,每个按键分别与I/O线连接,使CPU能够分别直接读取相应位置的I/O电平状态。按键被按下时,按键两端的电平都为低电平,当系统检测到按键的低电平时,就可认为该按键已经被按下[5]。在进行按键编程时还要注意按键去抖,避免单片机识别错误[6]。本设计采用的是软件消抖,相比于硬件消抖来说要简单许多,只需要在软件编程中加入一定的延时,在前沿抖动消失后再次检测按键的状态是否按下即可。
在本设计中,通过编程使每个键盘有独立的功能:K1键能够对时间进行设置;K2键是进行数字加;K3键是进行数字减;K4键是进行时间和单价的查询。

电机模块

为了模拟实际停车场管理的情况,特别采用步进电机来模拟停车阀门。在本设计中,当刷卡进场和刷卡出场时,步进电机正转一圈后再反转一圈,表示停车阀门的升降。

时钟模块


DS1302包括时钟,日历寄存器,本设计通过DS1302显示当前时间,包括秒、分、时、日期、月份、年份信息。可选择12小时制和24小时制,可设置AM、PM

工作原理

管理者可自行通过按键键盘进行费用标准的更改,当前的停车收费标准为n元/秒。当汽车进入停车场时,从入口刷卡进场,此时射频卡将信号传输给单片机,单片机接收到信号之后,通过液晶显示汽车编号和进场时间信息。汽车成功进入停车场时,单片机会根据已经设置好的费用标准开始在后台进行计费,液晶同步显示当前时间等信息。当汽车准备驶出停车场时,同样也是进行刷卡,射频卡再次将信号传输给单片机,单片机进行费用结算并实时显示在液晶上。

主程序设计

本系统主要完成键盘扫描、液晶显示以及射频卡信息读取、DS1302时间显示等功能,具体的流程图如图4.1.1所示。在系统上电初始化后,先通过刷卡读取卡号信息并发送给单片机,单片机接收到信息后进行计时计费,并启动电机;与此同时,DS1302时钟芯片启动当前时间的计算。最后,通过液晶LCD1602显示停车时间、当前时间以及停车费用

调试及结果

硬件调试

将各个元器件按照原理图进行组装、焊接后进行上电测试。首先查看LCD1602是否能正常显示,接着再检测每个按键输入,能否实现各自的功能,最后检查RC522是否能正常进行刷卡。以上情况都检查好之后,就要开始测试单片机的综合控制能力,如果各个模块都能够跟单片机进行信号传输,则调试成功。反之,则应对每个模块分情况进行调整。

调试结果

上电初始状态


成品通电之后此时射频卡亮灯显示通电正常,同时液晶实时显示当前时间。

时间设置功能


键盘从左至右依次为K1、K2、K3、K4。如图5.2.2所示,当按下最左边的K1按键,液晶显示的时间会进行光标跳动,提示修改位置,图中此时处于修改年份状态。若再继续按K1,光标会依次从年份移动到月份、日期、时、分、秒、星期,分别对这些信息进行修改。当光标移动到星期上之后,再按K1则会退出设置状态。

查询金额


当按下最右边的K4键,能够在时间和停车金额两者之间切换显示

价格设置

若要对停车价格进行设置,其具体操作为:按下K4键,使液晶切换到停车金额显示,如果要增加金额,则按下K2键;反之,按下K3键即可。

刷卡进场


当把IC卡靠近射频卡模块时,液晶显示当前卡片编号和进场时间,同时蜂鸣器报警提醒并伴有发光二极管闪烁,在此过程中,步进电机旋转,模拟抬杆与落杆。

刷卡出场


当第二次刷卡后,液晶显示离场信息和应支付的停车金额,同时蜂鸣器报警提醒并伴随发光二极管闪烁,在此过程中,步进电机旋转,模拟抬杆与落杆。

总结

本文系统地阐述了汽车出入库的计时计费系统从硬件设计到软件设计的过程,在此设计过程中,查阅了大量的参考文献和书籍,对单片机的知识不再局限于书本,而是能够综合运用单片机去进行设计。同时还阅读和编写了大量的代码,不仅软件逻辑能力得到了提高,而且还大大提升了自己的编程能力。
本设计是硬件部分与软件部分相辅相成所得,从最开始的硬件电路整体框架构建,到分模块进行系统的研究,最后到对程序进行编程,花费了大量的时间和精力。在老师和同学的帮助下顺利完成了此次设计,基本实现了对汽车刷卡信息的采集、停车费用的计算、按键控制以及实时液晶显示的功能。
在完成本次设计之后,对后续工作的展望为:
(1)优化软件部分,完善细节;
(2)针对实际生活中汽车出入口不同的情况,拓展算法。

原理图

程序

#include <reg52.h>
#include "delay.h"
#include "buzzer.h"
#include "key_s.h"
#include "lcd1602.h"
#include "ds1302.h"
#include "step_motor1.h"
#include "RC522.h"
#define SEAT_NUM 5//全局变量
u8 refresh=1;//lcd刷新
u8 set=0;//控制参数设置
u8 music=0;//走秒提示音有效位
u8 ICbuf[4]={0};
u8 ICcode[SEAT_NUM][4]={0};
u8 ICtime[SEAT_NUM][3]={0};
u8 park_tatol = SEAT_NUM;//总车位
u8 park_seat = 0;//使用的车位
u8 ID;
u8 ParkTime=0;
u8 price = 1;
u8 Search_IC(u8 *_IC);
u8 Find_hole_InLib(void);
void Dis_ComeIn(void);
void Dis_GoOut(void);
void Dis_SetPrice();
void main(void)
{u8 key=0;
u8 i=0;
u8 setPriceFlag = 0;u8 second_last=60;delay_Init();//延时初始化,常用宏定义声明都在这里LCD_Init();//液晶初始化Ds1302Init();//DS1302初始化Beep(200);//提示初始化完成while(1){key=KeyScan(0);//扫描按键if(key){Beep(100);//提示按键音refresh=1;//有按键操作,刷新界面if(key==4){if(!setPriceFlag)setPriceFlag = 1;else setPriceFlag = 0;                }else if(key==1)setPriceFlag = 0;}else{if(ReadICcode(ICbuf)==0)//读卡{              //Beep(200);ID = Search_IC(ICbuf);if(ID!=0xEE)//找到记录{//计算停车时间ParkTime = RTC[HOUR]*3600+RTC[MIN]*60+RTC[SEC]    -ICtime[ID][2]*3600-ICtime[ID][1]*60-ICtime[ID][0];//清除ID记录for(i=0;i<4;i++){ICcode[ID][i]=0;}park_seat--;//显示出库Dis_GoOut();Beep(800);}else//找不到记录,新注册{ID = Find_hole_InLib();if(ID!=0xEE)//找到空位置{for(i=0;i<4;i++)//保存IC卡号{ICcode[ID][i]=ICbuf[i];}                       //保存注册时间ICtime[ID][0]=RTC[SEC];ICtime[ID][1]=RTC[MIN];ICtime[ID][2]=RTC[HOUR];park_seat++;//显示注册成功Dis_ComeIn();Beep(800);}}}Ds1302ReadTime(RTC);//读取数据乱跳if(second_last!=RTC[SEC])//时间变动,刷新LCD{second_last=RTC[SEC];refresh=1;                }            }}
}//搜索IC记录,如果有记录
//返回值为记录ID号
//如果没有,返回0xEE
u8 Search_IC(u8 *_IC)
{u8 i;for(i=0;i<SEAT_NUM;i++)//查询IC卡记录(从上到下){if((_IC[0]==ICcode[i][0])&&(_IC[1]==ICcode[i][1])&&(_IC[2]==ICcode[i][2])&&(_IC[3]==ICcode[i][3])){return i;}}return 0xEE;
}//在IC卡数据库中查找到一个空位置
//成功返回空位置ID
//失败返回0xEE
u8 Find_hole_InLib(void)
{u8 IC_hole[4]={0};return Search_IC(IC_hole);
}void Dis_ComeIn(void)
{               u8 str[16]={0};u8 i;//LCD_Clear();LCD_GotoXY(0,0);LCD_Print("Welcome ");//"0123456789abcdef"//"IC=0X12 12 12 12"
//  sprintf((char*)str,"IC=%.2X%.2X%.2X%.2X",ICbuf[0],ICbuf[1],ICbuf[2],ICbuf[3]);// LCD_Print("IC=");for(i=0;i<4;i++){LCD_WrNUM(ICbuf[i]>>4);LCD_WrNUM(ICbuf[i]&&0x0F);}
}
void Dis_GoOut(void)
{//ParkTimeu8 i;LCD_GotoXY(0,0);LCD_Print((u8*)"GoodBye ");for(i=0;i<4;i++){LCD_WrNUM(ICbuf[i]>>4);LCD_WrNUM(ICbuf[i]&&0x0F);}//"0123456789abcdef"
//  LCD_Print((u8*)"Sum:12345$");LCD_GotoXY(0,1);LCD_Print("Sum:");ParkTime *= price;//停车时间 X 单价LCD_WrNUM(ParkTime/1000%10);LCD_WrNUM(ParkTime/100%10);LCD_WrNUM(ParkTime/10%10);LCD_WrNUM(ParkTime/1%10);LCD_Print("$          ");
}
void Dis_SetPrice()
{//"0123456789abcdef"
//"   Set  Price   "
//"   01 ($/Sec)   "LCD_GotoXY(0,0);LCD_Print((u8*)"   Set  Price   ");LCD_GotoXY(0,1);LCD_Print((u8*)"   ");LCD_WrNUM(price/10%10);LCD_WrNUM(price/1%10);LCD_Print((u8*)" ($/Sec)   ");
}

汽车出入库的计时计费系统设计相关推荐

  1. 基于MATLAB的汽车出入库计时计费车牌识别系统

    一.课题介绍 随着汽车数量的增加,城市交通状况日益受到人们的重视,如何进行有效的交通管理更是成为了人们关注的焦点.智能交通系统通过车辆检测装置对过往的车辆实施检测,提取有关交通数据,达到监控.管理和指 ...

  2. 基于matlab的汽车出入库计时计费系统的设计

    基于matlab的汽车出入库计时计费系统的设计 压缩包,直接可用 ID:34111641989264158纯粹july

  3. 基于MATLAB的汽车出入库计时计费系统

    如果不考虑做单片机或者硬件方面的题目,那么可以做有关数字图像处理方向的.车牌识别是一个比较老的题目,而且很多关于图像处理的相关教材或者实验书上都会有车牌识别的工程案例.那么如果想要继续做车牌识别的话, ...

  4. nodejs+vue+elementui汽车出入库零配件4S服务管理系统python-java

    汽车4S服务管理系统包括三种用户.管理员.普通员工.客户.管理员对管理员进行添加,然后管理基本信息.服务管理.服务管理.员工管理.客户信息管理.出入库管理等. 员工用户登录后,对个人信息进行查看,定期 ...

  5. MATLAB车牌出入库识别(语音播报,库外识别,计时计费)

    一.课题介绍 随着汽车数量的增加,城市交通状况日益受到人们的重视,如何进行有效的交通管理更是成为了人们关注的焦点.智能交通系统通过车辆检测装置对过往的车辆实施检测,提取有关交通数据,达到监控.管理和指 ...

  6. MATLAB智慧车库计时计费系统GUI设计

    基于MATLAB的智慧停车场计时计费项目 一.课题介绍 随着汽车数量的增加,城市交通状况日益受到人们的重视,如何进行有效的交通管理更是成为了人们关注的焦点.智能交通系统通过车辆检测装置对过往的车辆实施 ...

  7. [汇编语言计算机原理] 带开机音乐,速度、进度和行驶方向显示的出租出计费系统设计

    写在前面的话: 这是计算机原理实验的大作业. 详细报告在资源"(汇编语言程序设计)带开机音乐,速度.进度和行驶方向显示的出租出计费系统设计"中,可自己下载. 资源中的源代码,我把音 ...

  8. 【图像处理】基于matlab车辆出入库计时系统

    目录 基于matlab车辆出入库计时系统 基于matlab车辆出入库计时系统 MATLAB 中可以通过图像处理技术实现车辆的出入库计时系统,具体步骤如下: 读取视频或摄像头采集到的图像序列.可以使用 ...

  9. c语言车库计费系统,基于单片机智能车库计费系统设计.doc

    基于单片机智能车库计费系统设计 基于单片机智能车库计费系统设计 摘要: 经济发展使得汽车的普及程度越来越高,车辆停放计费是车库管理的重要环节.51单片机是经典的单片机产品,具有结构简单.性能稳定和成本 ...

最新文章

  1. 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...
  2. 祝贺!清华大学姚期智教授荣获2021届京都奖:“日本的诺贝尔奖”
  3. html游戏闪,HTML最简单的文字闪烁代码
  4. CNKI中银屑病、大肠菌群、内毒素LPS(调研手稿三)
  5. 7-37 组个最小数 (20分)_波音737高度计上蹊跷的“8英尺”,09年土耳其航空1951号航班空难...
  6. eslint vscode 自动格式化_使用 VSCode 的必备三大神器,这才是开发 Vue 的真香解决方案...
  7. sqlserver两个日期之间的年数_SQL语句计算两个日期之间有多少个工作日的方法
  8. 计算机未来发展的5个前景,学习成绩普通,高考志愿填报不妨考虑这5个专业,未来发展很不错...
  9. (Excel)常用函数公式及操作技巧之四:文本与页面设置(一)
  10. 【Java从0到架构师】Spring - 纯注解开发
  11. ubuntu16.04下FastDFS+Nginx分布式文件系统
  12. 单片机支持EM4100和T5577两种ID门禁卡
  13. 计算机组装与系统维护技术,计算机组装与系统维护技术.pdf
  14. 程序员怎样更优雅的接私活赚外快
  15. Trister Community DAOs最新型DAO架构
  16. Google登录授权详细过程
  17. 对于line-height的一些理解
  18. win10日语输入法切换平片假名
  19. android8.1系统静默安装问题(无须手动点击)
  20. php 开发回合游戏,GitHub - 0x00bin/php-fight: PHP版本的卡牌游戏的回合制战斗

热门文章

  1. Pandas常用操作命令(六)——数据分组groupby
  2. Autodesk Fusion 360安装指引
  3. 用户难增,广告营收下跌,微博还能“高飞”吗?
  4. 双旋风除尘器-铸造废气处理装置(基于螺旋式分级除尘)
  5. 做 ML 有关的工作,需要哪些技能?
  6. 堆栈实现二叉树的先序、中序及后序遍历
  7. 一种基于激光雷达的自动驾驶技术路线
  8. 去掉字符串中所有的逗号
  9. 全球与中国AI在物流与供应链中的应用市场深度研究分析报告
  10. BannerPlugin插件使用