数电课程设计带左转功能的红绿灯控制系统.doc

上传人:土8路 文档编号:10501509 上传时间:2021-05-20 格式:DOC 页数:20 大小:229.50KB
返回 下载 相关 举报
数电课程设计带左转功能的红绿灯控制系统.doc_第1页
第1页 / 共20页
数电课程设计带左转功能的红绿灯控制系统.doc_第2页
第2页 / 共20页
数电课程设计带左转功能的红绿灯控制系统.doc_第3页
第3页 / 共20页
数电课程设计带左转功能的红绿灯控制系统.doc_第4页
第4页 / 共20页
数电课程设计带左转功能的红绿灯控制系统.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数电课程设计带左转功能的红绿灯控制系统.doc》由会员分享,可在线阅读,更多相关《数电课程设计带左转功能的红绿灯控制系统.doc(20页珍藏版)》请在三一文库上搜索。

1、数电课程设计 带左转功能的红绿灯控制系统 姓名: 学号:同组实验者:孙 实验指导老师: 一设计任务与要求:设计一个带左转功能的红绿灯控制电路。 (1)设东、西方向为主路、南、北方向为辅路;(2)当东、西方向绿灯亮时(表示允许东西方向车辆直行或左拐能过十字路口),南、北方向亮红灯;反之,当南、北方向绿灯时,东、西方向应亮红灯;(3)在信号灯交替亮灭之前,应有黄灯信号作为缓冲提示(4)绿灯红灯黄灯及左拐信号灯各有一定的作用维持时间,东西方向红灯维持时间65秒,南北方向维持55秒,并且利用数码管倒计时显示。二系统整体设计1.系统设计分析将交通道路抽象模型如下:交通灯的显示有很多方式,如十字路口、丁字

2、路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车子如果只要东西和南北方向通行就很简单,但本实验要求车辆要带左转功能,则较为复杂要完成本实验,首先必须了解交通路灯的亮灭规律。本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。其交通灯的亮灭规律为:初始态是两个路口的红灯全亮,之后东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,通过黄灯提示要进行左拐动作,左拐时间设定由数码管显示。当东西路口红灯来临,同样要由黄灯进行缓冲提示,之后东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,重复上述过程。

3、为简易表示起见,本设计抽象模型如上,东西为A方向,南北为B方向。由题可知,A方向和B方向的交通灯应有四种状态,分别表示可信号灯的亮灭情况,状态转换图如下:图中中1表示灯亮,0 表示灯灭,A方向和B方向的红、黄、绿和左拐灯分别用R1、Y1、G1、L1和R2、Y2、G2、L2来表示。这样,就每个方向的等就按要求的顺序依次点亮了,并且我们就可以由状态设置变量来分别为每个信号进行有效控制。2.系统设计思路 因为每个方向相对的信号灯状态及倒计时的现实完全一致,根据设计要求和系统所具有的功能,红绿灯控制系统设计框图如下: 首先要通过以使能信号选通A方向或B方向,并且有时钟控制信号来触发控制电路。通过读取状

4、态变量的状态来点亮对应信号灯,并且通过扫描显示电路来控制数码管的显示及倒计时。应注意两个方向各种灯亮的时间应该能够非常方便地进行设置和修改,此外假设A方向是主干道,车流量大,因此A方向通行的时间应比B方向长一些,并且每个方向红灯亮的时间应该与另一方向绿、黄、左拐、黄灯亮的时间相等。三单元模块设计:1.硬件电路实现 根据交通灯系统的控制要求,该电路包含了一个CPLD芯片,两个LED数码显示器,二十个分别表示各个方向的红黄绿灯,以及相应的限流电路。实验板仿真芯片用Altera FLEX6000系列的EPF10K10LC84型可编程逻辑芯片。按照如下的管脚定义,分配好管脚,编译成可下载的文件,下载到

5、实验板上。经验证,符合要求。实验板的引脚定义:变量I/O引脚ENInputPin_28CLKInputPin_14LAMPA0outputPin_170LAMPA1outputPin_131LAMPA2outputPin_108LAMPA3outputPin_73LAMPB0outputPin_50LAMPB1outputPin_11LAMPB2outputPin_228LAMPB3outputPin_193ACOUNT0outputPin_198ACOUNT1outputPin_197ACOUNT2outputPin_196ACOUNT3outputPin_195ACOUNT4outputP

6、in_188ACOUNT5outputPin_187ACOUNT6outputPin_186ACOUNT7outputPin_185COMoutputPin_132主控程序如下:module traffic(CLK,EN,LAMPA,LAMPB,ACOUNT,BCOUNT);output7:0 ACOUNT,BCOUNT;output3:0 LAMPA,LAMPB;input CLK,EN;reg7:0 numa,numb;reg tempa,tempb;reg2:0 counta,countb;reg7:0 ared,ayellow,agreen,aleft,bred,byellow,bgr

7、een,bleft;reg3:0 LAMPA,LAMPB;always (EN)if(!EN)begin ared =8d55; ayellow =8d5;agreen =8d40; aleft =8d15; bred =8d65; byellow =8d5; bleft =8d15; bgreen =8d30; endassign ACOUNT=numa;assign BCOUNT=numb;always (posedge CLK)beginif(EN)beginif(!tempa)begintempa=1;case(counta) 0: begin numa=agreen; LAMPA=2

8、; counta=1; end1: begin numa=ayellow; LAMPA=4; counta=2; end2: begin numa=aleft; LAMPA=1; counta=3; end3: begin numa=ayellow; LAMPA=4; counta=4; end4: begin numa=ared; LAMPA=8; counta=0; enddefault: LAMPA1)if(numa3:0=0) beginnuma3:0=4b1001;numa7:4=numa7:4-1;endelse numa3:0=numa3:0-1;if (numa=2) temp

9、a=0;endendelse beginLAMPA=4b1000;counta=0; tempa=0;endendalways (posedge CLK) beginif (EN)beginif(!tempb)begintempb=1;case (countb) 0: begin numb=bred; LAMPB=8; countb=1; end1: begin numb=bgreen; LAMPB=2; countb=2; end2: begin numb=byellow; LAMPB=4; countb=3; end3: begin numb=bleft; LAMPB=1; countb=

10、4; end4: begin numb=byellow; LAMPB=4; countb=0; enddefault: LAMPB1)if(!numb3:0) beginnumb3:0=9;numb7:4=numb7:4-1;endelse numb3:0=numb3:0-1;if(numb=2) tempb=0;endendelse beginLAMPB=4b1000;tempb=0; countb=0;endendendmodule。3 对象控制模块: 根据交通灯系统的要实现的功能,考虑用两个并行的always模块来控制A和B两个方向的四盏灯,这两个always 模块用一个时钟信号已进行同

11、步。如对A方向的程序控制模块描述如下:always(posedge CLK)/该always模块控制A方向的4种灯beginif(EN)beginif(!tempa)begintempa= 1;4循环控制切换模块: 每个always模块控制1个方向的4种灯按如下顺序点亮,并往复循环:绿灯黄灯左拐灯黄灯红灯。程序描述如下:case(counta) 0:begin numa=agreen;LAMPA=2;counta=1;end1:begin numa=ayellow;LAMPA=4;counta=2;end2:begin numa=alert;LAMPA=1;counta=3;end3:begi

12、n numa=ayellow;LAMPA=4;counta=4;end4:begin numa=ared;LAMPA=8;counta=0;enddefault:LAMPA1) if(numa3:0=0)begin numa-3:0=4b1001; numa7:4=numa7:4-1; end else numa3:0=numa3:0-1; if(numa=2) tempa=0; end6.信号的有效维持时间模块设定A方向红、绿、黄、左拐灯亮的时间分别为65秒、40秒、5秒和15秒,B方向红、绿、黄、左拐灯亮的时间分别为:55秒、30秒、5秒和15秒。假如要改变这些时间只须改变计数器的预置数即

13、可。程序描述如下:begin/设置各种灯的计数器的预置数ared=8b01010101;/65sayellow =8b00000101;/5sagreen =8b01000000; /40saleft =8b00010101; /15sbred =8b01100101; /55sbyellow =8b00000101; /5sbleft =8b00010101; /15sbgreen =8b00110000; /30send四EDA系统原理仿真设计1、仿真环境EDA软件Quartus II 9.1软件环境下。2、EDA设计仿真(1)RTL门级模块实现:(2)程序综合成功:(3)生成网表文件:(

14、4)仿真波形:(5)电路输入输出实例化模块3.输出验证仿真:由状态转换表可知,对A方向通道,当在当前时刻定义变量LAMP=1000时,红灯会被点亮,此时在波形中对其输入控制如下:经仿真验证,在当前时刻,显示A方向上红灯的数码管会输出时间显示。而有题目要求,当A方向亮红灯时,B方向会按绿灯黄灯左拐黄灯顺序依次点亮,且显示时间如下图示,可知满足要求。4.对仿真结果的分析: (1)、在波形仿真中,由于分频模块的数目太大,且电路的时间延时,未能去抖,在时间显示模块会遇到某个计数值不太准确,但其前后值都准确。(2)当A或B方向当红灯亮时,在另一方向会各信号灯循环点亮,这是在波形仿真中具体什么灯点亮以及显

15、示时间不能直观的表现出来。五、设计心得与总结经过几周的努力,带左转功能的红绿灯控制系统终于有了较满意的结果。从最初的选题到确定思路,从模型抽象到实例设计,从源代码的编写到仿真分析,我们参阅了数本教材,查阅了很多网上资料,也请教了指导老师与学长,在此对他们表示深深的感谢。书到用时方恨少。在这个过程中,我们真切的感受到自己的知识的缺乏,甚者学过的东西我们都不能融会贯通,灵活运用。悔不当初!但一路走下来,虽然艰辛,却收获颇丰。我们不仅回顾了数电模电知识,更深层次的运用了quarts仿真工具,也锻炼了自己的抽象理解,建造模型模,动手实践的能力。在这个过程中,我也深刻体会到团队合作的重要性,一个人的力量

16、总是有限的,但通过互帮互助,我们会将自己的作用最大化。由于自己的能力实在有限,有做的不完善的地方希望老师理解,指教,谢谢!六、参考文献:数字电子技术基础 阎石 主编 高等教育出版社模拟电子技术基础 童诗白 华成英主编 高等教育出版社Verilog数字设计与综合 夏宇文 主编 科学出版社可编程逻辑器件开发软件 郑亚民 董晓丹 国防工业出版社附件:1.程序变量说明CLK: 为同步时钟;EN: 使能信号,为 1 的话,则控制器开始工作;LAMPA: 控制 A 方向四盏灯的亮灭;其中,LAMPA0LAMPA3,分别控制A 方向的左拐灯、绿灯、黄灯和红灯;LAMPB: 控制 B 方向四盏灯的亮灭;其中,

17、LAMPB0 LAMPB3,分别控制B 方向的左拐灯、绿灯、黄灯和红灯;ACOUNT: 用于 A 方向灯的时间显示,8 位,可驱动两个数码管;BCOUNT: 用于 B 方向灯的时间显示,8 位,可驱动两个数码管2.LED 数码管显示扫描模块module LED(clk , segout , bitout , D1 , D2 , D3 , D4);input clk ; input 6 : 0 D1 , D2 , D3 , D4 ; output 3 : 0 segout ; output 6 : 0 bitout ; reg 3 : 0 segout ;reg 6 : 0 bitout ;re

18、g 14 : 0 count_for_clk ; always (posedge clk) begin count_for_clk = count_for_clk + 14d1 ; endalways (posedge clk) begincase( count_for_clk14 : 13 ) 2b00 :begin segout = 4b0001; bitout = D1; end 2b01 :begin segout = 4b0010; bitout = D2; end 2b10 :begin segout = 4b0100; bitout = D3; end 2b11 :begin s

19、egout = 4b1000; bitout = D4; end endcaseendendmodule3.CPLD硬件调试数码管输出模块module control(en, clk, lampa, lampb, acount, bcount,segout,bitout);input en , bcount , acount ; input clk; output2 :0 lampa , lampb ; output3 :0 segout ; output6 :0 bitout ; reg 2 : 0 lampa ,lampb ;reg 31: 0 clk_for_1HZ ; reg clk_

20、1HZ ; reg 6 : 0 moutg , mouts , noutg , nouts ;reg 7 : 0 numm , numn ;reg tempm = 0 , tempn = 0 ;reg 1 : 0 countm = 2b00 , countn = 2b00 ; reg 7 : 0 mred , mgreen , myellow, nred, ngreen, nyellow; task shown;input3:0 in;output6:0 out;begin case(in) 0 : out = 7b0000001 ; 1 : out = 7b1001111 ;2 : out

21、= 7b0010010 ;3 : out = 7b0000110 ;4 : out = 7b1001100 ;5 : out = 7b0100100 ; 6 : out = 7b0100000 ;7 : out = 7b0001111 ;8 : out = 7b0000000 ;9 : out = 7b0000100 ; default : out = 7bzzzzzzz ; endcaseendendtask always (numm or numn) begin shown(numm3:0,moutg); shown(numm7:4,mouts); shown(numn3:0,noutg)

22、; shown(numn7:4,nouts); endalways (posedge clk) begin if (clk_for_1HZ = 32d25_000_000) begin clk_for_1HZ = 32d0 ; clk_1HZ = clk_1HZ ; end else clk_for_1HZ = clk_for_1HZ + 1 ; endalways (posedge clk_1HZ) begin if(!en) begin if(!tempm) begin tempm = 1; if(countn = 2b00 & countm = 2b00) begin if(bcount

23、 = 0) mgreen = 8b0101_0000 ; else mgreen = 8b0011_0000 ; if(acount = 0) mred = 8b0011_0000 ; else mred = 8b0010_0000 ; myellow= 8b0000_0101 ; end case(countm) 2b00: begin numm = mgreen; lampa = 3b101; countm = 2b01; end 2b01: begin numm = myellow; lampa = 3b110;countm = 2b10; end 2b10: begin numm =

24、mred; lampa = 3b011; countm = 2b00; enddefault: begin numm = mgreen; lampa = 3b101; countm 1) if(numm3:0=0) begin numm3:0=4b1001; numm7:4 = numm7:4-4d1; end else numm3:0 = numm3:0-4d1; if(numm = 2) tempm=0; endend else begin lampa = 3b100; countm = 0; tempm = 0; endend always (posedge clk_1HZ) begin

25、 if(!en) begin if(!tempn) begin tempn=1; if (countn = 2b00 & countm = 2b00 )beginif(bcount = 0) nred = 8b0101_0101 ; elsenred = 8b0011_0101 ;if(acount = 0)ngreen = 8b0010_0101 ;elsengreen = 8b0001_0101 ;nyellow= 8b0000_0101 ;end case(countn) 2b00: begin numn = nred; lampb = 3b011; countn= 2b01; end

26、2b01: begin numn = ngreen; lampb = 3b101; countn = 2b10; end 2b10: begin numn = nyellow; lampb = 3b110 ;countn = 2b00 ; end default: begin numn= nred; lampb = 3b011;countn1) if(!numn3:0) beginnumn3:0 = 4b1001; numn7:4=numn7:4-4d1; end else numn3:0 = numn3:0-4d1; if (numn = 2) tempn = 0; end end else begin lampb =3b100; tempn =0; countn =0; endend endmodule

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1