大业商务网 知识中心
  • 产品
  • 公司
首页> 知识中心 > verilog数码管显示 请问一下verilog怎样写数码管显示?

verilog数码管显示 请问一下verilog怎样写数码管显示?

1, 请问一下verilog怎样写数码管显示?



分出两个输出端口,一个控制段码一个是位码控制,下面是个完整程序
//数码管恒定显示0到7
module seg2(clk,rst,dataout,en);
input clk,rst;
output wire [7:0] dataout;
output wire [7:0] en;
reg [15:0] cnt_scan;
reg [3:0] data4;
reg [7:0] dataout_xhdl1;
reg [7:0] en_xhdl;
assign dataout=dataout_xhdl1;
assign en=en_xhdl;
always@(posedge clk or negedge rst)
begin
if(rst==0)
cnt_scanelse
cnt_scancase(cnt_scan[15:13]) //数码管使能端
0:en_xhdl1:en_xhdl2:en_xhdl3:en_xhdl4:en_xhdl5:en_xhdl6:en_xhdl7:en_xhdldefault:en_xhdlendcase
case(en_xhdl) //数码管对应到数字
8"b11111110:data48"b11111101:data48"b11111011:data48"b11110111:data48"b11101111:data48"b11011111:data48"b10111111:data48"b01111111:data4default:data4endcase
case(data4) //数码管显示数字
4"b0000:dataout_xhdl14"b0001:dataout_xhdl14"b0010:dataout_xhdl14"b0011:dataout_xhdl14"b0100:dataout_xhdl14"b0101:dataout_xhdl14"b0110:dataout_xhdl14"b0111:dataout_xhdl14"b1000:dataout_xhdl14"b1001:dataout_xhdl14"b1010:dataout_xhdl14"b1011:dataout_xhdl14"b1100:dataout_xhdl14"b1101:dataout_xhdl14"b1110:dataout_xhdl14"b1111:dataout_xhdl1default:dataout_xhdl1endcase
end
endmodule

2, verilog中有关显示数码管的问题,很简单~



就那那种丑丑的七个HEX display来说吧,你给他一个七位长的二级制,七位对应display上的七格,0就是亮,1就是不亮。(有的是反过来的)
拉倒下面看那个表啦
表里的abcdefg对应的是七个segment
code如下
module SevenSegmentDisplayDecoder(ssOut, nIn);
output reg [6:0] ssOut;
input [3:0] nIn;
// ssOut format {g, f, e, d, c, b, a}
always @(nIn)
case (nIn)
4"h0: ssOut = 7"b0111111;
4"h1: ssOut = 7"b0000110;
4"h2: ssOut = 7"b1011011;
4"h3: ssOut = 7"b1001111;
4"h4: ssOut = 7"b1100110;
4"h5: ssOut = 7"b1101101;
4"h6: ssOut = 7"b1111101;
4"h7: ssOut = 7"b0000111;
4"h8: ssOut = 7"b1111111;
4"h9: ssOut = 7"b1100111;
4"hA: ssOut = 7"b1110111;
4"hB: ssOut = 7"b1111100;
4"hC: ssOut = 7"b0111001;
4"hD: ssOut = 7"b1011110;
4"hE: ssOut = 7"b1111001;
4"hF: ssOut = 7"b1110001;
default: ssOut = 7"b1001001;
endcase
endmodule

3, verilog数码管静态显示。。。。。。可以按照这程序给我说说它的运行...



首先,译码的这段应该能看懂吧?有注释的,输出信号的不同的值,会使得数码管显示出不同的内容,就是注释说的 0-9 a-f。
4"h0 : sm_seg = 8"hc0; //显示"0"
4"h1 : sm_seg = 8"hf9; //显示"1"
4"h2 : sm_seg = 8"ha4; //显示"2"
4"h3 : sm_seg = 8"hb0; //显示"3"
4"h4 : sm_seg = 8"h99; //显示"4"
4"h5 : sm_seg = 8"h92; //显示"5"
4"h6 : sm_seg = 8"h82; //显示"6"
4"h7 : sm_seg = 8"hf8; //显示"7"
4"h8 : sm_seg = 8"h80; //显示"8"
4"h9 : sm_seg = 8"h90; //显示"9"
4"ha : sm_seg = 8"h88; //显示"a"
4"hb : sm_seg = 8"h83; //显示"b"
4"hc : sm_seg = 8"hc6; //显示"c"
4"hd : sm_seg = 8"ha1; //显示"d"
4"he : sm_seg = 8"h86; //显示"e"
4"hf : sm_seg = 8"h8e; //显示"f"
那么输出 sm_seg 是怎么变化的呢? 它的变化取决于 disp_dat 的变化:case (disp_dat)
那么再看disp_data是如何变化的呢?看下面的代码:
always @ (posedge clk )
begin count = count + 1"b1;
sm_bit = 8"b00000000;
end
always @ (count[24])
begin
disp_dat = {count[28:25]};
end
当时钟的每个上升沿到来的时候,计数器 count都会自动加1,如下:
count: 0000...00 37个0,因为计数器是37位的,加1变成:
count: 0000...01 继续加1
count: 0000...10 继续
count: 0000...11
一直累积到第24bit发生变化时,即第24位从0跳转到1,或是从1跳转到0,都会把计数器的第28:25位的值付给disp_dat。
disp_dat的值的变化就会导致输出寄存器sm_seg的变化,导致数码管的显示内容发生变化。
所以总的来说,就是数码管会从0-9 a-f的自动跳转显示,至于间隔时间多少,要看你的时间基数(就是时钟周期)多长,再来推算计数器技术翻转时间。

4, 最基本的 verilog 数码管显示程序,为啥不对啊



首先要检查引脚有没有锁定对,然后要知道数码管是是共阴极的还是共阳极的,然后看看位选是0有效还是1有效
module clock(clk,dig,seg);
input clk;
output wire[7:0]dig;
output wire[7:0]seg;
assign dig=8"b0;
assign seg=8"hf9;
endmodule
你后面发的那个程序计数器和d根本就没用,如果不确定位选是0有效还是1有效就把dig=8"h10;

相关概念


dig

dig    DIG传媒集团   DIG(Data mining and Intelligent panoramic Media Group)——数据挖掘与全景智能传播媒体集团。

seg

飞碟之父--约翰瑟尔(JOHN SEARL)是SEG--瑟尔自然能的创始人。 SEG(Searl-EffectGenerator)是一部不需要能源的发电机,它可以收集能源,但不需要使用任何燃料。 SEG瑟尔自然能:永恒能源!宇宙资本!一次性能源终结者! 约翰瑟尔先生正推动人类从“电力文明”时代迈进到使用永恒清洁新能源的“磁力文明”与“光力文明”新时代!

免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。

版权所有 大业商务网