单片机交通灯课程设计报告文档格式.docx

上传人:b****2 文档编号:1042345 上传时间:2023-04-30 格式:DOCX 页数:19 大小:168.50KB
下载 相关 举报
单片机交通灯课程设计报告文档格式.docx_第1页
第1页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第2页
第2页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第3页
第3页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第4页
第4页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第5页
第5页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第6页
第6页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第7页
第7页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第8页
第8页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第9页
第9页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第10页
第10页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第11页
第11页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第12页
第12页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第13页
第13页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第14页
第14页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第15页
第15页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第16页
第16页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第17页
第17页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第18页
第18页 / 共19页
单片机交通灯课程设计报告文档格式.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机交通灯课程设计报告文档格式.docx

《单片机交通灯课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《单片机交通灯课程设计报告文档格式.docx(19页珍藏版)》请在冰点文库上搜索。

单片机交通灯课程设计报告文档格式.docx

KeyWords:

AT89C51,Trafficlights,LED

1引言

本设计是基于单片机交通灯控制系统。

其核心器件是AT89C51单片机。

LED显示红灯,黄灯,绿灯来指挥车辆和行人,其中红灯亮表示该条道路上禁止通行;

黄灯亮表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行;

绿灯亮表示该条道路上允许通行。

两位共阴极数码管显示时间。

六个按键用来对交通灯进行控制。

本系统为实现交通道路的管理,分析应用了单片机实现交通灯管制的控制系统以及该系统软件、硬件的设计方法。

2设计方案及原理

2.1总体设计方案

本系统由AT89C51单片机,手动按键控制部分,共阴极数码管显示部分,LED灯显示部分组成。

2.2系统原理框图(如图1所示)

图1系统设计框图

2.3系统工作原理

系统通过LED灯(红灯、黄灯、绿灯)来指挥车辆和行人,AT89C51的P2口用来驱动LED灯显示;

74LS245芯片驱动两位共阴极数码管的8位段码显示,P1.0口和P1.1口驱动两位共阴极数码管的位码显示,两位共阴极数码管显示时间;

六个按键对交通灯进行控制。

3硬件设计

电路图共有六个按键,每个按键都对交通灯进行不同的控制。

每个按键及其对应的功能如表1所示。

表1按键及对应的功能

按键

对应的功能

P1.6

加时间

P1.7

减时间

P2.7

确认

P3.1

紧急停车

P3.2

强制东西通行

P3.3

强制南北通行

3.1两位共阴极数码管显示设计

两位共阴极数码管用来显示时间,74LS245驱动数码管显示,其中74LS245的B0~B7驱动ABCDEFG及DP八个段码显示,AT89C51驱动1和2这两个位码显示。

连接图如图2所示。

图2两位共阴极数码管连接图

3.2LED灯显示设计

分东西南北方向,每个方向分别有红灯、黄灯和绿灯。

其中红灯亮表示该条道路上禁止通行;

连接图如图3所示。

图3LED灯显示连接图

3.3整体硬件连接图

本系统由单片机总控制器部分,手动按键控制部分,共阴极数码管显示部分以及LED灯显示部分组成。

其整体硬件连接图如图4所示。

图4整体硬件连接图

4软件设计

4.1主程序流程图

程序主要包括:

主程序、按键处理子程序、显示子程序和中断程序。

其中主程序设定为定时器0,工作方式1(TMOD=0X01),开总中断(EA=0),打开定时器0(ET0=1),启动定时器0(TR0=1),开外部中断0(EX0=1),开外部中断1(EX1=1)等。

主要控制LED灯的显示,LED灯开始默认状态为东西绿灯,南北红灯,开始倒计时,倒计时完毕,东西黄灯闪烁5秒,东西变为红灯,南北变为绿灯,开始倒计时,倒计时至5秒黄灯开始闪烁(因为程序中南北的时间比东西多5秒),闪烁结束后东西变为绿灯,南北变为红灯,开始倒计时,依次循环。

主程序流程图如图5所示。

图5主程序流程图

4.2按键处理子程序流程图

系统共有六个按键,程序中有按键扫描子程序函数voidkey()和按键处理子程序函数voidkey_to(),分别对按键进行扫描和处理。

按键处理子程序流程图如图6所示。

4.3数码管显示子程序流程图

程序中共阴极数码管显示用voiddisplay()函数,其流程图如图7所示。

图6按键处理子程序流程图图7数码管显示子程序流程图

5系统仿真及实际调试

系统初始默认为东西亮绿灯,南北亮红灯。

开始倒计时(倒计时的时间可以根据车流量进行设定),东西绿灯倒计时为零就开始闪烁5秒钟的黄灯,而南北仍为红灯。

当东西黄灯闪烁完毕,南北就变为亮绿灯,东西变亮红灯。

然后开始倒计时,倒计时至5秒南北就开始闪烁黄灯(因为程序中南北的时间比东西多5秒)。

南北黄灯闪烁完毕,东西变亮绿灯,南北变亮红灯。

这便是一个循环周期,以后按次周期依次循环。

六个按键可以对交通灯及数码管显示的时间进行控制。

按键P1.6和P1.7可以根据车流量加、减时间;

P3.1是紧急停车按键,例如当十字路口发生交通事故时,可以按下P3.1键,使东西南北同时显示红灯;

按键P2.7是确认按键。

按键P3.2是强制东西通行按键,按键P3.3是强制南北通行按键。

当救护车、消防车等有非常紧急事情的车辆通行时,可以给控制中心打电话,控制中心就会按下P3.2或P3.3键,从而保证这些紧急车辆一路绿灯。

仿真图为东西闪烁黄灯,南北为红灯,倒计时至3秒,如图8所示。

图8仿真图

6总结

本文是基于单片机的交通灯设计。

在设计过程中,我遇到了一些问题:

首先是在keilc中运行程序时出现了一些错误,经检查是一些变量没有定义和一些标点符号的不合理造成的;

其次在protues中画硬件连接图时多费了些时间,比如有些器件很难找到,但是上网查阅都解决了。

最后把kailc中生成的目标代码导入硬件连接图中成功显示。

参考文献

[1]马忠梅.单片机应用程序设计(第四版)[M].北京:

北京航空航天大学出版社,2010年5月:

20-50.

[2]赵俊生.单片机技术原理与实训[M].北京:

电子工业出版社,2009年3月:

217-231.

[3]冯先成.单片机应用系统设计(第一版)[M].北京:

北京航空航天大学出版社,2009:

22-27.

[4]苏玉萍.基于单片机的交通灯控制系统设计[J].甘肃科技,2011(10):

2-5.

附录源程序代码

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

uchardatabuf[4];

uchardatasec_dx=20;

//东西数默认

uchardatasec_nb=25;

//南北默认值

uchardataset_timedx=20;

uchardataset_timenb=25;

intn;

uchardatab;

//定时器中断次数

sbitk1=P1^6;

//定义4组开关

sbitk2=P1^7;

sbitk3=P2^7;

sbitk4=P3^1;

sbitYellow_nb=P2^5;

//南北黄灯标志

sbitYellow_dx=P2^2;

//东西黄灯标志

sbitGreen_nb=P2^4;

sbitGreen_dx=P2^1;

bittime=0;

//灯状态循环标志

bitset=1;

//调时方向切换键标志

ucharcodetable[11]={//共阴极字型码

0x3f,//--0

0x06,//--1

0x5b,//--2

0x4f,//--3

0x66,//--4

0x6d,//--5

0x7d,//--6

0x07,//--7

0x7f,//--8

0x6f,//--9

0x00//--NULL

};

//函数的声明部分

voiddelay(intms);

//延时子程序

voidkey();

//按键扫描子程序

voidkey_to1();

//键处理子程序

voidkey_to2();

voidkey_to3();

voiddisplay();

//显示子程序

//主程序

voidmain()

{

TMOD=0X01;

TH0=0XD8;

TL0=0XF0;

EA=1;

ET0=1;

TR0=1;

EX0=1;

EX1=1;

P2=0Xc3;

//开始默认状态,东西绿灯,南北红灯

sec_nb=sec_dx+5;

while

(1)

{

key();

//调用按键扫描程序

display();

//调用显示程序

}

}

//函数的定义部分

voidkey()//按键扫描子程序

if(k1!

=1)

{

delay(10);

if(k1!

{

while(k1!

{

key_to1();

for(n=0;

n<

40;

n++)

{display();

}

}

}

if(k2!

if(k2!

while(k2!

key_to2();

if(k3!

TR0=1;

//启动定时器

sec_nb=set_timenb;

//从中断回复,仍显示设置过的数值

sec_dx=set_timedx;

if(time==0)

{P2=0X99;

sec_nb=sec_dx+5;

else{P2=0xC3;

sec_dx=sec_nb+5;

if(k4!

delay(5);

while(k4!

=1)

key_to3();

voiddisplay()//显示子程序

{

buf[1]=sec_dx/10;

//第1位东西秒十位

buf[2]=sec_dx%10;

//第2位东西秒个位

buf[3]=sec_nb/10;

//第3位南北秒十位

buf[0]=sec_nb%10;

//第4位南北秒个位

P1=0xff;

//初始灯为灭的

P0=0x00;

P1=0xfe;

//片选LCD1

P0=table[buf[1]];

delay

(1);

P1=0xff;

P1=0xfd;

//片选LCD2

P0=table[buf[2]];

delay

(1);

P1=0Xfb;

//片选LCD3

P0=table[buf[3]];

P1=0xff;

P1=0Xf7;

P0=table[buf[0]];

//片选LCD4

voidtime0(void)interrupt1using1//定时中断子程序

b++;

if(b==19)//定时器中断次数

{b=0;

sec_dx--;

sec_nb--;

if(sec_nb<

=5&

&

time==0)//东西黄灯闪

{Green_dx=0;

Yellow_dx=!

Yellow_dx;

}

if(sec_dx<

time==1)//南北黄灯闪

{Green_nb=0;

Yellow_nb=!

Yellow_nb;

}

if(sec_dx==0&

sec_nb==5)

sec_dx=5;

if(sec_nb==0&

sec_dx==5)

sec_nb=5;

if(time==0&

sec_nb==0)

{P2=0x99;

time=!

time;

sec_nb=set_timenb;

sec_dx=set_timenb+5;

if(time==1&

sec_dx==0)

{P2=0Xc3;

sec_dx=set_timedx;

sec_nb=set_timedx+5;

}

voidkey_to1()//键盘处理子程序之+

TR0=0;

//关定时器

if(set==0)

set_timenb++;

//南北加1S

else

set_timedx++;

//东西加1S

if(set_timenb==100)

set_timenb=1;

if(set_timedx==100)

set_timedx=1;

//加到100置1

sec_nb=set_timenb;

//设置的数值赋给东西南北

sec_dx=set_timedx;

voidkey_to2()//键盘处理子程序之-

set_timenb--;

//南北减1S

set_timedx--;

//东西减1S

if(set_timenb==0)

set_timenb=99;

if(set_timedx==0)

set_timedx=99;

//减到1重置99

voidkey_to3()//键盘处理之紧急车通行

P2=0Xc9;

sec_dx=00;

sec_nb=00;

voidint0(void)interrupt0using1//只允许东西通行

voidint1(void)interrupt2using1//只允许南北通行

P2=0X99;

voiddelay(intms)//延时子程序

uintj,k;

for(j=0;

j<

ms;

j++)

for(k=0;

k<

124;

k++);

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2