好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

模拟交通灯设计报告

模拟交通灯设计报告 本文关键词:交通灯,模拟,报告,设计

模拟交通灯设计报告 本文简介:模拟交通灯设计报告组员:孟宇伟,侯晨涛,孙玉鼎【摘要】当今世界正处于一个自动化时代,交通灯控制等很多行业的设备都需要计算机来控制。因此,一个好的交通灯控制系统能在道路拥挤、违章控制等方面起到很大作用。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通

模拟交通灯设计报告 本文内容:

模拟交通灯设计报告

组员:孟宇伟,侯晨涛,孙玉鼎

【摘要】

当今世界正处于一个自动化时代,交通灯控制等很多行业的设备都需要计算机来控制。因此,一个好的交通灯控制系统能在道路拥挤、违章控制等方面起到很大作用。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机STC89C52为中心器件来设计交通灯控制器,实现了红、黄、绿灯燃亮功能;红黄绿灯循环点亮。实现模拟交通灯的功能。本系统实用性强、操作简单、扩展功能强。

关键词:单片机(89C52)交通灯数码管LED

一、

整体方案设计

1.

基本要求

在十字路的东西南北方向各设置一组红黄绿灯以及一个转向灯并设置一个两位数码管,编程实现十字路口红黄绿灯交替点亮与数码管倒计时显示。

2.

实现功能

1)

正常情况

东西车道与南北车道交替通行,每次通行时间为20秒,东西方向红灯亮30秒同时其方位的数码管倒计时30秒,南北向绿灯亮20秒之后黄灯闪5秒同时其方位的数码管倒计时25秒,之后南北向转向灯亮5秒数码管倒计时5秒。东西向绿灯亮20秒之后黄灯闪5秒同时南北向红灯亮30秒。

2)

紧急情况

a)

通过按压“禁止通行键”可使东西南北全部红灯,即全都不通,以应付突发情况。

b)

按压“东西紧急键”,则东西方向绿灯,南北方向红灯;再按一次解除东西紧急通行状态。按压“南北紧急键”,则南北方向绿灯,东西方向红灯;再按一次后解除南北紧急通状态。

c)

按压“东西转向键”,则东西转向灯开;按压“南北转向键”,则南北转向灯开。

3)

交通灯显示状态

东西方向(简称A方向)

南北方向(简称B方向)

状态说明

红灯

黄灯

绿灯

转向

红灯

黄灯

绿灯

转向

A方向通行,B方向禁行

闪烁

A方向警告,B方向禁行

A方向左转

A方向禁行,B方向通行

闪烁

A方向禁行,B方向警告

B方向左转

3.

总体设计方案框图

5v直流稳压电源

独立键盘控制

基于STC89C52的单片机最小系统

两位共阴极数码管

LED模拟交通灯

二、

方案原理

采用单片机STC89C52的I/O口P1口通过锁存器控制共阴极数码管,,在十字路口的四组红、黄、绿交通灯及转向灯中,由单片机P0口管脚分别控制,由于交通灯为发光二极管且阳极通过限流电阻和电源正极连接,因此I/O口输出低电平时,与之相连的灯会亮,并通过数码管显示时间倒计时。紧急情况的工作模式转换由人工控制

计时是利用单片机内部的一个T0定时器/计数器来实现,它的处理过程如下:首先设定单片机内部的一个定时器/计数器工作于定时方式,先对它的定时进行校准,校准为50ms,之后以20个定时溢出为标准为1s进行计时同时根据条件语句与循环语句对数码管的计时及LED的燃亮进行调控。

本系统共用4个两位数码管,数码管显示的信息用8个内存单元存放,这8个内存单元称为显示缓冲区。在本系统中数码管显示采用软件译码动态显示。在存储器中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出所显示的信息的字段码,从P1口输出,同时在P2口将对应的位选码输出选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。

三、

硬件设计

1.

单片机最小系统

89C52单片机是硬件电路最核心的部分,时钟电路晶振使用11.0592HZ

2.

电源电路设计

电源使用自制+5V直流稳压电源

3.

数码管显示电路

数码管采用两位共阴极数码管,东西南北各一个

4.

LED交通灯电路

东西南北各三个红黄绿LED模拟交通灯,外加一个转向灯

四、

软件设计

1.

程序流程图

主程序

开始

设置中断工作方式、触发方式、初始化

是否有中断

运行过程

执行中断

Y

N

中断结束,退出中断,返回

N

Y

Y

N

Y

Y

N

N

Y

运行过程

SN:绿灯(20),EW:红灯(30)

Num60是否到10

SN:黄灯亮,EW:红灯

Num60是否到5

SN:黄灯灭,EW:红灯,转向亮(5)

Num60是否到0秒

N

EW:绿灯(20),SN:红灯(30)

Num60是否到40

EW:黄灯亮(5),SN:红灯

Num60是否到35

EW:黄灯灭,EW:红灯,EW转向亮(5)

Num60是否到30s秒

N

数码管显

Y

Y

数码管显示程序

获取当前通行剩余时间送h、l

E/S/W/N状态送P1口

位选码送P3口

调用Delay延时

四位显示完?

返回主程序

T0中断

定时计数初值

50ms计数(num)加1

判断1S(num=20?)到否

Num=0

Num60--

恢复现场

中断返回

获取P2口信号

Key1==0

Key2==0

Key5==0

Key4==0

Key3==0

关闭/开始计数器

关闭/开始计数

关闭/开始计数

关闭/开始计数

关闭/开始计数

Keycts=1

Keycts=2

Keycts=3

Keycts=4

Keycts=5

红灯全亮

南北红

东西绿

南北绿

东西红

红灯全亮

东西转向

红灯全亮

南北转向

按键

2.

程序清单

#include

sbit

key1=P2^0;

sbit

key2=P2^1;

sbit

key3=P2^2;

sbit

key4=P2^3;

sbit

key5=P2^4;

unsigned

char

code

table[]={

0x3f,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f};

void

delayms(unsigned

int

x);

void

display(unsigned

char

x,unsigned

char

y,unsigned

char

a,unsigned

char

b);

void

keyscan();

unsigned

char

keycts,num1,num11,num22,ge1,shi1,ge2,shi2;

char

num60=60;

void

main()

{

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

if(TR0==0)

{

if(keycts==1)

P0=0xbe;

else

if(keycts==2)

P0=0xee;

else

if(keycts==3)

P0=0xbb;

else

if(keycts==4)

P0=0x3e;

else

P0=0xb6;

}

else

{

if(num60-40>0)

{

num11=num60-30;

num22=num60-35;

P0=0xee;

}

else

if(num60-35>0)

{

num11=num60-30;

num22=num60-35;

if(num10)

{

num11=num60-30;

num22=num60-30;

P0=0x3e;

}

else

if(num60-10>0)

{

num11=num60-5;

num22=num60;

P0=0xbb;

}

else

if(num60-5>0)

{

num11=num60-5;

num22=num60;

if(num10;i--)

for(j=110;j>0;j--);

}

void

T0_time()interrupt

1

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

num1++;

if(num1==20)

{

num1=0;

num60--;

if(num60==0)

num60=60;

}

}

void

keyscan()

{

if(key1==0)

{

delayms(10);

if(key1==0)

{

while(!key1);

TR0=~TR0;

keycts=1;

}

}

if(key2==0)

{

delayms(10);

if(key2==0)

{

while(!key2);

TR0=~TR0;

keycts=2;

}

}

if(key3==0)

{

delayms(10);

if(key3==0)

{

while(!key3);

TR0=~TR0;

keycts=3;

}

}

if(key4==0)

{

delayms(10);

if(key4==0)

{

while(!key4);

TR0=~TR0;

keycts=4;

}

}

if(key5==0)

{

delayms(10);

if(key5==0)

{

while(!key5);

TR0=~TR0;

keycts=5;

}

}

}

五、

总结

我们对本次制作的作品还是比较满意的,经过两周的设计、分析和焊接,我们做出了所需要的东西,终于圆满地完成此次比赛的作品。虽然在这个过程中也遇到一些困难,但通过与同学的交流和自己查资料,我们对电子设计有了更深的体会。通过本次比赛我们感觉到自己对各种元器件的功能特性不是很熟悉,在用到所需元件时都要进行查阅,在今后不仅要增加自己的理论学习,还要进一步提高自己的动手能力,全面地提高自己的电子设计的能力。

在这次比赛中,我们要感谢芯空科协给我们提供的机会,在此期间,我们不仅学到了许多新的知识,而且也开阔了视野,提高了自己的动手能力。最后,我还要感谢帮助过我的学长,他们也为我们解决了不少我们不太明白的设计上的难题。

六、

参考文献

【1】

郭天祥

《新概念51单片机C语言教程》

电子工业出版社,2011

【2】

杨欣,莱·诺克斯,王玉凤,刘湘黔

《电子设计从零开始(第二版)》

清华大学出版社,2010

【3】

谭浩强

《C程序设计(第三版)》

清华大学出版社,2005

附件:模拟交通灯器件清单

名称

规格

数量

单片机

STC89C52

1

单片机插座

40引脚

1

锁存器

74HC573

1

锁存器插座

20引脚

1

晶振

11.0592MHZ

1

按键

6

数码管

两位共阴极

4

发光二极管

红、黄、绿

16

变压器

220V

~

6V

1

杜邦线

若干

二极管

1N4007

4

电解电容

1000μF

2

瓷介电容

0.1μF

3

瓷介电容

30pF

2

电阻

10k

2

电阻

4.7k

4

电阻

1k

1

电阻

350Ω

9

排阻

10k

1

焊锡丝

若干

18

TAG标签: