1、 停车场管理系统设计摘要伴随着科技的飞速发展,交通工具的越来越普及。汽车作为人类社会中最主要的交通工具之一,起着重大作用。随着人们生活水平的提高,汽车的数量也与日俱增,于是停车正在成为世界性的问题。以前落后的人力停车管理即将被高科技化的自动停车管理系统所取代,高度自动化的停车场管理系统节省了大量时间和人力物资消耗,大大提高了效率。本论文介绍了一种停车场管理系统模型。它能在任意时间内,根据有效的停车空间,计算能够停泊的车辆数量,并且使用自动而可靠的完成车辆的进。还能够显示是否有停放的场地以及是否有车辆进、出停车场。本停车场管理系统是集自动化技术、计算机技术为一体的智能化系统,能够避免停车场入口处
2、及出口处的交通阻塞现象,同时还能满足使用者和管理者对停车场效率、安全、性能以及管理上的需要,不会造成大量资源的流失。因此,停车场管理系统的研究和实现具有十分重要的现实意义。关键词 单片机 红外线传感器 动态显示 目 录第一章 绪 论11.1研究背景及意义11.2 系统概述11.3课题介绍1第二章 硬件电路设计32.1芯片的选择32.1.1 AT89S52的介绍32.1.2 AT89S52引脚功能32.1.3 AT89S52单片机内部结构62.1.4七段显示译码器7448的介绍72.2电源模块的设计92.3显示模块的设计92.4键盘输入模块的设计102.5传感器模块的设计122.5.1红外线发射
3、模块122.5.2红外线接收模块132.6电机控制模块的设计13第三章 软件设计153.1主程序设计153.2倒计时中断程序设计163.3键盘中断程序设计173.3.1增加键173.3.2减少键183.3.3确定键18结 论19致 谢 语20参考文献:21附录1:系统程序清单22附录2:系统电路原理图29 第一章 绪论1.1研究背景及意义近年来,随着经济建设的快速发展,汽车带给人们快乐的同时也带来了越来越突出的难题:城市交通问题日益严重,停车问题接踵而至,一个不到10平方米的停车位,牵动着社会的“神经”,停车场车位不足的问题越来越突出。目前,有偿使用停车场是这个问题最为有效的解决方式,这就使得
4、停车场管理的重要性越来越受到重视。然而目前的大部分停车场管理系统都是采取人工判别车型、人工收费、人工放行以及人工引导车辆入库等比较传统的管理模式,这在很大程度上制约着城市的发展。本文是利用单片机来设计的一个停车场管理系统。在如今农业、工业、生活、军事等各个方面都向自动化、智能化、数字化发展。为了适应时代的发展,电子技术发展迅猛。自动化、智能化、数字化的实现方式多种多样,从而产生了很多设计工具。单片机就是其中之一,它正朝着高性能和多品种方向发展,卓越的性价比受到设计者的欢迎。1.2 系统概述本系统包括:传感器模块、电源模块、LED显示模块、键盘输入模块等。它可以实现控制门的开启、显示当前停车场内
5、车辆的数目及状态、人工的设置总车位数以及剩余车位数等功能。系统的特点:(1)由于本系统采用电子元件无需人工管理。(2)自动控制门的开启。(3)自动显示停车场的车位状态。(4)人工设置总车位数,剩余车位数。(5)本系统适用于任意停车场。1.3课题介绍本设计是将单片机作为控制系统的核心部件,通过传感器模块检测到有车辆进出时,进行判断,控制自动门的开启,并通过对显示模块进行动态扫描,显示目前停车场内车辆的数目及状态。管理者还可以对停车场的最大容量等进行人工的限制。如系统的基本框图1.1所示:传感器模块电源89S52键盘输入模块显示模块图1.1 系统基本框图第二章 硬件电路设计该系统用于检测是否有车辆
6、进出,是否有空余车位,应用单片机来控制其他模块以实现对车辆的数目、状态等的加减计数和状态显示,并利用单片机中的定时系统对车辆进出的时间限制以及设定,键盘系统的输入可以人工控制总车位数以及剩余车位数2.1芯片的选择2.1.1 AT89S52的介绍本系统采用的是一种低功耗、高性能的MCS-51系列的单片机,AT89S52是一种COMS8位微控制器,具有8K在系统可编程Flash存储器,是由Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT8
7、9S52委众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52的主要性能: 与MCS-51单片机产品兼容; 8K字节在系统可编程Flash存储器; 1000次擦写周期; 全静态操作; 三级加密程序存储器; 32个可编程I/O口线; 三个16位定时器/计数器; 8个中断源; 全双工UART串行通道; 低功耗空闲和掉电模式; 掉电后中断可唤醒; 看门狗定时器; 双数据指针; 掉电标识符;2.1.2 AT89S52引脚功能 VCC:电源 GND:地 P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问
8、外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在 flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外接上拉电阻。 P1口:P1口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。在flash编
9、程和校验时,P1口接收低8位地址字节。作为第二功能时,作用如表1所示:表2.1 P1口的第二功能P1口第二功能P1.0T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用) P2口:P2口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存
10、储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3口:P3口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用。
11、在flash编程和校验时,P3口也接收一些控制信号。作为第二功能时,作用如表2所示:表2.2 P3口的第二功能P3口第二功能信号名称P3.0RXD串行数据接收口P3.1TXD串行数据发送口P3.2INT0外部中断0请求输入P3.3INT1外部中断1请求输入P3.4T0定时器/计数器0的外部输入口P3.5T1定时器/计数器1的外部输入口P3.6WR外部RAM写选通信号P3.7RD外部RAM读选通信号 RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功
12、能无效。DISRTO默认状态下,复位高电平有效。 ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执
13、行模式下无效。 PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。AT89S52的引脚如图2.1所示图2.1 AT89S52引脚图2.1.3 AT89S52单片机内部结构如图2.2所示:VSSP0驱动器P2驱动器P0锁存器RAM地址寄存器P2锁存器RAMACCB寄存器暂存器2暂存器1SPALUPSWEPROM或ROM中断系统串行口定时器/计时器指令寄
14、存器定时及控制16位地址寄存器缓冲器PC+1PCDPTRP1锁存器P1驱动器P3锁存器P3驱动器振荡器VCCALEEARSTPSENXTAL1XTAL2P1.0-P1.7P3.0-P3.7P0.0-P0.7P2.0-P2.7图2.2 AT89S52单片机内部结构图2.1.4七段显示译码器7448的介绍7448七段显示译码器输出高电平有效,用以驱动共阴极显示器。7448的功能如表2.4所示。它有3个辅助控制端LT、RBI、BI/RBO,现分别简要说明如下:(1)灭灯输入BI/RBO:特殊控制端,有时作为输入,有时作为输出。当BI/BRO作为输入使用且BI=0时,无论其它输入端是什么电平,所有各段
15、输出ag均为0,所以字形熄灭。(2)试灯输入LT:当LT=0时,BI/RBO是输出端,且RBO=1,此时,无论其它输入端是什么电平,所有各段输出ag均为1. 该输入端常用于检查7448本身及显示器的好坏。(3)动态灭零输入RBI:当LT=1,RBI=0且输入代码DCBA=0000时,各段输出ag均为低电平,与BCD码相应的字形0熄灭,故称“灭零”。(4)动态灭零输出RBO:BI/RBO作为输出使用时,受控于LT和RBI,当LT=1且RBI=0时,输入代码DBCA=0000时RBO=0;若LT=0或者LT=1且RBI=1,则RBO=1。该段主要用于显示多位数字时,多个译码之间的连接。表2.3 7
16、448功能表十进制或功能输 入BI/RBO输 出字 形LTRBID C B Aa b c d e f g012345678910111213141511111111111111111XXXXXXXXXXXXXXX0 0 0 0 0 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 01 0 0 11 0 1 01 0 1 11 1 0 01 1 0 11 1 1 01 1 1 1 11111111111111111 1 1 1 1 1 00 1 1 0 0 0 01 1 0 1 1 0 11 1 1 1 0 0 10 1 1 0 0 1
17、11 0 1 1 0 1 11 0 0 1 1 1 11 1 1 0 0 0 01 1 1 1 1 1 11 1 1 1 0 1 10 0 0 1 1 0 10 0 1 1 0 0 10 1 0 0 0 1 11 0 0 1 0 1 10 0 0 1 1 1 10 0 0 0 0 0 00123456789消隐脉冲消隐灯测试X10X0XX X X X 0 0 0 0X X X X0010 0 0 0 0 0 00 0 0 0 0 0 01 1 1 1 1 1 18从功能表可以看出,对输入代码0000,译码条件是:LT和RBI同时等于1,而对其他输入代码则要求LT=1,这时候译码器各段ag输出的
18、电平是由输入BCD码决定的,并且满足现实字形的要求。2.2电源模块的设计整个系统中电源模块主要的是起供应稳定的电压、提高系统的技术指标和抗干扰性。三端稳压器是一种标准化、系统化的通用线性稳压电源集成电路,在线性集成稳压器中,由于三端稳压器只有三个引出端子,具有外接元件少,使用方便,性能稳定,价格低廉等优点,因而得到广泛应用。三端稳压器可以决定一个稳压电源输出电压和最大输出电流。用于控制板电路的稳压以防止电压过高烧毁电路。在本次设计中采用LM7805稳压器。用LM7805三端稳压器来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来安全可靠、方便,而且价格便宜。当
19、在电路中通上220V交流电压时,交流高电压通过变压器变换成交流低电压,交流低电压经过桥式整流电路D1-D4的整流和滤波电容C1的滤波,在三端稳压器LM7805的Vin和GND两端形成一个并不十分稳定的直流电压,此直流电压经过稳压器LM7805的稳压和C3的滤波便在稳压电源的输出端产生了精度高、稳定度好的直流输出电压,其电路图如图2.4所示:图2.4 电源设计总图2.3显示模块的设计该硬件电路是在一个8位I/O口上将所有位的断码线相应段并连在一起,形成断码线的多路复用,而各位的共阴极分别由相应的I/O线控制,形成各位的分时选通。本系统选用三个共阴数码管,总共可以控制255个车位。如图所示,数码管
20、a-h脚端连接,通过连接一个7448连接到单片机芯片的P1、P2口。其中7448是驱动作用。另外,本系统还可以显示停车场的车位状况,我们可以将单片机芯片的P0.0和P0.1来作为显示车位状况的输出端。将P0.0接红色二极管,当其发红光时表示停车场已满即无停车位。将P0.1接绿色二极管,当其发绿光时表示停车场未满即还有停车位。但由于P0口的输出电路是漏极开路,换言之,当P0作为输出时,上拉场效晶体管截止 。所以,必须外接上拉电阻才能有高电平。如图2.5所示图2.5 显示模块总图2.4键盘输入模块的设计键盘工作方式有3种,即程序控制扫描、定时扫描和中断扫描。程序控制扫描方式是指单片机在空闲时,才调
21、用键盘扫描子程序,并反复地扫描键盘,直到用户从键盘上输入命令或数据,而在执行键入命令或处理键入数据过程中,CPU将不再响应键入要求,直到CPU重新扫描键盘为止;定时扫描方式就是每隔一定时间对键盘扫描一次,它利用单片机内部的定时器产生一定的时间的定时,当定时时间到就产生定时器溢出中断,CPU响应中断后对键盘进行扫描,并在有键按下时识别出该键执行响应的键功能程序;键盘工作在程序控制扫描方式时,当无键按下时CPU要不间断的扫描键盘,直到有键按下为止。如果CPU要处理很多事情,这种方式将不能适应。定时扫描方式只要时间一到,CPU就去扫描键盘,工作效率有了进一步的提高。但这两种方式常使CPU处于空扫状态
22、,而中断方式下,CPU可以一直处理自己的工作,直到有键闭合时发出中断申请,CPU响应中断,执行相应的中断服务程序,才对键盘进行扫描,从而提高了CPU的工作效率。本系统用的是程序控制扫描和中断扫描两种方式相结合的方式。如图2.6所示。SW1是编程扫描方式,此开关用于改变显示模块的数码管状态,该开关断开时,P0.3为低电平,数码管显示停车场剩余车位量。P0.3闭合时,为高电平,数码管显示停车场全部车位量。 SW2、SW3、SW4用于手动调节剩余车位和全部车位数。SW2为确定键,利用定时器1(T1)进行中断扫描;SW3为数字加,利用外部中断1(INT1)进行中断扫描;SW4为数字减,利用外部中断0(
23、INT0)进行中断扫描。当SW1断开时,其它三个开关调节的是剩余车位的数量,使计数出错时不至于重启系统或系统初始化时使用。当SW1闭合时,则是调节全部车位总数的数量。图2.6 键盘输入模块总图2.5传感器模块的设计本系统采用的是红外线传感器,这部分的功能是感受到物体的运动并且传送信号到AT89S52芯片上。传感器部分分为发射器和接收器两个部分。2.5.1红外线发射模块系统用两块555芯片产生波形,用红外线发射二极管发射波形,系统采用的是TSOP1738接收器,它对于1KHZ信号调制的38KHZ脉冲有效。电路图如图所示,图2.7中,IC12、R1、R2、C1、D1、C2用于产生1KHZ的方波。接
24、通电源后,电容C1被充电,VC上升,当VC上升到2/3VCC时,触发器被复位,同时放电脚(7脚)导通,此时3脚输出VO为低电平,电容C1通过R1和T放电,使VC下降。当VC下降到1/3VCC时,触发器又被置位,VO反转为高电平。电容器C放电所需时间为0.5ms。当C1放电结束时,T截止VCC将通过R1向电容C1充电,VC由1/3VCC上升到2/3VCC所需的时间为0.5ms。当VC上升到2/3VCC时,触发器有发生翻转,如此周而复始,在输出端就得到一个周期性方波,其频率为1KHZ,占空比为50%。以IC13为主的部件产生38KHZ的方波,原理同上。将IC12的3脚接IC13的4脚(复位端)。当
25、IC12输出低电平时,IC13输出低电平;当IC12输出高电平时,IC13输出38KHZ的方波,将此信号加到两个红外线发射管(IR1、IR2)上,通过他们发射信号。R5作为限流电阻,防止555芯片和红外线发射管烧坏。图2.7 传感器图2.5.2红外线接收模块本模块的主要部件是TSOP1738。TSOP1738是VISHAY公司推出的一体化红外线接收器,集红外线接收和放大于一体,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样。它适合于各种红外线遥控和红外线数据传输。内部包括光电接收器和带有红外线滤波器的预放大电路它对于1KHZ信号调
26、制的38KHZ脉冲有效。正常地接收发射模块产生的红外线信号时,接收器的输出端会产生1KHZ的方波,当没有信号时,输出为+5V的直流电平。这种传感器的输出为集电极开路型,因此需要外接阻值大于10K的上拉电阻。由于传感器精度极高,所以在传感器的输出端和地之间必须接上一个22uF的电解电容。在电源与地线之间必须接上一个4.7uF的电解电容,以便减少接收到的杂散信号的干扰。这样,传感器模块在正常接收信号(没有车经过),输出0V;当信号中断时(有车经过)时,输出为+5V。具体的电路图如图2.8所示。图2.8 红外线接收模块图2.6电机控制模块的设计要横杆改变运动方向,如上升、下降等,要求电动机能实现正、
27、反转。对于三相异步电动机来说,可通过两个接触器来改变电动机定子绕组的电源相序来实现。电动机正、反转控制线路如图2.9所示,通过按键控制接触器KM1,为正向接触器,控制电动机M正转;控制接触器KM2,为反向接触器,控制电动机M反转。图2.9 电机控制模块图正转控制:合上刀开关Q按下正向起动按钮SB2正向接触器KM1通电KM1,主触点和自锁触点闭合电动机M正转。反转控制:合上刀开关Q按下反向起动按钮SB3正向接触器KM2通电KM2,主触点和自锁触点闭合电动机M反转。停机:按停止按钮SB1KM1(或KM2)断电M停转。第三章 软件设计软件设计是设计中很重要的部分。它关系到一个系统能否实现其预定的要求
28、。3.1主程序设计主程序是软件设计的总体框架,因此主程序的流程图的设计决定了程序编写的好坏,该主程序的功能是扫描键盘,作出逻辑判断,控制各种中断,数据送入显示模块。其流程图如图3.1所示。开始显示最大车位判断是否显示剩余车位显示剩余车位 分两次读取传感器状态比较两次状态是否一样判断是否有车进出开门开启倒计时剩余车位数增减YYYNNN图3.1 系统主程序流程图在判断车辆是否进出中:本系统使用了两个传感器,一个用来检测出去的车,一个检测进来的车。当两个传感器同时检测到车的时候,说明进出的是车辆。当一个传感器检测到车辆时,开门。当两个传感器都检测到时,通过逻辑判断,剩余车位数进行加减。3.2倒计时中
29、断程序设计这个子程序用来计算开门的时间。当时间到时,根据传感器状态判断自动门是否可以关闭。若可以,则关闭,然后退出;若不可以,则再次设定自动门开启剩余时间,重新进入倒计时。程序流程图如图3.2所示。断电保护初始化TH0,TL0判断开门时间是否结束两传感器是否同时检测到有车关闭自动门中断返回设置倒计时时间YYNN图3.2 倒计时中断程序流程图3.3键盘中断程序设计这一部分包括加、减、确定三个键,分别由外部中断1(INT1)外部中断0(INT0)和定时器1(T1)。3.3.1增加键在此程序中,剩余车位不超过最大车位数,即最大车位数不超过255.流程图3.3如下断点保护延时后判断P3.3是否为低电平
30、当前是否正在设置剩余车位最大车位数加一剩余车位数加一中断返回YN图3.3 按键流程图3.3.2减少键减少键的程序段和3.3.1相似。3.3.3确定键确定键实现了用定时器1中断,其作用是判断手动设置以后的剩余车位是否大于最大车位数,防止系统紊乱。结论本课题所研究的是通过单片机来实现对停车场的管理,在设计的过程中硬件存在着这样的问题:(1)本系统中所使用的红外线传感器TSOP1738过于灵敏,输出端出现电平抖动,可以通过软件或硬件去抖动。我选择了软件抖动,即分两次读取传感器的状态,对比两次读取的状态,系统做出对应的反应,键盘也是这样做。(2)数码管显示亮度不够。AT89S52的I/O口得输入功率不
31、够造成的,解决方法是在数码管输入端和I/O口之间添加7448芯片,进行驱动。本系统的不足之处:(1)没有实现对电机的无线控制。(2)由于单片机芯片的局限,系统无车辆出入记录功能,有待改进。致谢语 从刚接到毕业设计课题,我首先是查找一些相关的书籍及资料,并根据实际情况拟定设计方案,从而达到优化方案。在研究设计电路时,最难的是调试了,但在老师和同学的帮助下使得本次设计达到了预定的要求。同时,通过这次毕业设计,在各个方面都有了很大的提高,特别是在理论和实践结合方面使我受益匪浅,使我大学里学习的理论知识在根本上得到一次最完整的实践和提高。也为我即将面临的工作奠定了很好的基础。在本次毕业设计中深深认识到
32、自己的各个方面的不足之处,本着提高动手能力以及检测大学所学知识的目的,我严格要求自己,每一环节都认真对待,定期向知道老师报告进展情况和请教不懂的地方,得以完成任务。在经过系统的设计与制作后,感触最深的是解决问题的方法、技巧。在这个过程中,我遇到许许多多问题,对待问题要多方法处理,多角度处理。这不但增强了实践能力,而且懂得了联系实际的重要性,我坚信这对以后的学习和工作会有极大的帮助。当然,我的设计还存在着一些缺陷,有待于在将来设计中进一步提高。参考文献:1 李广弟.单片机基础M.北京:北京航天航空大学出版社, 2005.2 胡汉才.单片机原理及接口技术M.北京:清华大学出版社, 2004.3 马
33、忠梅.单片机C语言Windows环境编程宝典M.北京:北京航空航天大学出版社, 2004.4 佟云峰.单片机原理及应用M.北京:机械工业出版社, 2006.5 郭天翔.51单片机C语言教程.电子工业出版社, 2008.6 潘清明,刘启新.基于单片机路灯网络控制系统.中国制造业信息化, 2008.附录1:系统程序清单#include#define OPEN_DOOR DOOR = 1#define CLOSE_DOOR DOOR = 0#define NO_FREE_PARK RED_LED=1;GREEN_LED=0;#define HAVE_FREE_PARK RED_LED=1;GREEN
34、_LED=0;#define SEG P0sbit baiw=P20;sbit shiw=P21; sbit gew=P22;sbit EXT_LINE = P30; /sbit INT_LINE = P31; /sbit SW1 = P03;sbit DOOR = P02; /1 打开,0 关闭sbit RED_LED = P00;/空闲指示灯 1 亮 表示无空闲车位sbit GREEN_LED = P00;/空闲指示灯 1 亮 表示有空闲车位unsigned char total_num=255; /最大车位unsigned char remain_num=255; /剩余车位unsign
35、ed char dai,shi,ge;unsigned char check_car(void);void delay_ms(unsigned int ms);void display(unsigned char va);unsigned char seg7code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void main(void)EX0=1;; EX1=1;EA=1;while(1)if(1=check_car() /如果检测到car 出入OPEN_DOOR;/启动定时器的程序TMOD=0X01;TH0=0XFF;TL0=0;E
36、A=1;ET0=1;TR0=1;/end of启动定时器的程序 else;/ do nothingif(0=remain_num)NO_FREE_PARK;elseHAVE_FREE_PARK;if(0=SW1)display(remain_num);elsedisplay(total_num);unsigned char check_car(void)unsigned char ext_1=0;unsigned char int_1=0;unsigned char ext_2=0;unsigned char int_2=0;unsigned char return_flag=0;EXT_LI
37、NE = 1;INT_LINE = 1; /设置为读ext_1 = EXT_LINE;int_1 = INT_LINE;/读取状态if(0=ext_1)&(0=int_1)/没有车;else if(1=ext_1)&(1=int_1)/车在门口,还没有出去;else if(1=ext_1)&(0=int_1)delay_ms(1000);/延时ext_2 = EXT_LINE;int_2 = INT_LINE;/读取状态if(0=ext_1)&(1=int_1) /有车进入remain_num-;return_flag = 1;else /异常;/do nothingelse / if(0=e
38、xt_1)&(1=int_1)delay_ms(1000);/延时ext_2 = EXT_LINE;int_2 = INT_LINE;/读取状态if(1=ext_1)&(0=int_1) /有车出去remain_num+;return_flag = 1;else /异常;return return_flag; void delay_ms(unsigned int ms) / Fosc=11.0592MHz unsigned char i;for(;ms0;ms-)for(i=0;i124;i+); /中断 用于关门void time_0(void) interrupt 1unsigned ch
39、ar ext_1=0;unsigned char int_1=0;EXT_LINE = 1;INT_LINE = 1; /设置为读ext_1 = EXT_LINE;int_1 = INT_LINE;/读取状态if(0=ext_1)&(0=int_1)/没有车关门 停止计时CLOSE_DOOR;/关闭定时器的程序ET0=0;TR0=0;/end of 关闭定时器的程序else /有车 继续定时检查TH0=0XFF;TL0=0;/增加键中断void key_0(void) interrupt 0total_num+;if(total_numremain_num)remain_num = total
40、_num;/减少键中断void key_1(void) interrupt 2total_num-;if(total_numremain_num)remain_num = total_num;/显示程序void display(unsigned char va) bai=va/100; /处理数据 shi=va%100/10; ge=va%10; gew=1; /数码管显示车位 shiw=1; baiw=1; SEG=seg7codebai; baiw=0; Delay_ms(2); baiw=1; SEG=seg7codeshi; shiw=0; Delay_ms(2); shiw=1; SEG=seg7codege&0x7f; gew=0; Delay_ms(2); gew=1;附录2:系统电路原理图Welcome ToDownload !欢迎您的下载,资料仅供参考!