完整版基于STC90C51单片机的智能交通灯设计doc.docx

上传人:b****5 文档编号:4340805 上传时间:2022-11-30 格式:DOCX 页数:51 大小:25.22KB
下载 相关 举报
完整版基于STC90C51单片机的智能交通灯设计doc.docx_第1页
第1页 / 共51页
完整版基于STC90C51单片机的智能交通灯设计doc.docx_第2页
第2页 / 共51页
完整版基于STC90C51单片机的智能交通灯设计doc.docx_第3页
第3页 / 共51页
完整版基于STC90C51单片机的智能交通灯设计doc.docx_第4页
第4页 / 共51页
完整版基于STC90C51单片机的智能交通灯设计doc.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

完整版基于STC90C51单片机的智能交通灯设计doc.docx

《完整版基于STC90C51单片机的智能交通灯设计doc.docx》由会员分享,可在线阅读,更多相关《完整版基于STC90C51单片机的智能交通灯设计doc.docx(51页珍藏版)》请在冰豆网上搜索。

完整版基于STC90C51单片机的智能交通灯设计doc.docx

完整版基于STC90C51单片机的智能交通灯设计doc

精心整理

 

基于STC90C51单片机的交通灯设计

 

1、设计题目

 

基于STC90C51单片机的智能交通灯设计

 

2、设计要求

 

2.1、系统功能

 

(1)按照交通规则,控制宝田路和前进路方向及其人行道的交通信号灯(红﹑黄﹑绿)的通断。

(2)设置信号灯的通断时间。

(3)可人工干预,使交通信号灯开启不同模式。

2.2、性能参数:

 

(1)电源:

5VDC

 

(2)LED灯电流:

10mA

 

(3)定时时间:

10s-200s

 

3、总体设计

 

根据系统功能和设计要求,系统采用单片机控制

 

的方案,基于HC6800S开发板,由STC90C51,

 

74HC573,交通灯模块,动态数码显示管以及4*2

精心整理

独立按键组成。

 

3.1系统工作原理

 

在十字路口,分为宝田路和前进路,正常情况下,

 

在任一时刻只有一个方向通行,另一方向禁行,

 

持续一定时间,经过短暂的过渡时间,将通行禁

 

行方向对换。

其具体状态如下:

?

 

(1)普通模式:

 

状态一:

宝田路通行阶段(宝田路及其人行道

亮绿灯30秒、前进路及其人行道亮红灯

30秒);

状态二:

黄灯阶段(宝田路和前进路亮黄灯

5

秒、两侧人行道亮红灯5秒);

状态三:

前进路通行阶段(前进路及其人行道

亮绿灯30秒、宝田路及其人行道亮红灯

30秒);

状态四:

黄灯阶段(宝田路和前进路亮黄灯

5

秒、两侧人行道亮红灯5秒);

返回到状态一。

(2)高峰期模式(设宝田路为主干道):

按下按键2(key2),开启高峰期模式;

状态一:

宝田路通行阶段(宝田路及其人行道

亮绿灯60秒、前进路及其人行道亮红灯

30秒);

精心整理

状态二:

黄灯阶段(宝田路和前进路亮黄灯

5

秒、两侧人行道亮红灯5秒);

状态三:

前进路通行阶段(前进路及其人行道

亮绿灯30秒、宝田路及其人行道亮红灯

30秒);

状态四:

黄灯阶段(宝田路和前进路亮黄灯

5

秒、两侧人行道亮红灯5秒);

返回到状态一;

按键2释放,回到普通模式。

(3)紧急模式:

按下按键1(key1),开启紧急模式,所有道路及其

人行道均红灯亮,数码管不显示。

释放按键

1,回

到普通模式。

3.2?

单片机交通控制系统的功能要求?

 

本设计能模拟基本的交通控制系统,用红绿黄

 

灯表示禁行,通行和等待的信号发生,还能进行倒

 

计时显示,通行时间调整功能和紧急情况全面禁

 

行。

?

 

(1)倒计时显示?

 

倒计时显示可以提醒驾驶员在信号灯灯色发生

 

改变的时间、在“停止”和“通过”两者间作出合

精心整理

适的选择。

驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。

倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的一种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择?

?

 

(2)时间的设置?

 

本设计中对时间进行了人为控制设置,正常情

 

况下宝田路和前进路的绿灯通行与红灯禁行时间均

 

设置为30秒、黄灯等待时间设置为5秒。

假设前进

 

路为主干道,考虑到主干道在上下班高峰期车流量

 

和人流量较大,人为增加开关K2。

当K2开启时,

 

主干道前进路上绿灯通行时间和宝田路上的红灯禁

 

行时间更改为60秒,其余设置均不变;当K1关闭时,又恢复正常情况下的时间设置。

 

(3)紧急情况全面禁行

精心整理

本设计中在紧急情况下增加了全面禁行状态,

 

增加开关K1。

当K1开启时,宝田路和前进路及其

 

各自人行道均量红灯禁行;当K1关闭时,交通灯恢

 

复正常状态。

 

4、详细设计—硬件设计

 

为了实现本设计要求的具体功能,选用STC90C51

 

单片机及外围器件构成最小控制系统,10个发光二

 

极管分别分成两组红黄绿和两组红绿灯构成信号灯

 

指示模块,4个LED动态数码管构成各个方向倒计

 

时显示模式,两个按键分别用来设置高峰期模式和

 

紧急模式。

 

4.1、单片机系统设计

 

单片机设计交通灯控制系统,可用单片机直接

 

控制信号灯的状态变化,基本上可以指挥交通的具

 

体通行,当然,接入LED数码管就可以显示倒计时

 

以提醒行使者,更具人性化。

精心整理

单片机上电后,系统进入正常工作状态,执行

 

交通灯状态显示控制,同时将时间数据倒计时输入

 

到LED数码管上实时显示。

 

HC6800S整体结构视图:

 

STC90C51内部结构图:

精心整理

 

STC90C51芯片引脚图:

 

4.2、LED数码管显示屏设计

 

LED动态数码管的显示原理为:

 

2位8段数码管电路采用“共阳”连接驱动代码,如右图所示。

段码和位码,段码即段选信号SEG,它负责数码管显示的内容,图中a~g、dp组成的数据(a为最低位,dp为最高位)就是段码。

位码即位选信号DIG,它决定哪个数码管工作,哪个数码管不工作。

LED数码管显示代码表如下表所示:

显示数值

dp,g,f,e,d,c,b,a

代码

0

01111111

0x3f

1

00000110

0x06

2

01011011

0x5b

3

01001111

0x4f

4

01100110

0x66

精心整理

5

01101101

0x6d

6

01111101

0x7d

7

00001101

0x07

8

01111111

0x7f

9

01101111

0x6f

HC6800S开发板中动态数码管模块原理图如下图所

 

示:

 

4.3、交通灯设计

 

HC6800S开发板中交通灯模块原理图如下图所

 

示,宝田路红黄绿灯及其人行道上的红绿灯和前

 

进路上的红黄绿灯由JP1控制,前进路人行道上

 

的红绿灯由J22控制。

 

5、详细设计—软件设计

 

5.1、软件开发工具和环境

 

keilC51μVision6.12

 

5.2、软件总体设计

 

5.2.1总体结构流程图如下

 

 

主程

序,即

精心整理

 

检测

NY

是否

 

检测

NY

按键

 

执行相应

5.2.2子程结序构,软即件设计

 

(1)普通模式

 

程序流程简图如下:

 

 

 

 

红灯

 

黄灯

 

绿灯

 

黄灯

 

程序源代码如下:

 

检测

YN

是否

 

检测

YN

按键

 

执行相应

程序,即

精心整理

while

(1){

 

if(S==71)

 

S=0;

 

/*宝田路通行,宝田路绿灯亮

 

if(S<31){

 

Data[0]=0x00;

 

Data[1]=0x00;

 

Data[2]=duan[(30-S)/10];

 

Data[3]=duan[(30-S)%10];

 

Data[4]=0x00;

 

Data[5]=0x00;

 

Data[6]=Data[2];

 

Data[7]=Data[3];

 

Display();

 

30秒*/

 

led=0xFF;//将所有的灯都熄灭

 

RED00=1;

 

GREEN00=1;

精心整理

GREEN10=0;GREEN11=0;RED00=0;RED01=0;

//宝田路人行道绿灯亮

 

//宝田路绿灯亮

 

//前进路人行道红灯亮

 

//前进路红灯亮

}

 

/*黄灯阶段,5秒*/

 

elseif(S<36){

 

Data[0]=0x00;

 

Data[1]=0x00;

 

Data[2]=duan[(35-S)/10];

 

Data[3]=duan[(35-S)%10];

 

Data[4]=0x00;

 

Data[5]=0x00;

 

Data[6]=Data[2];

 

Data[7]=Data[3];

 

Display();

 

led=0xFF;//将所有的灯都熄灭

精心整理

RED00=1;

 

GREEN00=1;

 

RED10=0;//宝田路人行道红灯亮

 

YELLOW11=0;//宝田路黄灯亮

 

RED00=0;//前进路人行道红灯亮

 

YELLOW01=0;//前进路黄灯亮

 

}

 

/*前进路通行,前进路绿灯亮30秒*/

 

elseif(S<66){

 

Data[0]=0x00;

 

Data[1]=0x00;

 

Data[2]=duan[(65-S)/10];

 

Data[3]=duan[(65-S)%10];

 

Data[4]=0x00;

 

Data[5]=0x00;

 

Data[6]=Data[2];

 

Data[7]=Data[3];

精心整理

Display();

 

led=0xFF;

 

RED00=1;

 

GREEN00=1;

 

RED10=0;

 

RED11=0;

 

GREEN00=0;

 

GREEN01=0;

 

}

 

/*黄灯阶段,5秒*/

 

else{

 

Data[0]=0x00;

 

Data[1]=0x00;

 

Data[2]=duan[(70-S)/10];

 

Data[3]=duan[(70-S)%10];

 

Data[4]=0x00;

 

Data[5]=0x00;

精心整理

Data[6]=Data[2];

 

Data[7]=Data[3];

 

Display();

 

led=0xFF;

 

RED00=1;

 

GREEN00=1;

 

RED10=0;

 

YELLOW11=0;

 

RED00=0;

 

YELLOW01=0;

 

}}

 

(2)按键检测流程图如下:

 

 

寄存器

 

检测

是否

 

N

Y

去抖

精心整理

 

检测

N

是否

Y

 

检测

是否N

Y

执行

所需延时子函数源代码如下:

 

voiddelayms(){//延时子函数,延时约10ms

 

uinta,b;

 

for(a=10;a>0;a--)

 

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

 

}

 

(3)紧急模式

 

程序流程简图如下:

 

 

 

精心整理

N

 

紧急

程序源代码如下:

 

Y

 

/*按下按键1,开启紧急模式,所有红灯亮,数

 

码管不显示*/

 

if(key1==0){

 

delayms();//去抖延时

 

if(key1==0){

 

Data[0]=0x00;

 

Data[1]=0x00;

 

Data[2]=0x00;

 

Data[3]=0x00;

 

Data[4]=0x00;

 

Data[5]=0x00;

 

Data[6]=0x00;

 

Data[7]=0x00;

 

Display();

精心整理

led=0xFF;

 

RED00=1;

 

GREEN00=1;

 

RED10=0;

 

RED11=0;

 

RED00=0;

 

RED01=0;

 

while(!

key1);//按键1释放

 

}}

 

keyscan();

 

}

 

}

 

(4)高峰模式

 

程序流程简图如下:

 

 

 

精心整理

N

 

高峰

程序源代码如下:

 

Y

 

/*按下按键2,开启上下班高峰期模式,主干道宝

 

田路绿灯时间为60秒*/

 

voidkeyscan(){

 

if(key2==0){

 

delayms();//去抖延时

 

if(key2==0){

 

while

(1){

 

if(key2!

=0)break;//当按键2释放,跳出循环if(M==101)

 

M=0;

 

if(M<61){

 

Data[0]=0x00;

 

Data[1]=0x00;

 

Data[2]=duan[(60-M)/10];

精心整理

Data[3]=duan[(60-M)%10];

 

Data[4]=0x00;

 

Data[5]=0x00;

 

Data[6]=Data[2];

 

Data[7]=Data[3];

 

Display();

 

led=0xFF;

 

RED00=1;

 

GREEN00=1;

 

GREEN10=0;

 

GREEN11=0;

 

RED00=0;

 

RED01=0;

 

}

 

elseif(M<66){

 

Data[0]=0x00;

 

Data[1]=0x00;

精心整理

Data[2]=duan[(65-M)/10];

 

Data[3]=duan[(65-M)%10];

 

Data[4]=0x00;

 

Data[5]=0x00;

 

Data[6]=Data[2];

 

Data[7]=Data[3];

 

Display();

 

led=0xFF;

 

RED00=1;

 

GREEN00=1;

 

RED10=0;

 

YELLOW11=0;

 

RED00=0;

 

YELLOW01=0;

 

}

 

elseif(M<96){

 

Data[0]=0x00;

精心整理

Data[1]=0x00;

 

Data[2]=duan[(95-M)/10];

 

Data[3]=duan[(95-M)%10];

 

Data[4]=0x00;

 

Data[5]=0x00;

 

Data[6]=Data[2];

 

Data[7]=Data[3];

 

Display();

 

led=0xFF;

 

RED00=1;

 

GREEN00=1;

 

RED10=0;

 

RED11=0;

 

GREEN00=0;

 

GREEN01=0;

 

}

 

else{

精心整理

Data[0]=0x00;

 

Data[1]=0x00;

 

Data[2]=duan[(100-M)/10];

 

Data[3]=duan[(100-M)%10];

 

Data[4]=0x00;

 

Data[5]=0x00;

 

Data[6]=Data[2];

 

Data[7]=Data[3];

 

Display();

 

led=0xFF;

 

RED00=1;

 

GREEN00=1;

 

RED10=0;

 

YELLOW11=0;

 

RED00=0;

 

YELLOW01=0;

 

}}

精心整理

while(!

key2);//等待按键释放

 

}

 

}

 

}

 

5.3、定时程序设计

 

进入主程序后,首先要对定时器和中断有关的寄存

 

器初始化。

初始化过程如下:

 

(1)对TMOD赋值,确定定时器的工作方式;

 

(2)计算初值,并将初值写入;

 

(3)中断方式时,则对IE赋值,开放中断;

 

(4)使定时器运行控制端置位,启动定时器来计数。

 

本次设计使用了定时器0的工作方式,50ms中断一

 

次,而交通信号灯倒计时计数需要定时1s,通过计

 

算,确定TH0和TL0应装入的初值为60和176,即

 

0x3C和0xB0。

精心整理

定时程序源代码如下:

 

voidinit(){

 

TMOD=0x01;//设置定时器工作方式

 

TH0=0x3C;//装初值

 

TH1=0xB0;

 

EA=1;//开启总中断

 

ET0=1;//开启定时器中断

 

TR0=1;//启动定时器

 

}

 

voidT0_time()interrupt1{

 

TH0=0x3C;//重装初值

 

TH1=0xB0;

 

T++;

 

if(T==20){

 

S++;//S计数

 

M++;//M计数

 

T=0;//1秒时间到,T清0重新再计20次

精心整理

}

 

}

 

5.4、数码管显示程序设计

 

通过单片机的定时器中断程序设计,可以控制数码

 

管在动态显示时每1秒变换一次,也就是计数一次,根据定义的全局变量和I/O口,在显示子函数中实现数码管的位选和段选并能够在主函数中调用实现倒计时循环显示。

 

显示子函数代码如下:

 

voidDisplay()//显示子函数

 

{uchari;

 

uintj;

 

for(i=0;i<8;i++){

 

Weixuan=wei[i];//送位选数据

 

Duanxuan=Data[i];//送段选数据

 

j=10;//扫描间隔时间设定

精心整理

while(j--);

 

Duanxuan=0x00;//消隐

 

}}

 

6、系统制作、调试和实验

 

6.1、系统制作

 

1.使用keilC51编写程序;

2.将编好的程序“.C”文件用KeilC51转换成“.hex”

文件;

3.将开发板按照如图所示的连线方式连接成功;

4.用普中科技自己的下载软件PAISP自动下载软件将“.hex”下载到开发板上,下载步骤如下:

1).插上USB口,打开开发板电源开关,然后打开普

中ISP下载软件,在usb转串口驱动安装成功后,打开软件应该有串口号;

2).芯片类型选择STC90C5XX;

3).同时需要把开发板中J0跳线帽拔掉,设置成USB接口,加载我们要下载到单片机里的程序,单击

 

,选择下载的后缀为.Hex的文件;

 

4).点击下载程序,即可下载成功。

精心整理

4.观察运行现象是否与设计结果相符;

6.2、硬件调试

 

硬件部分是在51单片机上完成,所以调试过程比较

 

简单。

首先按照电路原理图进行检查,检查无误后

 

进行按键、数码管和发光二极管的检测。

 

6.3、软件调试

 

首先用keilC51软件对程序进行编译和调试,经过对

 

程序多次修改后,编译通过,结束软件调试。

 

6.4、联合调试

 

硬件调试和硬件调试结束之后,将最终调试好的程

 

序下载到单片机上,观察结果并进行调试。

 

6.5、系统实验

 

经过多次调试,最终可以在单片机上观察到本次设

 

计的实验结果:

 

(1)用发光二极管模拟的红黄绿交通信号灯有序闪烁,实验现象正确;

精心整理

(2)动态数码管可以显示到信号灯颜色改变所剩时间,并采用倒计时方式计数;

 

(3)按下按键1,所有道路及其人行道的红灯亮,数码管均不显示,开启紧急模式;

 

(4)按下按键2,主干道绿灯时间变为

60秒,其

 

余均不变,开启高峰期模式。

 

7、总结

 

7.1、工作总结

 

在本次智能交通信号灯的设计中,我主要负责的是

 

软件部分以及最后的联合调试部分。

主要有:

 

(1)编写代码。

本次程序的编写我用的是C语言,

 

一是因为之前在大一有上过C语言的课,对C

 

语言不会感到很陌生,二是学习过程中,教材也

 

都是C语言教程。

一开始我们计划仅实现普通

 

模式下的智能交通信号灯的控制。

同时我们参考

 

了单片机自带的程序,后来经过深入学习,发现

精心整理

只有普通模式太过简单,所以我们就打算尝试一下能否实现紧急模式和高峰期模式。

 

(2)联合调试。

由于单片机自带交通灯模块,所以我觉得调试应该比较简单,直接将程序烧录到单片机上就可以了。

没想到在这个过程中还出现了很多了问题。

比如发光二极管一直亮或者不亮,数码显示管显示错误等。

我以为是程序出了问题,就一直在修改程序,结果发现,很大一部分原因是由于我们太粗心了,把线接反了或者接触不良,原来是硬件的问题。

所以在联合调试的

 

过程中,一定要同时兼顾软件和硬件的调试。

 

本次设计还存在一些问题如下:

 

(1)由于我主要负责软件部分,所以在后期的联合调试部分出了很多问题,主要是由于我对硬件部分不够熟悉,这是本次实验中我主要需要改进的地方;

精心整理

(2)在编写代码的过程中,我还发现了一些自身存在的问题,比如说主函数写的过长,容易

 

造成里面的括号丢失,代码后面不加注释,代

 

码没有层次感,使程序看起来很乱,而且在查

 

找问题时也不方便,还有就是对语句运用不够

 

熟悉,容易犯一些语法错误,这一点还需要加

 

以改进。

 

(3)本次设计编译程序之后直接在单片机上调试较为麻烦,这一点需要改进,可加入仿真调试。

 

7.2、心得体会

 

本次科研训练接近尾声,从一开始根本不了解科研

 

训练是什么,需要做什么,到确定题目,一起学习,

 

编写程序,硬件软件调试到最后的报告撰写,我真

 

的觉得自己收获了很多。

不仅仅是感受到了我们这

 

个团队的合作精神,还有自己的那一份责任感,既

精心整理

然是小组合作完成一个项目,那就必须要每个人确确实实的做好自己的工作,只有这样,我们的设计才是完整的。

 

本次科研训练我们选择的是智能交通灯的设计,说实话,老师让我们确定题目时,我们也不知道自己能做什么擅长做什么,甚至不确定是否能完成这个项目。

确定这个题目之后,也是没有头绪,不知道要怎么开始。

后来我们明确了一下分工,我主要负责软件部分,硬件我们是用的单片机,所以我就开始学习单片机的C语言。

我用的教材是郭天祥老师主编的《51单片机C语言教程》,我觉得这本书最大的好处就是通俗易懂,很适合我这样的单片机新手。

一边看书学习,一边就开始编写程序,编写程序首先得确定算法,我还是没有概念,所以我就参

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

当前位置:首页 > 高中教育 > 小学教育

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

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