5.1实验目的

熟练掌握时序逻辑电路的设计。掌握计数器,数码管扫描显示电路以及秒表的原理。实现并仿真:
1)数码管扫描显示电路;
2)秒表电路。

5.2实验内容

(1)按照要求的解决方案,将四个输入在4个共阴极数码管上利用数码管扫描显示电路显示出来。
要求:
使用多个module实现;主模块中的代码最大化的进行精简,只用来实现各模块 间的信号传输,以及子模块的实例化;
计数器模块要使用不定位宽代码设计;
输入输出要考虑到小数点信号;
带复位信号,当复位信号为低电平时,四个数码管显示为0._0._0._0.;
仿真波形中输入用16进制显示,输出用2进制显示;
实例化代码全部使用.()来实现。
提示:先把设计图在草稿上画出来,可以大大简化代码设计(重要!)。

(2)设计秒表在4个共阴极数码管上利用上面的数码管扫描显示电路显示出来。要求显示从000.0-999.9循环计数。要求要有启动暂停信号go和复位信号rst。
提示:先把设计图在草稿上画出来,可以大大简化代码设计(重要!)。
解决方案不限,可以参考课堂上讲的思路或者书本上的思路。
(3)按照本模版撰写实验报告,版面排版要求及评分标准:

5.3数码管扫描显示电路

(1)设计代码
count.v

//计数器代码【时序电路】
`timescale 1ns / 1psmodule count #(parameter N=18)(input rst,clk,output [1:0] en);reg [N-1:0] countnum;//计数器中的变量    always @(posedge clk)if(!rst)     countnum<=0;else         countnum<=countnum+1;assign en=countnum[N-1:N-2];
endmodule

mux.v

//多路选择器 【组合电路】
`timescale 1ns / 1ps
module mux(in0,in1,in2,in3,dp,rst,en,data_select,dp_select,an);input [3:0] in0,in1,in2,in3,dp;input rst;input [1:0] en;output reg[3:0] data_select,an;output reg dp_select;always @*if(!rst)beginan<=4'b1111;dp_select<=1;data_select<=4'd0000;endelsecase(en)2'b00:begindp_select=dp[3]; an=4'b1000; data_select=in3; end2'b01:begindp_select=dp[2]; an=4'b0100; data_select=in2; end2'b10:begindp_select=dp[1]; an=4'b0010; data_select=in1; enddefault:begindp_select=dp[0]; an=4'b0001; data_select=in0; endendcase
endmodule

decode.v

`timescale 1ns / 1ps
module decode(input [3:0] data_in,input dp_in,output reg [7:0] sseg);//8根输出线always@*beginsseg=0;case(data_in)4'd0: sseg[7:1]=7'b1111110;4'd1: sseg[7:1]=7'b0110000;4'd2: sseg[7:1]=7'b1101101;4'd3: sseg[7:1]=7'b1111001;4'd4: sseg[7:1]=7'b0110011;4'd5: sseg[7:1]=7'b1011011;4'd6: sseg[7:1]=7'b1011111;    4'd7: sseg[7:1]=7'b1110000;4'd8: sseg[7:1]=7'b1111111;4'd9: sseg[7:1]=7'b1111011;4'd10: sseg[7:1]=7'b1110111;4'd11: sseg[7:1]=7'b0011111;4'd12: sseg[7:1]=7'b1001110;        4'd13: sseg[7:1]=7'b0111101;4'd14: sseg[7:1]=7'b1001111;4'd15: sseg[7:1]=7'b1000111; endcasesseg[0]=dp_in;//小数点end
endmodule

scan_led_display.v

`timescale 1ns / 1ps
module scan_led_display #(parameter M=18)(clk,rst,in3,in2,in1,in0,dp,sseg,an);input  clk, rst;input[3:0] in3,in2,in1,in0,dp;output [7:0]sseg;output [3:0] an;wire [3:0] data_in; //中间变量wire dp_in; //中间变量wire [1:0] en; //中间变量count #(.N(M)) unit1(.rst(rst),.clk(clk),.en(en));mux unit2(.in0(in0),.in1(in1),.in2(in2),.in3(in3),.dp(dp),.rst(rst),.en(en),.data_select(data_in),.an(an),.dp_select(dp_in));decode unit3(.data_in(data_in),.dp_in(dp_in),.sseg(sseg));
endmodule

(2)RTL原理图(注意该把哪个文件设成top)
把scan_led_display.v设为top。

(3)testbench代码
testbench_scan_led_display.v

`timescale 1ns / 1ps
module testbench_scan_led_display
#(parameter N1=5);
reg clk,rst;
reg[3:0] in3,in2,in1,in0,dp;
wire [7:0] sseg;
wire [3:0] an;
scan_led_display #(.M(N1)) unit
(.clk(clk),.rst(rst),.in3(in3),.in2(in2),.in1(in1),.in0(in0),.sseg(sseg),.an(an),.dp(dp));
initial beginrst=1; clk=0; dp=4'b0000;#15 rst=0;#10 rst=1;#10 rst=0;#10 rst=1;end
initial     begin in0=4'd9;         in1=4'd10;in2=4'd11;         in3=4'd12; endalways
#2 clk=~clk;
initial#200 $finish;
endmodule

(4)仿真波形

5.4秒表电路

(1)设计代码
clk_FD.v

//计数器分频模块
`timescale 1ns / 1ps
module clk_FD #(parameter N=33,M=5*10**9)(clk,rst,clk_fd);input clk,rst;output reg clk_fd;reg [N-1:0] regN;always @(posedge clk)if(!rst)clk_fd<=0;else if(regN<M-1)                    regN<=regN+1;elsebeginclk_fd<=~clk_fd;regN<=0;end
endmodule

watch.v

//计时模块
`timescale 1ns / 1ps
module watch(clk_fd,go,rst,d);input clk_fd,go,rst;output reg [3:0] d;always @(posedge clk_fd)if(!rst)d<=4'd0;else if(!go)d<=d;else if(d<4'd9)d<=d+4'd1;elsed<=4'd0;
endmodule

second_watch.v

//秒表计时模块
`timescale 1ns / 1ps
module second_watch #(parameter scan_time=18,N1=33,M1=5*10**9,N2=29,M2=5*10**8,N3=26,M3=5*10**7,N4=23,M4=5*10**6)
(clk,go,rst,sseg,an);
input clk,go,rst;
output [7:0] sseg;
output [3:0] an;
wire [3:0] in3,in2,in1,in0;
wire clk_001HZ,clk_01HZ,clk_1HZ,clk_10HZ;
//分频模块实例化4次
clk_FD #(.N(N1),.M(M1)) FD1(.clk(clk),.rst(rst),.clk_fd(clk_001HZ));  //100秒
clk_FD #(.N(N2),.M(M2)) FD2(.clk(clk),.rst(rst),.clk_fd(clk_01HZ));  //10秒
clk_FD #(.N(N3),.M(M3)) FD3(.clk(clk),.rst(rst),.clk_fd(clk_1HZ));  //1秒
clk_FD #(.N(N4),.M(M4)) FD4(.clk(clk),.rst(rst),.clk_fd(clk_10HZ));  //0.1秒
//计时模块实例化4次
watch w1(.clk_fd(clk_001HZ),.go(go),.rst(rst),.d(in3));
watch w2(.clk_fd(clk_01HZ),.go(go),.rst(rst),.d(in2));
watch w3(.clk_fd(clk_1HZ),.go(go),.rst(rst),.d(in1));
watch w4(.clk_fd(clk_10HZ),.go(go),.rst(rst),.d(in0));
//实例化数码管扫描模块
scan_led_display #(.M(scan_time)) scan(.clk(clk),.rst(rst),.in3(in3),.in2(in2),.in1(in1),.in0(in0),.dp(4'b0010),.sseg(sseg),.an(an));
endmodule

(2)RTL原理图(注意该把哪个文件设成top)
把second_watc.v和testbench_second_watch.v设为top。

(3)testbench代码

`timescale 1ns / 1ps
module testbench_second_watch;
reg clk,go,rst;
wire[7:0] sseg;
wire[3:0] an;
second_watch #(.scan_time(2),.N1(2),.M1(2),.N2(2),.M2(2),.N3(2),.M3(2),.N4(2),.M4(2))
sw(.clk(clk),.go(go),.rst(rst),.sseg(sseg),.an(an));initial begingo=1; clk=0;#20 go=0;#5 go=1;endinitialbeginrst=1;#5 rst=0;#2 rst=1;endalways #2 clk=~clk;initial #100 $finish;
endmodule

(4)仿真波形

实验五 数码管扫描显示电路相关推荐

  1. 四位共阳极数码管显示函数_初学者,求助!!设计一个4位LED数码管动态扫描显示电路,用...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; ...

  2. 数码管显示电路分析-74hc138+74hc164

    1.方案选择 数码管的显示电路有两种方案,可以用数码管显示专用IC,如simHT16K33:也可以用74HC138和74HC164两个芯片来分别进行位选和段选.前者可以节省CPU资源,只需通过IIC等 ...

  3. 基于单片机的LED数码管循环移位显示

    单片机系统基础实验--LED数码管循环移位显示 第一部分 前言 第二部分 数码管的原理构成 LED数码管的结构 LED数码管的工作原理 LED数码管的字形编码 LED数码管的控制方式 第三部分 设计项 ...

  4. 实验九、 键盘扫描及数码管显示实验

    实验九. 键盘扫描及数码管显示实验 1.实验目的 学习了解键盘扫描的基本原理. 掌握通过并行接口芯片对键盘进行扫描并在多位数码管显示数字的方法. 2.实验内容 编写程序,实现如下功能:初始时数码管无显 ...

  5. 数字系统实验—第13周任务(3位数码管动态扫描显示实验含工程与优化)

    数字系统实验--第13周任务 任务书 0.简介 1. 实验操作:1周 2. 完成并在线提交文档(100%) 日志(系统功能描述) 报告(目的 设计 实现 总结) 3. 三位数码管数据显示实验在线验收 ...

  6. 实验9、键盘扫描及数码管显示实验

    实验内容 基础部分: 1.编写程序,实现如下功能:初始时数码管无显示:第一次按下键盘时,在最右侧数码管对应的十六进制数字:以后每次按下键盘,则将当前显示的数字全部向左移动一位(最左侧的数字移出数码管) ...

  7. PLC实验五(LED数码管显示控制)

    PLC实验五(LED数码管显示控制)

  8. LED驱动IC,数显/数码管显示驱动芯片-VK1S38A,LED驱动控制电路,内部集成有MCU 数字接口、数据锁存器、LED驱动、键盘扫描等电路

    产品型号:VK1S38A 产品品牌:VINKA/永嘉微电 封装形式:SSOP24 产品年份:新年份 概述: VK1S38A是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有M ...

  9. LED数码管显示驱动芯片-VK1668,LED驱动控制电路,内部集成有MCU数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路

    产品型号:VK1668 产品品牌:VINKA/永嘉微电 封装形式:SOP24/SSOP24 产品年份:新年份 概述 VK1668 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部 ...

最新文章

  1. 1.3 计划需求控制
  2. openstack——horizon篇
  3. 车载电脑中控软件_ 车载手机支架怎么选?教你3招,开车的时候方便快捷
  4. 6.安装使用vue-quill-editor
  5. java并发编程之HappenBefore
  6. 扩展JS格式化(Format)功能及评论树
  7. 【SSH网上商城】struts搭建及实例
  8. 第四季 word vba
  9. linux shell将字符串分割数组
  10. 单片机实验报告-片内外RAM的数据转移
  11. FPS 每秒传输帧数(Frames Per Second)
  12. python笔记:7.2.2.2 一元多因素方差分析_交互效应(购房面积影响因素交互效应)
  13. 计算机软件专利安全期刊论文,安全与环境学报
  14. 在努力的途中 忤逆满路荆棘
  15. C++读入用逗号隔开的数据
  16. 达观电网故障知识图谱,三大功能全面提升电网故障处置效率
  17. SQL server 语句删除部分数据
  18. 学习C语言需要学oracle,什么是C语言? 为什么要学习C语言?
  19. Unity BIM模型导入调研
  20. R语言数据科学:变量选择(一)逐步回归法

热门文章

  1. 【知识分享】Modbus通信协议详解
  2. 基因与疾病百年研究进展
  3. 非编系统-非线性编辑系统
  4. mySql中union all 及max,ifnull用法
  5. 基于spring的系统设计与开发ADD ME
  6. sketchup8基础教程草图大师初学者《现代茶几模型》
  7. 爬虫python可以干嘛_python爬虫可以用来做什么?
  8. 电梯卡数据分析修改延期梯控
  9. (七)ArcCatalog应用基础——图层操作与数据输出
  10. 华为实现中:STP运行机制实例分析一