【FPGA零基础学习之旅#11】数码管动态扫描

这篇具有很好参考价值的文章主要介绍了【FPGA零基础学习之旅#11】数码管动态扫描。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🎉欢迎来到FPGA专栏~数码管动态扫描


  • ☆* o(≧▽≦)o *☆~我是小夏与酒🍹
  • 博客主页:小夏与酒的博客
  • 🎈该系列文章专栏:FPGA学习之旅
  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️
    【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

一、效果演示

🥝Spirit_V2开发板按键控制数码管:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🥝AV4开发板数码管动态扫描:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

二、电路结构

【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
上图电路结构的子模块介绍:

名称 功能描述
divider 分频产生1KHz的扫描时钟
shift6 6位循环移位寄存器
MUX6 数据输入选择
MUX2 使能选择
LUT 数据译码器

由于各子模块的代码量不会特别大,因此将在一个文件中编写。

三、代码详解

先上代码:

smg_HEX.v:

module smg_HEX(
		input 					Clk,		//50M
		input 					Rst_n,		//复位
		input 					En,			//数码管显示使能
		input 		[23:0]		disp_data,	//6 × 4 = 24(6个数码管,数据格式为hex,总共输入24位)
		output reg 	[7:0]		seg, 		//数码管段选
		output 		[5:0]		sel	 		//数码管位选(数码管选择)
);
	reg [5:0]sel_r;

//--------<分频器>--------
	reg [14:0]divider_cnt;//25000-1
	
	reg clk_1K;
	
	reg [3:0]data_tmp;//待显示数据缓存
	
	//1KHz分频计数器
	always@(posedge Clk or negedge Rst_n)begin
		if(!Rst_n)
			divider_cnt <= 15'd0;
		else if(!En)
			divider_cnt <= 15'd0;
		else if(divider_cnt == 24999)
			divider_cnt <= 15'd0;
		else
			divider_cnt <= divider_cnt + 1'b1;
	end
	
	//1KHz扫描时钟
	always@(posedge Clk or negedge Rst_n)begin
		if(!Rst_n)
			clk_1K <= 1'b0;
		else if(divider_cnt == 24999)
			clk_1K <= ~clk_1K;
		else
			clk_1K <= clk_1K;
	end
	
//--------<6位循环移位寄存器>--------	
	always@(posedge clk_1K or negedge Rst_n)begin
		if(!Rst_n)
			sel_r <= 6'b000_001;
		else if(sel_r == 6'b100_000)
			sel_r <= 6'b000_001;
		else
			sel_r <= sel_r << 1;
	end	

//--------<6选1多路器>--------		
	always@(*)begin
		case(sel_r)
			6'b00_0001:data_tmp = disp_data[3:0];
			6'b00_0010:data_tmp = disp_data[7:4];
			6'b00_0100:data_tmp = disp_data[11:8];
			6'b00_1000:data_tmp = disp_data[15:12];
			6'b01_0000:data_tmp = disp_data[19:16];
			6'b10_0000:data_tmp = disp_data[23:20];
			default:data_tmp = 4'b0000;
		endcase
	end

//--------<LUT>--------		
	always@(*)begin
		case(data_tmp)
			4'h0:seg = 8'hc0;
			4'h1:seg = 8'hf9;
			4'h2:seg = 8'ha4;
			4'h3:seg = 8'hb0;
			4'h4:seg = 8'h99;
			4'h5:seg = 8'h92;
			4'h6:seg = 8'h82;
			4'h7:seg = 8'hf8;
			4'h8:seg = 8'h80;
			4'h9:seg = 8'h90;
			4'ha:seg = 8'h88;
			4'hb:seg = 8'h83;
			4'hc:seg = 8'hc6;
			4'hd:seg = 8'ha1;
			4'he:seg = 8'h86;
			4'hf:seg = 8'h8e;
		endcase
	end
		
//--------<2选1多路器>--------		
	assign sel = (En)?(~sel_r):6'b111_111;
		
endmodule

需要注意端口列表:

module smg_HEX(
		input 					Clk,		//50M
		input 					Rst_n,		//复位
		input 					En,			//数码管显示使能
		input 		[23:0]		disp_data,	//6 × 4 = 24(6个数码管,数据格式为hex,总共输入24位)
		output reg 	[7:0]		seg, 		//数码管段选
		output 		[5:0]		sel	 		//数码管位选(数码管选择)
);

En使能信号只有在高电平时,数码管显示。加入使能信号端口是为了低功耗设计的实现。

接下来做仿真测试:

smg_HEX_tb.v:

`timescale 1ns/1ns
`define clock_period 20

module smg_HEX_tb;
	
	reg 				Clk;	//50M
	reg 				Rst_n;
	reg 				En;		//数码管显示使能
	reg		[23:0]		disp_data;
	wire 	[7:0]		seg; 	//数码管段选
	wire 	[5:0]		sel;	//数码管位选(数码管选择)
	
	smg_HEX Usmg_HEX(
		.Clk(Clk),				//50M
		.Rst_n(Rst_n),
		.En(En),				//数码管显示使能
		.disp_data(disp_data),
		.seg(seg), 				//数码管段选
		.sel(sel)	 			//数码管位选(数码管选择)
	);

	initial Clk = 1;
	always#(`clock_period / 2) Clk =~Clk;
	
	initial begin
		Rst_n = 1'b0;
		En = 1;
		disp_data = 24'h123456;
		#(`clock_period*20);
		Rst_n = 1'b1;
		#(`clock_period*20);
		#20000000;
		disp_data = 24'h89abcd;
		#20000000;
		$stop;
	end

endmodule

仿真结果:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

RTL:

【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

四、AV4开发板演示

上述代码为数码管动态扫描的驱动代码,使用时需要添加上层模块。

AV4开发板开箱视频:【FPGA-AV4】火热售卖中!欢迎大家抢购!小月电子~(含购买链接)。

在AV4开发板上的实现,主要使用到了ISSP调试工具,ISSP的ip核创建:

🥝创建一个新的ip核:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🥝选择ISSP,选择好Verilog HDL和路径:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🥝该项目只需要用到source端口:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🥝下一步:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🥝完成:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

issp.v:

// megafunction wizard: %In-System Sources and Probes%VBB%
// GENERATION: STANDARD
// VERSION: WM1.0
// MODULE: altsource_probe 

// ============================================================
// File Name: issp.v
// Megafunction Name(s):
// 			altsource_probe
//
// Simulation Library Files(s):
// 			altera_mf
// ============================================================
// ************************************************************
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
//
// 13.0.0 Build 156 04/24/2013 SJ Full Version
// ************************************************************

//Copyright (C) 1991-2013 Altera Corporation
//Your use of Altera Corporation's design tools, logic functions 
//and other software and tools, and its AMPP partner logic 
//functions, and any output files from any of the foregoing 
//(including device programming or simulation files), and any 
//associated documentation or information are expressly subject 
//to the terms and conditions of the Altera Program License 
//Subscription Agreement, Altera MegaCore Function License 
//Agreement, or other applicable license agreement, including, 
//without limitation, that your use is for the sole purpose of 
//programming logic devices manufactured by Altera and sold by 
//Altera or its authorized distributors.  Please refer to the 
//applicable agreement for further details.

module issp (
	probe,
	source);

	input	  probe;
	output	[23:0]  source;

endmodule

// ============================================================
// CNX file retrieval info
// ============================================================
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
// Retrieval info: CONSTANT: ENABLE_METASTABILITY STRING "NO"
// Retrieval info: CONSTANT: INSTANCE_ID STRING "NONE"
// Retrieval info: CONSTANT: PROBE_WIDTH NUMERIC "0"
// Retrieval info: CONSTANT: SLD_AUTO_INSTANCE_INDEX STRING "YES"
// Retrieval info: CONSTANT: SLD_INSTANCE_INDEX NUMERIC "0"
// Retrieval info: CONSTANT: SOURCE_INITIAL_VALUE STRING " 0"
// Retrieval info: CONSTANT: SOURCE_WIDTH NUMERIC "24"
// Retrieval info: USED_PORT: probe 0 0 0 0 INPUT NODEFVAL "probe"
// Retrieval info: USED_PORT: source 0 0 24 0 OUTPUT NODEFVAL "source[23..0]"
// Retrieval info: CONNECT: @probe 0 0 0 0 probe 0 0 0 0
// Retrieval info: CONNECT: source 0 0 24 0 @source 0 0 24 0
// Retrieval info: GEN_FILE: TYPE_NORMAL issp.v TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL issp.inc TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL issp.cmp TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL issp.bsf TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL issp_inst.v TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL issp_bb.v TRUE
// Retrieval info: LIB_FILE: altera_mf

将该ip核添加到项目文件中,并在顶层文件中例化模块:

module smg_ISSP(
		input 					Clk,		//50M
		input 					Rst_n,		//复位
		output 	 	[7:0]		seg, 		//数码管段选
		output 		[5:0]		sel	 		//数码管位选(数码管选择)
);

	wire [23:0]disp_data;
	
	smg_HEX Usmg_HEX(
		.Clk(Clk),				//50M
		.Rst_n(Rst_n),			//复位
		.En(1'b1),				//数码管显示使能
		.disp_data(disp_data),	//6 × 4 = 24(6个数码管,数据格式为hex,总共输入24位)
		.seg(seg), 				//数码管段选
		.sel(sel)	 			//数码管位选(数码管选择)
	);
	
	issp Uissp(
		.probe(),
		.source(disp_data)
	);
	
endmodule

将上述程序配置好之后,数码管显示如下:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

当程序配置好之后,使用ISSP调试工具,打开步骤:
🍋在Tools中打开:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🍋未发现设备,先点击ok:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

🍋在Hardware中选择对应的设备:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🍋将数据显示格式调整为hex格式:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🍋将数据改为123456:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🍋测试结果:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🍋将数据改为ABCDEF:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
🍋测试结果:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

五、Spirit_V2开发板演示

Spirit_V2开发板介绍:【FPGA-Spirit_V2】小精灵V2开发板初使用。

接下来在Spirit_V2开发板上实验,通过按键控制数码管亮灭,实现简单的低功耗设计
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
先上RTL视图,便于理解编程思路:
【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2
按键信号经过按键消抖模块之后,有效信号进入数码管数据和使能模块,最后信号进入数码管驱动模块

按键消抖模块的详细讲解:【FPGA零基础学习之旅#10】按键消抖模块设计与验证(一段式状态机实现)。

接下来为各模块的代码:

KeyFilter.v:

//
//模块:按键消抖模块
//key_state:输出消抖之后按键的状态
//key_flag:按键消抖结束时产生一个时钟周期的高电平脉冲
//
module KeyFilter(
	input Clk,
	input Rst_n,
	input key_in,
	output reg key_flag,
	output reg key_state
);

	//按键的四个状态
	localparam
		IDLE 		= 4'b0001,
		FILTER1 	= 4'b0010,
		DOWN 		= 4'b0100,
		FILTER2 	= 4'b1000;

	//状态寄存器
	reg [3:0] curr_st;
	
	//边沿检测输出上升沿或下降沿
	wire pedge;
	wire nedge;
	
	//计数寄存器
	reg [19:0]cnt;
	
	//使能计数寄存器
	reg en_cnt;
	
	//计数满标志信号
	reg cnt_full;//计数满寄存器
	
//------<边沿检测电路的实现>------
	//边沿检测电路寄存器
	reg key_tmp0;
	reg key_tmp1;
	
	//边沿检测
	always@(posedge Clk or negedge Rst_n)begin
		if(!Rst_n)begin
			key_tmp0 <= 1'b0;
			key_tmp1 <= 1'b0;
		end
		else begin
			key_tmp0 <= key_in;
			key_tmp1 <= key_tmp0;
		end	
	end
		
	assign nedge = (!key_tmp0) & (key_tmp1);
	assign pedge = (key_tmp0)  & (!key_tmp1);

//------<状态机主程序>------	
	//状态机主程序
	always@(posedge Clk or negedge Rst_n)begin
		if(!Rst_n)begin
			curr_st <= IDLE;
			en_cnt <= 1'b0;
			key_flag <= 1'b0;
			key_state <= 1'b1;
		end
		else begin
			case(curr_st)
				IDLE:begin
					key_flag <= 1'b0;
					if(nedge)begin
						curr_st <= FILTER1;
						en_cnt <= 1'b1;
					end
					else
						curr_st <= IDLE;
				end
				
				FILTER1:begin
					if(cnt_full)begin
						key_flag <= 1'b1;
						key_state <= 1'b0;
						curr_st <= DOWN;
						en_cnt <= 1'b0;
					end	
					else if(pedge)begin
						curr_st <= IDLE;
						en_cnt <= 1'b0;
					end
					else
						curr_st <= FILTER1;
				end
				
				DOWN:begin
					key_flag <= 1'b0;
					if(pedge)begin
						curr_st <= FILTER2;
						en_cnt <= 1'b1;
					end
					else
						curr_st <= DOWN;
				end
				
				FILTER2:begin
					if(cnt_full)begin
						key_flag <= 1'b1;
						key_state <= 1'b1;
						curr_st <= IDLE;
						en_cnt <= 1'b0;
					end	
					else if(nedge)begin
						curr_st <= DOWN;
						en_cnt <= 1'b0;
					end
					else
						curr_st <= FILTER2;
				end
				
				default:begin
					curr_st <= IDLE;
					en_cnt <= 1'b0;
					key_flag <= 1'b0;
					key_state <= 1'b1;
				end
			endcase
		end
	end
	
//------<20ms计数器>------		
	//20ms计数器
	//Clk 50_000_000Hz
	//一个时钟周期为20ns
	//需要计数20_000_000 / 20 = 1_000_000次
	
	always@(posedge Clk or negedge Rst_n)begin
		if(!Rst_n)
			cnt <= 20'd0;
		else if(en_cnt)
			cnt <= cnt + 1'b1;
		else
			cnt <= 20'd0;
	end
	
	always@(posedge Clk or negedge Rst_n)begin
		if(!Rst_n)
			cnt_full <= 1'b0;
		else if(cnt == 999_999)
			cnt_full <= 1'b1;
		else
			cnt_full <= 1'b0;
	end
	
endmodule


DataAndEn.v:

module DataAndEn(
	input 			 		Clk,
	input 			 		Rst_n,
	input           		key_flag,
	input 			 		key_state,
	output 	reg [23:0] 	disp_data,
	output 	reg	 		En
);
	
	always@(posedge Clk or negedge Rst_n)begin
		if(!Rst_n)
			En <= 1'b0;
		else if(key_state == 1'b0)
			En <= 1'b1;
		else 
			En <= 1'b0;
	end
	
	always@(posedge Clk or negedge Rst_n)begin
		if(!Rst_n)
			disp_data <= 24'h0;
		else if(!key_state)
			disp_data <= 24'h89abcd;
		else
			;
	end

endmodule

数码管驱动模块的代码保持不变,接下来为顶层模块:

smg_top.v:

module smg_top(
		input 				Clk,			
		input 				Rst_n,		
		input 				key_in,		
		output  [7:0]		seg, 
		output 	[5:0]		sel		
);
	
	wire 			key_flag;
	wire 			key_state;
	wire 			En;
	wire [23:0]		disp_data;

	KeyFilter UKeyFilter(
		.Clk(Clk),
		.Rst_n(Rst_n),
		.key_in(key_in),
		.key_flag(key_flag),
		.key_state(key_state)
	);
	
	DataAndEn UDataAndEn(
		.Clk(Clk),
		.Rst_n(Rst_n),
		.key_flag(key_flag),
		.key_state(key_state),
		.disp_data(disp_data),
		.En(En)
	);

	smg_HEX Usmg_HEX(
		.Clk(Clk),			
		.Rst_n(Rst_n),		
		.En(En),			
		.disp_data(disp_data),
		.seg(seg), 			
		.sel(sel)	 		
	);

endmodule

【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

🧸结尾文章来源地址https://www.toymoban.com/news/detail-676800.html


  • ❤️ 感谢您的支持和鼓励! 😊🙏
  • 📜您可能感兴趣的内容:
  • 【FPGA】串口通信讲解-状态机判断数据值
  • 【Python】串口通信-与FPGA、蓝牙模块实现串口通信(Python+FPGA)
  • 【Arduino TinyGo】【最新】使用Go语言编写Arduino-环境搭建和点亮LED灯
  • 【全网首发开源教程】【Labview机器人仿真与控制】Labview与Solidworks多路支配关系-四足爬行机器人仿真与控制
    【FPGA零基础学习之旅#11】数码管动态扫描,FPGA学习之旅,fpga开发,学习,Verilog HDL,数码管动态扫描,AV4,Spirit_V2

到了这里,关于【FPGA零基础学习之旅#11】数码管动态扫描的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计

    源文件的链接放在最后啦 实验目的: (1) 熟悉7段数码管显示译码电路的设计。 (2) 掌握数码管显示原理及静态、动态扫描电路的设计。 实验任务: (1) 基本任务1:利用FPGA硬件平台上的4位数码管做静态显示,用SW0-3输入BCD码,用SW4-7控制数码管位选; (2) 基本任务

    2024年02月07日
    浏览(55)
  • 11 FPGA数码管显示 (动、静都有)附代码

           由上图数码管接线可知数码管LED灯的所有阳级(正极)接公共端,故该数码管为共阳数码管。这六位数码管段阴级(负极)都并联,在阳极都给高电平的同时阴极拉低,数码管就会被点亮。        数码管显示有分为静态显示和动态显示, 静态显示 特点是在同一时间

    2024年02月06日
    浏览(30)
  • FPGA(5)数码管静态显示与动态显示

    目录 一、数码管静态显示 二、数码管动态显示 1、变量定义 2、定时(60us) 3、动态显示 代码 FPGA的数码管有4位,8段 。( 位和段都是共阳,即低电平有效 )     位选的4位(二进制):分别为第1、2、3、4位数码管。 段选的8位(二进制):分别为第h、g、f、e、d、c、b、a段

    2023年04月12日
    浏览(40)
  • FPGA基本实验之数码管的动态显示

            关于数码管的基本知识大家可以参考我上一篇文章数码管的静态显示,         使用 1ms 的刷新时间让六个数码管轮 流显示:第 1ms 点亮第一个数码管,第 2ms 点亮第二个数码管,以此类推依次点亮六个数 码管,6ms 一个轮回,也就是说每个数码管每 6ms 点亮

    2024年02月08日
    浏览(38)
  • FPGA项目(5)--FPGA控制数码管动态显示的原理

            数码管是现在电子产品上常用的显示器件,它有驱动简单、显示清晰、价格低廉等优势。数码管的实物图:          数码管的内部结构图如下所示:          从图中可以看出,它由八个段组成,即A B C D E F G DP(小数点),只要将这八个段按规律组合点亮,就

    2024年02月11日
    浏览(50)
  • FPGA 驱动数码管动态显示(Verilog&Vivado)

    应用实例: (1)使用串口发送实现ACX720开发板时钟显示 本章将实现 FPGA 驱动数码管动态显示并提取出实现的电路结构,从电路结构入手编写代码,仿真对设计进行验证。最终板级调试时使用 Virtual Input/Output(VIO,虚拟输入/输出端口工具),输入需要显示的数据,数码管则显

    2023年04月12日
    浏览(52)
  • FPGA基础设计之数码管显示

    数码管是一种半导体发光器件,其基本单元是发光二极管。一般分为七段数码管和八段数码管,多的一段是小数点。也有其他如N型、米型数码管以及16段、24段管等。本次设计的是八段数码管 公阴极数码管高电平亮,公阳极数码管低电平亮。AC620上搭载的是公阳极数码管。 数

    2023年04月26日
    浏览(45)
  • FPGA学习—数码管显示

    数码管动态显示采用了人眼暂存的原理,即时分复用,在数码管实现动态显示。 整个实验设计流程框架如下图所示: 开发板采用共阳极数码管,即低电平点亮。 本实验准备设计一个定时器,6为数码管显示24小时制的时间,所以编写一个计数模块。 改变变量COUNT的数值,可实

    2024年02月09日
    浏览(41)
  • [FPGA 学习记录] 数码管静态显示

    数码管静态显示 在我们的许多项目设计当中,我们通常需要一些显示设备来显示我们需要的信息。我们可以选择的显示设备有很多,而我们的数码管就是使用最多、最简单的显示设备之一。数码管它是一种半导体发光器件,它具有响应时间短、体积小、重量轻、寿命长的优点

    2024年02月03日
    浏览(50)
  • FPGA学习汇总(六)----数码管显示(1)

    目录 概念 单个数码管显示单个数字  操作  代码  现象 分析 四个数码管定时单个显示数字 分析 代码 四个数码管同时显示 分析 代码 现象

    2024年02月01日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包