交通灯实时控制系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

第1章需求分析 (1)

1.1 课程设计题目 (1)

1.2课程设计任务及要求 (1)

1.3软硬件运行环境及开发工具 (1)

第2章概要设计 (2)

2.1设计方案及设计原理概述 (2)

2.2实验设计流程概述 (3)

第3章详细设计 (4)

3.1 硬件设计与实现 (4)

3.2 软件设计与实现 (4)

第4章系统调试与操作说明 (7)

4.1 系统调试 (7)

4.2 操作说明 (7)

第5章课程设计总结与体会 (8)

参考文献 (8)

附录:交通灯实时控制程序 (9)

第1章需求分析

1.1 课程设计题目

课程设计的题目是:交通灯实时控制系统设计

1.2 课程设计任务及要求

本次课程设计要求设计一个十字路口的交通灯控制系统,要求车辆无交叉通过。十字路口的交通灯是交通法规的无声命令,是司机和行人的行为准则。十字路口的交通灯控制是保证交通安全和道路畅通的关键,这次课程设计只是一个十字路口交通灯的工作情况的模拟。课程设计的任务要求完成实验方案的论证,十字路口的交通信号灯的控制电路设计,画出电路原理图、元器件布线图及实验电路图;搭建实验电路,进行软件编程、调试、运行以及使用说明文档的建立等一整套工作任务。进行十字路口的交通信号灯控制程序设计,系统联调,并提交一个符合上述功能要求的十字路口的交通信号灯实时控制系统设计。

其功能的具体要求如下:

1.东西方向和南北方向轮流放行控制:

1)南北方向准行60秒,东西方向准行40秒,按秒倒计时,并通过两位七段数码管显示器显示剩余时间;

2)当准行时间剩最后5秒时,灯闪烁以示警告。

2. 特殊功能设计:

当按下紧急按钮(本次实验中是用开关控制的)时,两车道均为红灯,保证紧急车辆顺利通过。

1.3 软硬件运行环境及开发工具

DVCC-52196JH单片机仿真实验系统和一台PC机

第2章概要设计

2.1 设计方案及设计原理概述

使用了MCS-51单片机的中断系统、并行I/O口实现了对南北方向、东西方向及紧急情况时交通的控制,并通过七段数码管的显示出倒计时间,其显示的原理是将十六进制数按高低四位拆开后分别送入R0,R1,然后分别将其调整为十进制后显示出来。设计采用倒计时的方式,规定了每种情况下车辆的通行时间。这个十字路口交通灯实时控制系统主要负责控制南北方向、东西方向及紧急情况下通车的状态和转换顺序,设计关键是各个状态之间的转换和紧急情况下中断的产生,具体设计如下:

1.南北方向绿灯通过89C51的接口P1.0送到二极管L1,南北方向红灯通过89C51的接口P1.2送到二极管L3,东西方向绿灯通过89C51的接口P1.3送到二极管L4,东西方向红灯通过89C51的接口P1.5送到二极管L6,当将21H

送入P1口时,南北方向绿灯,东西方向红灯,倒计时60秒,最后5秒红绿灯闪烁表示提示;

2.然后,当将0CH送入P1口时,东西方向绿灯,南北方向红灯,倒计时40秒,最后5秒红绿灯闪烁表示提示;

3.紧急情况在任何时候都能发生,即产生中断,中断发生后南北方向、东西方向均为红灯即将24H送入P1口,停止普通车辆通行,倒计时20秒,最后5秒红绿灯闪烁表示提示。其实验设计原理图如图2.1:

图2.1 交通灯实时控制原理图

2.2 实验设计流程概述

此次实验我主要分成四个模块进行的,模块一是程序的初始化;模块二是七段数码管显示倒计时间及红绿指示灯的闪烁(这一部分我将其设计成二个子函数,然后在主函数中直接调用即可);模块三是紧急情况时的中断过程;模块四是延时程序部分。

其实验流程图如图2.3:

紧急按钮的中断子程序

图2.3 交通灯实时控制流程图

第3章详细设计

3.1 硬件设计与实现

其实验硬件设计的接线图如图2.2,主要是MCS-51单片机的并行I/O接口(P1.0—P1.7)与发光二极管(L1—L8)的接线和其控制接口(P3.0,P3.1)与七段数码管以及其控制接口(P3.2)与中断控制开关(K)的接线:

图2.2 实验接线图

3.2 软件设计与实现

1. 用七段数码管显示倒计时间时我是利用拆字的方法将高位和低位分开显示,将低位显示出后用短暂延时,然后再将高位输出【2】,程序如下:MOV A, R2

SW AP A;互换A的高低位

ANL A,#0FH

MOV R1,A;将A的高位送R1

CLR A ;将A清零

MOV A,R2

ANL A,#0FH

MOV R0,A; 将A的低位送R0

MOV A,R0

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV SBUF,A; 将A的低位输出

MOV R4,#0FH

H55S:DJNZ R4,H55S;输出的短暂延时

MOV A,R1

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV SBUF,A; 将A的高位输出

LCALL DELAY;延时半秒

LCALL DELAY;延时1秒

MOV A,R2

ADD A,#99H;将A加上-1的补码

DA A;将A调整为十进制

MOV R2,A;十进制数输出

CLR C;将进位C清零

SUBB A,#5

JNZ LOOP;不到最后5秒就继续减1倒计时

LCALL LOOP1;最后5秒调用灯闪烁的子函数

2.我是通过让灯亮一秒再灭一秒来实现红绿指示灯的闪烁的,其具体程序如下:

MOV A,R7

MOV P1,A

LCALL DELAY;灯亮半秒

MOV A,#00H

MOV P1,A

LCALL DELAY;灯灭半秒

3. 我是将十六进制与-1的补码相加后再通过调整指令DA调整以后转换成相应的十进制数通过数码管显示的【3】,其程序如下:

MOV A,R2

ADD A,#99H;将A加上-1的补码

DA A;将A调整为十进制

MOV R2,A;十进制数输出

4. 紧急情况时的中断程序,因为在中断程序中R7发生改变了,故需对R7进行保护,在中断结束时也需对R7进行恢复,虽然R2没有改变,但中断结束后不能立即执行对R2赋值的指令,所以计算机系统就默认R2的值为0FFH,故我在中断程序中用R5代替R2,其程序如下:

INT_EX0:MOV 30H,R7 LOOP2:MOV SBUF,A

PUSH 30H;对R7进行现场保护MOV SBUF,A;将SBUF清零

MOV R5,#20H;中断20秒MOV A, R5

MOV R7,#24H;将灯的状态送入R7 SW AP A;互换A的高低位

MOV A,#24H ANL A,#0FH

MOV P1,A;灯的状态从P1口输出MOV R1,A;将A的高位送R1

相关文档
最新文档