- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
交通灯控制器的设计与实现
学生姓名: 旭
班级学号: 133
指导老师:
实验3
一.实验名称:交通灯控制器的设计与实现
二.实验学时:6学时
三.实验目的
1)了解交通灯管理的基本工作原理。
熟悉计数器/定时器的工作方式及应用编程。
掌握多位LED显示的方法。
设计一个用于十字路口的交通灯控制器。
基本要求:
和方向各有一组红黄绿灯用于指挥交通红黄绿的持续时间分别为25s5s,20s。 当有紧急情况(如消防车)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,正常工作。 一组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间。
图1. 交通灯的时序分析
2.系统设计思路:
整个系统设计如图2所示,该系统主要由分频模块、计数模块、数码管显示控制模块、交通灯控制模块以及显示电路设备组成。其中分频模块主要将系统输入的基准时钟信号转换为1 Hz以及适应于数码管显示的的激励信号,驱动计数模块和两个控制模块工作。两个控制模块根据计数器的计数情况对交通灯的亮灭及数码管的显示时间进行控制。对于紧急情况,只需在计数模块中添加一个控制功能HOLD,当HOLD=1时,计数功能暂停。
图2. 交通灯系统模块图
具体步骤
3.1.根据实验要求作预习报告。
3.2.建立工程,设计程序:
1)新建工程;
2)新建verilog HDL文件(注:文件名和模块名称要和工程名保持一致)。
3)调试程序:见实验附录
3.3. 配置管脚:
参照实验指导中的管脚图,配置管脚。
3.4.下载到开发板,观察实验结果,尝试创造自己的实验方案:
3.5.完成实验报告。
实验结果
八.实验附录
代码:
module shiyan3(clk,led_dig,led_seg,ji);//led_seg 0是a,7位是g 1亮//led_dig 从左到右 0亮//20*10 6 HZ
input ji,clk;
output led_dig,led_seg;
reg[0:7]led_dig;
reg[0:7]led_seg;
integer shu;
reg oneHz;
reg [0:7]a;
reg [0:3]ge;
reg [0:3]shi;
reg [0:3]ge1;
reg [0:3]shi1;
reg xianshi;
reg [0:9] jixianshi;
reg [0:2]n;
reg [3:0]l;
reg [0:2]R;
reg [0:2]L;
always @(posedge clk)
begin
if(ji)
begin oneHz=oneHz;end
else
begin
if(shu9999999)
begin
shu=shu+1;
end
else
begin
shu=0;
oneHz=~oneHz;
end
end
end
always @(posedge clk)
begin
if(jixianshi999)
begin
jixianshi=jixianshi+1;
end
else
begin
jixianshi=0;
xianshi=~xianshi;
end
end
always @(posedge oneHz)//当红绿黄灯循环交替一次所用时间为50s,设置变量a控制循环;
begin
if(a==0)
begin
a=50;
end
else
begin
a=a-1;
end
end
always @(posedge clk)
begin //用四个数码管显示A,B方向时间倒计时
if (a4)
begin
shi=0; //根据a的循环A方向的十位数码管倒计时显示0
ge=(a+1)%10; //根据a的循环A方向的个位数码管倒计时显示5-0;
shi1=0; //根据a的循环B方向的十位数码管倒计时显示0
ge1=(a+1)%10;//根据a的循环B方向的个位数码管倒计时显示5-0;
end
else if (a3a25)
begin
l=a-4;
shi=l/10;
ge=l%10;
shi1=(a+1)/10;
ge1=(a+1)%10;
end
else if (a24a30)
begin
shi=0;
ge=(a-25)%10;
shi1=0;
ge1=(a-
文档评论(0)