六位数码管整点报时

数码管为时钟模块,当秒数为60s时,蜂鸣器响1s。
fpga源代码(程序仅供参考):

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use IEEE.numeric_std.all;entity segmentTest isPort ( rst:out std_logic;sel:inout std_logic_vector(5 downto 0);buzzer:out std_logic;selSegmet2:out std_logic_vector(5 downto 0);clk:in std_logic;seg_dataSegment2: out STD_LOGIC_vector(7 downto 0);seg_data: out STD_LOGIC_vector(6 downto 0));
end segmentTest;architecture Behavioral of segmentTest is
signal count:std_logic_vector(16 downto 0);
signal countDemo:std_logic_vector(3 downto 0);
signal count1Demo:std_logic_vector(3 downto 0);  --秒的个位
signal count2Demo:std_logic_vector(3 downto 0);  --秒的十位
signal count3Demo:std_logic_vector(3 downto 0);  --分的个位
signal count4Demo:std_logic_vector(3 downto 0);  --分的十位
signal count5Demo:std_logic_vector(3 downto 0);  --时的个位
signal count6Demo:std_logic_vector(3 downto 0);  --时的十位signal count1:std_logic_vector(25 downto 0);
signal count2:std_logic_vector(28 downto 0);
signal count3:std_logic_vector(31 downto 0);
signal count4:std_logic_vector(34 downto 0);
signal count5:std_logic_vector(37 downto 0);
signal count6:std_logic_vector(40 downto 0);
signal countSecond1,countSecond2:std_logic_vector(6 downto 0);--秒的数码管对应二进制数
signal countMinute1,countMinute2:std_logic_vector(6 downto 0);--分的数码管对应二进制数
signal countHour1,countHour2:std_logic_vector(6 downto 0);    --时的数码管对应二进制数
signal selDemo:std_logic_vector(5 downto 0);  --充当sel的中间变量signal countsegment1,countsegment2,countsegment3,countsegment4,countsegment5,countsegment6:std_logic_vector(3 downto 0);begintimeCount:process(clk)begin----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------if (clk' event and clk = '1') then   --晶振频率为50MHZ,一个周期就增加一次,以此来计数,一共有50 000 000次。count<=count+'1';  --用于数码管快速切换count1<=count1+'1';  --segment1,秒的个位count2<=count2+'1';  --segment2,秒的十位count3<=count3+'1';    --segment3,分的个位count4<=count4+'1';    --segment4,分的十位count5<=count5+'1';    --segment5,时的个位count6<=count6+'1';    --segment6,时的十位
----------------------------------------------------------------------------------------------
--------------------------------------显示秒的个位---------------------------------------------
----------------------------------------------------------------------------------------------if(count1 = "10111110101111000010000000") then  --秒的个位,1秒计数一次,变化一次count1Demo <= count1Demo + "0001";if(count1Demo = "1001") thencount1Demo <=  "0000";count2Demo <= count2Demo + "0001";if(count2Demo = "0101") then    --如果秒的十位数为6,跳回0。count2Demo <=  "0000";count3Demo <= count3Demo + "0001";if(count3Demo = "1001") then    --如果分的个位数为10,跳回0。count3Demo <=  "0000";count4Demo <= count4Demo + "0001";if(count4Demo = "0101") then    --如果分的十位数为6,跳回0。count4Demo <=  "0000";   --没做完,还需要把时的两位放进来,但是估计到不了那里,只做了到分钟的。end if;end if;end if;end if;end if;if(count1Demo = "0000")  then  countSecond1 <= "1000000";                buzzer <='1';   --不响elsif (count1Demo = "0001") then  countSecond1 <= "1111001"; buzzer <='1';   --不响elsif (count1Demo = "0010") then  countSecond1 <= "0100100"; buzzer <='1';   --不响elsif (count1Demo = "0011") then  countSecond1 <= "0110000"; buzzer <='1';   --不响elsif (count1Demo = "0100") then  countSecond1 <= "0011001" ;    buzzer <='1';   --不响elsif (count1Demo = "0101") then  countSecond1 <= "0010010"; buzzer <='1';   --不响elsif (count1Demo = "0110") then  countSecond1 <= "0000010"; buzzer <='1';   --不响elsif (count1Demo = "0111") then  countSecond1 <= "1111000"; buzzer <='1';   --不响elsif (count1Demo = "1000") then  countSecond1 <= "0000000" ;    buzzer <='1';   --不响elsif (count1Demo = "1001") then  countSecond1 <= "0010000";   buzzer <='0';   --响end if;
----------------------------------------------------------------------------------------------
--------------------------------------显示秒的十位---------------------------------------------
------------------------------------------------------------------------------------------------if(count2 = "11101110011010110010100000000") then  --秒的个位,10秒计数一次,变化一次--count2Demo <= "0011";--count2Demo <= count2Demo + "0001";--if(count2Demo = "0101") then    --如果秒的十位数为6,跳回0。--count2Demo <=  "0000";--end if;--end if;if(count2Demo = "0000")  then  countSecond2 <= "1000000";          elsif (count2Demo = "0001") then  countSecond2 <= "1111001";    elsif (count2Demo = "0010") then  countSecond2 <= "0100100";elsif (count2Demo = "0011") then  countSecond2 <= "0110000";  elsif (count2Demo = "0100") then  countSecond2 <= "0011001" ;  elsif (count2Demo = "0101") then  countSecond2 <= "0010010";   end if;
----------------------------------------------------------------------------------------------
--------------------------------------显示分的个位---------------------------------------------
------------------------------------------------------------------------------------------------if(count2Demo = "0110") then  --秒的个位,60秒计数一次,变化一次--count3Demo <= count3Demo + "0001";--if(count3Demo = "1001") then    --如果分的个位数为10,跳回0。--count3Demo <=  "0000";--count4Demo <= count4Demo + "0001";--if(count4Demo = "0101") then    --如果分的十位数为6,跳回0。--count4Demo <=  "0000";--end if;--end if;--end if;if(count3Demo = "0000")  then  countMinute1 <= "1000000";              --为了让实验效果更明显,1分钟buzzer一次elsif (count3Demo = "0001") then  countMinute1 <= "1111001";    elsif (count3Demo = "0010") then  countMinute1 <= "0100100";elsif (count3Demo = "0011") then  countMinute1 <= "0110000";elsif (count3Demo = "0100") then  countMinute1 <= "0011001";elsif (count3Demo = "0101") then  countMinute1 <= "0010010";elsif (count3Demo = "0110") then  countMinute1 <= "0000010";elsif (count3Demo = "0111") then  countMinute1 <= "1111000";elsif (count3Demo = "1000") then  countMinute1 <= "0000000";elsif (count3Demo = "1001") then  countMinute1 <= "0010000";end if;
----------------------------------------------------------------------------------------------
--------------------------------------显示分的十位---------------------------------------------
------------------------------------------------------------------------------------------------if(count4 = "11011111100001000111010110000000000") then  --分的十位,10分钟计数一次--count4Demo <="0010";--count4Demo <= count4Demo + "0001";--if(count4Demo = "0101") then    --如果分的十位数为6,跳回0。--count4Demo <=  "0000";--end if;--end if;if(count4Demo = "0000")  then  countMinute2 <= "1000000";   elsif (count4Demo = "0001") then  countMinute2 <= "1111001";elsif (count4Demo = "0010") then  countMinute2 <= "0100100";elsif (count4Demo = "0011") then  countMinute2 <= "0110000";elsif (count4Demo = "0100") then  countMinute2 <= "0011001";elsif (count4Demo = "0101") then  countMinute2 <= "0010010";end if;
----------------------------------------------------------------------------------------------
--------------------------------------显示时的个位---------------------------------------------
----------------------------------------------------------------------------------------------if(count4Demo = "0110") then  --时的个位,60分钟计数一次count5Demo <= count5Demo + "0001";if(count5Demo = "1001") then    --如果时的十位数为6,跳回0。count5Demo <=  "0000";count6Demo <= count6Demo + "0001";if((count5Demo = "0100")and(count6Demo = "0010")) then    --如果时的十位数为6,跳回0。count6Demo <=  "0000";count5Demo <=  "0000";   --24点归零。end if;end if;end if;if(count5Demo = "0000")  then  countHour1 <= "0010000";elsif (count5Demo = "0001") then  countHour1 <= "1111001";elsif (count5Demo = "0010") then  countHour1 <= "0100100";elsif (count5Demo = "0011") then  countHour1 <= "0110000";elsif (count5Demo = "0100") then  countHour1 <= "0011001";elsif (count5Demo = "0110") then  countHour1 <= "0000010";elsif (count5Demo = "0111") then  countHour1 <= "1111000";elsif (count5Demo = "1000") then  countHour1 <= "0000000";elsif (count5Demo = "1001") then  countHour1 <= "0010000";end if;
----------------------------------------------------------------------------------------------
--------------------------------------显示时的十位---------------------------------------------
------------------------------------------------------------------------------------------------if(count6 = "10100111101000110101100000100000000000") then  --时的十位,10小时计数一次--count6Demo <= count6Demo + "0001";--if(count6Demo = "0010") then    --如果分的十位数为6,跳回0。--count6Demo <=  "0000";--end if;--end if;if(count6Demo = "0000")  then  countHour2 <= "1000000";elsif (count6Demo = "0001") then  countHour2 <= "1111001";elsif (count6Demo = "0010") then  countHour2 <= "0100100";end if;
----------------------------------------------------------------------------------------------if(count = "11000011010100000") then  --2 000 000计数一次,用于6个数码管快速切换count<=count - "11000011010100000"; case countDemo iswhen "0000"  => sel<=  "111110";            when "0001"  => sel<=  "111101";when "0010"  => sel<=  "111011";when "0011"  => sel<=  "110111";when "0100"  => sel<=  "101111";when "0101"  => sel<=  "011111";when others =>sel<= "111111";end case;case sel iswhen "111110"  => seg_data<=  countSecond2;--显示秒的十位。  when "111101"  => seg_data<=  countMinute1;--显示分的个位。when "111011"  => seg_data<=  countMinute2;--显示分的十位。when "110111"  => seg_data<=  countHour1;--显示时的个位。when "101111"  => seg_data<=  countHour2;   --显示时的十位。when "011111"  => seg_data<= countHour2 ;    when others =>seg_data<= countSecond1;   --显示秒的个位。end case;countDemo<=countDemo + '1';  --每秒计数一次,用于显示数字。if(countDemo = "0110") thencountDemo<="0000";end if;end if;
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
end if;
end process;
end Behavioral;

效果图:

FPGA型号:ALTERA ALINX FPGA黑金开发板 CYCLONE IV EP4CE6
使用的软件为quartus

fpga实现数码管时钟与蜂鸣器报时相关推荐

  1. 基于FPGA的遥控数字时钟设计

    基于FPGA的遥控数字时钟设计报告 ​ ​ Author:张宏宇 摘要 ​ 数字时钟是一种通过数字显示时间的计时装置,本次项目采用Cyclone Ⅳ系列芯片,使用QuartusII开发环境,使用Ver ...

  2. 数字时钟与整点报时的问题 - C51

    数字时钟与整点报时的问题 - C51 题目要求 1.利用8位数码管制作一个24小时制数字时钟,可以显示小时.分钟.秒,且中间有 ' · ' 或 ' - '间隔. 2.小时.分钟可以通过按键进行调整. ...

  3. FPGA期末项目 | 数字时钟

    戳这里下载整个项目包(已上传到CSDN资源库) 一.实验设备 FPGA开发平台.计算机.其它外接器件 二.需求分析(选题的意义.功能要求等...这里有点水,小伙伴们可以选择性跳过) 选题的意义:个人认 ...

  4. FPGA 驱动数码管动态显示(VerilogVivado)

    FPGA 驱动数码管动态显示 前言 一.数码管驱动原理 二.设计思路 三.实现代码 四.hex8_tb文件 五.上板测试 1.74HC595时序图 2. HC595_Driver设计 3.HC595_ ...

  5. FPGA初学记录——数字时钟系统搭建(上)

    FPGA初学记录--数字时钟系统搭建(上) 野火征途Pro开发板教程--数码管动态展示拓展训练,数字时钟系统搭建 文章目录 FPGA初学记录--数字时钟系统搭建(上) 前言 一.问题简述 二.功能解析 ...

  6. C语言实现单片机整点蜂鸣器报时

    求让AT89S52 LED数码显示管在显示整点的时候蜂鸣器会响起 以下是一个基于AT89S52单片机的整点蜂鸣器报时代码示例,其中使用了一个LED数码管显示当前时间,并在整点时触发蜂鸣器报时: #in ...

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

    实验三 基于FPGA的数码管动态扫描电路设计 源文件的链接放在最后啦 实验目的: (1) 熟悉7段数码管显示译码电路的设计. (2) 掌握数码管显示原理及静态.动态扫描电路的设计. 实验任务: (1) ...

  8. (30)FPGA面试题全局时钟资源及原语

    1.1 FPGA面试题全局时钟资源及原语 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题全局时钟资源及原语: 5)结束语. 1.1.2 本节引言 &quo ...

  9. FPGA学习—数码管显示

    FPGA学习--数码管显示 文章目录 FPGA学习--数码管显示 结构框架 一.硬件设计 二.verilog编写 1.计数器 2.译码模块 3.数码管扫描模块 4.顶层模块 实验结果 结构框架 数码管 ...

最新文章

  1. Java:获取数组中的子数组的多种方法
  2. laravel实现数据分页
  3. 一起谈.NET技术,在.NET Workflow 3.5中使用多线程提高工作流性能
  4. Latex学习笔记0
  5. mysql中判断字段为空
  6. tp3.2php开启事务,ThinkPHP 3.2.2实现事务操作的方法
  7. Reflector for .NET
  8. html检查输入为空,html input输入验证不为空
  9. android字符串显示textview,Android编程:TextView不显示完整字符串
  10. [Error] iostream.h: No such file or directory的解决办法
  11. oracle序列不连续,Oracle不连续的值,如何实现查找上一条、下一条
  12. VMware Workstation macOS Unlocker 下载慢的解决办法
  13. 手机邮箱看不到已发送邮件_安卓手机邮箱设置教程 教您如何使用手机接收邮件...
  14. mint-ui引用iconfont图标
  15. mysql rrd_时间序列数据库rrd启动
  16. 制作你的专属BB8机器人
  17. 回首过去,展望未来。
  18. java list去除最后一个元素_如何快速删除list中的最后一个元素?
  19. 旅行商问题的蚁群算法
  20. Postgre时间类型<>日期类型,坑了

热门文章

  1. Java节流阀设计与实现
  2. YOLOv5在无人机/遥感场景下做旋转目标检测时进行的适应性改建详解(踩坑记录)...
  3. Delivery Hero的Kubernetes之旅:从YAML泥潭到Helm乐园
  4. cyc的智商递增问题
  5. Android 蓝牙信号强度RSSI介绍
  6. kylinTOP下载安装
  7. 【博弈SG】HDOJ1846
  8. java jdk1.8源码下载_jdk-sources
  9. 计算机应用基础最要考点,计算机应用基础知识考点训练
  10. 【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查]