当前位置:首页 > 新闻资讯 > FPGA之家动态 >

FPGA入门--七段数码管显示

时间:2024-07-27      来源:网络搜集 关于我们 0

本教程将教给大家如何使用北邮版FPGA开发板上的2个七段数码管。

七段数码管是电子设计中常用的一种LED显示器,可以显示数字0-9,以及一些其他符号,七段数码管根据内部发光二极管的连接方式,可以分为共阴极和共阳极两种。

七段数码管中,七个LED的编号顺序是固定的,如下图所示,点亮LED的位置不同,显示的符号也就不同。

在实际应用中,从节约端口数量、降低成本等角度考虑,经常将多个七段数码管并联,采用动态扫描的方式,通过位选信号控制各个七段数码管轮流点亮,利用人眼视觉暂留现象,实现多个七段数码管同时显示信息的效果。

七段数码管的动态扫描,用单片通过C语言编程时比较复杂,但在FPGA中,利用Verilog语言本身的并行机制,这件事倒变得简单了。

下图为北邮版FPGA开发板中2个七段数码管的连接方式,这2个七段数码管是并联关系,但位线相对独立,通过T2和T3控制2个七段数码管的阴极公共端,当T2=1时,允许对应的七段数码管工作。

使用Verilog操作2个七段数码管的例程如下,这段代码是通过拨码开关来控制七段数码管显示0-9和A-F的,用拨码开关的低4位和高4位拨码分别控制2个七段数码管,读者可仿照FPGA入门--建立第一个工程,自己来建立新的工程完成相关操作。

module seg_scan(clk_50M,rst_button, switch, digit_seg, digit_cath);

input clk_50M; //板载50M晶振

input rst_button;

input [7:0] switch;

output reg [7:0] digit_seg; //七段数码管的段选端

output [1:0] digit_cath; //2个数码管的片选端

wire reset; //复位按键

assign reset = rst_button;

//计数分频,通过读取32位计数器div_count不同位数的上升沿或下降沿来获得频率不同的时钟

reg [31:0] div_count;

always @(posedge clk_50M,posedge reset)

begin

    if(reset)

        div_count <= 0;   //如果按下复位按键,计数清零

    else

        div_count <= div_count + 1;

end

//拨码开关控制数码管显示,每4位拨码开关控制一个七段数码管

wire [7:0] digit_display;

assign digit_display = switch;

wire [3:0] digit;

always @(*)      //对所有信号敏感

begin

    case (digit)

        4h0:  digit_seg <= 8b11111100; //显示0~F

        4h1:  digit_seg <= 8b01100000;  

        4h2:  digit_seg <= 8b11011010;

        4h3:  digit_seg <= 8b11110010;

        4h4:  digit_seg <= 8b01100110;

        4h5:  digit_seg <= 8b10110110;

        4h6:  digit_seg <= 8b10111110;

        4h7:  digit_seg <= 8b11100000;

        4h8:  digit_seg <= 8b11111110;

        4h9:  digit_seg <= 8b11110110;

        4hA:  digit_seg <= 8b11101110;

        4hB:  digit_seg <= 8b00111110;

        4hC:  digit_seg <= 8b10011100;

        4hD:  digit_seg <= 8b01111010;

        4hE:  digit_seg <= 8b10011110;

        4hF:  digit_seg <= 8b10001110;

    endcase

end

//通过读取32位计数器的第10位的上升沿得到分频时钟,用于数码管的扫描

reg segcath_holdtime;

always @(posedgediv_count[10], posedge reset)

begin

if(reset)

     segcath_holdtime <= 0;

else

     segcath_holdtime <= ~segcath_holdtime;

end

//7段数码管位选控制

assign digit_cath ={segcath_holdtime, ~segcath_holdtime};

// 相应位数码管段选信号控制

assign digit =segcath_holdtime ? digit_display[7:4] : digit_display[3:0];

endmodule

在这里,我们并没有给出管教分配表,也希望读者能自己动脑来完成,北邮版FPGA开发板的管脚对照表如下表所示。

迎接另一个晨曦,带来全新空气

气息改变情味不变,茶香飘满情谊

我家大门常打开,开放怀抱等你

拥抱过就有了默契,你会爱上这里

不管远近都是客人请不用客气

相约好了在一起,我们欢迎你

我家大门常打开,开怀容纳天地

岁月绽放青春笑容,迎接这个日期

天大地大都是朋友请不用客气

画意诗情带笑意,只为等待你

相关链接

口袋型FPGA开发板--《数字电路》课程的辅助教学工具

FPGA入门--安装集成开发环境Quartus

FPGA入门--建立第一个工程

FPGA入门--在FPGA中实现8051单片机

FPGA入门--点亮LED

让中学生一天学会FPGA开发

在Verilog中何时用wire,何时用reg?

Verilog中阻塞和非阻塞赋值原则

宴会取消,酒店拒不退钱!公司一怒之下喊来100个流浪汉…


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言