交通急救控制系统设计.docx

上传人:b****6 文档编号:8506377 上传时间:2023-01-31 格式:DOCX 页数:24 大小:173.24KB
下载 相关 举报
交通急救控制系统设计.docx_第1页
第1页 / 共24页
交通急救控制系统设计.docx_第2页
第2页 / 共24页
交通急救控制系统设计.docx_第3页
第3页 / 共24页
交通急救控制系统设计.docx_第4页
第4页 / 共24页
交通急救控制系统设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

交通急救控制系统设计.docx

《交通急救控制系统设计.docx》由会员分享,可在线阅读,更多相关《交通急救控制系统设计.docx(24页珍藏版)》请在冰豆网上搜索。

交通急救控制系统设计.docx

交通急救控制系统设计

 

 

交通急救控制系统设计

 

 

摘要:

《单片机原理与应用》是一门实践性和实用性都很强的课程,学习的目的在于应用。

本课程设计是配合“单片机原理与应用”课堂教学的一个重要的实践教学环节,它能起到巩固课堂和书本上所学知识,加强综合能力,提高系统设计水平,启发创新思想的效果。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。

那么靠什么来实现交通的井然秩序呢?

靠的是交通信号灯的自动指挥系统,来实现交通的井然有序。

交通信号灯控制方式很多。

本系统采用美国ATMEL公司生产的单片机AT89S51,以及其它芯片来设计交通灯控制。

实现了通过AT89S51芯片的P1口设置红、绿灯点亮的功能,通过AT89S51芯片的RXD、TXD输入、输出设置显示时间。

交通灯的点亮采用发光二极管实现,时间的显示采用七段数码管实现。

单片机系统采用的直流供电。

为了系统稳定可靠,系统内集成了“看门狗”芯片,避免了系统因为死机而停止工作的情况发生。

系统实用性强、操作简单、扩展性好。

一、设计课题:

4

(一)设计任务要求4

(二)系统设计说明4

(三)系统设计思路5

1)紧急情况处理功能及其实现5

2)倒计时计数功能及其实现5

二、硬件设计5

(一)硬件框图5

(二)74LS273地址锁存器6

(三)8279键盘/显示模块7

三、软件设计9

(一)主要模块流程图9

1)急救车红绿灯显示9

2)急救车路过中断显示10

3)整体流程图10

五、源程序11

六、小结21

1、设计课题:

交通急救控制系统设计

(1)设计任务要求

1)允许按十字路口交通需求设置控制状态

2)允许修改各状态下的通行时间

3)有剩余时间显示

4)全部按LED显示

(2)系统设计说明

1)可以自增系统功能

2)允许用MCS-51系列或其他类型的单片机

3)系统程序采用汇编或C语言编程

4)硬件原理图采用电子CAD绘制

(3)系统设计思路

1)紧急情况处理功能及其实现

在十字交通路口常出现的紧急情况,若不及时处理将形成不良隐患。

比如,交道口的行人有紧急情况发生,那么交警可以对信号灯进行手动控制,按下紧急情况处理键,通过软件使所有红灯亮,路口车辆禁行,行人通行,直至紧急情况结束后再转成常规的自动状态。

2)倒计时计数功能及其实现

本系统使用数码管完成倒计时显示功能。

以南北方向为例,数码管显示的数值从绿灯的设置时间最大值往下减,每秒钟减1,一直减到0。

然后又从红灯的设置时间最大值往下减,一直减到0。

接下来又显示绿灯时间,如此循环。

系统共有4个二位的LED数码管,分别放置在模拟交通灯控制板上的四个路口。

因为相同直线方向上的数码管应该显示同样的内容,所以我们可以把它们同样对待。

也就是说各个方向的数码管个位(把数码管第二位定义为个位,第一位定义为十位)用一根信号线控制,十位用另一根信号线控制。

这里采用动态显示。

考虑到单片机的P1口驱动数码管七位段码的能力,我们利用一片74LS245芯片来作为数码管的位驱动芯片。

经实验证明,该8路同相三态双向总线收发器芯片的驱动能力完全可以满足本设计的显示要求。

2、硬件设计

(1)

接口电路

AT89S51

单片机系统

硬件框图

8279

键盘控制

LED显示

74LS273

系统各部分工作:

(1)程序设置初始时间,通过AT89S51单片机内部相应寄存器来实现。

(2)由AT89S51单片机的定时器每秒钟通过P1.0口向74LS273的数据端口送信息,由74LS273的输出口显示红、绿、黄灯的点亮时间情况;由双色LED灯的DG1.DG2.DR1.DR2显示每个灯的点亮情况。

(3)AT89S51通过程序设置各个信号灯的点亮时间,通过程序设置红绿灯亮闪时间为10秒循环,由AT89S51的P1口向74LS273的数据口输出。

(4)通过AT89S51单片机的P1口来控制系统是工作。

(5)8279键盘控制模块:

A键控制红绿灯开始运行以及中断后的重新启动。

B键暂停进入调时模式。

C键中断开始救护车模式。

数字键在进入调时模式后修改时间。

(二)74LS273地址锁存器

以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理。

74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作数据锁存器,地址锁存器。

(三)8279键盘/显示模块

8279键盘显示接口电路,编程实现按键的读取,并将按键值显示在数码管上。

 8279可按其功能分为:

键盘功能块;显示功能块;控制功能块,与CPU接口功能块控制功能块包括控制和定时寄存器,定时和控制,扫描计数器三部分,它主要用来控制键盘和显示功能块工作。

控制和定时寄存器:

用于存贮来自CPU的编程命令,CPU对8279编程以确定键盘与显示器工作方式和其它工作条件时,先把命令控制数据放到数据总线上,然后使A0=1WR=0CS=0,并在WR上升沿把命令键存在控制和定时寄存器中,并经译码,建立适当的功能。

定时和控制:

它含基本的定时计数器,第一个计数器是一个分频系数为2-31的前置定时器。

分频系数可由程序预置,使内部频率为100KHz,从而能给出5.1ms键盘扫描时间和10.3ms反跳时间,其它计数器将此基本频率分频后,提供适当的按键扫描。

行扫描.键盘阵列扫描以及显示器扫描次数。

扫描计数器:

扫描计数器有两种工作方式,在编码工作方式时,计数器提供一种二进制计数。

通过管脚SL0-SL3输出后经外部译码才能提供给键盘和显示器的扫描作用,在译码工作方式时,扫描计数器对最低二位进行译码。

SL0-SL3输出4选1的译码信号,作为显示器和键盘的译码扫描。

键盘功能块包括:

返回缓冲器,键盘反跳及控制,8x8FIFO传感器RAM,FIFO/传感器RAM状态.

3、软件设计

(1)主要模块流程图

1)急救车红绿灯显示

2)急救车路过中断显示

3)整体流程图

初始化完成后,调用按键扫描程序,取得按键状态,并根据当前系统状态调用相应的子程序。

A键初始化开始运行程序,B键暂停并进入调时模式,此时按数字键依次修改东西南北各方向绿灯时间,再次按A键重启。

C键进入中断模式,双色LED显示全为红色,再次按A键重启。

5、源程序

Z8279EQU08701H;8279状态/命令口地址

D8279EQU08700H;8279数据口地址

LEDMODEQU00H;左边输入八位字符显示

;外部译码键扫描方式,双键互锁

LEDFEQEQU2FH;扫描速率

LEDCLSEQU0C1H;清除显示RAM

LEDWR0EQU80H;设定的将要写入的显示RAM地址

READKBEQU40H;读FIFORAM地址0的命令字

ORG0000H

AJMPSTART

ORG001BH;INTT1入口地址

AJMPINT_T1

ORG0040H

START:

MOVSP,#60H

LCALLINIT8279;初始化8279

MOVR3,#9;红灯亮的时间

MOVR2,#5;绿灯亮的时间

MOVR1,#4;黄灯亮的时间

MOVR0,#5;急救车亮的时间

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MOVR0,#36H

MOV@R0,#9

MOVR0,#37H

MOV@R0,#5

MOVR0,#38H

MOV@R0,#4

MOVR0,#39H

MOV@R0,#0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MOVTMOD,#10H

MOVTL1,#00H;50mS的时间常数

MOVTH1,#04CH

MOVR7,#20

MOVR6,#0

SETBET1

SETBEA;允许中断

WAIT:

LCALLGETKEY;读键盘

CJNEA,#0FFH,CONT;判断是否有键输入

MOVA,B

CJNEA,#3CH,KEY_A;输入键是'C',转CLEAR_T

LCALLCLEAR_T

KEY_A:

CJNEA,#3AH,KEY_B;输入键是'A',转START_T

LCALLSTART_T

KEY_B:

CJNEA,#3BH,CONT;输入键是'B',转SET_T

LCALLSET_T

CONT:

CJNER6,#0FFH,WAIT;若无秒标志则循环

;;;;;;;;;;;;;;;;;;;;中断后的处理显示情况;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CJNER0,#0FFH,HUIFU

CJNER2,#0FFH,XIANS3

MOVR2,#0

DECR1

XIANS4:

LCALLDISPLAY3

LCALLDISPLAY6

CJNER1,#0,HUIFU

MOVR0,#0FEH

MOVR3,36H

MOVR2,37H

MOVR1,38H

SJMPHUIFU

XIANS3:

LCALLDISPLAY2

LCALLDISPLAY6

SJMPHUIFU

HUIFU:

MOVR6,#0;清标志

SJMPWAIT;循环

CLEAR_T:

;时间清零子程序

CLRTR1;关计数器

MOVR3,#0H

MOVR2,#10

MOVR1,#0H

MOVR0,#1

MOVP1,#0FH

LCALLDISPLAY7

MOVA,R0

DECA

MOVR0,A

JZST

POP3

POP2

POP1

POP0

POPACC

POPDPL

POPDPH

RET

START_T:

;电子钟计时子程序

SETBTR1

LCALLDISPLAY1

LCALLDISPLAY4

RET

SET_T:

;设置初值子程序

CLRTR1;关计数器

MOVR4,#7

LCALLGETWORD;读小时数

CJNEA,#0FFH,INVALID;判断输入合法性

MOVA,B

MOVB,#10

DIVAB

SWAPA

ADDA,B

MOVR3,A;保存输入的值

MOVR0,#36H

MOV@R0,A

MOVR4,#5

LCALLGETWORD;读分钟数

CJNEA,#0FFH,INVALID;判断输入合法性

MOVA,B

MOVB,#10

DIVAB

SWAPA

ADDA,B

MOVR2,A;保存输入的值

MOVR0,#37H

MOV@R0,A

MOVR4,#3

LCALLGETWORD;读分钟数

CJNEA,#0FFH,INVALID;判断输入合法性

MOVA,B

MOVB,#10

DIVAB

SWAPA

ADDA,B

MOVR1,A;保存输入的值

MOVR0,#38H

MOV@R0,A

MOVR4,#1

LCALLGETWORD;读10毫秒数

CJNEA,#0FFH,INVALID;判断输入合法性

MOVA,B

MOVB,#10

DIVAB

SWAPA

ADDA,B

MOVR0,#39H

MOV@R0,A

MOVR0,A;保存输入的值

AJMPSET_TOK

INVALID:

LCALLCLEAR_T;时间清零

SET_TOK:

RET

GETWORD:

;读数子程序

WKEY1:

LCALLGETKEY;读键盘

CJNEA,#0FFH,WKEY1;无键输入,则再读

MOVA,B

ADDA,#0C6H

JCERROR1;判断输入是否大于9

MOVA,B

SUBBA,#30H

JCERROR1;判断输入是否小于0

MOVR5,A

LCALLDISLED;显示输入的字符

MOVB,#10

MULAB

PUSHACC;保存输入的值

WKEY2:

LCALLGETKEY;读键盘

CJNEA,#0FFH,WKEY2;无键输入则再读

MOVA,B

ADDA,#0C6H;判断输入是否大于9

JCERROR2

MOVA,B

SUBBA,#30H;判断输入是否小于0

JCERROR2

DECR4

MOVR5,A

LCALLDISLED;显示输入的字符

MOVB,A

POPACC

ADDA,B

MOVB,A;把得到的值存在B

MOVA,#0FFH;置合法输入标志

AJMPKEYOK

ERROR2:

POPACC

ERROR1:

MOVA,#0;置非法输入标志

KEYOK:

RET

INIT8279:

;8279初始化子程序

PUSHDPH;保存现场

PUSHDPL

PUSHACC

NOP

MOVDPTR,#Z8279

MOVA,#LEDMOD;置8279工作方式

MOVX@DPTR,A

MOVA,#LEDFEQ;置键盘扫描速率

MOVX@DPTR,A

MOVA,#LEDCLS;清除LED显示

MOVX@DPTR,A

POPACC;恢复现场

POPDPL

POPDPH

RET

;读取键盘子程序

;输入:

无;输出:

B:

读到的键码A:

按键的标志

GETKEY:

PUSHDPH;保存现场

PUSHDPL

PUSHPSW

MOVDPTR,#Z8279

MOVXA,@DPTR;读8279状态

ANLA,#07H;屏蔽D7-D3

JNZGETVAL;判断是否有键输入

MOVA,#0H;置标志(无键输入)

SJMPNKBHIT

GETVAL:

MOVA,#READKB;读FIFORAM命令

MOVX@DPTR,A

MOVDPTR,#D8279

MOVXA,@DPTR;读键

ANLA,#3FH;屏蔽SHIFT和CTRL键

MOVDPTR,#KEYCODE;键码表起始地址

MOVCA,@A+DPTR;查表

MOVB,A;置返回键值

MOVA,#0FFH;置标志(有键输入)

NKBHIT:

POPPSW;恢复现场

POPDPL

POPDPH

RET

;显示字符子程序

;输入:

R4,位置R5,值

DISLED:

PUSHDPH;保存现场

PUSHDPL

PUSHACC

MOVA,#LEDWR0;置显示起始地址

ADDA,R4;加位置偏移量

MOVDPTR,#Z8279

MOVX@DPTR,A;设定显示位置

MOVDPTR,#LEDSEG;置显示常数表起始位置

MOVA,R5

MOVCA,@A+DPTR;查表

MOVDPTR,#D8279

MOVX@DPTR,A;显示数据

POPACC;恢复现场

POPDPL

POPDPH

RET

DELAY:

;延时子程序

PUSH2

PUSH0;保存现场

PUSH1

MOV1,#0H

DELAY2:

MOV0,#0B2H

DJNZ0,$

DJNZ1,DELAY2

DJNZ2,DELAY

POP1;恢复现场

POP0

POP2

RET

INT_T1:

;INT_T1中断服务子程序

PUSHDPH;保护现场

PUSHDPL

PUSHACC

PUSHPSW

CLRTR1

MOVTL1,#00H;50mS定时常数

MOVTH1,#4CH

SETBTR1

DJNZR7,EXIT;判断1秒种到了没有

MOVR7,#20

MOVR6,#0FFH

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DECR3

DECR2

CJNER0,#0FFH,ABC

SJMPEXIT

ABC:

CJNER2,#0FFH,XIANS1

MOVR2,#0

DECR1

CJNER1,#0FFH,XIANS2

MOVR3,36H

MOVR2,37H

MOVR1,38H

MOVR0,#0FFH

SJMPEXIT

XIANS1:

LCALLDISPLAY1

LCALLDISPLAY4

SJMPEXIT

XIANS2:

LCALLDISPLAY1

LCALLDISPLAY5

SJMPEXIT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EXIT:

POPPSW;恢复现场

POPACC

POPDPL

POPDPH

RETI;中断返回

;;;;;;;;;;;;;;东西显示红灯;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISPLAY1:

MOVA,R3

ANLA,#0FH

MOVR5,A

MOVR4,#6

LCALLDISLED

MOVR4,#4

LCALLDISLED

MOVA,R3

SWAPA

ANLA,#0FH

MOVR5,A

MOVR4,#7

LCALLDISLED

MOVR4,#5

LCALLDISLED

RET

;;;;;;;;;;;;;;东西显示绿灯;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISPLAY2:

MOVP1,#0A5H

MOVA,R2

ANLA,#0FH

MOVR5,A

MOVR4,#6

LCALLDISLED

MOVR4,#4

LCALLDISLED

MOVA,R2

SWAPA

ANLA,#0FH

MOVR5,A

MOVR4,#7

LCALLDISLED

MOVR4,#5

LCALLDISLED

RET

;;;;;;;;;;;;;;东西显示黄灯;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISPLAY3:

MOVP1,#05H;南北红灯,东西黄灯

MOVA,R1

ANLA,#0FH

MOVR5,A

MOVR4,#6

LCALLDISLED

MOVR4,#4

LCALLDISLED

MOVA,R1

SWAPA

ANLA,#0FH

MOVR5,A

MOVR4,#7

LCALLDISLED

MOVR4,#5

LCALLDISLED

RET

;;;;;;;;;;;;;;;;;;;;南北显示绿灯;;;;;;;;;;;;;;;;;;

DISPLAY4:

MOVP1,#5AH;东西红,南北绿

MOVA,R2

ANLA,#0FH

MOVR5,A

MOVR4,#0

LCALLDISLED

MOVR4,#2

LCALLDISLED

MOVA,R2

SWAPA

ANLA,#0FH

MOVR5,A

MOVR4,#3

LCALLDISLED

MOVR4,#1

LCALLDISLED

RET

;;;;;;;;;;;;;;;;;南北显示黄灯;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISPLAY5:

MOVP1,#0AH;南北黄灯,东西红灯

MOVA,R1

ANLA,#0FH

MOVR5,A

MOVR4,#0

LCALLDISLED

MOVR4,#2

LCALLDISLED

MOVA,R1

SWAPA

ANLA,#0FH

MOVR5,A

MOVR4,#3

LCALLDISLED

MOVR4,#1

LCALLDISLED

RET

;;;;;;;;;;;;;;南北显示红灯;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISPLAY6:

MOVA,R3

ANLA,#0FH

MOVR5,A

MOVR4,#0

LCALLDISLED

MOVR4,#2

LCALLDISLED

MOVA,R3

SWAPA

ANLA,#0FH

MOVR5,A

MOVR4,#3

LCALLDISLED

MOVR4,#1

LCALLDISLED

RET

;;;;;;;;;;;;;;南北显示红灯;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISPLAY7:

MOVA,R0

ANLA,#0FH

MOVR5,A

MOVR4,#0

LCALLDISLED

MOVR4,#2

LCALLDISLED

MOVR4,#4

LCALLDISLED

MOVR4,#6

LCALLDISLED

MOVA,R0

SWAPA

ANLA,#0FH

MOVR5,A

MOVR4,#3

LCALLDISLED

MOVR4,#1

LCALLDISLED

MOVR4,#5

LCALLDISLED

MOVR4,#7

LCALLDISLED

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LEDSEG:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;'0,1,2,3,4,5,6,7'

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F'

;键盘键码表

KEYCODE:

DB30H,31H,32H,33H,34H,35H,36H,37H;'0,1,2,3,4,5,6,7'

DB38H,39H,3AH,3BH,3CH,3DH,3EH,3FH;'8,9,A,B,C,D,E,F'

END

6、小结

通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1