2013—2014学年第二学期 数字电子技术课程设计报告
专业班级 自动化1班
姓 名 张 青 学 号 12051124 开课系室 电工电子学教学中心 设计日期 20xx年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的管脚连接如下表所示:
2
三、输入输出资源说明:
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个开关分别实现东西向通行(东西向绿灯亮,南北向红灯亮,没有时间限制),实现南北向通行(南北向绿灯亮,东西向红灯亮,没有时间限制),实现东西向左转弯(东西向绿灯闪烁,东西向红灯亮,南北向
红灯亮,没有时间限制),实现南北向通行(南北向绿灯闪烁,南北向红灯亮,东西向红灯亮,没有时间限制)。
3
四、基础设计方案:
图2 交通灯控制电路图
图3 交通灯控制模块 图4 点阵显示模块
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 是实现滚动功能的开关。
5
五、模块仿真结果(基础模块仿真,不带使能端):
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.倒计时计数模块
6
gw 为个位,sw 为十位。倒计时19.18.17……3.2.1.0 计数。
4.LED灯显示模块
LED 为 共阳极 0 亮,1 不亮。
7
六、总结与讨论
七.各模块关键代码
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'd24999999)
begin
n1=32'd0;
CP1_1hz <= ~CP1_1hz;
end
else n1=n1+1;
if(n2==32'd12499999) 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.信号灯控制
10
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;
11
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;
12
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
13
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;
14
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;
15
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);
16
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;
17
end
else
begin
gw=gw-4'b0001;
end
end
end
endmodule
4.LED灯模块
module led7(input [3:0] cnt,output reg[6:0]led); 18
always@(cnt)
begin
case(cnt)
4'd0:led=7'b1000000; 4'd1:led=7'b1111001; 4'd2:led=7'b0100100; 4'd3:led=7'b0110000; 4'd4:led=7'b0011001; 4'd5:led=7'b0010010; 4'd6:led=7'b0000010; 4'd7:led=7'b1111000; 4'd8:led=7'b0000000; 4'd9:led=7'b0010000; default:led=7'b1000000; endcase
end
endmodule
19
5.点阵模块
module point (clk,clk3,row,con,en,k2);
20
input[5:0] en;
input clk,clk3,k2;
output[15:0] row;
output[15:0] con;
reg[15:0] row;
reg[15:0] con;
integer cnt,b,n;
reg[15:0] r[96:0];
initial
begin
//b=0 全黑状态
r[0] <=16'b 11xxxxxxxxxxxx1; r[1] <=16'b 11xxxxxxxxxxxx1; r[2] <=16'b 11xxxxxxxxxxxx1; r[3] <=16'b 11xxxxxxxxxxxx1; r[4] <=16'b 11xxxxxxxxxxxx1; r[5] <=16'b 11xxxxxxxxxxxx1; r[6] <=16'b 11xxxxxxxxxxxx1; r[7] <=16'b 11xxxxxxxxxxxx1; r[8] <=16'b 11xxxxxxxxxxxx1; r[9] <=16'b 11xxxxxxxxxxxx1; r[10] <=16'b 11xxxxxxxxxxxx1; r[11] <=16'b 11xxxxxxxxxxxx1;
21
r[12] <=16'b 11xxxxxxxxxxxx1; r[13] <=16'b 11xxxxxxxxxxxx1; r[14] <=16'b 11xxxxxxxxxxxx1; r[15] <=16'b 11xxxxxxxxxxxx1; //=1 显示学号个位 4
r[16] <=16'b 11xxxxxxxxxxxx1; r[17] <=16'b 1111110000001111; r[18] <=16'b 111xxxxxxxxxxxx; r[19] <=16'b 111xxxxxxxxxxxx; r[20] <=16'b 111xxxxxxxxxxxx; r[21] <=16'b 110xxxxxxxxxxxx; r[22] <=16'b 1001111111001111; r[23] <=16'b 0011111111001111; r[24] <=16'b 0000000000000000; r[25] <=16'b 0000000000000000; r[26] <=16'b 111xxxxxxxxxxxx; r[27] <=16'b 111xxxxxxxxxxxx; r[28] <=16'b 111xxxxxxxxxxxx; r[29] <=16'b 111xxxxxxxxxxxx; r[30] <=16'b 11xxxxxxxxxxxx1; r[31] <=16'b 11xxxxxxxxxxxx1; //b=2 显示学号十位 2
r[32] <=16'b 111xxxxxxxxxxxx;
22
r[33] <=16'b 1100000000000111; r[34] <=16'b 0011111111110011; r[35] <=16'b 0011111111111001; r[36] <=16'b 11xxxxxxxxxxxx1; r[37] <=16'b 11xxxxxxxxxxxx1; r[38] <=16'b 1111111111000001; r[39] <=16'b 111xxxxxxxxxxxx; r[40] <=16'b 11xxxxxxxxxxxx1; r[41] <=16'b 11xxxxxxxxxxxx1; r[42] <=16'b 10xxxxxxxxxxxx1; r[43] <=16'b 0011111111110111; r[44] <=16'b 0001111111100011; r[45] <=16'b 0000000000000000; r[46] <=16'b 11xxxxxxxxxxxx1; r[47] <=16'b 11xxxxxxxxxxxx1; //b=3 名字 青
r[48] <=16'b 11xxxxxxxxxxxx1; r[49] <=16'b 11xxxxxxxxxxxx1; r[50] <=16'b 1000000000000011; r[51] <=16'b 11xxxxxxxxxxxx1; r[52] <=16'b 1100000000000111; r[53] <=16'b 11xxxxxxxxxxxx1; r[54] <=16'b 0000000000000001;
23
r[55] <=16'b 11xxxxxxxxxxxx1; r[56] <=16'b 1110000000001111; r[57] <=16'b 11xxxxxxxxxxxx1; r[58] <=16'b 1110000000001111; r[59] <=16'b 11xxxxxxxxxxxx1; r[60] <=16'b 1110000000001111; r[61] <=16'b 11xxxxxxxxxxxx1; r[62] <=16'b 11xxxxxxxxxxxx1; r[63] <=16'b 111xxxxxxxxxxxx; //b=4 名字 张
r[64] <=16'b 11xxxxxxxxxxxx1; r[65] <=16'b 0000001011110111; r[66] <=16'b 11xxxxxxxxxxxx1; r[67] <=16'b 11xxxxxxxxxxxx1; r[68] <=16'b 11xxxxxxxxxxxx1; r[69] <=16'b 10xxxxxxxxxxxx1; r[70] <=16'b 10xxxxxxxxxxxx1; r[71] <=16'b 1011100000000001; r[72] <=16'b 10xxxxxxxxxxxx1; r[73] <=16'b 10xxxxxxxxxxxx1; r[74] <=16'b 11xxxxxxxxxxxx1; r[75] <=16'b 11xxxxxxxxxxxx1; r[76] <=16'b 11xxxxxxxxxxxx1;
24
r[77] <=16'b 11xxxxxxxxxxxx1; r[78] <=16'b 10xxxxxxxxxxxx1; r[79] <=16'b 11xxxxxxxxxxxx1;
//b=5 全黑
r[80] <=16'b 11xxxxxxxxxxxx1; r[81] <=16'b 11xxxxxxxxxxxx1; r[82] <=16'b 11xxxxxxxxxxxx1; r[83] <=16'b 11xxxxxxxxxxxx1; r[84] <=16'b 11xxxxxxxxxxxx1; r[85] <=16'b 11xxxxxxxxxxxx1; r[86] <=16'b 11xxxxxxxxxxxx1; r[87] <=16'b 11xxxxxxxxxxxx1; r[88] <=16'b 11xxxxxxxxxxxx1; r[89] <=16'b 11xxxxxxxxxxxx1; r[90] <=16'b 11xxxxxxxxxxxx1; r[91] <=16'b 11xxxxxxxxxxxx1; r[92] <=16'b 11xxxxxxxxxxxx1; r[93] <=16'b 11xxxxxxxxxxxx1; r[94] <=16'b 11xxxxxxxxxxxx1; r[95] <=16'b 11xxxxxxxxxxxx1;
25
n=96;
end
always@(posedge clk)
begin
if(n==0)n=96;
//b控制显示哪个字符,通过使能端控制在南北通显示名,东西通学号//黄灯闪烁不显示
else n=n-3;
case(en)
4'd0:begin
if(b<=3) b=5;
else b=b-1;
end
4'd1:begin
if(b<=3) b=5;
else b=b-1;
end
4'd2:b=0;//y
4'd3:begin
if(b==0||b>=3) b=2;
else b=b-1;
end
26
4'd4:begin
if(b==0||b>=3) b=2;
else b=b-1;
end
4'd5:b=0;//y
endcase
end
always@(posedge clk3)
begin
if(cnt==15)
begin
cnt<=0;
end
else
cnt<=cnt+1;
case(cnt)
0: con<=16'b0000_0000_0000_0001; 1: con<=16'b0000_0000_0000_0010; 2: con<=16'b0000_0000_0000_0100; 3: con<=16'b0000_0000_0000_1000; 4: con<=16'b0000_0000_0001_0000; 5: con<=16'b0000_0000_0010_0000;
27
6: con<=16'b0000_0000_0100_0000; 7: con<=16'b0000_0000_1000_0000; 8: con<=16'b0000_0001_0000_0000; 9: con<=16'b0000_0010_0000_0000; 10: con<=16'b0000_0100_0000_0000; 11: con<=16'b0000_1000_0000_0000; 12: con<=16'b0001_0000_0000_0000; 13: con<=16'b0010_0000_0000_0000; 14: con<=16'b0100_0000_0000_0000; 15: con<=16'b1000_0000_0000_0000; endcase
//en
begin
if(k2==0) //滚动动能的条件判断 case(cnt)
0: row<=r[b*16+0];
1: row<=r[b*16+1];
2: row<=r[b*16+2];
3: row<=r[b*16+3];
4: row<=r[b*16+4];
5: row<=r[b*16+5];
28
6: row<=r[b*16+6]; 7: row<=r[b*16+7]; 8: row<=r[b*16+8]; 9: row<=r[b*16+9]; 10: row<=r[b*16+10]; 11: row<=r[b*16+11]; 12: row<=r[b*16+12]; 13: row<=r[b*16+13]; 14: row<=r[b*16+14]; 15: row<=r[b*16+15]; endcase
else
case(cnt)
0: row<=r[n+0]; 1: row<=r[n+1]; 2: row<=r[n+2]; 3: row<=r[n+3]; 4: row<=r[n+4]; 5: row<=r[n+5]; 6: row<=r[n+6]; 7: row<=r[n+7]; 8: row<=r[n+8]; 9: row<=r[n+9];
29
10: row<=r[n+10]; 11: row<=r[n+11]; 12: row<=r[n+12]; 13: row<=r[n+13]; 14: row<=r[n+14]; 15: row<=r[n+15]; endcase
end
end
endmodule
30
数字电路课程设计报告课题名称:篮球竞赛30秒计时器姓名:学号:专业班级:通信工程1指导教师:设计日期:20##年1月5日摘要:随着…
数电课程设计说明题目数字电子钟的设计部班级名号书系专业姓学指导教师起止日期摘要这次课程设计采用的课题是数字电子钟的设计数字钟是一种…
电子技术基础数字部分课程设计电子技术基础数字部分课程设计姓名学号班级专业学院20xx年3月电子技术基础数字部分课程设计目录一设计任…
五邑大学数字电路课程设计报告题目两位十进制计数显示器院系信息工程学院专业通信工程学号学生姓名张国辉指导教师陈鹏报告日期20xx年4…
数字逻辑电路设计课程设计总结报告题目汽车尾灯控制器设计指导教师莫琳设计人员学号李海沧110720xx25班级电信111日期20xx…
数字电路课程设计总结报告题目:交通灯控制器1、设计背景2、设计任务书3、设计框图及总体描述4、各单元设计电路设计方案与原理说明5、…
数字逻辑电路设计课程设计总结报告题目指导教师姓名学号班级日期目录一设计任务书3一设计课题3二功能要求3二设计框图及整机概述3一原理…
天津职业技术师范大学汽车与交通学院电子技术课程设计报告同组学生姓名学号杨帅11杨启瑞03陈敏18班级汽电1001班任务分工电路设计…
电子技术课程设计课题名称电梯控制学院电气学院专业电子信息工程姓名指导教师谢贝贝学号目录摘要2第一章设计目的及意义31目的32意义3…
数字电路课程设计总结报告题目数字钟设计专业班级学生姓名学号指导教师日期20xx年12月11目录一设计任务1一设计课题1二功能要求1…