十字路口交通灯控(单片机 课程设计)制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机原理课程结业报告题目(8):十字路口交通灯控制

学号:******YYY

姓名:YYY

一、设计要求

设计一个十字路口交通灯控制器。用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。二、设计原理

利用定时器T0产生每10ms一次的中断,每100次中断为1s。对两个方向分别显示红、绿、黄灯,已经相应的剩余时间即可。值得注意的是,需要意识到,A方向红灯时间=B方向绿灯时间+黄灯缓冲时间这一常识。

三、设计思路及电路图

1.设计思路

本设计采以用单片机AT89C52作为控制器,通行时间或等待时间通过数码管以倒计时方式显示,同时单片机P1口控制交通灯(红灯、黄灯、绿灯)的正常的替换工作,如果有意外发生(交通事故)就会产生中断,东西南北红灯全亮。系统设计框图1如下:

图1 系统框图

以下四图所示为红黄绿灯规则的状态图

:

N

S

W

E

绿

绿

N

W

E

绿

绿

黄图2 状态S1南北通行60S 东西禁止图3 状态S2南北转黄灯

N

W E

绿绿

N

W

绿

图4 状态S3南北禁止东西通行80S 图5 状态S4东西绿灯转黄灯共四种状态,分别设定为S1、S2、S3、S42,交通灯以这四种状态为一个周期,循环执行如图6所示。如果有意外发生,去处理中断,红灯全亮,时间10S。

开始

S2

S1

S4

S3

图6 交通灯状态循环

2.电路图

四、核心代码设计思路及程序流程图

1.核心代码设计思路

核心代码设计思路流程图

2.设计流程图

中断子程序

显示子程序N

定时器中断子程序倒计时子程序

五、Proteus仿真图

用Proteus进行仿真,在仿真过程中达到了预期的要求,东西方向开通是,进行80S的倒计时,然后是3S的缓冲倒计时,最后是60S 的南北开通倒计时,依次往复循环。具体的仿真效果图如下:

六、总结

本设计以AT89C51系列单片机为核心,充分利用了AT89C51和8255A芯片的I/O引脚,以LED数码管作为倒计时指示,该设计很好地完成了设计的各项要求,主要体现如下:主干道和次干道可以分开设置时间功能,使控制更加灵活;

以上所有功能均在城市交道口模型上得到很好地实现,该设计在确保功能实现的基础上,充分考虑了控制系统操作方便、可靠性高、

稳定性好等要求。

该设计的交通灯控制器,实现了能根据实际车流量通过AT89C51芯片的P1口设置红、绿灯燃亮时间的功能。设计一个十字路口交通灯控制器。用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。这是由于本身地理位置以及车流量情况所定,如果有需要可以设计扩充原系统来实现。

通过这次课程结业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面的系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计的思路技巧,特别是对汇编语言的掌握方面能向前迈了一大步,为日后成为合格的应用型人才打下了良好的基础。

该课程结业设计虽然结束了,但由于时间、设备、条件和水平等各方面因素,还存在一些不足,还需要不断改进,当然也就需要学习并运用更多相关的知识。

七、Keil核心源代码

#include

#define uchar unsigned char

#define uint unsigned int

sbit dula=P2^6;

sbit wela=P2^7;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71

};

uchar num=80,num1=1,num2,num3,num4=60,num5=3,shi,ge; void delay(uint);

void display(uchar,uchar);

main()

{

TMOD=0x11;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

TH1=(65536-45872)/256;

TL1=(65536-45872)%256;

EA=1;

ET0=1;

ET1=1;

TR0=1;

TR1=1;

P1=0x04;

while(1)

{

display(shi,ge);

}

}

void display(uchar shi,uchar ge)

{

P0=table[shi];

dula=1;

dula=0;

P0=0xfe;

wela=1;

wela=0;

delay(5);

P0=0xff;wela=1;wela=0;

P0=table[ge];

dula=1;

dula=0;

P0=0xfd;

wela=1;

wela=0;

delay(5);

P0=0xff;wela=1;wela=0; }

void delay(uint x)

{

uint i,j;

for(i=x;i>0;i--)

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

void T0_time() interrupt 1 {

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

num2++;

if(num2==20)

相关文档
最新文档