基于单片机的十字路口的交通灯设计大学毕业设计论文Word文档下载推荐.docx
- 文档编号:21192883
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:20
- 大小:689.07KB
基于单片机的十字路口的交通灯设计大学毕业设计论文Word文档下载推荐.docx
《基于单片机的十字路口的交通灯设计大学毕业设计论文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机的十字路口的交通灯设计大学毕业设计论文Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
繁忙指示灯亮,南北段、东西段的通行时间改为45s,其中左拐的时间改为15s,其它与正常模式类似。
1.5 特殊模式:
特殊模式灯亮,南北段、东西段的通行时间改为75s,其中左拐的时间改为20s,其它与正常模式类似。
2 设计目的
2.1 了解交通灯管理的基本工作原理
2.2 熟悉AT89C51的工作原理和应用编程
2.3 熟悉AT89C51并行接口的各种工作方式和应用
2.4 熟悉AT89C51计数器/定时器的工作方式和应用编程外部中断的方法
2.5 掌握多位LED显示问题的解决
3 方案比较、设计与论证
3.1显示界面方案
3.1.1倒计时显示该系统要求完成倒计时的功能。
因只需显示数字,基于上述原因,我们考虑完全采用数码管显示,四个路口分别采用一个二位阴极数码管即可。
3.1.2状态灯显示
该系统要求完成状态灯显示的功能。
求于简单,我们把各个路口的红灯和黄灯设成直行和左拐两个通行方式所共有,也就是说,一个路口只需四个状态灯,一个直行通行的绿灯,一个左拐通行的绿灯,一个共有的红灯,一个共有的黄灯。
3.2输入方案
该系统要求能手动改变东西与南北的通行时间、紧急情况处理,我们采用扩展I/O
口方法,在外部中断P32口上扩展三个中断口,分别连接三个按钮。
该方案的优点是:
使用灵活,并且可提供较多I/O口,节省了AT89C51的中断口资源。
4 原理分析
4.1交通灯显示时序的理论分析
下图所示为一种红绿灯规则的状态图。
共四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行如下图所示:
依据上述车辆行驶的状态图,可以列出各个路口灯的逻辑表如下表所示(其中逻辑值“1”代表直行通行,逻辑值“0”代表禁止通行,逻辑值“L”代表左拐通行):
S1的状态
E
S
W
N
逻辑值
1
显示时间
正常模式下为40S
S2的状态
L
正常模式下为20S
S3的状态
S4的状态
程序就是在上述四种状态下循环转化的。
一个周期四个状态,在正常模式下共花费2分钟。
4.2交通灯显示的理论分析
4.2.1倒计时显示的理论分析
利用定时器中断,设置TH0=TH1=(65536-50000)/256,即每0.05秒中断一次。
每到第20次中断即过了20*0.05秒=1秒时,使时间的计数值减1,便实现了倒计时的功能。
4.2.2状态灯显示的理论分析
黄灯闪烁同样可以利用定时器中断。
每到第10次中断即过了10*0.05秒=0.5秒时,使黄灯标志位反置,即可让黄灯1秒闪烁一次。
5 程序设计流程图
图5.1定时器0中断流程图
图5.2主程序流程图
图5.3外部中断0中断流程图
6 总体设计与电路图
6.1 芯片选择
6.2 设计电路图
图6.2电路图
图部分连线采用总线形式。
共五个二位阴极数码管,其中四个分别用于四个路口的倒计时显示,另外一个用于总体的直行时间显示,五个数码管的阳极都接到AT89C51的P0口,阴极接到P2口;
共32个发光二极管,其中16个绿色发光二极管,14个红色发光二极管,2个黄色发光二极管,四个路口每个路口各有一个红(禁行)、黄(警告)发光二极管,二个绿色发光二极管(通行),一个用于直行通行,一个用于左拐通行,四个人行道,每个人行道两边各有一红、绿发光二极管,另外两个红色发光二极管分别用于繁忙模式和特殊模式的指示,其中四个路口的二极管接到P1口,人行道的发光二极管接到P3口,繁忙模式和特殊模式的指示灯接P2口;
外部中断0接上三个按钮,分别用于繁忙、特殊、正常模式的转化。
6.3 PROTEUS仿真图:
6.4 交通灯程序
/***********************************************************
十字路口交通灯控制C程序
***********************************************************/
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
/*****定义控制位*******************************************/
sbitTime_Show_LED2=P2^5;
//Time_Show_LED2(直行时间显示)控制位
sbitTime_Show_LED1=P2^4;
//Time_Show_LED1(直行时间显示)控制位
sbitEW_LED2=P2^3;
//EW_LED2控制位
sbitEW_LED1=P2^2;
//EW_LED1控制位
sbitSN_LED2=P2^1;
//SN_LED2控制位
sbitSN_LED1=P2^0;
//SN_LED1控制位
sbitSN_Yellow=P1^6;
//SN黄灯
sbitEW_Yellow=P1^2;
//EW黄灯
sbitEW_ManGreen=P3^0;
//EW人行道绿灯
sbitSN_ManGreen=P3^1;
//SN人行道绿灯
sbitSpecial_LED=P2^6;
//交通特殊指示灯
sbitBusy_LED=P2^7;
//交通繁忙指示灯
sbitNomor_Button=P3^5;
//交通正常按键
sbitBusy_Btton=P3^6;
//交通繁忙按键
sbitSpecial_Btton=P3^7;
//交通特殊按键
sbitEW_ManRed=P3^3;
//EW人行道红灯
sbitSN_ManRed=P3^4;
//SN人行道红灯
bitFlag_SN_Yellow;
//SN黄灯标志位
bitFlag_EW_Yellow;
//EW黄灯标志位
charTime_EW;
//东西方向倒计时单元
charTime_SN;
//南北方向倒计时单元
ucharEW=60,SN=40,EWL=19,SNL=19;
//程序初始化赋值,正常模式
ucharEW1=60,SN1=40,EWL1=19,SNL1=19;
//用于存放修改值的变量
ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//0-9段选码
ucharcodeS[8]={0x28,0x48,0x18,0x48,0x82,0x84,0x81,0x84};
//交通信号灯控制代码
/**********************延时子程序**************************/
voidDelay(uchara)
{
uchari;
i=a;
while(i--){;
}
/*****************显示子函数******************************/
voidDisplay(void)
ucharh,l;
h=Time_EW/10;
l=Time_EW%10;
P0=table[l];
EW_LED2=1;
//点亮EW_LED2
Delay
(2);
EW_LED2=0;
//熄灭EW_LED2
P0=table[h];
EW_LED1=1;
//点亮EW_LED1
EW_LED1=0;
h=Time_SN/10;
l=Time_SN%10;
P0=table[l];
SN_LED2=1;
//点亮SN_LED2
SN_LED2=0;
SN_LED1=1;
//点亮SN_LED1
SN_LED1=0;
h=EW1/10;
l=EW1%10;
Time_Show_LED1=1;
//点亮Time_Show_LED1
Time_Show_LED1=0;
Time_Show_LED2=1;
//点亮Time_Show_LED2
Time_Show_LED2=0;
}
/**********************外部0中断服务程序******************/
voidINT0_srv(void)interrupt0using1
EX0=0;
//关中断
if(Nomor_Button==0)//测试按键是否按下,按下为正常状态
{
EW1=60;
SN1=40;
EWL1=19;
SNL1=19;
Busy_LED=0;
//关繁忙信号灯
Special_LED=0;
//关特殊信号灯
}
if(Busy_Btton==0)//测试按键是否按下,按下为繁忙状态
EW1=45;
SN1=30;
EWL1=14;
SNL1=14;
Special_LED=0;
Busy_LED=1;
//开繁忙信号灯
if(Special_Btton==0)//测试按键是否按下,按下为特殊状态
EW1=75;
SN1=55;
Special_LED=1;
//开特殊信号灯
}
EX0=1;
//开中断
/**********************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--;
count=0;
/*********************主程序开始***********************/
voidmain(void)
{
IT0=1;
//INT0负跳变触发
TMOD=0x01;
//定时器工作于方式1
TH0=(65536-50000)/256;
//定时器赋初值
TL0=(65536-50000)%256;
EA=1;
//CPU开中断总允许
ET0=1;
//开定时中断
EX0=1;
//开外部INTO中断
TR0=1;
//启动定时
while
(1)
{
/*******S0状态**********/
SN_ManRed=0;
SN_ManGreen=1;
//SN人行道通行
EW_ManRed=1;
//EW人行道禁止
EW_ManGreen=0;
Flag_EW_Yellow=0;
//EW关黄灯显示信号
Time_EW=EW;
Time_SN=SN;
while(Time_SN>
=5)
{
P1=S[0];
//SN绿灯,EW红灯
Display();
}
/*******S1状态**********/
P1=0x00;
while(Time_SN>
=0)
Flag_SN_Yellow=1;
//SN开黄灯信号位
P1=P1|0x08;
//保持EW红灯
Display();
/*******S2状态**********/
SN_ManRed=1;
//SN人行道禁止
SN_ManGreen=0;
Flag_SN_Yellow=0;
//SN关黄灯显示信号
Time_SN=SNL;
{
P1=S[2];
//SN左拐绿灯亮,EW红灯
/*******S3状态**********/
/***********赋值*********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
/*******S4状态**********/
EW_ManRed=0;
EW_ManGreen=1;
//EW人行道通行
Time_EW=SN;
Time_SN=EW;
while(Time_EW>
P1=S[4];
//EW通行,SN红灯
Display();
/*******S5状态**********/
P1=0X00;
while(Time_EW>
Flag_EW_Yellow=1;
//EW开黄灯信号位
P1=P1|0x80;
//保持SN红灯
/*******S6状态**********/
//EW关黄灯显示信号
Time_EW=EWL;
P1=S[6];
//EW左拐绿灯亮,SN红灯
/*******S7状态**********/
//EN开黄灯信号位
/***********赋值********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
7仿真测试、数据与结果分析
程序运行结果如下:
1.首先,直行时间显示数码管显示60。
此时南北段绿灯亮、东西段红灯亮40s,南北段人行道绿灯亮,东西段人行道红灯亮,同时南北段和东西段方向的数码管分别从40s和60s开始倒计时。
2.35秒后,南北方向的黄灯闪烁5秒钟,此时东西方向仍维持红灯亮,人行道灯不变。
3.40秒后,南北方向左拐灯亮,东西方向红灯亮,东西和南北人行道全部红灯亮,同时南北段和东西段方向的数码管分别从19秒开始倒计时。
4.55秒钟后,南北方向的黄灯闪烁5秒,此时东西方向仍维持红灯亮,人行道灯不变。
5.1分钟后,东西段绿灯亮、南北段红灯亮40s,东西段人行道绿灯亮,南北段人行道红灯亮,同时南北段和东西段方向的数码管分别从60s和40s开始倒计时。
6.1分35秒后,东西方向的黄灯闪烁5秒钟,此时南北方向仍维持红灯亮,人行道灯不变。
7.1分40秒后,东西方向左拐灯亮,南北方向红灯亮,东西和南北人行道全部红灯亮,同时南北段和东西段方向的数码管分别从19秒开始倒计时。
8.1分55秒钟后,东西方向的黄灯闪烁5秒,此时南北方向仍维持红灯亮,人行道灯不变。
9.按下“繁忙”、“特殊”按钮时直行显示分别为45和75。
其它过程与正常模式下一样。
8总结与展望
8.1软件延时与定时器计时
软件延时,设计简单,使用方便,但是无法进行精确计时,无法在实际应用中进行使用,本次设计采用了定时器0进行计时,每50ms产生一个脉冲信号,可以准确的计时并方便8段数码管进行显示。
8.2使用中断的好处
使用中断可以进行多样化设计,强化程序功能与执行效率。
在本设计中程序每50ms请求一次中断,实现精确定时与数码管显示刷新。
8.3关于本次设计
本次课程设计的过程是艰辛的,不过收获却是很大的。
在设计过程中,会出现了一些问题,但都是常见的小问题,如:
代码中双引号的使用并不是在英语书写状态下,输入字母出错等,在调
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 十字路口 交通灯 设计 大学 毕业设计 论文