FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

这篇具有很好参考价值的文章主要介绍了FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        本次做的题目是:基于FPGA的倒计时显示电路设计,

        题目要求如下:

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

        详细要求如下:

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

        本次设计的代码通过了仿真。(用的是quartus自带的仿真器)

        这次设计分为两个模块,一个是倒计时的控制模块,另一个是数码管的显示模块。在倒计时控制模块中调用(例化)显示模块,从而实现分层设计。

        关于数码管动态显示,可以参考我的这篇博客:

FPGA项目(5)--FPGA控制数码管动态显示的原理_fpga数码管显示实验原理_嵌入式小李的博客-CSDN博客https://blog.csdn.net/guangali/article/details/130754726?spm=1001.2014.3001.5501

        唯一的区别就是 这次使用的数码管是4位数码管。经过稍加修改就可以直接使用。

        下面重点讲解倒计时模块的逻辑设计:

        首先是模块的接口设计:

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

        各按键的作用如注释所示,其中minute_out  和  sec_out信号主要是为了在仿真的时候观察输出的时间数值(如果没有这个信号,就需要从数码管的输出段码和位选信号来判断当前倒计时的时间数值,会比较麻烦。用这个信号观察就会比较直观)。

        内部使用到的信号如下:

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

其中hz_num是分频数值。仿真时,此值不应太大。因为quartus自带的仿真器在仿真时,所能观测的最大时间也才几百微秒。如果不缩小分频数值,那么仿真时就观察不到试验现象。其他各信号的含义如注释所示。

接着就是分频模块。这种分频非常简单,就不具体解释了,直接给出代码:

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

下面重点来了

        首先,要实现k2按下数值清0的效果,这个非常简单。直接在if语句里面判断,符合条件直接清0就行。然后要实现时间的预设功能,那么假定只有在倒计时暂停的情况下才可以进行时间设定,倒计时运行过程中不能对时间进行修改。所以在设定时间时首先要判断k1的状态,如果k1为0,才可以进行时间预设。当k1为1时,就是正常的倒计时状态。Sec信号在1HZ脉冲的驱动下(clk_hz信号每隔1S会置1一次)减1,每次减到0都判断一次minute是否为0,如果minute不为0,说明倒计时过程还未结束,应该重新给sec赋值并且minute减1,否则说明倒计时结束了,蜂鸣器报警,同时暂停倒计时的过程。这部分的逻辑代码如下:

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

        需要注意这里使用的是 if  else if 语句,里面的条件是有优先级顺序的。复位信号的优先级最高,然后的清0按键k2,然后是k1.

        最后就是将所得的时间数值,取出来,送给显示模块进行显示。

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

仿真图如下:

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

        这是不加数码管显示的,为的是更清楚的看到时间的变化。一开始我令k3按下去一个周期  K5按下去2个周期,那么对应的效果就是minute+1,sec+2。从仿真的结果看,确实是这样。随后当k1置为高电平以后,分钟和秒钟在进行倒计时的过程。当时间减完以后,可以看到蜂鸣器输出了高电平,倒计时过程暂停了!

接下来给出一张完整的仿真图:

FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真

完整代码如下:文章来源地址https://www.toymoban.com/news/detail-500777.html

module count_down(
 input                   clk    ,        // 时钟信号				假设时钟信号为50M
 input                   rst_n  ,        // 复位信号
 input					 k1,			//用于控制计时的启动和停止			1表示启动    0表示停止
 input					 k2,			//用于控制计数时间的归零
 input					 k3,			//用于设置倒计时时间时 对分钟的+
 input					 k4,			//用于设置倒计时时间时 对分钟的-
 input					 k5,			//用于设置倒计时时间时 对秒钟的+
 input					 k6,			//用于设置倒计时时间时 对秒钟的-			//所有按键都假设 不按下为1   按下为0
 
 output			[5:0]	 minut_out,		//将时间输出  便于观察
 output			[5:0]	 sec_out,
 output	  reg			 beep,			//蜂鸣器报警   高电平报警
 output    		[3:0]     seg_sel,        // 数码管位选,最左侧数码管为最高位
 output    	    [6:0]     seg_led         // 数码管段选
);


//parameter    hz_num=32'd50_000_000;
parameter    hz_num=32'd50;						//将50M时钟分频到1HZ所需要的分频系数   仿真时取50   实物取50_000_000

reg [5:0]	minute;					//预设时间的分钟
reg	[5:0]	sec;					//预设时间的秒钟

reg			clk_hz;					//分频后的1hz信号
reg	[31:0]	hz_cnt;					//分频模块使用的寄存器

wire [3:0]  minute_ge;				//保存分钟的个位  用于输出到数码管显示
wire [3:0]  minute_shi;				//保存分钟的十位  用于输出到数码管显示
wire [3:0]  sec_ge;					//保存秒钟的个位  用于输出到数码管显示
wire [3:0]  sec_shi;				//保存秒钟的时位  用于输出到数码管显示

wire [15:0] data_out;			   //要传递到数码管显示的数据

//产生1hz的模块
always @(posedge clk) begin
	if(hz_cnt==hz_num-1)
		begin
		hz_cnt<=32'd0;
		clk_hz<=1'b1;
		end
	else
		begin
		hz_cnt<=hz_cnt+1;
		clk_hz<=1'b0;
		end
end

//读取按键信息  进行倒计时预设  假设只有在停止状态下才能进行时间预设 (也就是k1=0  才可以设置时间)
always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		begin				//复位时  时间都归0
		minute<=6'd0;
		sec<=6'd0;
		beep<=1'b0;			//蜂鸣器不响
		end
	else if(k2==0)			//按下k2 时间也归0
		begin				
		minute<=6'd0;
		sec<=6'd0;
		end
	else if(k1==0)			//如果是在停止状态下,则对时间进行设定
		begin
			if(k3==0)
				begin
				minute<=minute+6'd1;
				end
			else if(k4==0)
				begin
				minute<=minute-6'd1;
				end
			else if(k5==0)
				begin
				sec<=sec+6'd1;
				end
			else if(k6==0)
				begin
				sec<=sec-6'd1;
				end
			else
				begin
				minute<=minute;
				sec<=sec;
				end
		end
	else if(k1==1)				//如果实在开启状态下
		begin
			if(clk_hz)			//在1S的脉冲驱动下  进行倒计时操作
				begin
				if(sec>0)
					sec<=sec-6'd1;
				else					//秒钟倒计时到0了
					begin				
					if(minute>0)		//如果分钟不为0
						begin
					    sec<=6'd60;			//秒钟重新赋值为60
						minute<=minute-6'd1;		//分钟 减1
						end
					else				//如果分钟为0 说明倒计时结束了
 						begin
						beep<=1'b1;			//蜂鸣器响
						sec<=6'd0;
						minute<=6'd0;
						end
					end
				
				end
			else
				begin
				minute<=minute;
				sec<=sec;
				end
		end
	
end

assign minut_out=minute;
assign sec_out=sec;

assign minute_ge=minute%10;
assign minute_shi=minute/10;
assign sec_ge=sec%10;
assign sec_shi=sec/10;

assign data_out={minute_shi,minute_ge,sec_shi,sec_ge};		//输出的数据由分钟  和秒钟 的各个位组成

//例化数码管模块
seg_led	seg_led_inst
(
 .clk     		(clk),	       
 .rst_n    		(rst_n),	     
 .data    		(data_out),	      
 .seg_sel   	(seg_sel),	     
 .seg_led  		(seg_led)      
    );

endmodule

到了这里,关于FPGA项目(10)——基于FPGA的倒计时显示电路的设计与仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 026:vue中el-progress逆向倒计时方式显示

    026:vue中el-progress逆向倒计时方式显示

    第026个 查看专栏目录: VUE ------ element UI 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeMount,mounted, beforeUpdate,upda

    2024年02月09日
    浏览(17)
  • 【蓝桥模板】——考试倒计时3天,你和省一就差这最后10分了(差分模板)

    【蓝桥模板】——考试倒计时3天,你和省一就差这最后10分了(差分模板)

    全文目录🧭 🎁差分模板 🌲差分-树木上药 🚀传送锚点  💡思路点拨 🍞代码详解    🎄差分-小明的彩灯 🚀传送锚点​  💡思路点拨 🍞代码详解  差分三部曲=差分相减+转换加减+前缀相加 参考资料:原理解释 样例解释 老规矩,先来一道差集的经典例题「 树木上药 」

    2024年01月20日
    浏览(45)
  • 初学51单片机(STC89C52)一个倒计时显示器和大家分享

      想要实现倒计时显示器,首先得确定从哪个时间开始倒计时,这就需要写出一个计数的程序来,通过按键来控制需要的数,从而开始倒计时。我的开发板上用的Key2,Key3,Key4,Key5这四个键,分别对应着加1,减1,乘2,开始计时四个功能。   通过加一,减一,乘2三个操作,

    2024年02月10日
    浏览(15)
  • 基于51单片机的倒计时秒表proteus仿真设计

    基于51单片机的倒计时秒表proteus仿真设计

    目录 一、设计背景 二、实现功能 三、仿真演示 四、源程序         近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。本文阐述了基于单片机的数字电子秒表倒计时设计,倒计时精度达0.05s了,解决了传统的由于倒计时精度不够造成的误差和不公平性,是各种

    2024年02月02日
    浏览(19)
  • 基于51单片机交通灯带紧急开关+黄灯倒计时+可调时间

    基于51单片机交通灯带紧急开关+黄灯倒计时+可调时间

    仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J000 功能说明: 采用51单片机以及单片机最小系统和三极管驱动电路以及外围的按键和数码管显示等部件,设计一个基于单片机的交通灯设计。 1.四路交通灯,带有红绿灯倒计时,绿灯倒计时结束后转黄灯

    2024年02月06日
    浏览(15)
  • 基于Element UI或Element Plus实现具有倒计时的Message消息提示

    基于Element UI或Element Plus实现具有倒计时的Message消息提示

    刚好遇到一个需要自动关闭消息提示的需求,可Element框架暂时没有实现这个功能。开始时没有头绪,于是搜一下道友的博客文章,看到有一篇文章实现了这个功能,在此我完善了一下这个技巧方法。完善后的技巧方法支持多次点击,实例化多个消息提示,每个消息提示都具有

    2024年02月07日
    浏览(11)
  • 基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯

    基于51单片机8位竞赛抢答器_倒计时可调+LED跑马灯

    (程序+proteus仿真+报告) Proteus仿真版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:Q006 资料下载链接 1、以单片机位核心,设计一个8位抢答器:同时供8名选手比赛,分别用6个按键表示; 2、无人抢答时,8个跑马灯循环点亮,数码管显示00; 3、设置一个

    2024年02月09日
    浏览(13)
  • 蓝桥杯倒计时 | 倒计时4天

    蓝桥杯倒计时 | 倒计时4天

    作者🕵️‍♂️:让机器理解语言か 专栏🎇:蓝桥杯倒计时冲刺 描述🎨:蓝桥杯冲刺阶段,一定要沉住气,一步一个脚印,胜利就在前方! 寄语💓:🐾没有白走的路,每一步都算数!🐾 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 n): 先输入一个自

    2023年04月09日
    浏览(27)
  • 基于Vue2+Element UI或Vue3+Element plus对 el-notification 增加倒计时进度条特效,鼠标移入暂停计时,移出继续计时

    基于Vue2+Element UI或Vue3+Element plus对 el-notification 增加倒计时进度条特效,鼠标移入暂停计时,移出继续计时

    遇到一个需求就是对这个 el-notification 加一个倒计时进度条,方便用户知道该通知何时自动关闭。于是自己动手丰衣足食。 (1)基于Vue2+ElementUI的项目 (1)基于Vue3+ElementPlus的项目 JS DOM获取元素属性+操作方法 Vue2的h函数(createElement)与Vue3中的h函数用法

    2024年02月16日
    浏览(12)
  • 51单片机实现倒计时,按键控制倒计时

    51单片机实现倒计时,按键控制倒计时

    基于AT89C52的答辩倒计时。四个按键分别控制倒计时开始,暂停,时间加和减。剩下30S时蜂鸣器响,倒计时结束蜂鸣器响。  

    2024年02月07日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包