中国石油大学华东交通灯控制电路.docx
- 文档编号:18115572
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:35
- 大小:162.95KB
中国石油大学华东交通灯控制电路.docx
《中国石油大学华东交通灯控制电路.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东交通灯控制电路.docx(35页珍藏版)》请在冰豆网上搜索。
中国石油大学华东交通灯控制电路
2013—2014学年第三学期
《数字电子技术课程设计》任务书
(适用专业:
电气12级、自动化12级、勘查(卓越)12级)
专业班级
姓名
学号
开课系室
设计日期
数字电子技术课程设计题目:
交通灯控制电路设计
一、设计任务及要求
1、设计任务及原理:
交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂。
要完成本实验,首先必须了解交通路灯的燃灭规律。
本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各四个。
依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。
其交通灯的燃灭规律为:
东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯闪烁,红灯亮(表示左转弯),再延时一段时间后,黄灯开始闪烁。
闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯闪烁,红灯亮(表示左转弯),再延时一段时间后,黄灯开始闪烁。
闪烁若干次后,再切换到东西路口方向,重复上述过程。
在实验中使用4个七段码管中的任意两个数码管显示时间。
东西路和南北路的通车时间均设定为20s(其中,绿灯亮时间为10s,绿灯闪烁时间为5s,黄灯闪烁时间为5s)。
数码管的时间总是显示为20、19、18、17……2、1、0、20、19、18……。
在显示时间小于等于5秒的时候,通车方向的黄灯闪烁。
在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。
2、扩展要求:
a.利用一个开关将0-20s扩展为0-30s(30-10s之间绿灯亮,其他与基本要求相同);
b.增加交警控制模块:
用一个开关切换自动模式(上述情况属于自动模式)和人工模式(交警控制模式):
用4个开关分别实现东西向通行(东西向绿灯亮,南北向红灯亮,没有时间限制),实现南北向通行(南北向绿灯亮,东西向红灯亮,没有时间限制),实现东西向左转弯(东西向绿灯闪烁,东西向红灯亮,南北向红灯亮,没有时间限制),实现南北向通行(南北向绿灯闪烁,南北向红灯亮,东西向红灯亮,没有时间限制)。
3、具体要求:
本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的交通灯模块和七段码管中的任意两个来显示。
系统时钟选择时钟模块的50MHz时钟,黄灯和绿灯闪烁时钟要求为2Hz,七段码管的时间显示为1Hz脉冲,即每1s中递减一次。
在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。
显示方式:
1秒显示一个汉字或者一个数字(汉字和数字均静止不动,即不循环),然后全暗1秒,然后再显示一个汉字或者一个数字,以此类推。
二、输入输出资源说明:
1、外部输入脉冲信号时钟源CP(50MHz),经适当分频后供计数器使用。
2、输出2组显示译码信号(每组7个输出端),分别接到外部的两个七段数码管M1、M2上,M1和M2分别显示倒计时的十位和个位。
3、输出6个高低电平信号,分别接到外部的6个指示纵向、横向的LED灯。
(输出高电平时,对应的LED灯亮)
其具体框图如下:
图1交通灯控制电路结构框图
根据如上说明,本设计的主要任务和设计要求是:
1、按照现代数字系统的Top-Down模块化设计方法,提出交通灯控制电路设计系统的整体设计方案,并进行正确的功能划分,分别提出并实现控制器、计数器、输出译码、点阵显示等模块化子系统的设计方案。
2、在QuartusⅡ的EDA设计环境中,完成系统的顶层设计、各子系统的模块化设计。
分别完成各个基于Verilog语言实现的子模块(包括控制器电路、计数器电路、输出译码电路、点阵显示电路)的逻辑功能仿真。
最后对顶层设计进行功能仿真。
3、在2步的基础上,用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。
观察实验结果是否与自己的编程思想一致。
三、电路子模块的设计与仿真
根据设计要求及原理,我所设计的交通灯控制电路主要包含四个子模块,分别是:
分频器、倒计时计数器、点阵显示器、控制器。
1、分频器
1)Verilog源文件
modulefenpinqi(clk,clk1,clk2,clk1000);
inputclk;
outputclk1,clk2,clk1000;
reg[31:
0]cnt1,cnt2,cnt3;
regclk1,clk2,clk1000;
initial
begin
clk1=0;
clk2=0;
clk1000=0;
cnt1=0;
cnt2=0;
cnt3=0;
end
always@(posedgeclk)
begin
if(cnt1==24999999)
begin
clk1<=~clk1;
cnt1<=0;
end
else
begin
cnt1<=cnt1+1;
end
if(cnt2==12499999)
begin
clk2<=~clk2;
cnt2<=0;
end
else
begin
cnt2<=cnt2+1;
end
if(cnt3==24999)
begin
clk1000<=~clk1000;
cnt3<=0;
end
else
begin
cnt3<=cnt3+1;
end
end
endmodule
2)仿真文件
3)功能仿真波形
1hz和2hz的频率过低,无法仿真。
2、倒计时计数器
1)Verilog源文件
moduledaojishi(clk1,k,seq1,seq2,ji,out);
//ji记录循环次数,out输出二进制秒数
inputclk1,k;
output[6:
0]seq1,seq2;
outputji;
output[4:
0]out;
reg[6:
0]seq1,seq2;
regji;
reg[4:
0]out;
parameterNum1=20;
parameterNum2=30;
integercnt;
initialcnt=0;
integercnt1;
initialcnt1=0;
always@(posedgeclk1)
begin
if(k==0)
begin
if(cnt==0)
begin
cnt<=20;
cnt1=cnt1+1;
end
else
begin
cnt=cnt-1;
end
end
elseif(cnt==0)
begin
cnt<=30;
cnt1=cnt1+1;
end
else
begin
cnt=cnt-1;
end
end
always@(cnt)
begin
case(cnt%10)
0:
seq1=7'b0000001;
1:
seq1=7'b1001111;
2:
seq1=7'b0010010;
3:
seq1=7'b0000110;
4:
seq1=7'b1001100;
5:
seq1=7'b0100100;
6:
seq1=7'b0100000;
7:
seq1=7'b0001111;
8:
seq1=7'b0000000;
9:
seq1=7'b0000100;
endcase
end
always@(cnt)
begin
case((cnt-(cnt%10))/10)
0:
seq2=7'b0000001;
1:
seq2=7'b1001111;
2:
seq2=7'b0010010;
3:
seq2=7'b0000110;
4:
seq2=7'b1001100;
5:
seq2=7'b0100100;
6:
seq2=7'b0100000;
7:
seq2=7'b0001111;
8:
seq2=7'b0000000;
9:
seq2=7'b0000100;
endcase
end
always@(cnt)
begin
out=cnt;//shu
end
always@(cnt1)
begin
case(cnt1%2)
0:
ji=0;//oushu
1:
ji=1;//jishu
endcase
end
endmodule
2)仿真文件
3)功能仿真波形
3、点阵显示器
1)Verilog源文件
inputclk1000,we,ns,k;
input[4:
0]shu;
output[15:
0]r,c;
reg[15:
0]r,c;
integercnt1;
initialcnt1=0;
always@(posedgeclk1000)
begin
cnt1=cnt1+1;
if(k==0)
begin
if(we==0)
begin
if(shu==20||shu==14)//史
begin
if(cnt1%16==0)
begin
c=16'b0000000100000000;
r=16'b0111111111111111;
end
elseif(cnt1%16==1)
begin
c=16'b0000000100000000;
r=16'b1011111111111111;
end
elseif(cnt1%16==2)
begin
c=16'b0011111111111000;
r=16'b1101111111111111;
end
elseif(cnt1%16==3)
begin
c=16'b0010000100001000;
r=16'b1110111111111111;
end
elseif(cnt1%16==4)
begin
c=16'b0010000100001000;
r=16'b1111011111111111;
end
elseif(cnt1%16==5)
begin
c=16'b0010000100001000;
r=16'b1111101111111111;
end
elseif(cnt1%16==6)
begin
c=16'b0010000100001000;
r=16'b1111110111111111;
end
elseif(cnt1%16==7)
begin
c=16'b0011111111111000;
r=16'b1111111011111111;
end
elseif(cnt1%16==8)
begin
c=16'b0000000100000000;
r=16'b1111111101111111;
end
elseif(cnt1%16==9)
begin
c=16'b0001000100000000;
r=16'b1111111110111111;
end
elseif(cnt1%16==10)
begin
c=16'b0000101000000000;
r=16'b1111111111011111;
end
elseif(cnt1%16==11)
begin
c=16'b0000011000000000;
r=16'b1111111111101111;
end
elseif(cnt1%16==12)
begin
c=16'b0000100110000000;
r=16'b1111111111110111;
end
elseif(cnt1%16==13)
begin
c=16'b0001000001100000;
r=16'b1111111111111011;
end
elseif(cnt1%16==14)
begin
c=16'b0010000000011000;
r=16'b1111111111111101;
end
else
begin
c=16'b1100000000000111;
r=16'b1111111111111110;
end
end
elseif(shu==18||shu==12)//育
begin
if(cnt1%16==0)
begin
c=16'b0000000100000000;
r=16'b011111111111111111;
end
elseif(cnt1%16==1)
begin
c=16'b0000000010000000;
r=16'b1011111111111111;
end
elseif(cnt1%16==2)
begin
c=16'b0111111111111111;
r=16'b1101111111111111;
end
elseif(cnt1%16==3)
beginmodulexianshi(shu,clk1000,we,ns,k,r,c);
c=16'b0000010000000000;
r=16'b1110111111111111;
end
elseif(cnt1%16==4)
begin
c=16'b0000100000001000;
r=16'b1111011111111111;
end
elseif(cnt1%16==5)
begin
c=16'b0001111111111100;
r=16'b1111101111111111;
end
elseif(cnt1%16==6)
begin
c=16'b0000000000000100;
r=16'b1111110111111111;
end
elseif(cnt1%16==7)
begin
c=16'b0000111111111000;
r=16'b1111111011111111;
end
elseif(cnt1%16==8)
begin
c=16'b0000100000001000;
r=16'b1111111101111111;
end
elseif(cnt1%16==9)
begin
c=16'b0000111111111000;
r=16'b1111111110111111;
end
elseif(cnt1%16==10)
begin
c=16'b0000100000001000;
r=16'b1111111111011111;
end
elseif(cnt1%16==11)
begin
c=16'b0000111111111000;
r=16'b1111111111101111;
end
elseif(cnt1%16==12)
begin
c=16'b0000100000001000;
r=16'b1111111111110111;
end
elseif(cnt1%16==13)
begin
c=16'b0000100000001000;
r=16'b1111111111111011;
end
elseif(cnt1%16==14)
begin
c=16'b0000100000101000;
r=16'b1111111111111101;
end
else
begin
c=16'b0000100000010000;
r=16'b1111111111111110;
end
end
elseif(shu==16)//铭
begin
if(cnt1%16==0)
begin
c=16'b0000100000100000;
r=16'b0111111111111111;
end
elseif(cnt1%16==1)
begin
c=16'b0000100000100000;
r=16'b1011111111111111;
end
elseif(cnt1%16==2)
begin
c=16'b0001111001111110;
r=16'b1101111111111111;
end
elseif(cnt1%16==3)
begin
c=16'b0001000010000010;
r=16'b1110111111111111;
end
elseif(cnt1%16==4)
begin
c=16'b0010000101000100;
r=16'b1111011111111111;
end
elseif(cnt1%16==5)
begin
c=16'b0101111000101000;
r=16'b1111101111111111;
end
elseif(cnt1%16==6)
begin
c=16'b0000100000010000;
r=16'b1111110111111111;
end
elseif(cnt1%16==7)
begin
c=16'b0000100000100000;
r=16'b1111111011111111;
end
elseif(cnt1%16==8)
begin
c=16'b0111111001000000;
r=16'b1111111101111111;
end
elseif(cnt1%16==9)
begin
c=16'b0000100011111110;
r=16'b1111111110111111;
end
elseif(cnt1%16==10)
begin
c=16'b0000100101000010;
r=16'b1111111111011111;
end
elseif(cnt1%16==11)
begin
c=16'b0000100001000010;
r=16'b111111*********1
;end
elseif(cnt1%16==12)
begin
c=16'b0000101001000010;
r=16'b1111111111110111;
end
elseif(cnt1%16==13)
begin
c=16'b0000110001000010;
r=16'b1111111111111011;
end
elseif(cnt1%16==14)
begin
c=16'b0000100001111110;
r=16'b1111111111111101;
end
else
begin
c=16'b0000000001000010;
r=16'b1111111111111110;
end
end
else//暗
begin
c=16'b0000000000000000;
r=16'b1111111111111111;
end
end
end
if(ns==1)
begin
if(shu==20||shu==14)//4
begin
if(cnt1%16==0)
begin
c=16'b0000000001100000;
r=16'b0111111111111111;
end
else
if(cnt1%16==1)
begin
c=16'b0000000011100000;
r=16'b1011111111111111;
end
elseif(cnt1%16==2)
begin
c=16'b0000000110110000;
r=16'b1101111111111111;
end
elseif(cnt1%16==3)
begin
c=16'b0000001100110000;
r=16'b1110111111111111;
end
elseif(cnt1%16==4)
begin
c=16'b0000011000110000;
r=16'b1111011111111111;
end
elseif(cnt1%16==5)
begin
c=16'b0000011000110000;
r=16'b1111101111111111;
end
elseif(cnt1%16==6)
begin
c=16'b0000110000110000;
r=16'b1111110111111111;
end
elseif(cnt1%16==7)
begin
c=16'b0001100000110000;
r=16'b1111111011111111;
end
elseif(cnt1%16==8)
begin
c=16'b0011100000110000;
r=16'b1111111101111111;
end
elseif(cnt1%16==9)
begin
c=16'b0011000000110000;
r=16'b1111111110111111;
end
elseif(cnt1%16==10)
begin
c=16'b0110000000110000;
r=16'b1111111111011111;
end
elseif(cnt1%16==11)
begin
c=16'b0111111111111110;
r=16'b1111111111101111;
end
elseif(cnt1%16==12)
begin
c=16'b0111111111111110;
r=16'b1111111111110111;
end
else
if(cnt1%16==13)
begin
c=16'b0000000000110000;
r=16'b1111111111111011;
end
elseif(cnt1%16==14)
begin
c=16'b0000000000110000;
r=16'b1111111111111101;
end
else
begin
c=16'b0000000011111000;
r=16'b1111111111111110;
end
end
elseif(shu==18||shu==12)//'0
begin
if(cnt1%16==0)
begin
c=16'b0000001111100000;
r=16'b0111111111111111;
end
elseif(cnt1%16==1)
begin
c=16'b0000011111110000;
r=16'b1011111111111111;
end
elseif(cnt1%16==2)
begin
c=16'b0000110000011000;
r=16'b1101111111111111;
end
elseif(cnt1%16==3)
begin
c=16'b0001100000001100;
r=16'b1110111111111111;
end
elseif(cnt1%16==4)
begin
c=16'b0001100000001100;
r=16'b1111011111111111;
end
elseif(cnt1%16==5)
begin
c=16'b0001100000001100;
r=16'b1111101111111111;
end
elseif(cnt1%16==6)
begin
c=16'b0001100000001100;
r=16'b1111110111111111;
end
else
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国 石油大学 华东 交通灯 控制电路