当前位置:文档之家 > 基于单片机的交通灯课程设计报告[1]

基于单片机的交通灯课程设计报告[1]

基于单片机的交通灯课程设计报告[1]

基于单片机的交通灯课程设计报告[1]

单片机原理及接口技术

课程设计报告

基于单片机的交通灯

姓 名: 江良猛 学 号: 201315310109 指导教师: 尹相雷 学 院: 机电工程学院 专 业: 机械设计制造及其自动

完成日期: 2014年6月25日

目录

第一章概述 ............................................................................................................ - 2 -

1.1 设计背景................................................................................................... - 2 -第二章系统总体方案及硬件设计 ........................................................................ - 3 -

2.1 AT89S52单片机简介................................................................................ - 3 -

2.2 系统硬件电路的设计............................................................................... - 3 -第三章软件设计 .................................................................................................... - 6 -

3.1 交通灯的设计程序流程图....................................................................... - 6 -第四章 Proteus软件仿真 ..................................................................................... - 7 -

4.1 仿真图....................................................................................................... - 7 -

4.2 仿真步骤................................................................................................... - 7 -第五章课程设计体会 ............................................................................................ - 9 -

第一章概述

1.1 设计背景

如今随着人们生活水平的提高,车辆越来越多,交通事故频繁发生。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量,提高道路通行能力,减少交通事故有明显效果。交通灯在城市交通中起着重要的作用,它与人们日常生活密切相关,是人们出行的安全保障。因此提供一个可靠、安全、便捷的多功能交通灯控制系统有着现实的必要性。为了解决这些问题,我们更应该提高交通控制和管理水平,合理使用现有交通设施,充分发挥其能力,提高交通效率,促进和谐交通的建立。

近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。

本系统设计一个基于单片机的交通灯控制系统。能方便的对交通灯进行控制,使交通更和谐。

1.2设计任务

1)设计一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒,时间可设置修改。

2)在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;

3)黄灯亮时,要求每秒闪亮一次。

4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。

5)一道有车而另一道无车(实验时用开关K0 和K1 控制),交通灯控制系统能立即让有车道放行。

6)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K2 开关模拟。

第二章系统总体方案及硬件设计

2.1 AT89S52单片机简介

AT89S52是一种低功耗、高性能CMOS8位微控制器。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。鉴于以上的优点本系统采用AT89S52作为主控芯片,实现对整个系统的控制。

2.2 系统硬件电路的设计

(1)时钟电路设计

基于单片机的交通灯课程设计报告[1]

图2-1时钟电路原理图

如图2-1所示,采用内部时钟产生方式,在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击荡器。其发出的时钟脉冲直接送入片内定时控制部件。

(2)复位电路设计

基于单片机的交通灯课程设计报告[1]

图2-2上电+按钮电平复位电路原理图

如图2-2所示,采用上电+按钮电平复位方式,当按下按钮时,RST管脚高电平触发。为保证复位可靠,RC时间常数应大于两个机器周期,一般电容去22uF,电阻取1K。

(3)灯控制电路设计

基于单片机的交通灯课程设计报告[1]

图2-3交通灯状态显示电路

如图2-3所示,交通灯状态显示电路由东西南北四个方向各三个LED灯组成,分别显示四个方向上红、黄、绿三个状态,用以指示十字路口各方向车辆的行驶。通过软件编程,可使路口交通变化情况为:南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒;在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;黄灯亮时每秒闪亮一次。

(4)倒计时显示电路设计

基于单片机的交通灯课程设计报告[1]

基于单片机的交通灯课程设计报告[1]

图2-4 数码管显示电路原理图

如图2-4所示,由一个共阳极四位数码管来实现倒计时。由于P0口输出电流小,需外接上拉电阻,COME端接5V电源。

(5)按键控制电路设计

基于单片机的交通灯课程设计报告[1]

图2-5键盘电路原理图

如图2-5所示,开光控制由PD1-PD5四个连接到单片机的控制按钮组成。通过软件编程,按下PD1电路进入外部中断响应,数码显示时间将停止倒计时,此时,可通过按钮PD3和PD4设置通行时间,每按一下PD3时间增加1s,而按下PD4时间减少1s。按下PD5将使程序重新进入循环点亮状态。

第三章软件设计3.1 交通灯的设计程序流程图

基于单片机的交通灯课程设计报告[1]

Y

第四章Proteus软件仿真4.1 仿真图

基于单片机的交通灯课程设计报告[1]

4.2 仿真步骤

(1)根据电路图选择器件连接电路

(2)双击AT89S52装入源程序编译生成的HEX文件

(3)单击运行按钮运行仿真

(4)根据仿真情况与程序实现任务对比,对于不能实现的任务修改并调试程序,重新装载重新运行调试仿真,直到能完全实现所要求的功能为止

(5)进一步改进和简化程序在进行调试仿真

第五章课程设计体会

通过这次单片机实训课程学习,才深刻体会到自己实际操作能力的匮乏。从刚开始老师对单片机的整体介绍及其应用前景,对单片机产生了浓厚的兴趣,并利用自己的课余时间提前学习有关单片机的基本知识。但空有理路知识,却无半点的实际操作经验。后来在老师的建议下,选择运用单片机设计一个交通灯控制系统,从简单开始,后期逐步复杂化。

从给定电路图的分析到实际电路元件的识别、焊接,再到后期的程序设计以及系统调试,初步掌握了运用单片机系统设计特定功能的设计步骤,也对单片机有了更深的体会。了解和掌握了一些简单的编程思想,对单片机各管脚的功能,I/O 口的使用条件都有了更深的理解。这次的课程设计让我把单片机的理论知识运用的实践中,实现了理论与实践的相结合,从中更懂得了理论是实践的基础,实践更能检验理论的真实性,让我受益匪浅。

参考文献

[1] 李朝青.单片机原理及接口技术(修订版).北京:北京航空航天大学出版社,1998

[2] 李广弟.单片机基础.北京:北京航空航天大学出版社,1992

[3] 何立民.单片机应用技术大全.北京:北京航空航天大学出版社,1994

[4] 张毅刚. 单片机原理及接口技术.哈尔滨:哈尔滨工业大学出版社,1990

[5] 谭浩强.单片机课程设计. 北京:清华大学出版社,1989

[6] 余发山.单片机原理及应用技术焦作:中国矿业大学出版社,2007

附录1 源程序代码

//#include

#include // 对单片机的口进行了定义

#define uint unsigned int

#define uchar unsigned char

uchar code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码组合,共阴极

uchar code b[4]={0xfe,0xfd,0xfb,0xf7}; //位码组合低有效

uchar code c[4]={0xcc,0xd4,0x78,0xb8};/*P1 绿红、黄红、红绿、红黄*/

//12MHz

//******************************************************************** *****************

uchar NB=25,DX=30,NBG=25,DXG=15,H=5; /*数码管显示值设置*/ uchar i,k=0,cnt=0,j=0;

sbit K0=P3^5; /*支干道通行*/

sbit K1=P3^6; /*主干道通行*/

sbit K4=P3^7; /*返回*/

sbit K3=P3^2; /*设置时间*/

sbit K2=P3^3; /*紧急刹车*/

void delay(uchar t); /*定义延时程序*/

void key(); /*定义键盘程序*/

void display(); /*定义显示程序*/

void settime(); /*定义时间设置显示程序*/

//*************************程序初始*********************************************

void init(void)

{

TMOD=0x01; /*使用定时器0模式一*/

TH0=0x3c; /*(65536-5000)/256*/

TL0=0xb0; /*(65536-5000)%256*/

IT0=1; //开中断

ET0=1;

TR0=1;

EA=1;

EX0=1;

EX1=1;

P1=c[k]; //开启交通灯

}

//*************************中断0处理程序***************************************

void int0(void) interrupt 0 // 通行时间设置

{

EA=0;

P1=0xd8; /*红灯全亮*/

for(;;)

{

settime();

if(K1==0) /*P3^6=0设置主干道通行时间*/ {

delay(40);

if(K1==0)

{

while(!K1)

{

settime();

}

NBG++; /*主干道通行时间加1*/

if(NBG==100)

NBG=0;

}

}

if(K0==0) /*P3^5=0设置支干道通行时间*/ {

delay(40);

if(K0==0)

{

while(!K0)

{

settime();

}

DXG++; /*支干道通行时间加1*/

if(DXG==100)

DXG=0;

}

}

if(K4==0) /*P3^7=0返回*/

{

delay(40);

if(K4==0)

{

while(!K4)

{

}

k=0;P1=c[k];

NB=NBG,DX=NBG+H;

display();

EA=1;

break;

}

}

}

}

/***********************************中断1处理程序******************** void int1(void) interrupt 2 //紧急情况

{

/*东西南北红灯亮*/

EA=0;

TR0=!TR0; /*停止计数*/

for(;;) /*主支干道显示全为0*/

{ P1=0xd8,P0=a[0];

P2=0xfe;

delay(20);

P2=0xfd;

delay(20);

P2=0xfb;

delay(20);

P2=0xf7;

delay(20);

if(K4==0) /*返回*/

{

delay(20);

EA=1;

P1=c[k]; /*返回紧急前状态开始计数*/

TR0=!TR0; /*重启计数*/

break;

}

}

}

void time1(void) interrupt 1 /*交通灯控制程序*/

{

TH0=0x3c; /*定时50ms*/

TL0=0xb0;

cnt++;

if(cnt>=20) /*每20*50ms=1s自减一*/ {

NB--;

DX--;

cnt=0;

if(NB==0||DX==0)

{

k++;

if(k>3) /*k取0,1,2,3*/

k=0;

switch(k)

{

case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break; /*主干道通行显示绿红*/

case 1:NB=H;j=1;P1=c[k];break; /*主干道黄灯闪烁*/

case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break; /*支干道通行显示红绿*/

case 3:DX=H;j=2;P1=c[k];break; /*支干道黄灯闪烁*/

}

}

}

}

void delay(uchar t) //延时程序延时0.1*nms

{

uchar i;

do

{

for(i=0;i<20;i++)

;;;

} while(t--);

}

void settime()

{

P2=0xfe,P0=a[(NBG+H)%10]; /*显示主干道通行时间*/

delay(20);

P2=0xfd,P0=a[(NBG+H)/10];

delay(20);

P2=0xfb,P0=a[(DXG+H)%10]; /*显示支干道通行时间*/

delay(20);

P2=0xf7,P0=a[(DXG+H)/10];

delay(20);

}

void key() //键盘程序用KO K1模拟一道有车一道无车{

if(K1==0) /*主干道有车支干道无车*/ {

delay(40);

if(K1==0)

{

while(!K1)

{

display();

}

k=0,P1=c[k];cnt=0;

NB=NBG, DX=NBG+H;

display();

}

}

if(K0==0) /*支干道有车主干道无车*/

{

delay(40);

if(K0==0)

{

while(!K0)

{

display();

}

k=2,P1=c[k];cnt=0;

NB=DXG+H,DX=DXG;

display();

}

}

}

void display() //显示程序

{

P2=0xfe,P0=a[NB%10]; /*由k的不同值进入确定显示数值*/

delay(20);

P2=0xfd,P0=a[NB/10];

delay(20);

P2=0xfb,P0=a[DX%10];

delay(20);

P2=0xf7,P0=a[DX/10];

delay(20);

}

void main(void)

{ //主程序

init();

for(;;)

{

display();

key();

//黄灯闪烁程序

while(j==1) /*主干道黄灯闪烁*/

{

P1=0xdc; /*给黄灯一高电平黄灯灭*/

for(i=83;i>0;i--){display();} /*执行for循环延时*/

P1=c[k]; /*再给黄灯一低电平黄灯亮*/

for(i=83;i>0;i--){display();}

}

while(j==2)

{ /*支干道黄灯闪烁*/ P1=0xf8;

for(i=83;i>0;i--){display();}

P1=c[k];

for(i=83;i>0;i--){display();}

}

}

}

下载Word文档免费下载:

基于单片机的交通灯课程设计报告[1]下载

(共20页)