电子技术基础课程设计交通灯控制技术.docx
《电子技术基础课程设计交通灯控制技术.docx》由会员分享,可在线阅读,更多相关《电子技术基础课程设计交通灯控制技术.docx(17页珍藏版)》请在冰点文库上搜索。
![电子技术基础课程设计交通灯控制技术.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/6578ad23-281c-405a-b8e8-174febbccc3c/6578ad23-281c-405a-b8e8-174febbccc3c1.gif)
电子技术基础课程设计交通灯控制技术
(封面)
XXXXXXX学院
电子技术基础课程设计
——交通灯控制器设计
题目:
院(系):
专业班级:
学生姓名:
指导老师:
时间:
年月日
设计内容及要求(题目)
任务1:
交通灯控制器的设计
设计内容与要求
①设计一个十字路口交通信号灯的控制电路。
要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,且将运行时间用数码管显示出来。
②绿灯亮时,为该车道允许通行信号,红灯亮时,为该车道禁止通行信号。
要求主干道每次通行时间为Tx秒,支干道每次通行时间为Ty秒。
每次变换运行车道前绿灯闪烁,持续时间为5秒。
即车道要由X转换为Y时,X在通行时间只剩下5秒钟时,绿灯闪烁显示,Y仍为红灯。
③可以对X,Y车道上交通灯运行的时间进行重新设置,
20≦Tx≦99,10≦Ty≦39
④对器件进行在系统编程和实验验证。
⑤写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。
交通灯设计过程
设计过程分了两个阶段,初期构想和真正的计划实施。
初期设计根据题目的意思看得出是题意基本意思是在干路和支路各有一红灯和绿灯,绿灯计时的最后五秒有闪烁,可以简略将系统的状态结构图做出来如下(未加附加功能):
可以看出其中有四个状态:
1:
主干道绿灯常亮(Tx-5),支干道红灯常亮(Ty)。
2.主干道绿灯闪亮(5S),支干道红灯常亮。
3:
主干道红灯常亮(Ty),支干道绿灯常亮(Tx-5)。
4:
主干道红灯常亮,支干道绿灯闪亮(5S)。
红灯亮时间=绿灯亮时间+绿灯闪时间(5S)
可以看得出其实四个状态可以简化,在后期实施的时候为了简化故将四个状态转换成了两个状态,即为干路和支路的两个不同的状态修改后的状态结构框图如下(未加附加功能):
State1:
干路绿灯开始常亮,支路红灯开始常亮,等到了干路计时还剩下五秒的时候,干路绿灯交替闪亮,支路红灯不变。
State2:
2.干路转换为红灯常亮,支路变为为绿灯常亮,等到了支路计时还剩下五秒的时候,支路绿灯交替闪亮,干路红灯不变。
在分析系统的组成结构,可以知道系统大概有三个部分组成,其中不难得出,包括:
1.显示部分:
分为指示灯显示和数码管显示(其中这两者应该是同步的,同一控制器,秒脉冲控制)。
2.计数部分:
计数器递减计数要求是以秒脉冲计数,当达到指定时间要有重置部分将时间重置,重新计数。
3.控制部分:
提供秒脉冲时钟信号,控制数码管和指示灯的变化以及设置时间等功能。
三部分之间的关系可以表达为:
控制显示控制数码管
递减计数
秒脉冲输出(设置绿灯时间)
重置计数器
重新开始计数
控制时间达到预定值
经上面分析,大致可以得到整个交通灯的结构框图:
系统框图
经过分析可知,该设计需要时钟信号,所以需要秒脉冲信号1.信号发生器
要显示亮灯时间需要2.计数器
3.数码显示器
对于主路和支路需要显示红绿灯,故需要4.信号显示灯
5.状态译码器
6.控制器等
其中各部分功能如下:
交通指示灯:
显示主支路通行情况;
数码管显示:
显示通行剩余时间,从绿灯亮起开始计算,转换灯的颜色后重新计数;
状态译码器:
经控制器控制,输出交通指示灯和数码管显示当前状态;
控制器:
控制状态译码器的输出状态和控制递减计数器的计数和重置;
重置装置:
接收控制器的命令,在相应的时段使递减计数器重置,重新从预设值递减;
减法计数器:
控制数码显示管的数值计时显示;
分频器:
将脉冲信号提供的源信号进行分频,得到秒脉冲信号;
脉冲源信号:
为整个电路提供初始脉冲源信号;
设置时间:
由控制器输入设置,改变主支路上的绿灯的时间。
源代码部分详解
一.主函数
主模块
功能:
程序设计的主体部分,其中包括各变量的初值设置,以及交通灯两种状态的控制和交通灯停止或继续计时的控制。
输入:
clk50M的系统输入时钟信号
set_enable设置允许信号,高电平时允许重新设置主干道和支干道时间
reset复位信号,为低电平时主干道和支干道时间恢复为默认值
set_xy选择道路,高电平时设置主干道,低电平时设置支干道
up_down加减控制信号,高电平时为加,低电平时为减
输出:
pri_LED主干道红绿灯信号,高电平表示红灯,低电平为绿灯
sec_LED支干道红绿灯信号,高电平表示红灯,低电平为绿灯
dis_time显示主干道和支干道剩余时间
dis_txy实时显示所设置的时间
moduleliu(clk,set_enable,reset,set_xy,up_down,turn,pri_LED,sec_LED,left_LED1,left_LED2,dis_time,dis_txy);
output[13:
0]dis_time,dis_txy;//变量设置声明
output[1:
0]pri_LED,sec_LED;
outputleft_LED1,left_LED2;
inputclk,up_down,reset,set_xy,set_enable,turn;
reg[7:
0]time_left;
wire[7:
0]tx,ty,time_left_hl,tx_hl,ty_hl,txy1;
wire[13:
0]dis_time,dis_txy;
reg[1:
0]pri_LED,sec_LED;
regleft_LED1,left_LED2;
wireclk1;
reg[1:
0]state;
initial
begin
pri_LED=2'b00;//部分初值初始化
sec_LED=2'b00;
left_LED1=1'b0;
left_LED2=1'b0;
state=1'b0;
time_left=8'b00101000;
end
divideU1(clk1,clk);//分频函数,得到秒脉冲
set_timeU2(clk1,set_enable,reset,set_xy,up_down,tx,ty);//时间设置函数,重新设置绿灯时间
assigntime_left_hl[7:
4]=time_left/10;//定义变量的变化方式
assigntime_left_hl[3:
0]=time_left%10;
assigntx_hl[7:
4]=tx/10;
assigntx_hl[3:
0]=tx%10;
assignty_hl[7:
4]=ty/10;
assignty_hl[3:
0]=ty%10;
assigntxy1=set_xy?
tx_hl:
ty_hl;
displayU3(dis_time[6:
0],time_left_hl[3:
0]);//调用显示函数将计数值显示在数码管上
displayU4(dis_time[13:
7],time_left_hl[7:
4]);
displayU5(dis_txy[6:
0],txy1[3:
0]);
displayU6(dis_txy[13:
7],txy1[7:
4]);
always@(posedgeclk1)//脉冲信号高电平开始执行
if(turn==1)//暂停模式
begin
time_left=time_left;
end
elseif(turn==0)//正常运行模式
begin
time_left=time_left-1;//不断递减计数
case(state)
1'b0:
//状态0
begin
pri_LED=2'b01;sec_LED=2'b10;left_LED1=1'b0;left_LED2=1'b0;
if(time_left==10||time_left==9||time_left==8||time_left==7||time_left==6)
left_LED1=1'b1;//左转灯亮
if(time_left==5||time_left==3||time_left==1)//左转灯闪亮left_LED1=1'b0;pri_LED=2'b00;
if(time_left==4||time_left==2||time_left==0)left_LED1=1'b1;pri_LED=2'b01;
if(time_left==0)begintime_left=ty;state=1'b1;sec_LED=2'b10;end
end//状态转换
1'b1:
//状态1
begin
pri_LED=2'b10;sec_LED=2'b01;left_LED1=1'b0;left_LED2=1'b0;
if(time_left==7||time_left==6)
left_LED2=1'b1;
if(time_left==5||time_left==3||time_left==1)left_LED2=1'b0;sec_LED=2'b00;
if(time_left==4||time_left==2||time_left==0)left_LED2=1'b1;sec_LED=2'b01;
if(time_left==0)begintime_left=tx;state=1'b0;pri_LED=2'b10;end//状态1返回状态0
end
endcase
end
endmodule
二.子函数
设置模块
功能:
通过调节开关,完成对系统的交通灯绿灯时间的设置,控制红绿灯时间。
输入:
clk50M的输入时钟信号
set_enable设置允许信号,1时允许重新设置主干道和支干道时间
reset复位信号,为0时主干道和支干道时间恢复为默认值
set_xy选择道路,1时设置主干道,0时设置支干道
up_down加减控制信号,1时为加,0时为减
输出:
tx主干道设置后的时间
ty支干道设置后的时间
*/
moduleset_time(clk,set_enable,reset,set_xy,up_down,tx,ty);//变量声明
outputtx,ty;//设置变量
inputclk,up_down,set_enable,set_xy,reset;
reg[7:
0]tx,ty;
Initial//主支路时间初始化
begin
tx=8'b00101000;//tx=40
ty=8'b00010000;//ty=16
end
always@(posedgeset_enable)//使能端上升沿执行
begin
if(reset)//重置信号为高电平时
begin
tx=8'b00101000;//tx=40//红绿灯时间不变为初值
ty=8'b00010000;//ty=16
end
elseif(set_xy==1)//在1模式下设置主干道绿灯的值
begin
if(up_down==1)//高电平时为加设置
begin
tx=tx+1;
if(tx==8'b01100100)tx=8'b00010100;//设定上限99s
//(8'b01100011)
end
elseif(up_down==0)//低电平时为减设置
begin
tx=tx-1;
if(tx==8'b00010011)tx=8'b01100011;//设定下限20s
//(8'b00010100)
end
elsetx=tx;//时间不变
end
elseif(set_xy==0)//在0模式下设置支干道绿灯的值
begin
if(up_down==1)
begin
ty=ty+1;
if(ty==8'b00101000)ty=8'b00001010;//设定上限39s(8'b00100111)
end
elseif(up_down==0)
begin
ty=ty-1;
if(ty==8'b00001001)ty=8'b00100111;//设定下限10s(8'b00001010)
end
elsety=ty;
end
end
endmodule
显示模块
功能:
将时间信号进行译码之后显示在七段数码管上。
输入:
cp要显示的4位二进制数据
输出:
out作为七段数码管的输入信号
moduledisplay(out,cp);//子函数声明
input[3:
0]cp;//设置输入输出函数
output[6:
0]out;
reg[6:
0]out;
always@(cp)
begin
case(cp)//对应的七段码显示
4'b0000:
out<=7'b1000000;//0
4'b0001:
out<=7'b1111001;//1
4'b0010:
out<=7'b0100100;//2
4'b0011:
out<=7'b0110000;//3
4'b0100:
out<=7'b0011001;//4
4'b0101:
out<=7'b0010010;//5
4'b0110:
out<=7'b0000010;//6
4'b0111:
out<=7'b1111000;//7
4'b1000:
out<=7'b0000000;//8
4'b1001:
out<=7'b0011000;//9
default:
out=7'b1111111;
endcase
end
endmodule
分频模块
功能:
将原系统提供的50Mhz的脉冲信号进行50000000分频,得到系统所需要的秒脉冲信号。
输入clock_50系统提供的源脉冲信号50Mhz
输出clk1s经过分频之后的秒脉冲信号
moduledivide(clk1s,clock_50);//函数声明
inputclock_50;//函数定义
outputclk1s;
regclk1s;
reg[24:
0]count;
always@(posedgeclock_50)//上升沿开始执行
begin
if(count>=25'h32FFFFF)//计数到49999999的时
begin
clk1s<=~clk1s;//对原信号进行翻转
count<=25'h0000000;//计数回归初值
end
else
count<=count+1'b1;//继续恢复加计数
end
endmodule
引脚分配
dis_time[13]UnknownPIN_G157B7_N02.5V(default)
dis_time[12]UnknownPIN_D197B7_N02.5V(default)
dis_time[11]UnknownPIN_C197B7_N02.5V(default)
dis_time[10]UnknownPIN_B197B7_N02.5V(default)
dis_time[9]UnknownPIN_A197B7_N02.5V(default)
dis_time[8]UnknownPIN_F157B7_N02.5V(default)
dis_time[7]UnknownPIN_B187B7_N02.5V(default)
dis_time[6]UnknownPIN_F147B7_N02.5V(default)
dis_time[5]UnknownPIN_B177B7_N12.5V(default)
dis_time[4]UnknownPIN_A177B7_N12.5V(default)
dis_time[3]UnknownPIN_E157B7_N02.5V(default)
dis_time[2]UnknownPIN_B167B7_N12.5V(default)
dis_time[1]UnknownPIN_A167B7_N12.5V(default)
dis_time[0]UnknownPIN_D157B7_N02.5V(default)
dis_txy[13]UnknownPIN_A157B7_N12.5V(default)
dis_txy[12]UnknownPIN_E147B7_N12.5V(default)
dis_txy[11]UnknownPIN_B147B7_N12.5V(default)
dis_txy[10]UnknownPIN_A147B7_N12.5V(default)
dis_txy[9]UnknownPIN_C137B7_N12.5V(default)
dis_txy[8]UnknownPIN_B137B7_N12.5V(default)
dis_txy[7]UnknownPIN_A137B7_N12.5V(default)
dis_txy[6]UnknownPIN_F137B7_N12.5V(default)
dis_txy[5]UnknownPIN_F127B7_N12.5V(default)
dis_txy[4]UnknownPIN_G127B7_N12.5V(default)
dis_txy[3]UnknownPIN_H137B7_N12.5V(default)
dis_txy[2]UnknownPIN_H127B7_N12.5V(default)
dis_txy[1]UnknownPIN_F117B7_N12.5V(default)
dis_txy[0]UnknownPIN_E117B7_N12.5V(default)
pri_LED[1]UnknownPIN_C21B1_N02.5V(default)
pri_LED[0]UnknownPIN_B21B1_N02.5V(default)
sec_LED[1]UnknownPIN_J11B1_N12.5V(default)
sec_LED[0]UnknownPIN_J21B1_N12.5V(default)
resetUnknownPIN_H61B1_N02.5V(default)
set_enableUnknownPIN_F11B1_N02.5V(default)
set_xyUnknownPIN_H51B1_N02.5V(default)
up_downUnknownPIN_J61B1_N02.5V(default)
clkUnknownPIN_G216B6_N12.5V(default)
turn_offUnknownPIN_G41B1_N02.5V(default)
left_LED1UnknownPIN_B11B1_N02.5V(default)
left_LED2UnknownPIN_J31B1_N12.5V(default)
turnUnknownPIN_D21B1_N02.5V(default)
controlUnknownPIN_E41B1_N02.5V(default)
电子课程设计总结
这次我选择的课程题目是交通灯控制技术,原本是三个同学在一起做一个项目,变为一个人单独做一个,感觉压力大了好多更让人担忧的是大二学期学到的Verilog语言几乎忘记的差不多了,对Quartus的操作也忘干净了,所以这次赶紧补充了课本上的知识,这使我更加的紧张了。
上边是知识问题,在设计的过程中遇到问题,更可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
对我们而言,知识上的收获重要,精神上的丰收更加可喜。
挫折是一份财富,经历是一份拥有。
这次实习必将成为我人生旅途上一个非常美好的回忆!
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。