基于plc的交通信号灯控制系统设计大学本科毕业论文.docx
《基于plc的交通信号灯控制系统设计大学本科毕业论文.docx》由会员分享,可在线阅读,更多相关《基于plc的交通信号灯控制系统设计大学本科毕业论文.docx(21页珍藏版)》请在冰豆网上搜索。
基于plc的交通信号灯控制系统设计大学本科毕业论文
学号
毕业设计(论文)
基于PLC的交通信号灯控制系统设计
教学系:
信息工程系
指导教师:
专业班级:
学生姓名:
20年六月
前言
电子课程设计是电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。
数字钟具有走时准,显示直观,款式新颖,附加功能多等优点受到人们的欢迎,在很多场合得到了广泛的应用。
微机原理和接口技术是一门实践性强的学科,不但要求有较高的理论水平,而且还要求有实际的动手能力,其中很多的原量、规则、现象等仅仅靠学习教科书是无法完全掌握的,必须通过实践才能比较直观和深刻的理解。
本课程设计的主要目的是提高实践能力,包括提高汇编等语言的编程能力及对接口等硬件的理解分析能力和设计接口电路的能力,在进行课程设计的过程中,可以让学生体验分析问题、提出解决方案、通过编程等手段实现解决方案、不断调试最终达到设计要求的全过程,从而帮助学生系统地掌握微机原理的接口技术的相关知识,达到将知识融会贯通的目的。
十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。
十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。
当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。
但是,实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受人为因素的影响,例如在救护车以及警车开过的情况下,交通灯应当为其开辟“绿色通道”,使其畅通无阻。
本次关于交通灯的课程设计在控制东西、南北方向红灯—绿灯—黄灯自动转换的情况下,利用控制中断芯片8259A控制在紧急情况下东西、南北红绿灯全红让特殊车辆通过。
目录
前言…………………………………………………………………………………………
第一章交通灯的设计要求与设计方案
1.1方案的论证与比较……………………………………………………………(3)
1.2交通灯的功能与要求…………………………………………………………(4)
1.3设计方案的确定…………………………………………………………………(4)
第二章交通灯的硬件设计
2.1交通灯的硬件框图………………………………………………………………(4)
第三章交通灯的软件设计
3.1主程序流程图……………………………………………………………………(5)
3.2延时子程序1图…………………………………………………………………(5)
3.3延时子程序10图…………………………………………………………………(6)
3.4中断程序图………………………………………………………………………(7)
3.5protus仿真图…………………………………………………………(7)
3.6DXP电路仿真图………………………………………………………(8)
3.7DXP版图………………………………………………………………(8)
3.8元件清单………………………………………………………………(8)
第四章调试及性能分析
4.1红绿交通灯控制程序………………………………………………………………(9)
4.2紧急情况全部禁行的调试…………………………………………………………(9)
4.3交通灯的性能分析………………………………………………………………(9)
第五章设计体会与小结
附录
6.1源程序清单……………………………………………………………………(10)
6.2参考文献…………………………………………………………………………(16)
第一章交通灯的设计要求与设计方案
1.1方案的论证与比较
1)电源提供方案:
采用独立的稳压电源,此方案稳定可靠,且有各种成熟电路可供选用
2)显示界面方案
采用数码管和点阵LED相结合的方法,因为实际既要求倒计时施主输出,又要求又状态灯输出等,为方便观看并考虑到现实状况,用数码管与LED分别显示时间和提示信息。
这种方案既满足系统功能要求,又减少了系统实现的复杂度。
3)输入方案
直接在IO口上接按键开关。
因为设计时精简和优化了电路,所以剩余口的资源还比较多。
4)主控制方案
控制8255实现东西、南北方向红绿灯交替转换。
通过比较,本课程设计利用软硬件结合的方法,可实现交通灯的许多功能。
1.2交通灯的功能与要求
1东西、南北方向红绿灯交替时间为60s
2红绿灯交替前红灯闪烁,闪烁时间为5s
3在出现紧急情况时可由交通手动实现全路口车辆禁行。
1.3设计方案的确定
1)芯片的选择
8255A是一种通用的可编程并行I/O接口芯片,通用性强,使用灵活,所以选择8255A做为实验所用芯片。
8255A的端口地址为:
端口A-60H、端口B-61H、端口C-62H、控制端口-63H
2)交通灯红绿灯替换
可以直接使用试验箱上的发光二极管实现次功能。
3)中断服务程序
选用8259A可编程中断控制器(PIC)实现在出现紧急情况时由交通手动实现全路口车辆禁行。
8259A的端口地址为:
20H、21H
第二章交通灯的硬件设计
2.1交通灯硬件设计原理图:
第三章交通灯的软件设计
3.1主程序流程图:
开始
3.2延时子程序1的设计
延时子程序1图:
3.3延时子程序10的设计
延时子程序10图:
3.4中断程序的设计
中断程序图:
3.5protus仿真图
3.6DXP电路仿真图
3.7DXP版图
3.8元件清单
按键开关3个
芯片插座5个
数码管7SEG-MPX2-CC2个
杜邦线若干
排针若干
杜邦头若干
反向器74LS041个
排阻RESPACK-81个
二极管DIODE3个
发光二极管LED-GREEN16个
LED-RED13个
LED-YELLOW4个
第四章调试及性能分析
设计时按红绿交通灯控制程序和紧急情况中断程序两大部分电路进行测试。
4.1红绿交通灯控制程序
时器T0,直接按照表7.1中算好的数据码送出来控制灯,观察其逻辑状态是否符合要求。
可多次、反复地进行调试,直至逻辑关系正确。
值得注意的是,南北方向、东西方向的指示灯要同时调试。
4.2紧急情况全部禁行的调试
在模拟实验中对开关进行手动操控,当按下按钮时东西南北红灯全亮并报警,表明实验成功。
4.3交通灯的性能分析
本系统以8255为核心,开发程序调试阶段采用软件进行编程及修改,可大大加快调试进度。
设计的交通灯可用于十字路口的车辆及行人的交通管理,显示采用2位7段数码管,可以很直观的显示红绿灯的开放和关闭的时间;功能完整,不仅有普通交通灯的指示功能,还增加了紧急情况突然禁行的功能。
其控制功能和效果与真实道口管理红绿灯完全一致。
第五章设计体会与小结
回顾起此次毕业设计,我仍感慨颇多,学到了很多的东西。
同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。
在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
通过这次毕业设计我发现单片机原理应用行很强,只有老师的讲解是不行的,只看也不行,只有自己动手去做才会发现自己确实有太多的不足,许多的原理,程序看似简单,真正去做才知道知识并没有自己想象的那样扎实。
从而懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。
而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。
在设计完成之际再次衷心感谢指导老师的指导!
附录
6.1源程序清单
/*****************************************************
十字路口交通灯控制C程序
******************************************************/
#defineucharunsignedchar
#defineuintunsignedint
#include
/*****定义控制位**********************/
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_Red=P1^3;//EW红灯
sbitSN_Red=P1^7;//SN红灯
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;//交通特殊按键
sbitAdd_Button=P3^3;//时间加
sbitReduces_Button=P3^4;//时间减
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};//1~~~~9段选码
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
(2);
EW_LED2=0;
P0=table[h];
EW_LED1=1;
Delay
(2);
EW_LED1=0;
h=Time_SN/10;
l=Time_SN%10;
P0=table[l];
SN_LED2=1;
Delay
(2);
SN_LED2=0;
P0=table[h];
SN_LED1=1;
Delay
(2);
SN_LED1=0;
h=EW1/10;
l=EW1%10;
P0=table[l];
Time_Show_LED1=1;
Delay
(2);
Time_Show_LED1=0;
P0=table[h];
Time_Show_LED2=1;
Delay
(2);
Time_Show_LED2=0;
}
/**********************外部0中断服务程序************************/
voidEXINT0(void)interrupt0using1
{
EX0=0;//关中断
if(Add_Button==0)//时间加
{
EW1+=5;
SN1+=5;
if(EW1>=100)
{
EW1=99;
SN1=79;
}
}
if(Reduces_Button==0)//时间减
{
EW1-=5;
SN1-=5;
if(EW1<=40)
{
EW1=40;
SN1=20;
}
}
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;
EWL1=19;
SNL1=19;
Busy_LED=0;//关繁忙信号灯
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--;
if(Flag_SN_Yellow==1)//测试南北黄灯标志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1)//测试东西黄灯标志位
{EW_Yellow=~EW_Yellow;}
count=0;
}
}
/*********************主程序开始**********************/
voidmain(void)
{
Busy_LED=0;
Special_LED=0;
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状态**********/
EW_ManGreen=0;//EW人行道禁止
SN_ManGreen=1;//SN人行道通行
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开黄灯信号位
EW_Red=1;//SN黄灯亮,等待左拐信号,EW红灯
Display();
}
/*******S2状态**********/
Flag_SN_Yellow=0;//SN关黄灯显示信号
Time_SN=SNL;
while(Time_SN>=5)
{P1=S[2];//SN左拐绿灯亮,EW红灯
Display();}
/*******S3状态**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;//SN开黄灯信号位
EW_Red=1;//SN黄灯亮,等待停止信号,EW红灯
Display();}
/***********赋值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
/*******S4状态**********/
EW_ManGreen=~EW_ManGreen;//EW人行道通行
SN_ManGreen=~SN_ManGreen;//SN人行道禁止
Flag_SN_Yellow=0;//SN关黄灯显示信号
Time_EW=SN;
Time_SN=EW;
while(Time_EW>=5)
{P1=S[4];//EW通行,SN红灯
Display();}
/*******S5状态**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EW开黄灯信号位
SN_Red=1;//EW黄灯亮,等待左拐信号,SN红灯
Display();}
/*******S6状态**********/
Flag_EW_Yellow=0;//EW关黄灯显示信号
Time_EW=EWL;
while(Time_EW>=5)
{P1=S[6];//EW左拐绿灯亮,SN红灯
Display();}
/*******S7状态**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EN开黄灯信号位
SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯
Display();}
/***********赋值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
}
}
6.2参考文献
【1】单片机的C语言应用程序设计马忠梅籍顺心北京航空航天大学出版社2007
【2】51单片机应用开发案例精选王为青邱文勋人民邮电出版社2007
【3】51系列单片机设计实例楼然苗李广飞北京航空航天大学出版社2003
【4】单片机原理与接口技术胡汉才清华大学出版社2006
【5】单片机原理与应用丁元杰机械工业出版社2007