当前位置: 首页 > news >正文

数电课设·简易数字钟(Quartus Ⅱ)

忽如一夜春风来,千树万树梨花开

                                                        —— 《白雪歌诵武判官归京》  岑参  【唐】


目录

简易数字钟

要点剖析: 

 逐步分析:

端口说明:

代码展示:

分部解释:

代码编译结果:

提醒 :

仿真实例:

仿真结果:

​编辑 

求一个免费的赞,也可以点一点关注,十分感谢

简易数字钟代码和PPT


通过网盘分享的文件:简易数字钟.zip
链接: https://pan.baidu.com/s/1oQ3v6up_G5D2VKsISCRmBQ?pwd=0406

提取码: 0406

为大家带来数电课设(简易数字钟)的教程。本教程基于Quartus Ⅱ来编写代码,进行仿真。文章内有代码,仿真报告,答辩PPT,按需自取。

简易数字钟

大家先看一看上面的题目和其要求实现的功能。

要点剖析: 

  1. 利用quartus软件,基于VHDL语言来编写。
  2. 时,分,秒三个计数器,分别是二十四进制计数器和六十进制计数器。
  3. 闹钟功能,并且设定时间,到时间鸣叫30秒。
  4. 具有整点报时功能,到预定时间鸣叫10秒。
  5. 完成仿真,具有基本功能。

 逐步分析:

1.对于这一点大家从b站找教程或者某宝找人远程下载,对于vhdl语言大家可以自行学习,这个课设需要的代码造诣不高,大家完全可以自学(相较于C++就十分简单了)。

2.计时器,VHDL代码内有基本的语法结构,我们只需要知道二十四位计数器需要五位二进制数,六十进制计数器需要六位二进制数,这就ok了。

3.闹钟功能,这个就需要我们独立设计逻辑。

4.整点报时基本和闹钟功能有着类似的代码逻辑,大家看后续代码。

5.仿真,大家就利用软件内置的来做。

端口说明:

代码展示:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;entity Simple_Clock isport(clk : in std_logic; reset : in std_logic;set_alarm : in std_logic;alarm_time_sec : in std_logic_vector(5 downto 0);alarm_time_min : in std_logic_vector(5 downto 0);alarm_time_hour : in std_logic_vector(4 downto 0);alarm_out : out std_logic;chime_out : out std_logic;sec_out : out std_logic_vector(5 downto 0);min_out : out std_logic_vector(5 downto 0);hour_out : out std_logic_vector(4 downto 0));
end entity Simple_Clock;architecture Behavioral of Simple_Clock issignal sec_count : unsigned(5 downto 0) := (others => '0');--六位无符号数,初始全为0signal min_count : unsigned(5 downto 0) := (others => '0');signal hour_count : unsigned(4 downto 0) := (others => '0');signal alarm_active : std_logic := '0';--表示闹钟是否激活signal chime_active : std_logic := '0';--表示整点报时是否激活signal alarm_timer : unsigned(4 downto 0) := (others => '0');--闹钟激活后的计时signal chime_timer : unsigned(3 downto 0) := (others => '0');signal alarm_time_sec_u : unsigned(5 downto 0);--类型转换为无符号的数signal alarm_time_min_u : unsigned(5 downto 0);signal alarm_time_hour_u : unsigned(4 downto 0);
begin-- 转换输入为unsigned类型alarm_time_sec_u <= unsigned(alarm_time_sec);alarm_time_min_u <= unsigned(alarm_time_min);alarm_time_hour_u <= unsigned(alarm_time_hour);-- 秒计数器process(clk, reset)--上下限beginif reset = '1' then-- 重置所有信号sec_count <= (others => '0');min_count <= (others => '0');hour_count <= (others => '0');alarm_active <= '0';chime_active <= '0';alarm_timer <= (others => '0');chime_timer <= (others => '0');elsif rising_edge(clk) then-- 秒计数逻辑if sec_count = 59 thensec_count <= (others => '0');if min_count = 59 thenmin_count <= (others => '0');if hour_count = 23 thenhour_count <= (others => '0');elsehour_count <= hour_count + 1;end if;elsemin_count <= min_count + 1;end if;elsesec_count <= sec_count + 1;end if;-- 闹钟逻辑if alarm_active = '1' and alarm_timer < 30 then--如果激活闹钟,那么闹钟计时小于30秒则加一,响铃一段时间alarm_timer <= alarm_timer + 1;elsif alarm_timer >= 30 then--大于三十则清零,便于下次计时alarm_active <= '0';alarm_timer <= (others => '0');end if;-- 整点报时逻辑if chime_active = '1' and chime_timer < 10 thenchime_timer <= chime_timer + 1;elsif chime_timer >= 10 thenchime_active <= '0';--关闭计时状态chime_timer <= (others => '0');end if;-- 激活闹钟和整点报时if set_alarm = '1' and sec_count = alarm_time_sec_u and min_count = alarm_time_min_u and hour_count = alarm_time_hour_u thenalarm_active <= '1';--启动闹钟alarm_timer <= (others => '0');elsif sec_count = 0 and min_count = 0 then--分,秒为零,意味着整点chime_active <= '1';chime_timer <= (others => '0');end if;end if;end process;-- 输出信号alarm_out <= alarm_active;chime_out <= chime_active;sec_out <= std_logic_vector(sec_count);min_out <= std_logic_vector(min_count);hour_out <= std_logic_vector(hour_count);
end architecture Behavioral;

分部解释:

-- 秒计数器process(clk, reset)--上下限beginif reset = '1' then-- 重置所有信号sec_count <= (others => '0');min_count <= (others => '0');hour_count <= (others => '0');alarm_active <= '0';chime_active <= '0';alarm_timer <= (others => '0');chime_timer <= (others => '0');elsif rising_edge(clk) then这里首先编写了一个关于清零的功能(类似于函数,但是并不调用)
是全部清零,包括闹钟的计时,时钟的计时都是会清零的,类似于恢复出厂设置-- 秒计数逻辑if sec_count = 59 thensec_count <= (others => '0');if min_count = 59 thenmin_count <= (others => '0');if hour_count = 23 thenhour_count <= (others => '0');elsehour_count <= hour_count + 1;end if;elsemin_count <= min_count + 1;end if;elsesec_count <= sec_count + 1;end if;这就是计时功能的相关代码,我们编写了计时功能,只要秒钟累加到59,那么下一次就会分钟加1,只要分钟累加到59,那么就会时钟加1。如果时钟累加到23,那么就会清零。-- 闹钟逻辑if alarm_active = '1' and alarm_timer < 30 then--如果激活闹钟,那么闹钟计时小于30秒则加一,响铃一段时间alarm_timer <= alarm_timer + 1;elsif alarm_timer >= 30 then--大于三十则清零,便于下次计时alarm_active <= '0';alarm_timer <= (others => '0');end if;-- 整点报时逻辑if chime_active = '1' and chime_timer < 10 thenchime_timer <= chime_timer + 1;elsif chime_timer >= 10 thenchime_active <= '0';--关闭计时状态chime_timer <= (others => '0');end if;两个功能的逻辑十分相似,都有一个置1且相关计时小于我们要求响铃的时长(闹钟 30;报时 10)那么就会响铃一段时间,如果功能内部的timer大于要求响铃的时长,那么timer就会清零,便于我们下一次使用-- 激活闹钟和整点报时if set_alarm = '1' and sec_count = alarm_time_sec_u and min_count = alarm_time_min_u and hour_count = alarm_time_hour_u thenalarm_active <= '1';--启动闹钟alarm_timer <= (others => '0');elsif sec_count = 0 and min_count = 0 then--分,秒为零,意味着整点chime_active <= '1';chime_timer <= (others => '0');end if;end if;end process;激活闹钟,首先要set_alarm = '1',然后给闹钟制定时间,到时间就会自动响铃。
激活整点报时,我们不需要set这个逻辑(因为整点报时是一直开着的),当分和秒为零,那么就意味着整点,即可以响铃

代码编译结果:

 

提醒 :

清零之后闹钟会响铃!这是因为我的代码中设置了在清零后闹钟响铃的程序(只要在闹钟打开的时间内清零,闹钟在清零结束后就会响铃)。我认为是有用的,也可以当作防伪标志。

仿真实例:

定时闹钟在45分时响铃。

仿真结果:

大家可以看一看ppt从中可以找到更多细节。 

求一个免费的赞,也可以点一点关注,十分感谢

相关文章:

数电课设·简易数字钟(Quartus Ⅱ)

忽如一夜春风来&#xff0c;千树万树梨花开 —— 《白雪歌诵武判官归京》 岑参 【唐】 目录 简易数字钟 要点剖析&#xff1a; 逐步分析&#xff1a; 端口说明&#xff1a; 代码展示&#xff1a; 分部解释&#xff1a; 代码编译结果&#xff1a; 提醒 &#xff1a; …...

大模型中RAG模型的检索过程是如何实现的?(附最佳实践资料)

RAG模型的检索过程主要涉及以下几个步骤&#xff1a; 向量化&#xff08;Embedding&#xff09;&#xff1a;首先&#xff0c;需要将外部知识库中的文档转换为计算机能够理解的向量形式。这一步骤通常使用预训练的嵌入模型&#xff08;如BERT、GPT等&#xff09;将文本转换为高…...

python:用 sklearn.metrics 评价 K-Means 聚类模型

sklearn 的 metrics 模块提供的聚类模型评价指标如下&#xff1a; ARI 评价法&#xff08;兰德系数&#xff09;: adjusted_rand_score AMI 评价法&#xff08;相互信息&#xff09;: adjusted_mutual_info_score V-measure 评分 : completeness_score FMI 评价法 : fowlkes_m…...

Spring依赖注入不同类型的数据

目录 前言 回顾 注入集合 List与set集合 Map集合 前言 前面学习依赖注入时注入的都是对象&#xff0c;这里记录注入的值为集合的情况 回顾 在注入的时候&#xff0c;如果要注入的属性的值为字符串或基本数据类型&#xff0c;用value即可&#xff1b;如果要注入一个对象的…...

Linux大杂烩!!!

Linux 命令大全 https://www.runoob.com/linux/linux-command-manual.html Linux下打印ASCII字符 ASCII码对照表及转换器 [rootuntifa_80 ~]# printf "\x30\n" 0 [rootuntifa_80 ~]# echo -e "\u0030" 0tar、gzip 打包解压命令 参考文章&#xff1a;ta…...

12.19问答解析

概述 某中小型企业有四个部门&#xff0c;分别是市场部、行政部、研发部和工程部&#xff0c;请合理规划IP地址和VLAN&#xff0c;实现企业内部能够互联互通&#xff0c;同时要求市场部、行政部和工程部能够访问外网环境(要求使用OSPF协议)&#xff0c;研发部不能访问外网环境…...

C语言——实现杨氏矩阵

什么是杨氏矩阵&#xff1f; 概念&#xff1a; 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的 eg&#xff1a; 1 2 3 4 5 6 7 8 9 题目&#xff1a; 请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复…...

授权模型PAM

PAM&#xff08;Privileged Access Management&#xff09;是一种授权模型&#xff0c;用于管理和控制特权用户的访问权限。PAM的目标是确保特权用户只能在需要时获得所需的特权&#xff0c;并且他们的活动得到适当的监控和审计。 PAM的核心思想是将特权访问权限视为一种受限的…...

【Leecode】子集⭐⭐

子集 [78]子集I 题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例输入 示例 1&#xff1a; 输入&#xff1a;nums [1, 2, 3…...

Linux高性能服务器编程 | 读书笔记 | 12. 多线程编程

12. 多线程编程 注&#xff1a;博客中有书中没有的内容&#xff0c;均是来自 黑马06-线程概念_哔哩哔哩_bilibili 早期Linux不支持线程&#xff0c;直到1996年&#xff0c;Xavier Leroy等人开发出第一个基本符合POSIX标准的线程库LinuxThreads&#xff0c;但LinuxThreads效率…...

[HNCTF 2022 Week1]baby_rsa

源代码&#xff1a; from Crypto.Util.number import bytes_to_long, getPrime from gmpy2 import * from secret import flag m bytes_to_long(flag) p getPrime(128) q getPrime(128) n p * q e 65537 c pow(m,e,n) print(n,c) # 62193160459999883112594854240161159…...

解析Java中的Stream API:函数式编程与性能优化

自Java 8以来&#xff0c;Java语言引入了Stream API&#xff0c;为开发者提供了一种全新的数据处理方式。Stream API支持函数式编程风格&#xff0c;使得对集合、数组、IO流等数据源的操作更加简洁、直观且具有高效的性能优势。通过Stream API&#xff0c;我们可以在不修改原有…...

java简单题目练习

大家好&#xff0c;今天我们不学习新的内容&#xff0c;今天给大家分享一些简单的java算法题供大家练练手&#xff0c;那么我们下面就来看看。 那么大家下去练习一下&#xff0c;我们明天继续讲解类和对象的相关知识&#xff0c;谢谢大家&#xff01;&#xff01;&#xff01;...

Kaggler日志--Day9

进度24/12/18 昨日复盘&#xff1a; 补充并解决Day7Kaggler日志–Day7统计的部分问题 今日进度&#xff1a; 继续完成Day8Kaggler日志–Day8统计问题的解答 明日规划&#xff1a; 今天报名了Regression with an Insurance Dataset算是新手村练习比赛&#xff0c;截止时间是2…...

OpenCVE:一款自动收集NVD、MITRE等多源知名漏洞库的开源工具,累计收录CVE 27万+

漏洞库在企业中扮演着至关重要的角色&#xff0c;不仅提升了企业的安全防护能力&#xff0c;还支持了安全决策、合规性要求的满足以及智能化管理的发展。前期博文《业界十大知名权威安全漏洞库介绍》介绍了主流漏洞库&#xff0c;今天给大家介绍一款集成了多款漏洞库的开源漏洞…...

麒麟信安参编的《能源企业数字化转型能力评价 技术可控》团体标准发布

近日&#xff0c;中国能源研究会发布公告&#xff0c;《能源企业数字化转型能力评价 技术可控》团体标准发布。该标准由麒麟信安与国网湖北省电力有限公司武汉供电公司、国网智能电网研究院有限公司、中能国研&#xff08;北京&#xff09;电力科学研究院等单位联合编制。 《能…...

戴尔物理机更换完Raid控制器(阵列卡),启动服务器失败

背景 我们使用的物理机是戴尔的POWEREDGE R730机器&#xff0c;由于硬件损坏导致该问题的延申&#xff0c;再更换完Raid的控制器&#xff08;阵列卡&#xff09;之后导致启动服务器报错。 报错&#xff1a; There are offline or missing virtual drives with preserved cac…...

计算机基础知识——数据结构与算法(二)(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 大数据相关标准…...

docsify

macos ➜ ~ node -v v16.20.2➜ ~ npm --version 8.19.4全局安装 docsify-cli 工具 npm i docsify-cli -g➜ ~ docsify -vdocsify-cli version:4.4.4初始化项目 docsify init ./docsls -ah docs . .. .nojekyll README.md index.htmlindex.html 入口文件README.md 会…...

GEE教程——使用 CHIRPS 和 GSMaP 数据集计算并可视化了特定区域的降水量

目录 简介 函数 ee.Image.pixelLonLat() No arguments. Returns: Image visualize(bands, gain, bias, min, max, gamma, opacity, palette, forceRgbOutput) Arguments: Returns: Image 代码解释 代码 结果 简介 GEE教程——使用 CHIRPS 和 GSMaP 数据集计算并可视…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

Mac flutter环境搭建

一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...

Spring Boot 与 Kafka 的深度集成实践(二)

3. 生产者实现 3.1 生产者配置 在 Spring Boot 项目中&#xff0c;配置 Kafka 生产者主要是配置生产者工厂&#xff08;ProducerFactory&#xff09;和 KafkaTemplate 。生产者工厂负责创建 Kafka 生产者实例&#xff0c;而 KafkaTemplate 则是用于发送消息的核心组件&#x…...