专业网站优化电话,优酷的网站头怎么做的,wordpress邮箱验证失败,群辉安装wordpress一、概述
在我们的日常开发中#xff0c;数字显示的领域中用得最多的就是数码管#xff0c;这篇文章也是围绕数码管的静态显示和动态显示进行一个讲解。
1、理论
#xff08;1#xff09;数码管原理图
在对数码管进行相关控制时#xff0c;其实就是对于8段发光二极管和…一、概述
在我们的日常开发中数字显示的领域中用得最多的就是数码管这篇文章也是围绕数码管的静态显示和动态显示进行一个讲解。
1、理论
1数码管原理图
在对数码管进行相关控制时其实就是对于8段发光二极管和一个位选信号进行控制也就是我们熟悉的段选和位选。段选就包括a,b,c,d,e,f,g,h这八个二极管位选就是选择某个二极管工作的一个简单引脚。 2、共阴极和共阳极的判断
市场上我们常见的数码管有共阴极啊和共阳极两种信号其外观上没有什么区别都是通过原理图进行判断和区分两种数码挂对应的驱动方式也不一样。共阴极是高电平驱动共阳极是低电平驱动。所谓的共阴极和共阳极实际上就是看公共引脚接在正极还是负极上。 3、本次使用的数码管原理图
其实在原理图中并没有明确说明是共阴极还是共阳极我们需要通过SEL位选信号进行判断。在最下面的三极管我们可以看到只有当SELx_T为低电平时三极管才会接通所以这里通过判断是共阳极通过低电平触发。 二、工程实现
1、单个数码管静态显示
1、设计文件
新建seg.v文件如下
这里不需要使用任何时序功能只是简单显示一个数字直接就用连续赋值进行实现。这里代码过于简单就不去进行仿真和下板验证了。
module top(output seg_sel,output [7:0] seg_dual);assign seg_sel1b0;//选择第一个数码管
assign seg_dual8b11_000_000;//数码管显示0 2、单个数码管实现动态显示
1、设计文件
//分频器
module seg0(input clk,input rst_n,input seg_sel,//位选output reg [7:0] seg_dual0//段选
);
localparam ZERO 8b11100_0000, //共阳极段码ONE 8b11111_1001,TWO 8b11010_0100,THREE 8b11011_0000,FOUR 8b11001_1001,FIVE 8b11001_0010,SIX 8b11000_0010,SEVEN 8b11111_1000,EIGHT 8b11000_0000,NINE 8b11001_0000,A 8b11000_1000,b 8b11000_0011,c 8b11100_0110,d 8b11010_0001,E 8b11000_0110,f 8b11000_1110;
reg [26:0] cnt;
wire add_cnt;
wire end_cnt;
reg [4:0] flag;
wire add_flag;
wire end_flag;
always (posedge clk or negedge rst_n)beginif(!rst_n)cnt0;else if(add_cnt)beginif(end_cnt)cnt0;elsecntcnt1b1;end
end
assign add_cnt1b1;
assign end_cntadd_cnt (cnt50_000_000-1);always (posedge clk or negedge rst_n)beginif(!rst_n)flag0;else if(add_flag)beginif(end_flag)flag0;elseflagflag1b1;end
end
assign add_flagend_cnt;
assign end_flagadd_flag (flag16-1);always (posedge clk or negedge rst_n)beginif(!rst_n)seg_dual08b1111_1111;else begincase (flag)4d0:seg_dual0ZERO ;4d1:seg_dual0ONE ;4d2:seg_dual0TWO ; 4d3:seg_dual0THREE;4d4:seg_dual0FOUR ;4d5:seg_dual0FIVE ;4d6:seg_dual0SIX ;4d7:seg_dual0SEVEN;4d8:seg_dual0EIGHT;4d9:seg_dual0NINE ;4d10:seg_dual0A ;4d11:seg_dual0b ;4d12:seg_dual0c;4d13:seg_dual0d;4d14:seg_dual0E ;4d15:seg_dual0f ;default: ;endcaseend
end
endmodule
2、测试文件
//定义时间尺度
timescale 1ns/1ns
module seg_tb ;//输入信号定义
reg clk;
reg rst_n;wire [7:0] seg_dual0;
wire seg_sel;
defparam seg0_inst.TIME_1s500;
//模块例化
seg0 seg0_inst(/*input */.clk (clk ),/*input */.rst_n (rst_n ),/*output*/.seg_sel (seg_sel ),/*output*/.seg_dual0 (seg_dual0));
//激励信号产生
parameter CLK_CLY 20;
//时钟
initial clk1;
always #(CLK_CLY/2)clk~clk;//复位
initial beginrst_n 1b0;#(CLK_CLY*3);#5;//复位结束避开时钟上升沿rst_n 1b1;
end
endmodule
3、波形图仿真
在波形图中我们可以看到段选从8b11_000_000——8b11_000_1110也就是从0——F动态显示。