微机实验课程设计—停车场出入管理系统(共30页).doc

上传人:飞****2 文档编号:14479677 上传时间:2022-05-04 格式:DOC 页数:30 大小:20.94MB
返回 下载 相关 举报
微机实验课程设计—停车场出入管理系统(共30页).doc_第1页
第1页 / 共30页
微机实验课程设计—停车场出入管理系统(共30页).doc_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《微机实验课程设计—停车场出入管理系统(共30页).doc》由会员分享,可在线阅读,更多相关《微机实验课程设计—停车场出入管理系统(共30页).doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上东南大学自动化学院 微机实验及课程设计课程设计报告停车场出入管理系统 姓 名: 学 号: 专 业: 自动化 实 验 室: 计算机硬件技术 组 别: 同组人员: 实验时间: 2015年06月16日 报告时间: 2015年06月20日评定成绩: 审阅教师: 目 录一 课程设计目的与要求2二方案论证与原理设计2三详细(机理)设计3四方案实现与测试(或调试)7五分析与总结8一. 课程设计目的与要求(含设计指标)1、设计项目名称:停车场出入管理系统2、课程设计目的: 巩固已学的理论课原理和基本知识; 加强编程和调试能力,学会用汇编语言编写简单使用的系统 学会对8086,8253

2、,8255等芯片进行综合应用3、基本要求: 设计实现一停车场实时管理系统。要求实时显示车位空闲情况(初值可修改,最多99辆),并分别控制A、B两个出入口。每个出入口需要控制进出栏杆,并检测车辆进出,修改统计、显示车位空闲情况,并根据空闲情况控制进入。用2*2个开关模拟两个出入口的车辆进出光电信号,2个LED灯模拟栏杆输出控制(亮代表有效,禁止出入)。允许A口进B口出,反之亦是。4、设计指标 要求用两个数码管实时显示车位空闲数目(0099); 当有空位时,如有车辆到来,则在检测到信号(有效)后2秒钟打开进入栏杆,待车进入(信号无效)后1秒钟放下栏杆,空车位数减1修改;若无空位,则车辆等待,直至有

3、车位空出; 当有车出停车场时则在检测到信号后2秒钟打开出车栏杆,带车离开3秒钟放下栏杆,空车位数加1修改; 车位发生变化时,PC上同步显示记录。 5、拓展功能 8*8点阵显示进出箭头,有车辆进出空时绿色,满时红色; 自动记录车将进出时间和属性; 考虑A、B、C、D四个出入口同时控制的情况,自动显示空位数,控制车辆二.方案论证与原理设计(或基本原理)对上述基本要求和设计指标进行需求分析,并基于所有的硬件资源,我们可以采用如下办法进行实现:对于光电信号的采集(开关模拟)可以通过8255C口输入并进行判断,对于栏杆的控制同样可通过8255C口进行输出控制;对于双数码管的显示,可以采用动态显示的方法,

4、利用8255A口输出数码管的七段译码,C口输出数码管的动态片选信号。实时的空车位保存于通用寄存器中(如BX,BH表示十位,BL表示个位);对于等待时间的控制,可以通过微机内部的延迟得到,但若想要得到精确地时间,则可以利用8253定时器实现,具体做法是利用双通道计数器的级联实现对1MHz时钟信号的1000*1000分频,得到1HZ的信号,即可得到1s精确延迟。程序的基本框架如下:1.对系统进行初始化,显示当前空车位数;2.利用输入指令从8255C口低四位输出光电信号。若检测到有效信号,则对其判断端口和进出性质;若无有效信号,则继续检测信号;3.对有效信号的性质进行判定:若为出信号,则执行出车程序

5、(跳转指令实现);若为进信号,则先判断是否有空位(判断BX是否为0),若有空位,则执行进车程序,否则等待并检测是否有出车信号,至有空位出现;4.出车时首先需要一定得延迟,然后输出控制打开栅栏信号,经过一定的延迟之后,检测出车信号是否无效(表明车已经出去),无效则输出关闭栅栏信号,修改计数值并显示,否则继续等待,重复检测。三.详细(机理)设计 1、系统工作流程图(如下所示) 2、关键部分程序片段 端口信号的检测和判断控制mov bh,a0;数码管的高位mov bl,a1;数码管的低位cmp bx,0000h;如果没有空车位就转向bjz btest al,08h;jz goon1call test

6、a1;a口开关1拨上,监测a口状态goon1: test al,04h;jz goon2call testa2goon2: call testa3mov bh,a0mov bl,a1cmp bx,0909hjz loopsb:test al,02h;jz goon3call testb1;b口开关1拨上,监测a口状态 goon3: test al,01h;jz goon4call testb2 goon4: call testb3jmp loops exit: mov ah,4chint 21h 入车程序控制,以A口为例 testa1 proc nearpush axpush dx ;a口开关

7、1拨上,监测a口状态cmp state_a,00h ;空闲jz state_a1 cmp state_a,01h;a口状态前jz timecheck_a2sjmp exit1state_a1: mov dx,offset mess8;提示有车准备进入 mov ah,09h int 21h mov state_a,01hmov dx,io8253b;计数器通道1地址,计数器赋2smov al,00h out dx,almov al,08h ;clk1接的是out0,经过两次分频,得出两秒out dx,aljmp exit1timecheck_a2s: mov dx,io8255d ;8255B口

8、地址in al,dxand al,02h ;bjz exit1mov dx,offset mess3mov ah,09hint 21hmov state_a,02hmov dx,io8255b ;开灯(栏杆打开)mov al,0bh ;(C的5号口对应于栏杆信号)out dx,al exit1: pop dxpop ax ret testa1 endp 出车程序控制,以A口为例 testb1 proc near;b口开关1拨上,监测a口状态push axpush dxcmp state_b,00hjz state_b1cmp state_b,01hjz timecheck_b2sjmp exi

9、t4state_b1: mov dx,offset mess9;提示有车准备离开 mov ah,09h int 21hmov state_b,01hmov dx,io8253c ;计数器赋2smov al,00hout dx,almov al,08hout dx,aljmp exit4 timecheck_b2s: mov dx,io8255din al,dxand al,01hjz exit4mov dx,offset mess4mov ah,09hint 21hmov state_b,02hmov dx,io8255b;开灯(栏杆打开)mov al,09hout dx,al exit4:

10、pop dxpop ax ret testb1 endp 两位数码管动态显示程序 disp proc near;显示子程序 push dx mov di,offset led mov byte ptr bz,bl add di,bz mov al,00 mov dx,ioporta out dx,al mov al,2 ;选择数码管,低位 mov dx,ioportb out dx,al mov al,byte ptrdi ;LED显示数字 mov dx,ioporta out dx,al mov cx,3000delay2: loop delay2 mov di,offset led mov

11、 byte ptr bz,bh add di,bz mov al,00 mov dx,ioporta out dx,al mov al,4 ;选择数码管,高位 mov dx,ioportb out dx,al mov al,byte ptrdi ;LED显示数字 mov dx,ioporta out dx,al mov cx,3000delay3: loop delay3 pop dx retdisp endp四. 方案实现与测试(或调试)1、用调试工具对每个子程序模块进行单步断点测试,观察各寄存器,标志寄存器的状态是否正确,重点关注跳转指令处是否跳转正确。2、整个程序连接起来,系统调试,对照

12、流程图,确定各子程序的相互调用正确,条件转移正确,数码管的显示是否正确,是否能正常进入中断服务子程序和返回中断程序。一切正常后,对系统的功能逐一验证,检测每一项功能是否能正确执行。硬件实物图: 连接运行结果:(1)输入空闲车位初值66;(2).数码管显示空闲车位数66(3)K7为1,车辆到来PC上显示有车想从A门进入,此时有车位,车从A门进入箭头显示车进入(4)K6为1,信号无效,1s后放下栏杆车进入后数码管显示空闲车位65车进入后PC显示空闲车位65无车需进入时显示禁止图案(5)B口出车情况类似箭头显示车出车出后数码管显示空闲车位67车出后PC显示空闲车位67考虑极端情况:(6)输入空闲车位

13、初值01数码管显示空闲车位数01K7上拨为1,车辆到来PC上显示有车想从A门进入,有车位,车从A门进入车进入后数码管显示空闲车位为00K7再次为1,车辆到来PC上显示有车想从A门进入,无车位,提示无车位(7)输入空闲车位初值99数码管显示空闲车位数PC显示空闲车位为99,提示停车场内没有车四提高与创新研究1)88 点阵显示进出箭头; 已实现,见以上过程图中。2)对于拓展功能2,我没能有一个较好的实现思路。3)对于拓展功能3,将两个出入口改为四个出入口,其他要求不变,因此只需在程序中添加四出入口的控制转移程序(安排原理和双口差不多)和对应的进出控制程序(这个可以复制双出口程序的代码,只需稍加改动

14、即可)。这里只需要注意一点,那就是C口8位需要全部用来作为输入,输入8个拨码开关的信号,因此8255的控制字要做对应的改变。这里可以改用B口的高四位作栅栏的控制信号。但此次实验中未实现。五分析与总结该系统已经能够基本完成所需求的功能,且运行稳定,因此具有一定的价值。当然,程序中仍然有待改进的地方。不过综合最后运行结果来看,还是算不错的完成了该有的功能,包括用8253精确定时,而不是用软件延时;进出点阵箭头的显示等。参考书目:东南大学微机系统与接口课程组,微机实验及课程设计教程(试用版2.0),东南大学初出版社,南京,2009年2月附录:data segmentioport equ 0b800h

15、-280h ;tpc卡中设备的io地址io8253a equ ioport+280h ;计数器通道0地址io8253b equ ioport+281h ;计数器通道1地址io8253c equ ioport+282h ;计数器通道2地址io8253d equ ioport+283h ;8253控制寄存器地址io8255a equ ioport+288h ;8255A口地址 io8255b equ ioport+28bh ;8255控制寄存器端口地址 io8255c equ ioport+28ah ;8255C口地址io8255d equ ioport+289h ;8255B口地址protheq

16、u ioport+290h ;行选protlrequ ioport+298h ;红选protlyequ ioport+2a0h ;黄选num db 3,4 dup(0)a db 00h,00h ;用于存放空闲车位的十位和个位state_a db 00h ;标志a口状态,0表示空闲,1表示状态前,2标志状态中,3标志状态后state_b db 00h ;标志b口状态,0表示空闲,1表示状态前,2标志状态中,3标志状态后 led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;八段LEDCopyright DB *,0DH,0AH DB * Southeast

17、 University *,0DH,0AH DB * *,0DH,0AH DB * Wei ji xi tong yu jie ko *,0DH,0AH DB * *,0DH,0AH DB * System on parking lot management *,0DH,0AH DB * *,0DH,0AH DB * kuangzhenguo *,0DH,0AH DB * *,0DH,0AH DB * 2015-06 *,0DH,0AH DB *,0Dh,0Ah,$ ;版权信息mess1 db Please input the available parks scale num(0099):

18、,0dh,0ah,$mess2 db Illegal input! ,0dh,0ah,$mess3 db The car is entering in gate A.,0dh,0ah,$mess4 db The car is leaving from gate B.,0dh,0ah,$mess5 db Space available:,0dh,0ah,$mess6 db Sorry,the park has no space!,0dh,0ah,$mess7 db No car,0dh,0ah,$mess8 db A car wants to enter in gate A,0dh,0ah,$m

19、ess9 db A car wants to leave from gate B,0dh,0ah,$mess10 db error input signals, please check 8255 inport,0dh,0ah,$led_in db 00h,18h,30h,7fh,7fh,30h,18h,00h;箭头进 led_out db 00h,18h,0ch,0feh,0feh,0ch,18h,00h;箭头出led_no db 00h,03ch,5ah,99h,99h,5ah,3ch,00h;禁止data endsstacks segment stackdb 100 dup (?)sta

20、cks endscode segmentassume cs:code,ds:data,ss:stacksstart: mov ax,data ;初始化寄存器mov ds,axmov ax,stacksmov ss,axmov dx,io8253d ;计数器0工作方式3mov al,36h out dx,almov al,70h ;计数器1,工作方式0out dx,almov dx,io8253a ;计数器0初值1024(第一次分频)mov al,00hout dx,almov al,04hout dx,almov dx,io8255b mov al,83h out dx,almov dx,of

21、fset copyrightmov ah,09hint 21hagain: mov dx,offset mess1 ;提示信息mov ah,09h ;系统调用,在电脑屏幕上显示mess1int 21hmov dx,offset num ;系统调用,从键盘输入初始的空车位数到缓冲区mov ah,0ahint 21hmov al,num2 ;判断输入数值是否符合条件cmp al,30hjb errorcmp al,39hja errormov al,num3cmp al,30h ;小于0的话就转移到errorjb errorcmp al,39h ;大于9的话就转移到errorja errorsub

22、 al,30h ;将ASCII码转换为数字mov a1,almov al,num2sub al,30hmov a0,aljmp loopserror: mov dx,offset mess2mov ah,09hint 21hjmp againerror2:mov dx,offset mess10mov ah,09hint 21hjmp again; loops: ;主循环call show ;调用数码管显示call disp_mat ;点阵显示相关图示mov ah,01 ;系统调用int 16hjnz exitmov dx,io8255c ;从8255C口读入数据in al,dx;-cmp a

23、l,0fh jz error2;-mov bh,a0 ;数码管的高位mov bl,a1 ;数码管的低位cmp bx,0000h ;如果没有空车位就转向bjz btest al,08h ;jz goon1call testa1 ;a口开关1拨上,监测a口状态goon1:test al,04h;jz goon2call testa2goon2: call testa3mov bh,a0mov bl,a1cmp bx,0909hjz loopsb:test al,02h ;jz goon3call testb1 ;b口开关1拨上,监测a口状态goon3:test al,01h;jz goon4cal

24、l testb2goon4: call testb3jmp loopsexit: mov ah,4chint 21h; testa1 proc nearpush axpush dx ;a口开关1拨上,监测a口状态cmp state_a,00h ;空闲jz state_a1 cmp state_a,01h;a口状态前jz timecheck_a2sjmp exit1state_a1: mov dx,offset mess8;提示有车准备进入mov ah,09hint 21hmov state_a,01hmov dx,io8253b;计数器通道1地址,计数器赋2smov al,00h out dx

25、,almov al,08h ;clk1接的是out0,经过两次分频,得出两秒out dx,aljmp exit1timecheck_a2s: mov dx,io8255d ;8255B口地址in al,dxand al,01h ;bjz exit1mov dx,offset mess3mov ah,09hint 21hmov state_a,02hmov dx,io8255b;开灯(栏杆打开)mov al,0bh ;0000,1011(C的5号口对应于栏杆信号)out dx,alexit1: pop dxpop ax rettesta1 endp ; testa2 proc nearpush

26、axpush dxcmp state_a,02hjnz exit2mov dx,io8253b ;计数器通道1地址mov al,00hout dx,almov al,04h ;计时1sout dx,almov state_a,03hexit2: pop dxpop axrettesta2 endp ; testa3 proc nearpush axpush dxcmp state_a,03hjnz exit3mov dx,io8255d ;8255B口地址in al,dxand al,01hjz exit3 ;时间到mov al,a1mov ah,a0sub al,1 ;-1aasmov a1

27、,almov a0,ahmov state_a,00hmov dx,io8255bmov al,0ah ;C5=0关灯(栏杆闭合)out dx,almov dx,offset mess5 ;屏幕显示剩余车位mov ah,09hint 21hmov dl,a0add dl,30hmov ah,02hint 21hmov dl,a1add dl,30hmov ah,02hint 21hmov dl,0ah;回车mov ah,02hint 21hmov dl,0dh;换行mov ah,02hint 21hmov bh,a0mov bl,a1cmp bx,0000hjnz exit3mov dx,of

28、fset mess6mov ah,09hint 21hexit3: pop dxpop axrettesta3 endp ; testb1 proc near ;b口开关1拨上,监测a口状态push axpush dxcmp state_b,00hjz state_b1cmp state_b,01hjz timecheck_b2sjmp exit4state_b1: mov dx,offset mess9;提示有车准备离开mov ah,09hint 21hmov state_b,01hmov dx,io8253b;计数器赋2smov al,00hout dx,almov al,08hout d

29、x,aljmp exit4timecheck_b2s: mov dx,io8255din al,dxand al,01hjz exit4mov dx,offset mess4mov ah,09hint 21hmov state_b,02hmov dx,io8255b;开灯(栏杆打开)mov al,09hout dx,alexit4: pop dxpop ax rettestb1 endp ; testb2 proc nearpush axpush dxcmp state_b,02hjnz exit5mov dx,io8253bmov al,00hout dx,almov al,0ch ;计时3

30、sout dx,almov state_b,03hexit5: pop dxpop axrettestb2 endp ; testb3 proc nearpush axpush dxcmp state_b,03hjnz exit6mov dx,io8255din al,dxand al,01hjz exit6mov al,a1mov ah,a0add al,1 ;+1aaamov a1,almov a0,ahmov state_b,00hmov dx,io8255bmov al,08h ;关灯(栏杆关闭)out dx,almov dx,offset mess5;屏幕显示剩余车位mov ah,0

31、9hint 21hmov dl,a0add dl,30hmov ah,02hint 21hmov dl,a1add dl,30hmov ah,02hint 21hmov dl,0ahmov ah,02hint 21hmov dl,0dhmov ah,02hint 21hmov bh,a0mov bl,a1cmp bx,0909hjnz exit6mov dx,offset mess7mov ah,09hint 21hexit6: pop dxpop axrettestb3 endp ;=show proc near push dxpush axpush si ;数码管显示mov dx,io82

32、55b ;向8255的C口第六位写入0,低位mov al,0ch ;,out dx,almov al,a0 mov ah,00hmov dx,io8255a ;A口输出mov si,axmov al,ledsiout dx,almov dx,io8255b ;使相应的数码管亮 高位mov al,0fh ;,向C口的第七位写人1out dx,almov cx,0ffffhdelay1:loop delay1mov dx,io8255b mov al,0eh ;,向C口的第七位写入0 out dx,almov al,a1mov ah,00hmov dx,io8255amov si,axmov al

33、,ledsiout dx,almov dx,io8255b ;使相应的数码管亮 低位mov al,0dh ;,向C口的第六位写入1out dx,alpop sipop axpop dxretshow endp;=disp_mat proc nearpush sipush axpush cxpush dxmov al,state_acmp al,02h ;2标志状态中jz ledincmp al,03h ;3标志状态后jz ledinmov al,state_bcmp al,02hjz ledoutcmp al,03hjz ledoutmov cx,08hmov si,0mov ah,01loo

34、p_no:mov dx,protlrmov al,00hout dx,almov dx,protlyout dx,almov dx,prothmov al,led_nosiout dx,almov dx,protlrmov al,ahout dx,alshl ah,01push cx mov cx,300hdelay2:loop delay2pop cxinc siloop loop_nojmp exit7ledin: mov cx,08hmov si,0mov ah,01 loop_in: mov dx,protlr ;红选mov al,00hout dx,almov dx,protly;黄选o

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁