51单片机综合实验交通灯设计报告Word格式文档下载.docx

上传人:b****3 文档编号:14852772 上传时间:2022-10-25 格式:DOCX 页数:11 大小:112.17KB
下载 相关 举报
51单片机综合实验交通灯设计报告Word格式文档下载.docx_第1页
第1页 / 共11页
51单片机综合实验交通灯设计报告Word格式文档下载.docx_第2页
第2页 / 共11页
51单片机综合实验交通灯设计报告Word格式文档下载.docx_第3页
第3页 / 共11页
51单片机综合实验交通灯设计报告Word格式文档下载.docx_第4页
第4页 / 共11页
51单片机综合实验交通灯设计报告Word格式文档下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

51单片机综合实验交通灯设计报告Word格式文档下载.docx

《51单片机综合实验交通灯设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《51单片机综合实验交通灯设计报告Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。

51单片机综合实验交通灯设计报告Word格式文档下载.docx

当东西方向允许行车(或者左转)的时候,南北方向就禁止行车,即此时东西方向的绿灯亮红灯灭,而南北方向的绿灯灭红灯亮。

反之当南北方向允许行车(或者左转)的时候,东西方向就禁止行车,即此时南北方向的绿灯亮红灯灭,而东西方向的绿灯灭红灯亮。

交通灯配置示意图如图1所示。

同时当有特殊的情况发生时,能手动控制各个方向的信号灯。

设计任务就是将这一电路用单片机来实现具体的控制。

图1十字路口交通灯配置示意图

四设计内容与原理

为了在后面的分析中便于说明,将南北方向允许直行命名为状态1,南北方向允许左转命名为状态2,南北方向行车到东西方向行车的转换阶段命名为状态3,将东西方向允许直行命名为状态4,东西方向允许左转命名为状态5,东西方向行车到南北方向方向行车的转换阶段命名为状态6。

假定直行绿灯点亮的时间为25s,左转绿灯点亮的时间为20s,黄灯点亮的时间为5s,则对方红灯的点亮时间为50秒。

黄灯每隔500ms亮一次,之后灭500ms(亮灭一次叫作闪烁一次),一共闪烁5次,持续5s。

各个状态之间的变换情况如下:

状态1状态2状态3状态4状态5状态6状态1

具体显示周期如下:

25s

20s

5s

50s

状态1

状态2

状态3

状态4

状态5

状态6

南北路口

直行

绿灯亮

左转

黄灯亮

缓行

红灯亮禁行

东西路口

图2交通信号灯点亮时间图

设计电路中每个路口的控制信号灯应有四个,即绿灯两个、黄灯、红灯各一个,同时需要七段数码管一个。

因此,本电路的设计中应用到绿灯八个,黄灯四个,红灯四个,七段数码管两个(东西方向相同,南北方向相同,为节省空间可省略一对)。

五电路设计分析

根据前面的设计内容与原理分析,电路设计中应有控制模块(单片机电路)、显示模块(十六个信号灯和两个七段数码管)本电路的设计,将发光二极管作为16个信号灯的材料。

电源将采用5V的直流电源。

东西两个方向的绿灯是同时亮的,为了简化电路可以让这两个灯接同一个引脚。

同理,东西方向的黄灯、红灯也可以分别接同一个引脚。

南北方向同上。

这样我们可以用一个8位口控制16盏信号灯。

各信号灯均是共阴极接法,LED负极均接地,正极通过保护电阻接单片机P1口。

这样单片机引脚的输出一个高电平时,相应的信号灯就被点亮。

七段数码管经过8位排阻RESPACK-8连接。

单片机中应包括复位电路和晶振电路。

本设计中,采用上电复位形式,由于本系统应用的机器周期为lμs,所以晶振选择为12MHz,根据调试电容选择30pF.

图3:

复位电路

图4:

晶振电路

六硬件原理图

七程序流程

本程序的程序流程图如图所示

八心得体会

这次系统实验历时一个月的时间,在这实验过程里我们巩固了从编程、软件使用到调试的专业知识,逻辑思维和动手能力都得到了很大的提高。

要解决的主要问题就是程序的设计和仿真,虽然初期在设计和布局、编程时思路比较清晰,但是到了细节处,也出了不少问题,而且很难被检查出来,如在定时器使用方面出了一些错误。

但是最后经过不断努力,还是写出来正确的代码。

通过这次系统实验,对以前学过的知识进行了巩固,加深了理解,提高了应用的能力,而且提高了我们的发现、分析、解决问题的能力,同时提高了对专业的认识及兴趣,对于我们工科生来说,对以后就业很有帮助。

附录程序代码:

#defineucharunsignedchar

#defineuintunsignedint

#include<

reg52.h>

/*****定义控制位**********************/

sbitEW_LED2=P2^3;

//东西数码管个位

sbitEW_LED1=P2^2;

//东西数码管十位

sbitSN_LED2=P2^1;

//南北数码管个位

sbitSN_LED1=P2^0;

//南北数码管十位_

sbitSN_Yellow=P1^6;

//南北黄灯

sbitEW_Yellow=P1^2;

//东西黄灯

sbitEW_Red=P1^3;

//东西红灯

sbitSN_Red=P1^7;

//南北红灯

sbitBusy_Btton=P3^4;

bitFlag_SN_Yellow;

//南北黄灯标志位

bitFlag_EW_Yellow;

//东西黄灯标志位

charTime_EW;

//东西方向倒计时单元

charTime_SN;

//南北方向倒计时单元

ucharEW=50,SN=25,EWL=20,SNL=20;

//程序初始化赋值

ucharEW1=50,SN1=25,EWL1=20,SNL1=20;

//用于存放修改值的变量1-9段选码

uchar

codetable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

ucharcodeS[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};

//交通信号灯控制代码

/**********************延时子程序************************/

voidDelay(uchara)

{

uchari;

i=a;

while(i--){;

}

}

/*****************显示子函数**************************/

voidDisplay(void)

charh,l;

h=Time_EW/10;

l=Time_EW%10;

P0=table[l];

EW_LED2=1;

Delay(200);

EW_LED2=0;

P0=table[h];

EW_LED1=1;

EW_LED1=0;

h=Time_SN/10;

l=Time_SN%10;

SN_LED2=1;

SN_LED2=0;

SN_LED1=1;

SN_LED1=0;

/**********************T0中断服务程序*******************/

voidtimer0(void)interrupt1using1

{

staticucharcount;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==10)

if(Flag_SN_Yellow==1)//南北黄灯标志位

{SN_Yellow=~SN_Yellow;

if(Flag_EW_Yellow==1)//东西黄灯标志位

{EW_Yellow=~EW_Yellow;

}

if(count==20)

Time_EW--;

Time_SN--;

if(Flag_SN_Yellow==1)//南北黄灯标志位

{Time_SN=Time_EW;

SN_Yellow=~SN_Yellow;

}

if(Flag_EW_Yellow==1)//东西黄灯标志位

{Time_EW=Time_SN;

EW_Yellow=~EW_Yellow;

}

count=0;

voidmain(void)

{

IT0=1;

//INT0负跳变触发

TMOD=0x01;

//定时器工作于方式1

//定时器赋初值

EA=1;

//开中断总允许

ET0=1;

//开定时中断

EX0=1;

//开外部INTO中断

TR0=1;

//启动定时

while

(1)

{/*******状态1**********/

Flag_EW_Yellow=0;

//EW关黄灯显示信号

Time_EW=EW;

Time_SN=SN;

while(Time_SN>

0)

{P1=S[0];

//SN通行,EW红灯

Display();

/*******状态2**********/

Flag_SN_Yellow=0;

//SN关黄灯显示信号

Time_SN=SNL;

{P1=S[2];

//SN左拐绿灯亮,EW红灯

Display();

/*******状态3**********/

P1=0x00;

while(Time_EW>

{Flag_SN_Yellow=1;

//SN开黄灯信号位

EW_Red=1;

//SN黄灯亮,等待停止信号,EW红灯

//SN_LED1=EW_LED1;

//SN_LED2=EW_LED2;

Display();

}

/***********赋值**********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

/*******状态4**********/

Flag_SN_Yellow=0;

Time_EW=SN;

Time_SN=EW;

while(Time_EW>

{P1=S[4];

//EW通行,SN红灯

/*******状态5**********/

Flag_EW_Yellow=0;

Time_EW=EWL;

{P1=S[6];

//EW左拐绿灯亮,SN红灯

/*******状态6**********/

P1=0X00;

{Flag_EW_Yellow=1;

//EN开黄灯信号位

SN_Red=

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

当前位置:首页 > 解决方案 > 解决方案

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

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