多功能数字时钟(VHDL)

文章目录

  • 一、课程设计内容
  • 二、实验方案分析与设计
    • 1.功能要求
    • 2.各个模块描述
  • 三、具体实现过程描述
    • 1、小时计时
    • 2、分计时
    • 3、秒计时
    • 4、闹钟小时计时
    • 5、闹钟分计时
    • 6、闹钟比较模块
    • 7、控制器模块(设置状态转换)
    • 8、控制显示模块(显示时间以及校时,校分,秒清零,设置闹钟)
    • 9、分频器模块
    • 10、报时模块
    • 11、动态扫描显示模块
    • 12、二选一模块
    • 13、倒计时模块
    • 14、倒计时开关模块
  • 四、结论实现效果


一、课程设计内容

1、能进行正常的时、分、秒计时,分别用6个七段数码管动态扫描显示时、分、秒。时时-分分-秒秒
2、利用按键开关快速调整时间(校准):时、分
3、通过按键开关设定闹铃时间,到了设定时间发出闹铃提示音,提示音长度为1分钟
4、通过按键开关设定倒计时的时间,通过开关启动/暂停倒计时,倒计时为0时发出提示音,提示音长度为1分钟
5、整点报时:在59分50、52、54、56、58秒时按500Hz频率报时,在59分60秒时用1KHz的频率作最后一声整点报时
6、其他功能自由发挥:秒表、多个闹钟、多个时区、功能选择控制等

二、实验方案分析与设计

1.功能要求

在这里插入图片描述
根据功能要求的描述,我将该实验一共分为十四个模块进行设计,各个模块使用vhdl语言设计,顶层使用电路图的层次化设计。分别有以下模块:小时计时,分计时,秒计时,闹钟小时计时,闹钟分计时,控制器模块,控制显示模块,扫描显示模块,分频器模块,二选一模块,闹钟比较模块、报时模块,倒计时模块,倒计时开关模块。
各个模块设计的思维导图:
在这里插入图片描述

2.各个模块描述

1、小时计时:24进制计数器。正常显示时间时,每当分中产生的进位信号到达一次时自增一次,当时计数器每次计数到23时,在下一个分进位信号到来时,时变为00。当在校时时,接入1hz的时钟频率,每次时钟上升沿到来时自增一次,当时计数器计数到23时,在下一个时钟上升沿到来时,时直接变为00。
2、分计时:60进制计数器。正常显示时间时,每当秒中产生的进位信号到达一次分自增一次,当分计数器每次计数到59时,在下一个秒进位信号到来时,分变为00,并且产生进位。当在校分时,接入1hz的时钟频率,每次时钟上升沿到来分自增一次,当分计数器计数到59时,在下一个时钟上升沿到来时,分直接变为00,并不产生进位。
3、秒计时:60进制计数器。接入1hz的时钟频率,正常显示时间的状态下,每次时钟上升沿到来后秒加一,当秒计数器每次计数到59时,在下一个时钟边沿到来时,秒变为00,产生进位。当在秒清零时,秒直接变为00不产生进位。
4、闹钟小时计时:24进制计数器。设置闹钟的小时时,接入1hz的时钟频率,每次时钟上升沿到来时自增一次,当时计数器计数到23时,在下一个时钟上升沿到来时,时直接变为00。
5、闹钟分计时:60进制计数器。设置闹钟的分钟时,接入1hz的时钟频率,每次时钟上升沿到来分自增一次,当分计数器计数到59时,在下一个时钟上升沿到来时,分直接变为00,并不产生进位。
6、控制器模块:控制计时时间状态,调计时的时、分、秒状态,调闹铃的时、分的状态这六个状态之间的转换。在enset打开的条件下可以,通过开关k的开闭控制状态转换,第一次打开开关k,状态从正常计时时间状态转换到校时,再次关闭开关状态将变换为校分,接下来秒清零,调节闹钟的时,调节闹钟的分,正常计时,如此循环。不论什么状态,当打开reset时,都会使当前状态变为正常计时的状态。
7、控制显示模块:控制LED显示的是正常显示时间还是校时、校分、秒清零、设置闹钟时、分的显示,当在校时、校分、秒清零、设置闹钟时、分的显示中,被设置的数字以2hz的频率闪烁,并以1hz的频率自增,当打开set键时停止自增。
8、扫描显示模块:以八个LED数码管扫描显示对应的数字,每一次时钟脉冲到来显示一个,八个为一组循环显示,当频率较大时因为人的视觉停留效果,使得显示表现为同时显示的效果。
9、分频器模块:输入一个1khz的时钟频率,对1khz的时钟脉冲每两个脉冲输出一个脉冲如此得到500hz的频率,同理得到2hz和1hz的频率。
10、二选一模块:通过显示正常计时时间和显示闹钟时间,选择合适的信号作为调整对应时间的控制条件。当在正常计时时用秒用1hz的时钟脉冲,时、分用进位信号控制,在校时、校分、设置闹钟时、分时各个都用1hz的时钟信号作为控制信号。
11、闹钟比较模块:若闹钟的时分与目前的时间的时分相同,则输出结果为1,否则输出为0.
12、报时模块:当控制声音的开关打开时,扬声器在每一小时59分的51、53、57秒发出频率为500Hz的低音,在59分钟的第59秒发频率为1000Hz的高音,结束时为整点,实现整点报时功能。当闹钟比较模块输出为1时,扬声器发出频率为1000Hz的高音,持续时间为60秒。
13、倒计时模块:设置倒计时的时间,时间会按秒钟每次减少1秒,直到归零。
14、倒计时开关模块:当控制声音的开关打开时,倒计时时间到了以后,会有1分钟的提示音。

三、具体实现过程描述

1、小时计时

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith;
entity cnt24 is
port(sld0:buffer std_logic_vector(3 downto 0);sld1:buffer std_logic_vector(7 downto 4);clk :in std_logic);
end cnt24;
architecture rtl of cnt24 is
signal s:std_logic_vector(7 downto 0);
begin
process(clk)	
begins<=sld1&sld0;
if (clk'event and clk='1') thenif s="00100011"thensld1<="0000";sld0<="0000";elsif sld0="1001" thensld0<="0000";sld1<=sld1+1;else sld0<=sld0+1;end if;
end if;
end process;
end rtl;

模块图如下:在这里插入图片描述

2、分计时

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith;
entity cnt60 is
port(sld0:buffer std_logic_vector(3 downto 0);
sld1:buffer std_logic_vector(7 downto 4);
co:  out std_logic;
clk :in std_logic);
end cnt60;
architecture rtl of cnt60 is
begin
process(clk)
begin
if (clk'event and clk='1') then
if (sld1="0101"and sld0="1001")then
sld1<="0000"; sld0<="0000";co<='1';
elsif sld0="1001" then
sld0<="0000";
sld1<=sld1+1;co<='0';
else sld0<=sld0+1;co<='0';
end if;
end if;
end process;
end rtl;

模块图如下:在这里插入图片描述

3、秒计时

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith;
entity cnts60 is
port(sld0:buffer std_logic_vector(3 downto 0);  --小时个位sld1:buffer std_logic_vector(7 downto 4);  --小时十位co:  out std_logic;rest:in std_logic;clk :in std_logic);
end cnts60;
architecture rtl of cnts60 is
begin
process(clk,rest)
begin
if rest='1' then sld1<="0000"; sld0<="0000";
elsif (clk'event and clk='1') thenif (sld1="0101"and sld0="1001")then    --当sld1=5,sld0=9时sld1<="0000"; sld0<="0000";co<='1';--全清零,co输出“1”elsif sld0="1001" thensld0<="0000";sld1<=sld1+1;co<='0';        -- sld1自加“1else sld0<=sld0+1;co<='0';end if;
end if;
end process;
end rtl;

模块图如下:在这里插入图片描述

4、闹钟小时计时

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith;
entity cnth24b is
port(sld0:buffer std_logic_vector(3 downto 0);sld1:buffer std_logic_vector(7 downto 4);en:in std_logic;clk :in std_logic);
end cnth24b;
architecture rtl of cnth24b is
signal s:std_logic_vector(7 downto 0);
begin
process(clk,en,sld1,sld0)
begins<=sld1&sld0;
if (clk'event and clk='1') thenif en='1' thenif s="00100011"thensld1<="0000";sld0<="0000";elsif sld0="1001" thensld0<="0000";sld1<=sld1+1;else sld0<=sld0+1;end if;end if;
end if;
end process;
end rtl;

5、闹钟分计时

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith;
entity cntm60b is
port(sld0:buffer std_logic_vector(3 downto 0);sld1:buffer std_logic_vector(7 downto 4);en:in std_logic;clk :in std_logic);
end cntm60b;
architecture rtl of cntm60b is
begin
process(clk)
begin
if (clk'event and clk='1') thenif en='1' thenif (sld1="0101"and sld0="1001")thensld1<="0000"; sld0<="0000";elsif sld0="1001" thensld0<="0000";sld1<=sld1+1;else sld0<=sld0+1;end if;end if;
end if;
end process;
end rtl;

6、闹钟比较模块

library ieee;
use ieee.std_logic_1164.all;
entity comp is
port(th1,tm1:in std_logic_vector(7 downto 4);th0,tm0:in std_logic_vector(3 downto 0);bh1,bm1:in std_logic_vector(7 downto 4);bh0,bm0:in std_logic_vector(3 downto 0);
compout:out std_logic);
end comp;
architecture rtl of comp is
begin
process(th1,tm1,bh1,bm1,th0,tm0,bh0,bm0)
begin
if( th1=bh1 and tm1=bm1  and th0=bh0 and tm0=bm0 ) thencompout<='1';--当正常计数时间与闹钟定时时间相等时compout输出1
else compout<='0';
end if;
end process;
end rtl;

7、控制器模块(设置状态转换)

–输入端口enset,k,set键来控制6个状态,这六个状态分别是
–显示计时时间状态,调计时的时、分、秒状态,调闹铃的时、分的状态,reset键是复位键,用来回到显示计时时间的状态。

library ieee;
use ieee.std_logic_1164.all;
entity contl is
port(clk,enset,k,set,reset:in std_logic;
cth,ctm,cts,cbh,cbm,flashh,flashm,flashs,sel_show:out std_logic);
end contl;
architecture rtl of contl is
type stats is (s0,s1,s2,s3,s4,s5);            --定义6个状态
signal current_state,next_state:stats:=s0;
begin
process(clk,reset)
begin
if reset='1' thencurrent_state<=s0;
elsif clk'event and clk='1' thenif reset='0' thencurrent_state<=next_state;end if;
end if;
end process;
process(current_state,enset,k,set)
begin
case current_state iswhen s0=>cth<='0';ctm<='0';cts<='0';cbh<='0';cbm<='0';flashh<='0';flashm<='0';flashs<='0';sel_show<='0';--sel_show为'0'时显示正常时间,为1时显示闹钟时间if (enset='1' and k='1')then    --若enset和k为“1”,next_state<=s1;                --由s0态转到s1态else next_state<=s0;end if;when s1=>ctm<='0';cts<='0';cbh<='0';cbm<='0';flashh<='1';flashm<='0';flashs<='0';sel_show<='0';if set='1' then cth<='1';    --若set为“1”,cth输出“1else cth<='0';                --进入调小时状态。end if;if (enset='1' and k='0')then  --若enest为“1,k为“0”,next_state<=s2;            --由s1态转到s2态else next_state<=s1;end if;when s2=>cth<='0';cts<='0';cbh<='0';cbm<='0';flashh<='0';flashm<='1';flashs<='0';sel_show<='0';---if set='1' then ctm<='1';   else ctm<='0';end if;if(enset='1' and k='1')thennext_state<=s3;else next_state<=s2;end if;when s3=>cth<='0';ctm<='0';cbh<='0';cbm<='0';flashh<='0';flashm<='0';flashs<='1';sel_show<='0';if set='1' then cts<='1';else cts<='0';end if;if (enset='1' and k='0')thennext_state<=s4;else next_state<=s3;end if; when s4=>cth<='0';ctm<='0';cts<='0';cbm<='0';flashh<='1';flashm<='0';flashs<='0';sel_show<='1';if set='1' then cbh<='1';   else cbh<='0';         end if;if(enset='1' and k='1')thennext_state<=s5;else next_state<=s4;end if;when s5=>cth<='0';ctm<='0';cts<='0';cbh<='0';flashh<='0';flashm<='1';flashs<='0';sel_show<='1';if set='1' then cbm<='1';else cbm<='0';end if;if(enset='1' and k='0')thennext_state<=s0;else next_state<=s5;end if; 
end case;
end process;
end rtl;

8、控制显示模块(显示时间以及校时,校分,秒清零,设置闹钟)

--该模块实现了数码管既可以显示正常时间,又可以显示闹钟时间的功能;调时,定时闪烁功能也在此模块中真正实现。
library ieee;
use ieee.std_logic_1164.all;
entity show_con is
port(th1,tm1,ts1:in std_logic_vector(7 downto 4);th0,tm0,ts0:in std_logic_vector(3 downto 0);bh1,bm1:in std_logic_vector(7 downto 4);bh0,bm0:in std_logic_vector(3 downto 0);sec1,min1,h1: out std_logic_vector(7 downto 4);sec0,min0,h0: out std_logic_vector(3 downto 0);q2Hz,flashs,flashh,flashm,sel_show:in std_logic);
end show_con;
architecture rtl of show_con is
begin
process(th1,tm1,ts1,th0,tm0,ts0,bh1,bm1,bh0,bm0,q2Hz,flashs,flashh,flashm,sel_show)
begin
if sel_show='0'thenif ( flashh='1'and q2Hz='1')thenh1<="1111";h0<="1111";  --显示小时数码管以2Hz闪烁min1<=tm1;min0<=tm0;sec1<=ts1;sec0<=ts0;elsif (flashm='1'and q2Hz='1')thenh1<=th1;h0<=th0;min1<="1111";min0<="1111";sec1<=ts1;sec0<=ts0;elsif (flashs='1'and q2Hz='1')thenh1<=th1;h0<=th0;min1<=tm1;min0<=tm0;sec1<="1111";sec0<="1111";elseh1<=th1;h0<=th0;min1<=tm1;min0<=tm0;sec1<=ts1;sec0<=ts0;end if;
elsif sel_show='1'then--若sel_show为“1”,数码管显示闹钟时间if(flashh='1' and q2Hz='1')thenh1<="1111";h0<="1111";min1<=bm1;min0<=bm0;sec1<="0000";sec0<="0000";elsif ( flashm='1' and q2Hz='1')thenh1<=bh1;h0<=bh0;min1<="1111";min0<="1111";sec1<="0000";sec0<="0000";elseh1<=bh1;h0<=bh0;min1<=bm1;min0<=bm0;sec1<="0000";sec0<="0000";end if ;
end if;
end process;
end rtl;

9、分频器模块

---输入一个频率为1khz的CLK,利用计数器分出500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY fdiv IS
PORT  (clk: IN STD_LOGIC ;                --输入时钟信号(1khz)q500Hz: BUFFER STD_LOGIC;q2Hz: BUFFER STD_LOGIC;q1Hz: OUT STD_LOGIC);
END fdiv ;
ARCHITECTURE bhv OF fdiv IS
BEGINP500HZ:PROCESS(clk)              --1KHz作为输入信号,分出q500Hz
VARIABLE cout:INTEGER:=0;
BEGIN
IF clk'EVENT AND clk='1' THENcout:=cout+1;IF cout=1 THEN q500Hz<='0';          --二分频ELSIF cout=2 THEN cout:=0;q500Hz<='1';END IF; 
END IF;
END PROCESS;
P2HZ:PROCESS(q500Hz)
VARIABLE cout:INTEGER:=0;
BEGIN
IF q500Hz'EVENT AND q500Hz='1' THENcout:=cout+1;IF cout<=125 THEN q2Hz<='0';ELSIF cout<250 THEN q2Hz<='1';ELSE cout:=0;END IF; 
END IF;
END PROCESS;
P1HZ:PROCESS(q2Hz)
VARIABLE cout:INTEGER:=0;
BEGIN
IF q2Hz'EVENT AND q2Hz='1' THENcout:=cout+1;IF cout=1 THEN q1Hz<='0';ELSIF cout=2 THEN cout:=0;q1Hz<='1';END IF; 
END IF;
END PROCESS;
END bhv;

10、报时模块

--该模块既实现了整点报时的功能,又实现了闹铃的功能,蜂鸣器通过所选频率的不同,而发出不同的声音。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bel is
port(tm1,ts1:in std_logic_vector(7 downto 4);
tm0,ts0:in std_logic_vector(3 downto 0);
compout,q1KHz,q500Hz,openbel:in std_logic;
bell:out std_logic);
end bel;
architecture rtl of bel is
signal t:std_logic_vector(7 downto 0);
begin
process(compout,q500Hz,q1KHz,openbel,tm1,tm0,ts1,ts0)
begin
if (openbel ='0' ) then
bell<='0';
end if;
if (openbel ='1' ) thenif (compout='1') then        -- compout=1,闹铃响bell<=q1KHz;              --bell输出1KHzelsif (tm1="0101" and tm0="1001"and ts1="0101")then----整点报时case ts0 iswhen"0001"=>bell<=q500Hz;when"0011"=>bell<=q500Hz;when"0101"=>bell<=q500Hz;when"0111"=>bell<=q500Hz;  --bell输出500Hzwhen"1001"=>bell<=q1KHz;    --bell输出1KHzwhen others=>bell<='0';end case;else bell<='0';end if;
end if;
end process;
end rtl;

11、动态扫描显示模块

--6组输入信号和7个数据输出信号和8个位选通信号来实现数码管的驱动和信号扫描,进而实现了时钟时,分,秒的动态显示。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity SCAN_LED is
port(clk1:in std_logic;
h0:in std_logic_vector(3 downto 0);
h1:in std_logic_vector(7 downto 4);
min0:in std_logic_vector(3 downto 0);
min1:in std_logic_vector(7 downto 4);
sec0:in std_logic_vector(3 downto 0);
sec1:in std_logic_vector(7 downto 4);
ledag:out std_logic_vector(6 downto 0);
se:out std_logic_vector(2 downto 0));
end;
architecture one of SCAN_LED is
signal cnt6:std_logic_vector(2 downto 0);
signal  a: std_logic_vector(3 downto 0) ;
begin
p1:process(clk1)
begin
if clk1'event and clk1 ='1' then
cnt6<=cnt6+1;
end if;
se<=cnt6;
end process p1;
p2:process(cnt6,h1,h0,min1,min0,sec1,sec0)
begin
case cnt6 is                   --控制数码管位选when "111"=>a<=sec0;---表示第八个位置的显示为when "110"=>a<=sec1;when "101"=>a<="1010";----当sel1为10的时候七段码中g段发光(第三和第六个位置为'-')when "100"=>a<=min0;when "011"=>a<=min1;when "010"=>a<="1010";when "001"=>a<=h0;when "000"=>a<=h1;when others=>a<="XXXX";
end case;end  process p2;
p3:process(a)
begin
case a is                       --控制数码管段选
when  "0000"=>ledag<="0111111";
when  "0001"=>ledag<="0000110";
when  "0010"=>ledag<="1011011";
when  "0011"=>ledag<="1001111";
when  "0100"=>ledag<="1100110";
when  "0101"=>ledag<="1101101";
when  "0110"=>ledag<="1111101";
when  "0111"=>ledag<="0000111";
when  "1000"=>ledag<="1111111";
when  "1001"=>ledag<="1101111";
when  "1010"=>ledag<="1000000";		
when others=>ledag<="0000000";
end case;
end process p3;
end;

12、二选一模块

ENTITY mux21a IS 
PORT(a,b,s:IN BIT;
y:OUT BIT);
END ENTITY mux21a;
ARCHITECTURE one OF mux21a IS
BEGIN
PROCESS(a,b,s)
BEGIN
IF s='0' THEN
y<=a;ELSE          --若s=0,y输出a,反之输出b。
y<=b;
END IF;
END PROCESS;
END ARCHITECTURE one;

13、倒计时模块

--设置倒计时时间,调频率
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith;
entity daojishi isport(sld0:buffer std_logic_vector(3 downto 0);sld1:buffer std_logic_vector(7 downto 4);en:in std_logic;clk :in std_logic);
end daojishi;
architecture rtl of daojishi isbeginprocess(clk)beginif (clk'event and clk='1') thenif en='1' thenif (sld1="1001"and sld0="1001")thensld1<="0000"; sld0<="0000";elsif sld0="1001" thensld0<="0000";sld1<=sld1+1;else sld0<=sld0+1;end if;end if;end if;end process;
end rtl;

14、倒计时开关模块

--开关控制倒计时进度
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith;
entity bel1 isport(sld0:in std_logic_vector(3 downto 0);sld1:in std_logic_vector(7 downto 4);clk:in std_logic;en:in std_logic;compout:out std_logic);
end bel1;
architecture rtl of bel1 isbeginprocess(clk,en,sld1,sld0)variable sld_1:std_logic_vector(7 downto 4);variable sld_0:std_logic_vector(3 downto 0);beginsld_0:=sld0;sld_1:=sld1;
if(en='1') thenif (clk'event and clk='1') thenwhile(sld_1/="0000" and sld_0/="0000")loopif sld_0="0000" thensld_0:="1001";sld_1:=sld_1-1;else sld_0:=sld_0-1;end if;end loop;if (sld_1="0000"and sld_0="0000")thencompout<='1';end if;end if;else compout<='0';
end if;end process;
end rtl;

顶层电路图如下:在这里插入图片描述

四、结论实现效果

用五个开关,以及一个1khz的时钟脉冲控制。
(1)reset开关为复位键,当打开该开关时显示正常计时时间。
(2)Openbel控制声音的开关,打开时有声音,关闭时没有声音。
(3)Enset控制是否可以进行状态转换,打开时可以转换状态,关闭时不可以。
(4)K控制状态之间的转换,在enset打开并且reset键关闭的条件下,每开一次或者关一次开关改变一次状态。
(5)Set键控制校对时间设置闹钟时对应的数字是否变化。打开时暂停改变,关闭时继续依时钟频率改变。
(6)clk为时钟频率,接入1khz的频率。

1 功能1——正常显示时分秒的效果
成功编译并运行,打开了K1键后,该功能便得以实现。数码管便显示出时时—分分—秒秒。
2 功能2——利用按键快速校时
关闭K1,打开K3,调整K4,打开K5便可实现对时、分、秒进行校时。调整到秒的时候,再调整K5,可以对秒进行清零操作。
3 功能3——设置闹钟功能
关闭K1,打开K3,调整K4到第四次,打开K5,便可以设置闹钟时间。再次调整K4便可以从时到分,秒。打开K2,到了闹铃规定的时间后,便会响铃一分钟。
4 功能4——设置倒计时报时功能
同功能3的实现和操作,倒计时到0后,便会响铃一分钟。
5 功能5——设置整点报时功能并能发出不同频率的声音
打开K1,打开K2,当时间到了每个小时的59分,50秒时,在50、52、54、6、58秒时会按500Hz频率报时,在59分60秒时会用1KHz的频率作最后一声整点报时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620951.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于FPGA的简易数字时钟

基于FPGA的可显示数字时钟&#xff0c;设计思路为自底向上&#xff0c;包括三个子模块&#xff1a;时钟模块&#xff0c;进制转换模块&#xff0c;led显示模块。所用到的FPGA晶振频率为50Mhz&#xff0c;首先利用它得到1hz的时钟然后然后得到时钟模块&#xff0c;把时钟模块输出…

数字逻辑之数字时钟课程设计(含proteus仿真图及代码)

一、设计要求 1、设计一个能显示日期、小时、分钟、秒的数字电子钟&#xff0c;并具有整点报时的功能。  2、可手动校正时、分时间和日期值&#xff0c;时间以24小时为一个周期&#xff0c;有校时功能&#xff0c;可以分别对时及分进行单独校时&#xff0c;使其校正到标准时间…

数电实验:数字时钟设计 (经验分享,仅供参考)

实 验 目 的 一、独立完成一个数字小系统的设计 二、基于实验箱对设计进行验证 实验内容: 能够显示时、分、秒共6位数字&#xff1b; 考虑使用实验箱时钟&#xff08;频率包括1M、500K、 250K、100K、10K、1K等&#xff09;&#xff1b; 考虑使用实验箱数码管输出接口。 …

数据结构】二叉树篇|超清晰图解和详解:后序篇

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 你不能要求一片海洋&#xff0c;没有风暴&#xff0c;那不是海洋&#xff0c;是泥塘——毕淑敏 目录 一、核心二、题目 一、核心 我们清楚…

Yandex SEO和Google SEO有啥区别?5000字说必须要了解的一些事儿

最近筋斗云SEO服务有做一些俄罗斯市场的SEO&#xff0c;而做俄罗斯的SEO相当于就是要做Yandex的SEO。对比Google的SEO优化&#xff0c;其实有比较多的区别&#xff0c;但总体算法、逻辑等等都大致相似。本文从Linus自己的研究和搜集的公开信息&#xff0c;对比一下Google和Yand…

阿里,百度,腾讯,360,新浪,网易,小米等开源项目

奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上&#xff0c;修改了大量bug&#xff0c;添加了很多功能特性。目前该项…

大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等

红色字体是现阶段比较火的 ---------------------------------------------------------------------------------------------------------------- 奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于M…

(读) 周鸿祎重新思考360(有感)

为什么80%的码农都做不了架构师&#xff1f;>>> 我们的红衣教主——周鸿祎&#xff08;yi&#xff09; 我只能从我的印象中和对他的了解中说出&#xff1a; 公司的人群 规模&#xff1a;800&#xff08;上市前&#xff09;-3/4000人&#xff08;目前&#xff09;目…

WIFI市场,除了免流量还能如何玩?

此前手机QQ公测QQWiFi功能&#xff0c;在最近发布的手机QQ5.3安卓版本中&#xff0c;正式全员开放QQwifi功能&#xff0c;用户可以通过简单几步接入运营商和商户的500多万WIFI热点&#xff0c;巨大的用户基础让本已热闹的WIFI市场又增变数。在此之前&#xff0c;微信、小米、阿…

java版-wifi无线网络搭建

这几天 360出了一款随身WIFI&#xff0c;非常小巧&#xff0c;使用也比较方便。插在USB的接口上就能自动创建一个无线网络环境。但是价格却要19.9元&#xff0c;相信大部分的孩子会觉得这么便宜呀。赶快入手。但是真的值这个价格吗&#xff1f;我可以说这个玩意毫无技术含量&am…

关于类的隐形生成函数

https://www.youtube.com/watch?ve8Cw17p_BiU&listPL5jc9xFGsL8FWtnZBeTqZBbniyw0uHyaH&index6 https://www.youtube.com/watch?vKMSYmY74AEs&listPLE28375D4AC946CC3&index4 如果只有copy asignment operator, 那么default construct will be generated as…

证券低延时环境设置并进行性能测试

BIOS设置BIOS参考信息 关闭 logical Process Virtualization Technology 在System Profiles Settings 中System Profile 选择Performance Workload Profile 选择HPC Profile OS中信息参考在/etc/default/grub文件中添加 intel_idle.max_cstate=0 processor.max_cstate=0 idle=p…

探索Java的ReentrantLock:实现并发锁的强大力量

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;java系列 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

苹果基带坏了怎么办_iPhone12 上市,苹果这次有哪些改变

苹果每年一度发布新品时间一般在9月份 但今年疫情使得发布延后&#xff0c;这里对iPhone12网上流传的配置做下总结 通讯方面: 这次毫无疑问的事iPhone12从之前的4G升级到了5G&#xff0c;使用高通X55基带&#xff0c;这次再也没用英特尔的基带了&#xff0c;英特尔基带手机信号…

iPhone12基带确认,果粉放心

在iPhone12发布的时候都没有提到iPhone12到底用的是什么基带&#xff0c;我之前在粉丝留言下方说了是高通基带&#xff0c;我当时说可能部分手机是因特尔部分是高通&#xff0c;今天有人在社交媒体发布了iPhone12的基带从中可以看出本次iPhone12采用的是高通的X55基带&#xff…

android备份基带,备份过SHSH,保留基带,直刷5.0.1系统完美详细教程

此教程仅适用于备份SHSH直刷任何高于现手机版本的任何系统&#xff0c;我的系统是4.3.3直刷到5.0.1.可能刷法不同&#xff0c;我的用电量貌似没有增加&#xff0c;依然比较省电,没有大家说的掉电突然增加的现象。而且&#xff0c;刷完5.0.1&#xff0c;我的3G开关也依然存在&am…

苹果或方案自立研制iPhone基带芯片

据业界人士称&#xff0c;苹果方案组成一支新的研制团队去开发基带处理器&#xff0c;那些基带处理器将被用于它方案在2015年发布的新款iPhone中。知情人士还说&#xff0c;苹果方案将基带芯片的订单交给三星电子和Globalfoundries。 尽管某些知情人士还说&#xff0c;苹果或许…

使用Easy Chm制作chm文档步骤

前言 软件发布后需要相应的文档说明&#xff0c;CHM是微软新一代的帮助文件格式&#xff0c;利用HTML作源文&#xff0c;把帮助内容以类似数据库的形式编译储存。因为使用方便&#xff0c;形式多样也常被采用作为电子书的格式&#xff1b; 制作类似的chm文档可以使用Easy Chm软…

JWT 技术的使用

应用场景&#xff1a;访问某些页面&#xff0c;需要用户进行登录&#xff0c;那我们如何知道用户有没有登录呢&#xff0c;这时我们就可以使用jwt技术。用户输入的账号和密码正确的情况下&#xff0c;后端根据用户的唯一id生成一个独一无二的token&#xff0c;并返回给前端&…

bindService的调用流程

使用bindService去调用service&#xff0c;如果有多个客户端调用&#xff0c;onBind方法只会被调用一次&#xff0c;由于bindService嗲处理中&#xff0c;AMS是一个中间商&#xff0c;猜测这个处理也是AMS里进行的&#xff0c;这里我们再看看bindService的调用流程 public clas…