现代交通灯设计.docx

上传人:b****1 文档编号:10203983 上传时间:2023-05-24 格式:DOCX 页数:28 大小:564.20KB
下载 相关 举报
现代交通灯设计.docx_第1页
第1页 / 共28页
现代交通灯设计.docx_第2页
第2页 / 共28页
现代交通灯设计.docx_第3页
第3页 / 共28页
现代交通灯设计.docx_第4页
第4页 / 共28页
现代交通灯设计.docx_第5页
第5页 / 共28页
现代交通灯设计.docx_第6页
第6页 / 共28页
现代交通灯设计.docx_第7页
第7页 / 共28页
现代交通灯设计.docx_第8页
第8页 / 共28页
现代交通灯设计.docx_第9页
第9页 / 共28页
现代交通灯设计.docx_第10页
第10页 / 共28页
现代交通灯设计.docx_第11页
第11页 / 共28页
现代交通灯设计.docx_第12页
第12页 / 共28页
现代交通灯设计.docx_第13页
第13页 / 共28页
现代交通灯设计.docx_第14页
第14页 / 共28页
现代交通灯设计.docx_第15页
第15页 / 共28页
现代交通灯设计.docx_第16页
第16页 / 共28页
现代交通灯设计.docx_第17页
第17页 / 共28页
现代交通灯设计.docx_第18页
第18页 / 共28页
现代交通灯设计.docx_第19页
第19页 / 共28页
现代交通灯设计.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

现代交通灯设计.docx

《现代交通灯设计.docx》由会员分享,可在线阅读,更多相关《现代交通灯设计.docx(28页珍藏版)》请在冰点文库上搜索。

现代交通灯设计.docx

现代交通灯设计

 

接口技术课程设计报告

 

现代交通灯设计

 

学院(系):

机械与电子工程学院

专业年级:

电子信息工程10级1班

学生姓名:

学号:

指导教师:

郭文川

完成日期:

2013年7月05日

 

现代交通灯设计

摘要

随着现代交通事业的发展,越来越多的私家车走进寻常百姓家,因此道路的负载强度越来越大,各大城市发生经常性的堵车事件,走路要比开车快已经成了不争的事实,然而传统的交通灯只有红,绿,黄三种颜色,不仅无法方便司机在高度紧张下对路况的判断,因此发生交通事故的可能性大大升高,因此我们需要带倒计时功能,而且可以显示各个通行方向的交通灯,为了设计一款这样的符合现代需求的交通灯,本设计基于单片机,用8255A扩展接口带左转、直行、右转三种通行绿灯,具有倒计时功能,当按下夜间行驶按钮时,所有方向黄灯闪烁,灯第二次按下夜间行驶按钮时,恢复正常行驶,当按下紧急按钮时,所有方向红灯亮,当第二次按下夜间行驶按钮时,恢复正常行驶,并可由管理人员修改倒计时的时间。

关键词:

现代交通灯;

Introduction

Withthedevelopmentofmoderntransport,moreandmoreprivatecarscomeintothecommonpeople’shome,sotheloadofroadbecomemoreandmoreserious,thefrequenttrafficjamsinmajorcitieshappenedeveryday,youcanwalkfasterthandriving,whichhasbecomeanindisputablefact,butthetraditionaltrafficlightonlyhavered,green,yellow,whichnotonlycan’tconvenientthedrivertoseeroadconditionsunderhightension,thusitgreatlyincreasethepossibilityoftrafficaccident,soweneedtoinviteatrafficlightwiththecountdownfunction,andcandisplaythetrafficdirectionsoftrafficlights,inordertodesignamoderntrafficlightswhitchcanmatchthedemandofneed,thisdesignbasedonsinglechipmicrocomputer89C51,andextensioninterfacewith8255Atoshowturnleft,gostraight,turnrightthreepassageofthegreen,withthecountdownfunction,whendrivingatnight,alldirectionyellowlightsflashing,,whennightdrivingbuttonpressatthesecondtime,thedisplaywillreturnstonormal,whenpresstheemergencybutton,alldirectionturnsred,whendrivingatnightbuttonasecondtime,backtonormal,andcanmodifythecountdowntimebymanagementpersonnel.

Keyword;moderntrafficlights

目录

1设计目的与要求-1-

1.1设计目的-1-

1.2设计要求-1-

2系统硬件设计-2-

2.1总体设计方案-2-

2.2硬件设计-3-

3系统软件设计-6-

3.1程序框图-6-

3.2各模块程序设计-7-

4仿真与调试-9-

4.1各种情况下运行结果-9-

4.2proteus整体仿真电路图-11-

4.3PCB电路板-12-

5总结-13-

5.1遇到的问题-13-

5.2心得-14-

参考文献-15-

附录C语言源程序-16-

1设计目的与要求

1.1.设计目的

单片机课程设计作为独立的教学环节,是集中实践性环节系列之一,是学习完《单片机原理与接口技术》课程后,并在相关课程设计基础上进行的一次综合性练习。

单片机课程设计过程中,学生通过查阅资料,接口设计,程序设计,安装调试等环节,完成一个基于MCS-51系列单片机,涉及多种资源应用,并且有综合功能的小应用系统设计。

使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路,电子元器件等方面的知识进一步加深认识,同时在软件编程,调试,相关仪器设备和相关软件的使用技能等方面得到较全面的锻炼和提高。

使学生增进对单片机的感性认识,加深对单片机理论方面的理解,加深单片机的内部功能模块的应用,如定时器/计数器,中断,片内外存储器,I/O接口,串行口等。

使学生了解和掌握单片机应用系统的软硬件设计过程,方法及实现,强化单片机应用电路的设计与分析能力。

不仅提高学生在单片机应用方面的实践技能和科学作风,培育学生综合运用理论知识解决问题的能力,还提高了我们在论文撰写方面的能力,为以后的毕业论文的奠定一定的基础。

1.2.设计要求

(1)设计一款带左转、直行、右转三种通行绿灯,参见实物效果图。

(2)带紧急按钮功能,当紧急按钮按下时,所有方向均亮红灯。

(3)夜间运行模式按钮,按下时,所有方向黄灯闪烁。

(4)可显示倒计时功能(此处我采用倒计时十秒显示)。

(5)可由管理人员修改红绿灯等待间隔时间。

 

2系统硬件设计

2.1总体设计方案

 

本设计基于单片机进行开发:

1)用P1口对7SEG-MPX2-CA-BLUE的段选;

2)用P3.0和P3.1实现对7SEG-MPX2-CA-BLUE;

3)由于单片机自带接口的紧缺,因此需要扩展接口,用P0和P1口接8255A对单片机扩展输出口,8255PA和8255PB分别接MATRIX-8x8-GREEN的上下八个输入端,实现动态扫描箭头显示,8255PC的第三位连接74LS138,产生时能信号,对三个MATRIX-8x8-GREEN进行片选,8255PC7可以在接口很紧缺的情况下,控制在中断条件下红灯的点亮,因为此时不进行片选。

4)P3.2控制外部中断0,实现紧急情况时红灯的亮灭;

5)P3.3控制外部中断1,实现夜间行驶时黄灯的闪烁和熄灭;

6)P3.4控制定时器0,实现倒计时

7)P3.5控制红灯的点亮与熄灭。

 

2.2硬件设计

2.2.1点阵显示电路电路

 

通过8255A的PA口和PB口输出,使点阵扫描显示,然而MATRIX-8x8-GREEN缺少位选信号,所以无法对其进行片选,我巧妙的用了三块74LS373对其上下进行连接,通过PC口对锁存器的片选从而对MATRIX-8x8-GREEN片选,除此之外,还能使扫描更稳定。

2.2.2倒计时电路

倒计时电路如图3所示,十字路口交通灯一般倒计时在六十秒之内,所以只采用两段共阳极数码7SEG-MPX2-CA-BLUE进行显示,数码管有十个输入端,A-G是控制显示0-9的输入管,只要输入合适的数据,只能及时的显示,DP是是否显示小数点,当某位接低电平时,表示所在位的数码管被点亮,接高电平的数码管通过锁存器对P1过来的数据进行锁存,锁存器的使能端接地,ALE端接单片机的晶振ALE,从而实现显示功能。

 

2.2.3控制电路:

 

NIGHT按钮和单片机的P3.3口相连,按钮按下,跳入中断,黄灯闪烁,进入

 

夜间行车状态,当NIGHT再次按下时,跳出中断,黄灯熄灭,进入日间行车状态,EMERGENCY按钮和单片机的P3.2口相连,按下时,跳入中断,红灯点亮,倒计时,和箭头显示都关闭,进入紧急状态,当红灯再次按下时,跳出中断,关闭红灯,继续中断前的工作状态。

2.2.4复位电路

复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。

除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。

RST引脚是复位信号的输入端。

复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。

除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。

RST引脚是复位信号的输入端。

复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图5所示:

图5复位电路模块

2.2.5时钟电路

时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。

在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。

为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。

具体连接如图6所示。

图6时钟电路模块

3系统软件设计

3.1程序框图

系统软件由主程序和子程序组成,主程序主要是对程序的初始化,子程序包括定时中断,延时,点阵显示,倒计时等各个模块,图7是主要的程序框图。

图7 软件程序框图

 

3.2各模块程序设计

3.2.1点阵箭头显示:

voidarrow()//箭头函数

{

for(arrow_j=0;arrow_j<4;arrow_j++)//扫描显示

{

PA8255=Tab_1[arrow_j];

PB8255=Tab_2[arrow_j];

delay

(2)

}

}

3.2.2倒计时程序:

voidT0_time()interrupt1//定时中断服务程序

{

TH0=15536/256;//设置定时起点

TL0=15536%256;

num++;

if(num==10)//满一秒则变换

{

num=0;

temp--;

if(temp+1==0)

{

if(PC8255<2)

{

PC8255=PC8255+1;

}

else

{

PC8255=0x00;

}

temp=10;

}

}

}

3.2.3夜间行驶中断函数设计:

voidinter0()interrupt2//外部中断1

{

delay(2000);

 

while(y==1)//为了第二次按下按钮跳出中断

{

led_3=1;

for(i_inter=0;i_inter<150;i_inter++)//倒计时和点阵程序

{

P1=0xff;//不是整体赋值,所以先屏蔽原值

led_1=1;

led_2=0;

P1=table[shi];

delay(15);

if(i_inter==75)

led_3=0;

P1=0xff;

led_1=0;

led_2=1;

P1=table[ge];

delay(15);

arrow_1();//箭头函数2

}

PA8255=0xff;

PB8255=0xff;

temp--;

if(temp+1==0)

{

if(PC8255<2)

{

PC8255=PC8255+1;

}

else

{

PC8255=0x00;

}

temp=10;

}

shi=temp/10;

ge=temp%10;

if(led_5==0)

{

y=0;

}

}

}

 

3.2.4紧急情况中断函数设计:

voidinter1()interrupt0

{

delay(1000);

k=PA8255;

m=PC8255;

while(x==1)//目的是在第二次按下按钮时跳出中断

{

PC8255=0xff;

PA8255=0x00;

P1=0xff;

if(led_4==0)

{

delay(100);

if(led_4==0)

{

x=0;

while(led_4==0);

}

}

}

PA8255=k;

PC8255=m;

}

4硬件仿真与调试·

4.1各种情况下显示结果

当在proteus里面按下开始仿真按钮时,系统开始仿真,红灯和黄灯都不亮,显示十秒倒计时,倒计时满了切换箭头的方向,依次方向循环往复,直到等待中断的到来,图8,图9,图10为各方向行驶时的显示

 

 

当按下紧急情况按钮是只亮红灯,其他模块都不亮,如图11所示,当再一次按下按钮时,恢复到紧急按钮按下那一刻之前的显示,即恢复到正常行驶模式。

 

 

当按下夜间行驶按钮按钮时,进入到夜间行驶模式,所有方向黄灯闪烁,如图13所示,且不进行倒计时显示,当再次按下此按钮时,恢复到按下按钮那一刻之前的的显示,进入到正常行驶模式。

 

 

4.2Proteus总体仿真结果

总体电路图包括显示电路,点阵电路,接口扩展电路,控制电路等,结果如图15所示。

 

4.3PCB电路板

经过一个上午的设计,画出了原理图,然后画出了各个元件的PCB封装,花了一个下午的时间把全部结果完成,有一点欠缺的地方就是线是自动布的所以看上去有点乱

图18PCB电路板

 

5总结

5.1遇到的问题:

问题1:

显示不出完美的箭头。

解决方案:

把扫描速度调到最慢,发现方法是对的,是按照编程想象的速度进行扫描,因此我加了一个锁存器,接的是单片机晶振,但是结果虽然比刚刚好了但是箭头上面还是有一两个点在闪烁,对于追求完美的我来说,肯定是不满意的,因此我把锁存器的晶振换成了一个外部晶振,经过慢慢的调其晶振频率,果然可以显示出一个完美的箭头。

问题2:

8255A的扩展后PA,PB,PC不能输出数据。

解决方案:

XX了很久,查了很多的资料,都没有能够解决问题,接口地址都设置都是对的,控制口设置也是对的,所以百思不得其解,第二天在郭老师的帮助下,把工程下的A51删除以后,结果就可以运行了。

问题3:

在扩展两片8255A没能成功的情况下,接口不够用,找不到一个口控制红灯,所有接口都被利用了。

解决办法:

用PC7控制,因为此时跳入中断,暂时不用进行对点阵的片选,从而实现了一口两用的功能,只需要在跳出中断以后,对PC口重新复制即可。

问题4用P3.0和P3.1口对两段数码管进行位选,由于不是对P3.1口整体赋值,数码管不能正常显示,。

解决办法:

首先分析问题产生的原因,由于是分别赋值,尽管单片机的执行速度很快,但是还是有几微秒的差异,所以不能及时的显示,然后要达到整体赋值的位选功能,只能先的数码管的输入值赋值为oxff,先让其灭了,然后对P3.0和P3.1口进行赋值,赋值以后再输入要显示的数据,这样就可以完美解决问题。

问题5:

当执行夜晚行驶中断程序时,不能实现倒计时。

解决办法:

由于单片机是单线程的微型计算机,所以一次只能执行一条服务,所以只能在中断服务程序里面添加计时功能程序,很显然用定时器进行计时已经不可能,因此通过在单片机里面加一段延时计时程序,从而成功解决问题,瑕疵就是定时没有那么准而已。

为题6:

当解决完问题5以后,箭头已经没法正常显示,因为问题5中用的是延时,而箭头用到的是扫描,因此这两个是完全矛盾的问题。

解决办法:

重新定义一个箭头函数,只进行一次扫描,把次箭头函数放到问题5中延时的for循环里面去,从而解决了问题。

问题7:

为了二次按按钮的时候跳出中断,用goto命令无法跳出到中断的入口。

解决办法:

把中断的死循环while

(1)里面1用一个参数代替,当中端口检测到下降沿到来时,只需要把参数置为假就能解决问题。

问题7:

点阵没有使能端,所以如果想只用PA和PB口对其控制的话,没法对其进行选择。

解决办法:

在输入端接一个锁存器,用锁存器的使能端当做点阵的使能端,从而

解决了问题。

5.2心得:

此次课程设计,遇到了各种各样的问题,但是只要正视它,就能把其解决,也许要花一个下午,或者一个晚上的时间,但是这无疑是一种思维的锻炼,耐力的升华。

自我感觉这次实验的难点在于在执行夜间行驶中断的时候要同时计时,而且要扫描显示箭头,如果采用原来方案时,无疑会相互矛盾,因此只能另辟蹊径,当我解决问题的时候,才发现夜间行驶不需要显示箭头,而且不需要倒计时,花了三分之二的时间解决的问题,结果付之东流,但是确实还是学到了一点东西的,只能这样来安慰自己了,不过通过此方法还是帮助了几个同样遇到执行中断还要倒计时的同学。

同时此次课程设计的编程让我感觉程序不是编出来的,而是调出来的,写一点调一点,调通为止,虽然经过几天的编写,程序是写出来了,但是有欠缺的地方是,程序的执行效率很低,虽然是可以实现,但是有些的方的想法是很不明智的,比如说在行外部中断时,不能进行计时,所以采用延时,而这个地方的延时我是一个数字一个数字的套出来,感觉延迟时间差不多一秒就算完成了。

 

参考文献

[1]郭文川.单片机原理与接口技术.中国农业出版社,2007

[2]郭天祥.新概念51单片机C语言教程.电子工业出版社,2009

[3]潘永雄.新编单片机原理及应用.西安电子科技大学出版社,2008

[4]杜洋.爱上单片机.人民邮电出版社,2012

[5]蒋力培.单片机微机系统实用教程.机械工业出版社,2007

[6]牛昱光.单片机原理与接口技术.电子工业出版社,2008

[7]张毅刚,彭喜元.新编MCS-51单片机应用设计,2009

[8]高卫东.51单片机原理与实践.北京航空航天大学出版社,2011

附录:

#include

#include

#include

#defineCOM8255XBYTE[0x70ff]//定义并设置控制口的地址

#definePA8255XBYTE[0x70fc]//定义并设置PA口地址

#definePB8255XBYTE[0x70fd]//定义并设置PB口地址

#definePC8255XBYTE[0x70fe]//定义并设置PC口地址

#defineucharunsignedchar

#defineuintunsignedint

uintshi,ge,num;

inttemp=10;

uintarrow_j,arrow_j_1;

uinti_inter;

uintt=4,x=1,y=1,k,m;

ucharcodeTab_1[]={0x18,0x30,0x60,0xFF};//arrow

ucharcodeTab_2[]={0x7E,0xBD,0xDB,0xE7};//arrow

unsignedcharcodeTab_3[]={0xFF,0x3C,0x7E};//circle

unsignedcharcodeTab_4[]={0xFF,0xBD,0xC3};//circle

ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x02,0xf8,0x80,0x90};//共阳极0-9字形代码

sbitled_1=P3^0;

sbitled_2=P3^1;

sbitled_3=P3^5;

sbitled_5=P3^3;

sbitled_4=P3^2;

voiddelay(uintz)

{uintx,y;

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

for(y=10;y>0;y--);

}

voiddelay_1(unsignedintx)//延时函数

{

inti;

while(x--)

{for(i=0;i<227;i++);

}

}

voidarrow()//点阵箭头显示函数

{

for(arrow_j=0;arrow_j<4;arrow_j++)

{

PA8255=Tab_1[arrow_j];

PB8255=Tab_2[arrow_j];

delay

(2);

}

}

voidarrow_1()//点阵箭头显示函数

{

for(arrow_j_1=0;arrow_j_1<4;arrow_j_1++)

{

PA8255=Tab_1[arrow_j_1];

PB8255=Tab_2[arrow_j_1];

delay

(1);

}

}

main()

{

COM8255=0x80;

led_3=0;

num=0;

PC8255=0x00;

IT1=1;

EX1=1;

IT0=1;

EX0=1;

PX1=1;//设置中断的优先级

PX0=1;

TMOD=0x01;

TH0=15536/256;//设置定时起点

TL0=15536%256;

EA=1;

ET0=1;

TR0=1;

while

(1)//等待中断

{

x=1;

y=1;

shi=temp/10;

ge=temp%10;

P1=0xff;

led_1=1;

led_2=0;

P1=table[shi];

delay(15);

P1=0xff;

led_1=0;

led_2=1;

P1=table[ge];

delay(15);

arrow();

}

}

voidT0_time()interrupt1//定时中断

{

TH0=15536/256;//重新设定定时起点

TL0=15536%256;

num++;

if(num==10)//十秒结束,重设,可以修改倒计时

{

num=0;

temp--;

if(t

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

当前位置:首页 > 人文社科 > 法律资料

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

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