单片机交通灯综合实验报告

来源:工作范文网 时间:2020-09-27 08:43:53

河 北 工 业 大 学

实 验 报 告

学 院:

专 业:

班 级:

姓 名:

学 号:

实验课程:单片机应用系统设计开发入门

指导教师:

实验名称: 交通信号灯控制实验

实验时间: 2019 年 5 月 23日

2019 年 5月 23 日

一 实验要求

1 实验目的及实验内容要求

实验目的:1.熟悉外部中断源的扩展方法。

2.初步掌握单片机综合应用系统设计。

3.掌握用Proteus调试汇编源程序的方法。

实验内容要求:

用发光二极管模拟交通信号灯,用逻辑电平开关模拟控制开关,设计一个交通信号灯控制系统。设计要求如下:

A 车道与 B 车道交叉组成十字路口,A 是主道,B 是支道;正常情况下,A、B 两车道轮流放行。具体放行时间和要求如下:

A 车道放行 50s,其中绿灯常亮 44s,绿灯闪烁 3s(用于警告),黄灯常亮 3s(用于警告)。

B 车道放行 30s,其中绿灯常亮 24s,绿灯闪烁 3s(用于警告),黄灯常亮 3s(用于警告)。

在交通繁忙时,交通信号灯控制系统应有手控开关,可人为地改变信号灯的状态,以缓解交通拥挤状况。控制要求如下:

在 B 车道放行期间,若 A 车道有车而 B 车道无车,按下开关使 A 车道放行 15s。

在 A 车道放行期间,若 B 车道有车而 A 车道无车,按下开关使 B 车道放行 15s。

有紧急车辆通过时,按下开关使 A、B 车道均为红灯,禁行 15s。

2 实验设备或运行软件平台

完成本实验需要使用到单片机仿真软件Proteus8,该软件是英国Lab Center Electronics公司出版的EDA工具软件,是目前比较好的仿真单片机及外围器件的工具。从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。在编译方面,它也支持IAR、Keil、MATLAB等多种编译器。其具有的基本功能特点为:1.原理布图。2.PCB自动或人工布线。3.SPICE电路仿真。革命性的特点是1.互动的电路仿真。

2.仿真处理器及其外围电路。

二 实验内容及过程

1 实验设计及分析(或者实验程序)

实验原理图如下所示:

交通信号灯模拟控制系统程序流程图如下图所示:

主程序 一道有车另一道无车时 紧急车辆通过时

的中断服务程序 的中断服务程序

A

A

绿灯闪、

B

红灯延时

s

3

A

红灯、

B

绿灯闪动延

s

3

A

红灯、

B

绿灯延时

25

s

A

绿灯、

B

红灯延时

55

s

A

红灯、

B

黄灯延时

s

2

A

黄灯、

B

红灯延时

s

2

初始化

开中断

保护现场

关中断

A

道有车

B

道有车

A

红灯、

B

绿灯延时

s

5

A

绿灯、

B

红灯延时

5

s

关中断

恢复现场

开中断

返回

中断响应

保护现场

A

红灯、

B

红灯延时

s

20

恢复现场

返回

N

N

Y

Y

中断响应

开始

实验程序及程序分析如下:

ORG 0000H

LJMP MAIN ;LJMP,转向主程序

ORG 0003H

LJMP INT00 ;转向紧急车辆中断服务程序

ORG 0013H

LJMP INT11 ;转向有车车道放行中断服务

ORG 0030H

MAIN :

SETB PX0 ;置外部中断0为高优先级中断

MOV TCON,#00H;置外部中断0、1为电平触发

MOV IE,#85H ;开CPU中断、外部中断0、1中断

LOOP: ;A道绿灯亮;B红灯亮

MOV P1,#0F3H

MOV R1,#88 ;44s延时循环次数

AP1: ;调用0.5s延时子程序DELAY

LCALL DELAY

DJNZ R1,AP1 ;44s不到,继续循环(DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳转到行标为REL的地方执行,否则,为“0”就不转移,继续执行下一条指令。)

MOV R1,#6 ;3s延时的循环次数(循环一次延时0.5秒。)

AP2: ;A道绿灯闪烁

CPL P1.2

LCALL DELAY ;参考程序中缺少此句,若缺失会导致无法延时。

DJNZ R1,AP2 ;3s未到,继续循环

MOV P1,#0F5H;A道黄灯亮,B道红灯亮

MOV R1,#6

AP3:

LCALL DELAY

DJNZ R1,AP3 ;3s未到,继续循环

MOV P1,#0DEH ;A道红灯亮,B道绿灯亮

MOV R1,#48 ;延时循环48次

BP1:

LCALL DELAY

DJNZ R1,BP1 ;24s未到继续循环

MOV R1,#6

BP2:

CPL P1.5 ;B道绿灯闪烁

LCALL DELAY

DJNZ R1,BP2 ;3s未到,继续循环

MOV P1,#0EEH;A道红灯亮,B道黄灯亮

MOV R1,#6

BP3:

LCALL DELAY

DJNZ R1,BP3 ;3s未到,继续循环

SJMP LOOP

ORG 0200H

INT00: 保护P1口数据

PUSH P1 ;PUSH 入栈指令

MOV P1,#0F6H ;A道红灯亮;B道红灯亮

MOV R2,#30 ;15秒延时的循环次数

DELAY0:

LCALL DELAY

DJNZ R2,DELAY0

POP P1 ;恢复P1口数据 POP是出栈指令

RETI ;返回主程序

ORG 0300H

INT11:

CLR EA ;关中断 EA为总中断

PUSH P1 ;保护现场

PUSH 04H

PUSH 05H

PUSH 06H

SETB EA ;开中断

JNB P3.0,AP0 ;A道无车,转向判断B道(JNB比较转移指令。当P3.0是0时就转移执行AP0,否则就顺序执行。)

MOV P1,#0F3H;A道绿灯亮,B道红灯亮

SJMP DEL1 ;转向15秒延时程序

AP0:

JNB P3.1,EXIT ;B道无车,退出中断

MOV P1,#0DEH;A道红灯亮,B道绿灯亮

DEL1 :

MOV R3,#30 ;15s延时的循环次数

NEXT :

LCALL DELAY

DJNZ R3,NEXT ;15秒未到循环继续

EXIT :

CLR EA

POP 06H ;恢复现场

POP 05H

POP 04H

POP P1

SETB EA

RETI ;返回原程序

ORG 0350H

DELAY : MOV R4,#20;0.5秒延时子程序参考程序中为#10,经实验发现只能延时0.25s故改为#20,以达到实验目的。

LP1 : MOV R5,#50

LP2 : MOV R6,#248

NOP

LP3: DJNZ R6,LP3

DJNZ R5,LP2

DJNZ R4,LP1

RET

END

交通信号灯与控制管脚的对应关系如下:

控制状态

P1口控制码

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

未用

未用

B道

绿灯

B道

黄灯

B道

红灯

A道

绿灯

A道

黄灯

A道

红灯

A绿灯亮、B红灯亮

F3H

1

1

1

1

0

0

1

1

A黄灯亮、B红灯亮

F5H

1

1

1

1

0

1

0

1

A红灯亮、B绿灯亮

DEH

1

1

0

1

1

1

1

0

A红灯亮、B黄灯亮

EEH

1

1

1

0

1

1

1

0

A红灯亮、B红灯亮

F6H

1

1

1

1

0

1

1

0

2 实验步骤及实验数据记录

先接线按下表所示的管脚与LED或逻辑开关的对应关系接线。在Proteus8中原理图绘制界面中将接线接好。

管脚

P1.0

P1.1

P1.2

P1.3

P1.4

P1.5

P3.0

P3.1

P3.3

P3.2

LED或逻辑开关

L3

L1

L2

L7

L5

L6

K1

K2

K3

K8

控制对象

A红灯

A黄灯

A绿灯

B红灯

B黄灯

B绿灯

A道

B道

使有车车道放行低电平有效

紧急车辆放行低电平有效

高电平表示有车低电平表示无车

接线完成后如图所示:

2.输入程序,在Proteus8中SourceCode界面将程序输入完成后试运行保证程序正确。

出现编译成功后进行下一步。

3运行程序。

4.观察六只发光二极管的亮灭规律。

实验中六只发光二极管亮灭规律:(0代表灭,1代表亮,2代表闪)

运行时间(s)

A绿

A黄

A红

B绿

B黄

B红

0

1

0

0

0

0

1

44

2

0

0

0

0

1

47

0

1

0

0

0

1

50

0

0

1

1

0

0

74

0

0

1

2

0

0

77

0

0

1

0

1

0

80

1

0

0

0

0

1

八十秒后开始重复0-80秒内的亮灭规律。

5.

部分连接图如图所示。

1) 在A红灯、B绿灯亮时,先将K1拨至高电平(表示A道有车)、K2拨至低电平(表示B道无车),再将K3拨至低电平使有车车道(A道)放行,A绿灯、B红灯同时亮5s后返回原先状态。

 对逻辑开关K1、K2、K3的操作对应于SW2开关,闭合SW2后,A红灯灭,绿灯亮,B绿灯灭,红灯亮。15s后恢复回闭合开关前的的亮灯状态。

2) 在A绿灯、B红灯亮时,先将K1拨至低电平(表示A道无车)、K2拨至高电平(表示B道有车),再将K3拨至低电平使有车车道(B道)放行,A红灯、B绿灯同时亮5s后返回原先状态。

 对逻辑开关K1、K2、K3的操作对应于SW1开关,闭合SW1后,A绿灯灭,红灯亮,B红灯灭,绿灯亮。15s后恢复回闭合开关前的的亮灯状态。

(提示:K3拨至低电平后,应在5s内改为高电平,否则,单片机可能将再一次响应中断。)

6.不论A道、B道的信号灯处于什么状态,将K8拨至低电平后,A红灯、B红灯同时亮20s后返回原先状态。(提示:K8拨至低电平后,应在20s内改为高电平,否则,单片机可能将再一次响应中断。) 对逻辑开关K8的操作对应于JINJI开关,闭合JINJI后,A只有红灯亮,B也只有红灯亮。20s后恢复回闭合开关前的的亮灯状态。

3 实验数据分析

1. 一道有车而另一道无车时,K3拨至低电平即向单片机发出中断请求(低优先级别);若此时单片机正在执行主程序,会响应中断转入到相应的中断服务程序,先依次查询 A、B 车道的空闲状态,再去控制A、B车道的信号灯;若此时单片机正在执行紧急车辆通过时中断服务程序,单片机不会响应中断。

2. 紧急车辆通过时,K8拨至低电平即向单片机发出中断请求(高优先级别),不论单片机正在执行主程序还是一道有车而另一道无车时的中断服务程序,会响应中断转入到相应的中断服务程序。

3.在进行步骤5 1)或2)操作时,若在闭合开关后没有在5s内断开开关,则在15秒时无法按时恢复回闭合开关时的亮灯状态。

4.操作过程中发现,若操作SW1开关后亮灯状态已经发生改变,则在15秒内再操作SW2开关则无法继续使亮灯状态改变。

三 总结与体会

1 实验任务完成情况

本实验完成情况良好。通过老师的精心指导、本人的不懈努力和同学的热心帮助,能够基本上完成所有实验内容,且在实验过程中对单片机的了解更加深入了。但也无法避免地遇到一些问题,比如对实验程序代码的理解不够深入,只停留在表面,且对51单片机的111条指令仍比较陌生,只能记住一些特别常用的。对于此我的做法是,在分析实验程序的过程中,一遇到不熟悉的指令就百度搜索一下加深印象。在反复的搜索过程中我也记住了不少指令。通过课程的学习,目前达到的水平是能够基本看懂实验程序,能够绘制简单原理图,但仍无法做到独立编写实验程序。

2 实验体会、收获、建议回答问题

通过对该实验的学习,本人也有了许多不小的收获。对于一位非电技专业的学生来说,我在学习单片机的过程中确实存在许多问题。老师讲的东西很多在课堂上都无法及时弄明白,必须要靠课余时间的学习。所以起初在做该实验的时候也是感觉苦难重重,觉得自己肯定是无法完成的,但我不想轻易放弃,将老师上用的课件反复查看,发现很多上课没有注意到的重要知识点,这让我的实验变得更加容易完成了许多。我觉得通过本次实验我的最大收获是学会了如何解决难题。首先要做的就是对自己有信心,相信自己一定能够完成。其次才是去认真解决问题。