文档库 最新最全的文档下载
当前位置:文档库 › 中国石油大学数电课程设计报告

中国石油大学数电课程设计报告

2013—2014学年第二学期数字电子技术课程设计报告

专业班级自动化1班

姓名张青

学号 12051124

开课系室电工电子学教学中心

设计日期 2014年7月4/5日~8日

目录

数字电子技术课程设计题目:交通灯控制电路设计 (1)

一、设计任务及原理 (1)

二、具体要求 (1)

三、输入输出资源说明 (3)

四、基础设计方案 (4)

五、模块仿真结果 (6)

六、总结与讨论 (8)

七.各模块关键代码 (9)

数字电子技术课程设计题目:交通灯控制电路设计

一、设计任务及原理:

交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂。

要完成本实验,首先必须了解交通路灯的燃灭规律。本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各四个。依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。其交通灯的燃灭规律为:东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯闪烁,红灯亮(表示左转弯),再延时一段时间后,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯闪烁,红灯亮(表示左转弯),再延时一段时间后,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。

在实验中使用4个七段码管中的任意两个数码管显示时间。东西路和南北路的通车时间均设定为20s(其中,绿灯亮时间为10s,绿灯闪烁时间为5s,黄灯闪烁时间为5s)。数码管的时间总是显示为20、19、18、17……2、1、0、20、19、18……。在显示时间小于等于5秒的时候,通车方向的黄灯闪烁。在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。

二、具体要求:

本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的交通灯模块和七段码管中的任意两个来显示。系统时钟选择时钟模块的50MHz时钟,黄灯和绿灯闪烁时钟要求为2Hz,七段码管的时间显示为1Hz脉冲,即每1s中递减一次。在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。显示方式:1秒显示一个汉字或者一个数字(汉字和数字均静止不动,即不循环),然后全暗1秒,然后再显示一个汉字或者一个数字,以此类推。

实验箱中用到的数字时钟模块、按键开关、数码管、点阵与FPGA的接口电路,以及数字时钟源、按键开关、数码管、点阵与FPGA的管脚连接在以前的实验中都做了详细说明,这里不再赘述。交通灯模块原理与LED灯模块的电路原理一致,当有高电平输入时LED灯就会被点亮,反之不亮。只是LED发出的光有颜色之分。其与FPGA的管脚连接如下表所示:

三、输入输出资源说明:

1、外部输入脉冲信号时钟源CP(50MHz),经适当分频后供计数器使用。

2、输出2组显示译码信号(每组7个输出端),分别接到外部的两个七段数码管M1、M2上,M1和M2分别显示倒计时的十位和个位。

3、输出6个高低电平信号,分别接到外部的6个指示纵向、横向的LED灯。(输出高电平时,对应的LED灯亮)

其具体框图如下:

图1 交通灯控制电路结构框图

同时可以拓展:

1、利用一个开关将0-20s扩展为0-30s(30-10s之间绿灯亮,其他与基本要求相同);

2、增加交警控制模块:用一个开关切换自动模式(上述情况属于自动模式)和人工

模式(交警控制模式):用4个开关分别实现东西向通行(东西向绿灯亮,南北

向红灯亮,没有时间限制),实现南北向通行(南北向绿灯亮,东西向红灯亮,

没有时间限制),实现东西向左转弯(东西向绿灯闪烁,东西向红灯亮,南北向

红灯亮,没有时间限制),实现南北向通行(南北向绿灯闪烁,南北向红灯亮,

东西向红灯亮,没有时间限制)。

四、基础设计方案:

图2 交通灯控制电路图

图3 交通灯控制模块图4 点阵显示模块

图5 倒计时计数模块

图6 分频器模块图7 LED显示模块

关键代码见最后

首先对于50MHz 使用,我们要进行分频,把其分成1KHz、2Hz、1Hz,三种频率。1KHz用于点阵显示的扫描频率,1Hz用于计数器计时,2Hz用于交通灯的闪烁情况。

关于交通灯的控制模块,输入clk 为2Hz ,接信号灯实现闪烁,两次上升时间为1秒;输入k2 是控制20秒和30秒的切换;w1~w2 相当于使能端,用于之后控制交警模式信号灯明暗情况并使LED保持在00 的状态。

倒计时计数模块实现简单的倒计时计数的功能。Clk 为计数脉冲;k1 是20和30秒之间的切换,k2 是交警模式保持00的使能端。

点阵模块实现16×16点阵显示,同时使能端使在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。clk 是逐行显示进位端,clk3列扫描端。k2 是实现滚动功能的开关。

五、模块仿真结果(基础模块仿真,不带使能端):

1.分频器模块

50MHz不能仿真,用50Hz进行模拟。

1Hz:(50-2)/ 2 = 24 ;

5Hz: ( 10- 2) / 2 = 4 ;

CP1 为50Hz 到1Hz

CP2 为50Hz 到5Hz

2.交通灯控制模块

15.125ns 的延时是对num赋值

此后经过20脉冲实现10s (因为clk 频率为2Hz),东西路(灯1)和南北路(灯2)的通车时间均设定为20s(其中,绿灯亮时间为10s,绿灯闪烁时间为5s,黄灯闪烁时间为5s)。数码管的时间总是显示为20、19、18、17……2、1、0、20、19、18……。在显示时间小于等于5秒的时候,通车方向的黄灯闪烁。

3.倒计时计数模块

gw 为个位,sw 为十位。倒计时19.18.17……3.2.1.0 计数。

4.LED灯显示模块

LED 为共阳极 0 亮,1 不亮。

六、总结与讨论

七.各模块关键代码

1.分频器

module divider(clk,CP1_1hz,CP2_2hz,CP3_1khz);

input clk;

output CP1_1hz,CP2_2hz,CP3_1khz;

reg CP1_1hz,CP2_2hz,CP3_1khz;

reg [31:0] n1,n2,n3;

initial

begin

CP1_1hz=0;

CP2_2hz=0;

CP3_1khz=0;

n1=0;

n2=0;

n3=0;

end

always@(posedge clk)

begin

if(n1==32'd2*******)

begin

n1=32'd0;

CP1_1hz <= ~CP1_1hz;

end

else n1=n1+1;

if(n2==32'd1*******)

begin

n2=32'd0;

CP2_2hz <= ~CP2_2hz;

end

else n2=n2+1;

if(n3==32'd24999)

begin

n3=32'd0;

CP3_1khz <= ~CP3_1khz;

end

else n3=n3+1;

end

endmodule

2.信号灯控制

module

control(clk,red1,yellow1,green1,red2,yellow2,green2,k,k2,w1,w2,w3,w4);

input clk,k2,w1,w2,w3,w4;

output red1,yellow1,green1,red2,yellow2,green2;

reg red1,yellow1,green1,red2,yellow2,green2,nb;

output reg [5:0]k;

reg [6:0]num;

initial

num=0;

always @(posedge clk)

begin

if((w1+w2+w3+w4)>1) begin red1=1;red2=1;green1=0;green2=0; end //判断交警模式操作间隔,w1~w4 同时连接或门给LED信号.有延时

else begin

begin

if(k2==0) //此处条件为20,30切换

begin

if(w1==1) num<=10;

else if(w2==1) num<=50;

else num<=(num==(7'd79))?1'd0:(num+1'd1);

if(num>0&&num<(20))

begin

k=6'd0;

red1=0;yellow1=0;green1=1;red2=1;yellow2=0;green2=0;k=6'd0; end

else if((num>(19))&&num<(30)) // no.1 green flash

begin

k=6'd1;

red1=1;

if(num%2==0)

green1=1;

else

green1=0;

end

else if(num>(29)&&num<(40)) // no.1 yellow flash

begin

k=6'd2;

red1=0;

if(num%2==0)

yellow1=1;

else

yellow1=0;

end

else if(num>(39)&&num<(60))

begin

k=6'd3;

red1=1;yellow1=0;green1=0;

red2=0;yellow2=0;green2=1;

end

else if(num>(59)&&num<(70)) // no.2 green flash begin

k=6'd4;

red2=1;

if(num%2==0)

green2=1;

else

green2=0;

end

else if(num>(69)&&num<(80)) // no.2 yellow flash begin

k=6'd5;

red2=0;

if(num%2==0)

yellow2=1;

else

yellow2=0;

end

if(w3==1) begin red1=1;yellow1=0;yellow2=0;if(green1==0) green1=1; else green1=0; end//

if(w4==1) begin red2=1;yellow1=0;yellow2=0;if(green2==0) green2=1; else green2=0; end//

end

else

begin //k2!=0 此处切换为30s

if(w1==1) num<=20;

else if(w2==1) num<=70;

else num<=(num==(7'd119))?1'd0:(num+1'd1);

if(num>0&&num<40)

begin

k=6'd0;

red1=0;yellow1=0;green1=1;red2=1;yellow2=0;green2=0;k=6'd0;

end

else if((num>39)&&num<50) // no.1 green flash

begin

k=6'd1;

red1=1;

if(num%2==0)

green1=1;

else

green1=0;

end

else if(num>49&&num<60) // no.1 yellow flash begin

k=6'd2;

red1=0;

if(num%2==0)

yellow1=1;

else

yellow1=0;

end

else if(num>59&&num<100)

begin

k=6'd3;

red1=1;yellow1=0;green1=0;

red2=0;yellow2=0;green2=1;

end

else if(num>99&&num<110) // no.2 green flash begin

k=6'd4;

red2=1;

if(num%2==0)

green2=1;

else

green2=0;

end

else if(num>109&&num<120) // no.2 yellow flash

begin

k=6'd5;

red2=0;

if(num%2==0)

yellow2=1;

else

yellow2=0;

end

else if(w3==1) begin red1=1;yellow1=0;yellow2=0;if(green1==0) green1=1; else green1=0; end//

else if(w4==1) begin red2=1;yellow2=0;yellow1=0;if(green2==0) green2=1; else green2=0; end//

end end end end

endmodule

3.倒计时计数器

module nback(clk,gw,sw,k1,k2);

input clk,k1,k2;

output [3:0]gw,sw;

reg [3:0]gw,sw;

reg flag;

always@(posedge clk)

begin

if(k2==1) begin

gw=4'b0000;

sw=4'b0000; end

else begin

if(gw==4'b0000&&sw==4'b0000) begin

gw=4'b1001;

if(k1==1)

sw=4'b0010;

else sw=4'b0001;

end

else if(gw==4'b0000)

begin

gw=4'b1001;

sw=sw-4'b0001;

end

else

begin

gw=gw-4'b0001;

end

end

end

endmodule

4.LED灯模块

module led7(input [3:0] cnt,output reg[6:0]led);

相关文档