数电课程设计——交通灯.doc

上传人:牧羊曲112 文档编号:2773822 上传时间:2023-02-24 格式:DOC 页数:11 大小:1.98MB
返回 下载 相关 举报
数电课程设计——交通灯.doc_第1页
第1页 / 共11页
数电课程设计——交通灯.doc_第2页
第2页 / 共11页
数电课程设计——交通灯.doc_第3页
第3页 / 共11页
数电课程设计——交通灯.doc_第4页
第4页 / 共11页
数电课程设计——交通灯.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《数电课程设计——交通灯.doc》由会员分享,可在线阅读,更多相关《数电课程设计——交通灯.doc(11页珍藏版)》请在三一办公上搜索。

1、精选优质文档-倾情为你奉上数电课程设计 课程名称:交通灯控制器 姓 名:车宣豪 学 号: 专 业:测控技术与仪器交通灯控制器设计一、 设计任务和要求1.设计一个交通灯控制器,由两条主干道汇合成十字路口,在每个入口处设置两相位信号灯;分别为直行红、黄、绿等;左转红、黄、绿灯,六盏信号灯。2.每个路口信号灯亮灭次序和时间为直行绿灯30秒,黄灯5秒,红灯85秒;左转绿灯20秒,黄灯5秒,红灯95秒。3.各路口有两个倒计时显示器,分别显示直行和左拐倒计时状态。4.黄灯亮时,为闪烁点亮方式。二、 方案论证1. 各变量含义clk为单位脉冲信号,reset为清零信号,HSR、HSG、Y1分别为东西直行红黄绿

2、灯,HLR、HLG、Y2分别为东西左拐红黄绿灯,SSR、SSG、Y3分别为南北直行红黄绿灯,SLR、SLG、Y4分别为南北左拐红黄绿灯;HS0,HL0,SS0,SL0分别为东西直行、东西左拐、南北直行、南北左拐倒计时。2. 信号灯状态表及每个状态倒计时状态s0s1s2s3s4s5s6s7东西直行绿30-1黄5-1红85-66红65-61红60-31红30-26红25-6红5-1东西左拐红35-6红5-1绿20-1黄5-1红60-31红30-26红25-6红5-1南北直行红60-31红30-26红25-6红5-1绿30-1黄5-1红25-6红5-1南北左拐红95-66红65-61红60-41红4

3、0-36红35-6红5-1绿20-1黄5-13.显示器倒计时的实现通过设计一个逐渐递增的数x(从1不断加1,一直加到120),然后用一个数减去x就得到一个递减的数来作为计时器上显示的数。例如:第一个状态为东西直行绿灯亮30秒,那么就用31x(此时x从1一直加1到30)来表示绿灯的剩余倒计时时间;而到第二个状态则为东西左拐黄灯亮5秒,那么就用36x(由于x是不断加1的数,那么此时x变为从31不断加1到35)来实现黄灯亮5秒的倒计时显示。其他状态及其他方向倒计时与这两个例子一样,都是通过一个数减去x来实现的倒计时。具体每个状态倒计时如下:case(z) 8d1:begin HS=31-x;HL=3

4、6-x;SS=61-x;SL=96-x;end 8d2:begin HS=36-x;HL=36-x;SS=61-x;SL=96-x;end 8d3:begin HS=121-x;HL=56-x;SS=61-x;SL=96-x;end 8d4:begin HS=121-x;HL=61-x;SS=61-x;SL=96-x;end 8d5:begin HS=121-x;HL=121-x;SS=91-x;SL=96-x;end 8d6:begin HS=121-x;HL=121-x;SS=96-x;SL=96-x;end 8d7:begin HS=121-x;HL=121-x;SS=121-x;SL=

5、116-x;end 8d8:begin HS=121-x;HL=121-x;SS=121-x;SL=121-x;endz的取值分别表示8个状态,HS表示东西直行倒计时显示,HL表示东西左拐倒计时显示,SS表示南北直行倒计时显示,SL表示南北左拐倒计时显示。 4.黄灯闪烁的实现 通过把黄灯的输出信号与上clk信号来实现黄灯的闪烁,例如Y1=clk&HSY,HSY为东西直行黄灯信号,当它与上clk时则可实现黄灯的闪烁信号Y1。 5.状态转换。S0 S1 S2 S3S7 S6 S5 S4状态机分为8个状态,分别为S0、S1、S2、S3、S4、S5、S6、S7,每个状态灯亮灭如下:s0: HSR,HS

6、G,HSY=3b010;HLR,HLG,HLY=3b100; SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b100;s1: HSR,HSG,HSY=3b001;HLR,HLG,HLY=3b100; SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b100;s2: HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b010; SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b100;s3: HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b001; SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b100;s4

7、: HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b100; SSR,SSG,SSY=3b010;SLR,SLG,SLY=3b100;s5: HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b100; SSR,SSG,SSY=3b001;SLR,SLG,SLY=3b100;s6: HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b100; SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b010;s7: HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b100; SSR,SSG,SSY=3b100;SLR,SLG,SLY=

8、3b001;HSR,HSG,HSY分别表示东西直行红、黄、绿、灯;HLR,HLG,HLY分别表示东西左拐红、黄、绿、灯;SSR,SSG,SSY分别表示南北直行红、黄、绿、灯;SLR,SLG,SLY分别表示南北左拐红、黄、绿、灯。0表示灯灭,1表示灯亮。 6、进制转换的实现 把计时器输出的数转化成可在2个7段显示器上显示的两位数,利用/和%可把倒计时输出转化为十位和个位。例如:assign HS07:4=HS/4b1010;assign HS03:0=HS%4b1010;把东西直行倒计时信号HS转化为HS0的十位和个位,这样即可在显示器上显示倒计时的两位数。 7.倒计时随8个状态变化而变化的实现

9、 当x为1,31,36,56,61,91,96,116时y为1,其他情况y都为0,这样当y为1时都会产生一个上升沿,设z的初始值为0,当每遇到一个y的上升沿时z就会加1,z为8时当遇到下一个y的上升沿时z为1,依次循环,这样就会产生1、2、3、4、5、6、7、8这8个数,这8个数刚好可以根据8个状态的转换而同时转换,这样就能实现在不同的z时倒计时时间的转换。三、 源程序代码及文字说明module JTD(clk,reset,HSR,HSG,HLR,HLG,SSR,SSG,SLR,SLG,Y1,Y2,Y3,Y4,HS0,HL0,SS0,SL0); /模块声明input clk,reset; /定

10、义输入信号output HSR,HSG,HLR,HLG,SSR,SSG,SLR,SLG,Y1,Y2,Y3,Y4; /定义输出信号output 7:0 HS0,HL0,SS0,SL0; /定义为8位宽的输出信号reg HSR,HSG,HSY,HLR,HLG,HLY,SSR,SSG,SSY,SLR,SLG,SLY; /定义为reg类型reg 2:0CS,NS; /定义为3位宽的reg型reg7:0 HS,HL,SS,SL; /定义为8位宽的reg型reg7:0 x; /定义为8位宽的reg型reg y; /定义为reg型reg 3:0 z; /定义为4位宽的reg型assign Y1=clk&HS

11、Y; /赋值语句,令clk与上HSY等于Y1,实现黄灯的闪烁assign Y2=clk&HLY; /赋值语句,令clk与上HLY等于Y2,实现黄灯的闪烁assign Y3=clk&SSY; /赋值语句,令clk与上SSY等于Y3,实现黄灯的闪烁assign Y4=clk&SLY; /赋值语句,令clk与上SLY等于Y4,实现黄灯的闪烁parameter s0=3b000,s1=3b001,s2=3b011,s3=3b010, s4=3b110,s5=3b111,s6=3b101,s7=3b100; /定义符号状态值always(posedge clk or negedge reset) /边沿

12、敏感 begin if(!reset) x=8d0; /若reset为0,则x为0 else if(x=8d120) /若reset为1,且x为120 x=8d1; /那么x为1 else x=x+8b; /否则x加1赋给x endalways(x) /敏感变量为x begin case(x) /case语句,x为敏感变量 8d1:y=1; /若x=1,则y=1 8d31:y=1; /若x=1,则y=1 8d36:y=1; /若x=1,则y=1 8d56:y=1; /若x=1,则y=1 8d61:y=1; /若x=1,则y=1 8d91:y=1; /若x=1,则y=1 8d96:y=1; /若

13、x=1,则y=1 8d116:y=1; /若x=1,则y=1 default:y=0; /除此之外,y=0 endcase endalways(posedge y or negedge reset) /边沿敏感 begin if(!reset) /如果reset=0 z=4b0000; /那么z=0 else if(z=4b1000) /若reset=1,且z=4b1000 z=4b0001; /那么z为1 else z=z+4b0001; /否则z加1 endalways (posedge clk or negedge reset) /边沿敏感 begin if(!reset) /若rese

14、t为0 CS=s0; /那么现态为s0 else CS=NS; /否则现态到次态翻转 endalways (CS or reset) /敏感变量为CS和reset begin case(CS) s0: begin /当前为s0状态 NS=(30-x=0)?s1:s0; /若30-x为0,则转换到s1,否则仍为s0 end s1: begin /当前为s1状态 NS=(35-x=0)?s2:s1; /若35-x为0,则转换到s2,否则仍为s1 end s2: begin /当前为s2状态 NS=(55-x=0)?s3:s2; /若55-x为0,则转换到s3,否则仍为s2 end s3: begi

15、n /当前为s3状态 NS=(60-x=0)?s4:s3; /若60-x为0,则转换到s4,否则仍为s3 end s4: begin /当前为s4状态 NS=(90-x=0)?s5:s4; /若90-x为0,则转换到s5,否则仍为s4 end s5: begin /当前为s5状态 NS=(95-x=0)?s6:s5; /若95-x为0,则转换到s6,否则仍为s5 end s6: begin /当前为s6状态 NS=(115-x=0)?s7:s6; /若115-x为0,则转换到s7,否则仍为s6 end s7: begin /当前为s7状态 NS=(120-x=0)?s0:s7; /若120-x

16、为0,则转换到s0,否则仍为s7 end endcase end always(posedge clk or negedge reset) /边沿敏感 begin case(z) /case语句 8d1:begin HS=31-x;HL=36-x;SS=61-x;SL=96-x;end /当z=1时,各倒计时的表达式 8d2:begin HS=36-x;HL=36-x;SS=61-x;SL=96-x;end /当z=2时,各倒计时的表达式 8d3:begin HS=121-x;HL=56-x;SS=61-x;SL=96-x;end /当z=3时,各倒计时的表达式 8d4:begin HS=12

17、1-x;HL=61-x;SS=61-x;SL=96-x;end /当z=4时,各倒计时的表达式 8d5:begin HS=121-x;HL=121-x;SS=91-x;SL=96-x;end /当z=5时,各倒计时的表达式 8d6:begin HS=121-x;HL=121-x;SS=96-x;SL=96-x;end /当z=6时,各倒计时的表达式 8d7:begin HS=121-x;HL=121-x;SS=121-x;SL=116-x;end /当z=7时,各倒计时的表达式 8d8:begin HS=121-x;HL=121-x;SS=121-x;SL=121-x;end /当z=8时,各

18、倒计时的表达式 endcase endalways (CS) /CS为敏感变量 begin case(CS) s0: begin /当前为s0状态 HSR,HSG,HSY=3b010;HLR,HLG,HLY=3b100; /东西直行为绿灯 SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b100; /其他方向为红灯 end s1: begin /当前为s1状态 HSR,HSG,HSY=3b001;HLR,HLG,HLY=3b100; /东西直行为黄灯 SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b100; /其他方向为红灯 end s2: begin /当前为s

19、2状态 HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b010; /东西左拐为绿灯 SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b100; /其他方向为红灯 end s3: begin /当前为s3状态 HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b001; /东西左拐为黄灯 SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b100; /其他方向为红灯 end s4: begin /当前为s4状态 HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b100; /南北直行为绿灯 SSR,SSG,SSY=3b010;SL

20、R,SLG,SLY=3b100; /其他方向为红灯 end s5: begin /当前为s5状态 HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b100; /南北直行为黄灯 SSR,SSG,SSY=3b001;SLR,SLG,SLY=3b100; /其他方向为红灯 end s6: begin /当前为s6状态 HSR,HSG,HSY=3b100;HLR,HLG,HLY=3b100; /南北左拐为绿灯 SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b010; /其他方向为红灯 end s7: begin /当前为s7状态 HSR,HSG,HSY=3b100;HLR

21、,HLG,HLY=3b100; /南北左拐为黄灯 SSR,SSG,SSY=3b100;SLR,SLG,SLY=3b001; /其他方向为红灯 end endcase endassign HS07:4=HS/4b1010; /令HS/4b1010作为HS0的高4位assign HS03:0=HS%4b1010; /令HS%4b1010作为HS0的低4位assign HL07:4=HL/4b1010; /令HL/4b1010作为HL0的高4位assign HL03:0=HL%4b1010; /令HL%4b1010作为HL0的低4位assign SS07:4=SS/4b1010; /令SS/4b10

22、10作为SS0的高4位assign SS03:0=SS%4b1010; /令SS%4b1010作为SS0的低4位assign SL07:4=SL/4b1010; /令SL/4b1010作为SL0的高4位assign SL03:0=SL%4b1010; /令SL%4b1010作为SL0的低4位endmodule四、 仿真测试图多个周期仿真图单个周期仿真图单个周期仿真图(详细图,以下4个图连在一起)五、 课程设计总结刚拿到这个课题的时候,由于上学期做过类似的一个交通灯控制器,以为比较简单,就在原来的基础上稍加改动就可以了,所以当时就做了一个120秒的倒计时器,后来得知并不满足要求,还需要改动,参考

23、其他同学的,他们大多数都分为了四个部分来做,并没有采用状态转换机来做,但最后我还是选择采用状态机来做,把它分为了8个状态,通过条件来使状态转换从而达到要求。但是在设计过程中,任然受到了一些困难,然后通过查阅书籍、上网查资料、请教同学等方式解决了问题。具体的困难及解决办法如下:1. 倒计时问题:由于上次做的那个交通灯控制器两个方向的时间是一样的,而且没有左转,所以比较好设计倒计时,然而本次设计不仅分直行和左转,而且它们红绿灯亮的时间并不等,所以不能用以前的办法。通过上网查询资料,我找到了一种通过减一个不断加1的数来实现倒计时,并且还要考虑每一个状态应该用什么数来减这个x。2. 倒计时显示误差问题:在仿真过程中,出现了一个小小的问题,例如东西直行绿灯倒计时时间有应该从30减到1,结果仿真后出现291,并且29前一位显示为0,按道理这里的0应该是30,这样才符合要求,但就是这样一个小小的问题,却困扰了我3个小时,不断的查看程序,不断的修改,不断的排查,最后终于找到问题是出现在每个状态的时间表达式上,然后改正过来,并成功的仿真完成。专心-专注-专业

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号