版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
可编辑版/武汉科技大学课题:交通灯控制器的设计编号:17指导老师:冯玉林班级:自动化0703班姓名:筱启…………坚持,就是胜利………目录1.设计内容与要求…………22.交通灯控制系统的组成框图…………33.交通灯控制电路的设计…………44.交通灯控制电路设计的难点与解决方法………55.交通灯控制电路的Verilog语句…………65.交通灯控制电路的程序和波形分析…………126.EPF10K10LC84-4芯片引脚分配图…………207.实验小结…………21设计内容与要求①设计一个十字路口交通信号灯的定时控制电路。要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,并将运行时间用数码管显示出来。②绿灯亮时,为该车道允许通行信号,红灯亮时,为该车道禁止通行信号。要求主干道每次通行时间为99秒,支干道每次通行时间为30秒。每次变换运行车道前绿灯闪烁,持续时间为5秒。即车道要由主干道转换为支干道时,主干道在通行时间只剩下5秒钟时,绿灯闪烁显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。③对红、绿灯的运行时间要能比较方便的进行重新设置。④添加左转灯的控制,可自行到实际十字路口观看规律并实现。对器件进行在系统编程和实验验证。⑤用Verilog语言对设计进行描述,设计一个测试方案,通过Muxplus对设计进行仿真验证。并能够下载到实验板上调试成功。二、交通灯控制系统的组成框图根据设计要求,画出交通信号灯控制电路原理框图,如下图所示:支干道信号灯主干道信号灯译码、显示支干道信号灯主干道信号灯译码、显示交通灯闪烁控制状态译码器减法计数器交通灯闪烁控制状态译码器减法计数器置数控制置数控制状态控制器状态控制器秒脉冲发生器秒脉冲发生器交通信号灯控制原理图主干道信号灯定时器绿灯主干道信号灯定时器TsTltstlTemp左拐灯译码器控制器红灯译码器控制器时钟支干道信号灯传感器绿灯支干道信号灯传感器左拐灯红灯交通信号灯控制系统框图交通灯控制电路的设计交通灯控制器设计的重点是控制电路的设计,根据设计要求分析,控制电路的算法可用下图所示的ASM图描述。Tempm==0?Tempb==0?Tempm==0?Tempb==0?Countm由0变为1Countb由1变为2主绿支红Countm由0变为1Countb由1变为2主绿支红S3No主红支黄Tempm==0?主红支黄Tempm==0?CCountb由1变为2YesCountm由1变为2YesCountm由1变为2TTempb==0?S1S2主红支绿主黄支红No主红支绿主黄支红Tempm==0?Tempb==0?Tempm==0?Tempb==0?Countm由2变为0Countb由0变为1YesYes各状态的详细说明如下:S0状态:主干道绿灯亮,支干道红灯亮,此时若主干道有车等待左拐,而且主干道绿灯已亮足规定的时间间隔Ts;在主干道绿灯亮了<Ts-5>s后,则开始闪亮,直至绿灯亮了Ts;控制器发出状态转换信号Tempm==0,输出从状态S0转换到S1。S1状态:主干道左拐灯亮,支干道红灯亮,此时若支干道有车等待通过,而且主干道左拐灯已亮足规定的时间间隔Ts;在主干道左拐灯亮了<Ts-5>s后,则开始闪亮,直至左拐灯亮了Ts;控制器发出状态转换信号Tempm==0和Tempb==0,输出从状态S1转换到S2。S2状态:支干道绿灯亮,主干道红灯亮,若此时支干道继续有车,则继续保持此状态,但支干道绿灯亮的时间不得超过Ts时间间隔;在主干道绿灯亮了<Ts-5>s后,则开始闪亮,直至绿灯亮了Ts;控制器发出状态转换信号Tempb==0,使输出转换到S3状态。S3状态:支干道左拐灯亮,主干道红灯亮,此时若主干道有车等待通过,而且支干道左拐灯已亮足规定的时间间隔Ts;在支干道左拐灯亮了<Ts-5>s后,则开始闪亮,直至左拐灯亮了Ts;控制器发出状态转换信号Tempm==0和Tempb==0,输出从状态S3回到S0。交通灯状态图S1S1S2S3Tempm==0&&Tempb==0Tempb==0S0Tempm==0Tempm==0&&Tempb==0Tempm==1Tempm==1Tempb==1Tempb==1交通灯控制电路设计的难点与解决方法如何将主干道和支干道的直行和左拐的初始时间的设置和减计数分开?用使能信号,当使能信号en==0时,就进行初始时间的设置;当en==1时,就进行减计数。如何分别进行主干道和支干道的直行和左拐的初始时间的设置?将主干道直行和左拐、支干道直行和左拐分别用四个键msmlbsbl来控制,采这些信号的上升沿,每来一个上升沿就进行一次加计数,可以从0一直加到99。状态的转变很多,并且主干道和支干道的计时是并行的,应该如何使用标志位来安排好并行的状态转变?将主干道和支干道完全分开,用两组控制信号tempm和countm、tempb和countb来实现。将初始时间的赋值和减计数分开来:用temp来控制是赋值〔temp==0还是减计数<temp==1>;用count来控制是哪一种状态下的倒计时,如count==0时,主干道是等待灯的倒计时,支干道是左拐灯的倒计时;count==1时,主干道是直行灯的倒计时,支干道是等待灯的倒计时;count==2时,主干道是红灯的倒计时,支干道是直行灯的倒计时。如何进行数码管的分配?共有8个数码管,但是根据题目要求必须用到12个数码管。给主干道和支干道分别分配4个数码管,两个用于时间的设定,两个用于时间的倒计时;而时间的设置里面,用模式控制键msty和bsty控制当下进行的是直行还是左拐的设置,如当sty==1时,显示的是直行的时间;当sty==0时,显示的是左拐的时间。在赋值的过程中对于红灯的时间计算有溢出该怎么避免?溢出的情况分为个位是7和9、8和8、8和9、9和9,因为大于15,故会溢出,得不到正确的结果。我采用的是把这些情况单独列出来进行解决。交通灯控制电路的Verilog语句moduletraffic1<clk,en,lampm,lampb,ms,bs,ml,bl,msty,bsty,mlampm,blampb,numm,numb>;/*lampm和lampb分别表示主干道和支干道的亮灯,mlampm和blampb分别表示主干道和支干道的时间显示inputclk,en,ms,ml,bs,bl,msty,bsty;//ms,ml,bs,bl是手动设置时间的键,msty和bsty分别是主干道和支干道数码管显示的控制按键*/output[7:0]mlampm,blampb,numm,numb;output[2:0]lampm,lampb;reg[7:0]mgreen,mleft,bgreen,bleft;wire[7:0]mred,bred,mlampm,blampb;reg[7:0]numm,numb;regtempm,tempb;reg[2:0]countm,countb;reg[2:0]lampm,lampb;//模式转换:当msty==1时,为主干道直行时间的显示;当msty==0时,为主干道左拐时间的显示;当bsty==1时,为枝干道直行时间的显示;当bsty==0时,为枝干道左拐时间的显示。assignmlampm=<msty?mgreen:mleft>;assignblampb=<bsty?bgreen:bleft>;always@<posedgems>//手动设置主干道直行的时间beginif<!en>beginif<mgreen[3:0]==9&&mgreen[7:4]<9>beginmgreen[3:0]<=0;mgreen[7:4]<=mgreen[7:4]+1;endelseif<mgreen[3:0]<9&&mgreen[7:4]<=9>beginmgreen[7:4]<=mgreen[7:4];mgreen[3:0]<=mgreen[3:0]+1;endelseif<mgreen[3:0]==9&&mgreen[7:4]==9>mgreen<=0;endendalways@<posedgeml>//手动设置主干道左拐的时间beginif<!en>beginif<mleft[3:0]==9&&mleft[7:4]<9>beginmleft[3:0]<=0;mleft[7:4]<=mleft[7:4]+1;endelseif<mleft[3:0]<9&&mleft[7:4]<=9>beginmleft[7:4]<=mleft[7:4];mleft[3:0]<=mleft[3:0]+1;endelseif<mleft[3:0]==9&&mleft[7:4]==9>beginmleft<=0;endendendalways@<posedgebs>//手动设置支干道直行的时间beginif<!en>beginif<bgreen[3:0]==9&&bgreen[7:4]<9>beginbgreen[3:0]<=0;bgreen[7:4]<=bgreen[7:4]+1;endelseif<bgreen[3:0]<9&&bgreen[7:4]<=9>beginbgreen[7:4]<=bgreen[7:4];bgreen[3:0]<=bgreen[3:0]+1;endelseif<bgreen[3:0]==9&&bgreen[7:4]==9>beginbgreen<=0;endendendalways@<posedgebl>//手动设置支干道左拐的时间beginif<!en>beginif<bleft[3:0]==9&&bleft[7:4]<9>beginbleft[3:0]<=0;bleft[7:4]<=bleft[7:4]+1;endelseif<bleft[3:0]<9&&bleft[7:4]<=9>beginbleft[7:4]<=bleft[7:4];bleft[3:0]<=bleft[3:0]+1;endelseif<bleft[3:0]==9&&bleft[7:4]==9>beginbleft<=0;endendendalways@<posedgeclk>//该进程控制主干道的四种灯beginif<en>//使能信号为1时beginif<!tempm>//对主干道计时总时间进行赋值begintempm<=1;case<countm>//控制亮灯的顺序0:begincountm<=1;numm<=mgreen;end1:begincountm<=2;numm<=mleft;end2:begincountm<=0;if<bgreen[3:0]+bleft[3:0]>9>beginnumm[3:0]<=bgreen[3:0]+bleft[3:0]-10;numm[7:4]<=bgreen[7:4]+bleft[7:4]+1;endelseif<<bgreen[3:0]==7&&bleft[3:0]==9>||<bgreen[3:0]==9&&bleft[3:0]==7>||<bgreen[3:0]==8&&bleft[3:0]==8>>beginnumm[3:0]<=6;numm[7:4]<=bgreen[7:4]+bleft[7:4]+1;endelseif<<bgreen[3:0]==8&&bleft[3:0]==9>||<bgreen[3:0]==9&&bleft[3:0]==8>>beginnumm[3:0]<=7;numm[7:4]<=bgreen[7:4]+bleft[7:4]+1;endelseif<bgreen[3:0]==9&&bleft[3:0]==9>beginnumm[3:0]<=8;numm[7:4]<=bgreen[7:4]+bleft[7:4]+1;endelsebeginnumm[3:0]<=bgreen[3:0]+bleft[3:0];numm[7:4]<=bgreen[7:4]+bleft[7:4];endenddefault:lampm<=3;endcaseendelse//如果tempm=1begin//倒计时case<countm>1:begin//主干道的绿灯倒计时if<numm>6>beginif<numm[3:0]==0>beginnumm[3:0]<=9;numm[7:4]<=numm[7:4]-1;lampm[1]<=1;endelsebeginnumm[3:0]<=numm[3:0]-1;lampm[1]<=1;endendelseif<numm==6||numm==4||numm==2>beginlampm[1]<=1;numm<=numm-1;endelseif<numm==5||numm==3>beginlampm[1]<=0;numm<=numm-1;endelseif<numm==1>begintempm<=0;lampm[1]<=0;endend2:begin//主干道左转灯倒计时if<numm>6>beginif<numm[3:0]==0>beginnumm[7:4]<=numm[7:4]-1;numm[3:0]<=9;lampm[2]<=1;endelsebeginnumm[3:0]<=numm[3:0]-1;lampm[2]<=1;endendelseif<numm==6||numm==4||numm==2>beginlampm[2]<=1;numm<=numm-1;endelseif<numm==5||numm==3>beginlampm[2]<=0;numm<=numm-1;endelseif<numm==1>beginlampm[2]<=0;tempm<=0;endend0:begin//主干道红灯倒计时if<numm[3:0]==0>beginnumm[7:4]<=numm[7:4]-1;numm[3:0]<=9;lampm[0]<=1;endelseif<numm==1>beginlampm[0]<=0;tempm<=0;endelsebeginnumm[3:0]<=numm[3:0]-1;lampm[0]<=1;endendendcaseendif<!tempb>//如果tempb=0begintempb<=1;case<countb>//控制亮灯的顺序0:begincountb<=1;if<mgreen[3:0]+mleft[3:0]>9>beginnumb[3:0]<=mgreen[3:0]+mleft[3:0]-10;numb[7:4]<=mgreen[7:4]+mleft[7:4]+1;endelseif<<mgreen[3:0]==7&&mleft[3:0]==9>||<mgreen[3:0]==9&&mleft[3:0]==7>||<mgreen[3:0]==8&&mleft[3:0]==8>>beginnumb[3:0]<=6;numb[7:4]<=mgreen[7:4]+mleft[7:4]+1;endelseif<<mgreen[3:0]==8&&mleft[3:0]==9>||<mgreen[3:0]==9&&mleft[3:0]==8>>beginnumb[3:0]<=7;numb[7:4]<=mgreen[7:4]+mleft[7:4]+1;endelseif<mgreen[3:0]==9&&mleft[3:0]==9>beginnumb[3:0]<=8;numb[7:4]<=mgreen[7:4]+mleft[7:4]+1;endelsebeginnumb[3:0]<=mgreen[3:0]+mleft[3:0];numb[7:4]<=mgreen[7:4]+mleft[7:4];endend1:begincountb<=2;numb<=bgreen;end2:begincountb<=0;numb<=bleft;enddefault:lampb<=3;endcaseendelse//如果tempm=1begin//各个灯的倒计时case<countb>1:begin//支干道红灯的倒计时if<numb[3:0]==0>beginnumb[3:0]<=9;numb[7:4]<=numb[7:4]-1;lampb[0]<=1;endelseif<numb==1>beginlampb[0]<=0;tempb<=0;endelsebeginnumb[3:0]<=numb[3:0]-1;lampb[0]<=1;endend2:begin//支干道的绿灯倒计时if<numb>6>beginif<numb[3:0]==0>beginnumb[7:4]<=numb[7:4]-1;numb[3:0]<=9;lampb[1]<=1;endelsebeginnumb[3:0]<=numb[3:0]-1;lampb[1]<=1;endendelseif<numb==6||numb==4||numb==2>beginnumb<=numb-1;lampb[1]<=1;endelseif<numb==5||numb==3>beginlampb[1]<=0;numb<=numb-1;endelseif<numb==1>beginlampb[1]<=0;tempb<=0;endend0:begin//支干道的左转灯倒计时if<numb>6>beginif<numb[3:0]==0>beginnumb[7:4]<=numb[7:4]-1;numb[3:0]<=9;lampb[2]<=1;endelsebeginnumb[3:0]<=numb[3:0]-1;lampb[2]<=1;endendelseif<numb==6||numb==4||numb==2>beginlampb[2]<=1;numb<=numb-1;endelseif<numb==5||numb==3>beginlampb[2]<=0;numb<=numb-1;endelseif<numb==1>beginlampb[2]<=0;tempb<=0;endendendcaseendendif<!en>//使能端信号为0时beginlampm<=0;countm<=0;tempm<=0;lampb<=0;countb<=0;tempb<=0;endendendmodule交通灯控制电路的程序和波形分析1、主干道直行时间的设置程序为:always@<posedgems>beginif<!en>beginif<mgreen[3:0]==9&&mgreen[7:4]<9>beginmgreen[3:0]<=0;mgreen[7:4]<=mgreen[7:4]+1;endelseif<mgreen[3:0]<9&&mgreen[7:4]<=9>beginmgreen[7:4]<=mgreen[7:4];mgreen[3:0]<=mgreen[3:0]+1;endelseif<mgreen[3:0]==9&&mgreen[7:4]==9>mgreen<=0;endend其波形为:在使能信号en==0时,若按键ms被按一下,则加一下数,直至使能信号为1或者ms键不再被按为止。2、主干道左拐时间设置的程序为:always@<posedgeml>beginif<!en>beginif<mleft[3:0]==9&&mleft[7:4]<9>beginmleft[3:0]<=0;mleft[7:4]<=mleft[7:4]+1;endelseif<mleft[3:0]<9&&mleft[7:4]<=9>beginmleft[7:4]<=mleft[7:4];mleft[3:0]<=mleft[3:0]+1;endelseif<mleft[3:0]==9&&mleft[7:4]==9>beginmleft<=0;endendend其波形为:在使能信号en==0时,若按键ml被按一下,则加一下数,直至使能信号为1或者ml键不再被按为止。3、支干道直行时间设置的程序为:always@<posedgebs>beginif<!en>beginif<bgreen[3:0]==9&&bgreen[7:4]<9>beginbgreen[3:0]<=0;bgreen[7:4]<=bgreen[7:4]+1;endelseif<bgreen[3:0]<9&&bgreen[7:4]<=9>beginbgreen[7:4]<=bgreen[7:4];bgreen[3:0]<=bgreen[3:0]+1;endelseif<bgreen[3:0]==9&&bgreen[7:4]==9>beginbgreen<=0;endendend其波形为:在使能信号en==0时,若按键bs被按一下,则加一下数,直至使能信号为1或者bs键不再被按为止。4、支干道左拐时间设置的程序为:always@<posedgebl>beginif<!en>beginif<bleft[3:0]==9&&bleft[7:4]<9>beginbleft[3:0]<=0;bleft[7:4]<=bleft[7:4]+1;endelseif<bleft[3:0]<9&&bleft[7:4]<=9>beginbleft[7:4]<=bleft[7:4];bleft[3:0]<=bleft[3:0]+1;endelseif<bleft[3:0]==9&&bleft[7:4]==9>beginbleft<=0;endendend其波形为:在使能信号en==0时,若按键bl被按一下,则加一下数,直至使能信号为1或者bl键不再被按为止。5、主干道直行倒计时和亮灯情况程序为:begin//主干道的绿灯倒计时if<numm>6>beginif<numm[3:0]==0>beginnumm[3:0]<=9;numm[7:4]<=numm[7:4]-1;lampm[1]<=1;endelsebeginnumm[3:0]<=numm[3:0]-1;lampm[1]<=1;endendelseif<numm==6||numm==4||numm==2>beginlampm[1]<=1;numm<=numm-1;endelseif<numm==5||numm==3>beginlampm[1]<=0;numm<=numm-1;endelseif<numm==1>begintempm<=0;lampm[1]<=0;endend波形为:在使能信号为1时,若tempm==1,且countm==1,则每当有一个时钟上升沿来临时,numm就做一次减计数,直至numm==5时,主干道的直行灯就开始闪亮,直至numm==0,则进入下一个状态。6、主干道左拐倒计时和亮灯情况程序为:begin//主干道左转灯倒计时if<numm>6>beginif<numm[3:0]==0>beginnumm[7:4]<=numm[7:4]-1;numm[3:0]<=9;lampm[2]<=1;endelsebeginnumm[3:0]<=numm[3:0]-1;lampm[2]<=1;endendelseif<numm==6||numm==4||numm==2>beginlampm[2]<=1;numm<=numm-1;endelseif<numm==5||numm==3>beginlampm[2]<=0;numm<=numm-1;endelseif<numm==1>beginlampm[2]<=0;tempm<=0;endend波形为:在使能信号为1时,若tempm==1,且countm==2时,则每当有一个时钟上升沿来临时,numm就做一次减计数,直至numm==5时,主干道的左拐灯就开始闪亮,直至numm==0,则进入下一个状态。7、主干道等待倒计时和亮灯情况程序为:begin//主干道红灯倒计时if<numm[3:0]==0>beginnumm[7:4]<=numm[7:4]-1;numm[3:0]<=9;lampm[0]<=1;endelseif<numm==1>beginlampm[0]<=0;tempm<=0;endelsebeginnumm[3:0]<=numm[3:0]-1;lampm[0]<=1;endend波形为:在使能信号为1时,若tempm==1,且countm==0时,则每当有一个时钟上升沿来临时,numm就做一次减计数,直至numm==0时,主干道的红灯熄灭,则进入下一个状态。8、支干道直行倒计时和亮灯情况程序为:begin//次干道的绿灯倒计时if<numb>6>beginif<numb[3:0]==0>beginnumb[7:4]<=numb[7:4]-1;numb[3:0]<=9;lampb[1]<=1;endelsebeginnumb[3:0]<=numb[3:0]-1;lampb[1]<=1;endendelseif<numb==6||numb==4||numb==2>beginnumb<=numb-1;lampb[1]<=1;endelseif<numb==5||numb==3>beginlampb[1]<=0;numb<=numb-1;endelseif<numb==1>beginlampb[1]<=0;tempb<=0;endend波形为:在使能信号为1时,若tempb==1,且countb==1时,则每当有一个时钟上升沿来临时,numb就做一次减计数,直至numb==5时,支干道的直行灯就开始闪亮,直至numb==0,则进入下一个状态。9、支干道左拐倒计时和亮灯情况程序为:begin//次干道的左转灯倒计时if<numb>6>beginif<numb[3:0]==0>beginnumb[7:4]<=numb[7:4]-1;numb[3:0]<=9;lampb[2]<=1;endelsebeginnumb[3:0]<=numb[3:0]-1;lampb[2]<=1;endendelseif<numb==6||numb==4||numb==2>beginlampb[2]<=1;numb<=numb-1;endelseif<numb==5||numb==3>beginlampb[2]<=0;numb<=numb-1;endelseif<numb==1>beginlampb[2]<=0;tempb<=0;endend波形为:在使能信号为1时,若tempb==1,且countb==2时,则每当有一个时钟上升沿来临时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能家居系统用户安全设置手册指南
- (2026年)粉尘涉爆企业安全培训考试题及答案
- 小学师德师风考试试卷及答案
- 2026物流合作条款变更通知(4篇)
- 通知所有合作方调整供货周期函8篇
- 会计人员账务处理标准操作指南
- 重大版高中英语必修二Unit1学情验收卷(Favourite Teachers含答案)
- 2026年福建省石狮市锦峰实验学校秋季招聘编外合同教师笔试备考试题及答案解析
- 2026山东青岛胶州人才集团招聘劳务派遣制司法辅助人员13人笔试备考题库及答案解析
- 2026年甘肃省陇南徽县招聘城镇公益性岗位人员44人笔试备考题库及答案解析
- 2026年消防月专题培训(含近期火灾事故案例)
- 湖北武汉市2027届高中毕业生9月调研考试语文试卷(含解析)
- 2026秋新教材统编版九年级上册道德与法治期中素养测试卷(含答案)
- 2026年绍兴市柯桥区开发经营集团有限公司国企员工招聘9人笔试备考题库及答案详解
- 2026教科版五年级科学上册全册知识点考点
- 铝合金门窗施工方案范本
- AQT3034-2022《化工过程安全管理导则》核心要点解读
- DB 61T 5086-2023高效空调制冷机房设计标准
- 2025-2026学年四川省成都七中高一(上)期中物理试卷(含答案)
- 统招专升本英语4000词考前必背词汇表(含高频短语与记忆法)
- CRRT与体外二氧化碳清除技术联合方案
评论
0/150
提交评论