皮皮网
皮皮网

【clion如何导入源码】【混沌分形源码】【90 坦克大战 源码】pco源码源码

来源:棋盘网页源码 发表时间:2024-12-22 11:59:44

1.vhdl 实现时钟整点报时功能

pco源码源码

vhdl 实现时钟整点报时功能

       1、码源码完成秒/分/时的码源码依次显示并正确计数;

       2、秒/分/时各段个位满正确进位,码源码秒/分能做到满向前进位;

       3、码源码定时闹钟:实现每到整点时报时,码源码扬声器发出报时声音;

       4、码源码clion如何导入源码时间设置,码源码也就是码源码手动调时功能:当认为时钟不准确时,可以分别对分/时钟进行调整;秒还可以手动调0;

       分频模块:

       源代码:

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity yxfrequencydivider is

       port(clk:in std_logic;

        hz,码源码hz,hz,hz4,hz1:out std_logic);

       end yxfrequencydivider ;

       architecture hz of yxfrequencydivider is

       signal count:std_logic_vector(9 downto 0);

       begin

       process(clk)

       begin

       if (clk'event and clk='1') then

       if (count="") then

       count<="";

       else

       count<= count+1;

       end if;

       end if;

       end process;

       hz <= count(0);

       hz <= count(1);

       hz <= count(3);

       hz4<=count(7);

       hz1<=count(9);

       end architecture;

       模块说明:由于clk的频率为hz,所以可以定义一个std_logic_vecture(9 downto 0),码源码使它不停地从加到然后又返回,由于最低位在clk脉冲到来时从0变成1,码源码然后又在下一个脉冲变回0,码源码因此最低位的码源码混沌分形源码时钟周期为clk的时钟周期的两倍,它的码源码频率就为clk频率的1/2即HZ。同理,码源码次高位的频率就为clk频率的1/2*1/2=1/4,用这种方法就可以得到各种能整除的频率,从而实现分频功能。

       进制模块

       源程序

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity m is

       port(cp:in std_logic;

       sqmsl,90 坦克大战 源码sqmsh:out std_logic_vector(3 downto 0));

       end m;

       architecture arh_m of m is

       signal stempl,stemph:std_logic_vector(3 downto 0);

       begin

       process(cp)

       begin

       if cp='1' then

       if stempl="" and stemph="" then

       stempl<="";

       stemph<="";

       else

        if stempl=9 then

        stempl<="";

        stemph<=stemph+1;

        else

        stempl<=stempl+1;

        end if;

       end if;

       end if;

       end process;

       sqmsl<=stempl;

       sqmsh<=stemph;

       end architecture;

       本模块端口说明:cp为脉冲输入端;sqmsh和sqmsl分别为小时的高位和低位输出,用来在数码管中分别显示小时的高位和低位数值,定义为std_logic_vector(3 downto 0).

        功能实现:在cp高脉冲到时执行以下程序块,如果高位为2,低位为3则高位各低位都变回0,不然再低位进行判断,若为9低位变回0,高位加1,若不为9则低位直接加1即可同样实现.

       进制模块

       源程序

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity m is

       port(cp,clr:in std_logic;

        co:out std_logic;

        sqmsl,sqmsh:out std_logic_vector(3 downto 0));

       end m;

       architecture arh_m of m is

       signal stempl,stemph:std_logic_vector(3 downto 0);

       signal stempco:std_logic;

       begin

       process(cp,clr)

       begin

       if clr='0' then

       stemph<="";

       stempl<="";

       else

        if cp'event and cp='1' then

        stempco<='0';

        if stempl=9 then

        if stemph=5 then

        stempco<='1';

        stempl<="";

        stemph<="";

        else

        stempl<="";

        stemph<=stemph+1;

        end if;

        else

        stempl<=stempl+1;

        end if;

        end if;

       end if;

       end process;

       co<=stempco;

       sqmsl<=stempl;

       sqmsh<=stemph;

       end architecture;

       本模块端口说明:cp为脉冲信号输入端;clr为置0端,并且低电平有效,用来在校时时秒位清零;co为进位输入端;sqmsh和sqmsl分别是秒或分的高位或低位,定义为std_logic_vector(3 downto 0),用来分别在数码管中显示读数.

        功能说明:以cp和clr而敏感变量,先判断clr是否为0,若为0则stemph种stempl都为,然后分别赋值给sqmsh和sqmsl;如果不为0,则执行累加;否则,再判断高位是否为5,若为5则进位输出为1、低位和高位都赋予0,若不为5则高位加1,低位赋予0.从而实现了进制的累加.

       扫描显示及译码模块

       源程序

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity dongtaism is

       port(clk:in std_logic;

        s:in std_logic_vector(7 downto 0);

        f:in std_logic_vector(7 downto 0);

        m:in std_logic_vector(7 downto 0);

        selout:out std_logic_vector(5 downto 0);

        segout:out std_logic_vector(6 downto 0));

       end dongtaism;

       architecture a of dongtaism is

       signal temp:std_logic_vector(2 downto 0);

       signal seg:std_logic_vector(6 downto 0);

       signal sel:std_logic_vector(5 downto 0);

       begin

       process(clk)

       variable num:std_logic_vector(3 downto 0);

       begin

       if (clk'event and clk='1' ) then

        if temp>=5 then

        temp<="";

        else

        temp<=temp+1;

        end if;

        case temp is

        when "" =>num:=s(7 downto 4);

        sel<="";

        when "" =>num:=s(3 downto 0);

        sel<="";

        when "" =>num:=f(7 downto 4);

        sel<="";

        when "" =>num:=f(3 downto 0);

        sel<="";

        when "" =>num:=m(7 downto 4);

        sel<="";

        when "" =>num:=m(3 downto 0);

        sel<="";

        when others=>sel<="";

        end case;

        case num is

        when""=>seg<="";

        when""=>seg<="";

        when""=>seg<="";

        when""=>seg<="";

        when""=>seg<="";

        when""=>seg<="";

        when""=>seg<="";

        when""=>seg<="";

        when""=>seg<="";

        when""=>seg<="";

        when others=>seg<="";

        end case;

       end if;

       end process;

       selout<=sel;

       segout<=seg;

       end architecture;

       本模块端口说明:stempl、stemph、ftempl 、ftemph、mtempl、自动导入按键源码mtemph

       分别为时,分,秒的输入端,定义为std_logic_vector(7 downto 0);segout为七端显示管的输出,定义为std_logic_vector(6 downto 0);selout为扫描地址端,定义为std_logic_vector(5 downto 0),某一时刻只有一个为1,对应的数组号即为当前扫描的数码管的编号.

       功能实现:定义一个std_signal_vector(2 downto 0)变量addr,它在0和5之间不断的循环,用来指示当前扫描的哪一根管,循环用if addr>=5 then addr<=””; else addr<=addr+1;end if;实现.再定义一个类型为std_logic_vector(5 downto 0)的tempaddr信号,它用来产生一个长度为6的数,该数在同一时刻只有一位是高电平表示正在扫描该显示管,在进程结束时它的值将赋给selout输出.定义一个std_logic_vector(6 downto 0)类型的temp_display,用来存放将由4位BCD码编码而来的7段显示码.最后在进程中定义一个std_logic_vector(3 downto 0)类型的tempnum变量,用来存放时、分、秒的高位或低位,然后将该数编码成7段显示码,并赋给temp_display信号。具体算法如下:

       建立一个以cp脉冲为敏感变量的闪电突击指标源码进程,先判断是否是cp的高电平脉冲,若不是则什么也不执行,若是高电平脉冲,则执行以下程序。Adder加1,用case语句根据adder的值,给tempnum赋予当前要扫描的数码管的值,用case语句根据tempnum的值编译成对应的7段显示管的值并赋给temp_display,当进程结束时把temp_display的值赋给segout,把tempaddr的值赋给selout,然后由这两个端口输出。

       整点报时模块:

       源程序

       library ieee;

       use ieee.std_logic_.all;

       use ieee.std_logic_unsigned.all;

       entity baoshi is

       port(m1,m0,s1,s0:in std_logic_vector(3 downto 0);

       sig,sig1k:out std_logic);

       end baoshi;

       architecture behave of baoshi is

       begin

       process(m0)

       begin

       sig<='0';

       sig1k<='0';

       if m1="" and m0="" then

        if s1=""and (s0="" or s0="" or s0="" or s0="" or s0="") then

        sig<='1';

        else

        sig<='0';

       end if;

       end if;

       if m1="" and m0=""and s1="" and s0="" then

        sig1k<='1';

        else

        sig1k<='0';

       end if;

       end process;

       end behave;

       本模块端口说明:m1,m0,s1,s0分别为分和秒的高低位的输入;sig,sig1k分别为hz和1khz鸣叫的控制信号。

       功能实现:定义temp,temp1k信号,用于存放两种频率报时的控制信号;定义一个以m0为敏感信号的一个比较进程,在进程一开始的时候先给temp和temp1k赋予初值0,然后判断分是否为分,若是则判断秒的高位是否是5,若是则如果秒的低位为0、2、6、8则temp为1;若分不是则判断分和秒是否都为0,若都为0则temp1k为1。进程结束时把temp,temp1k的值分别赋给sig,sig1k。

       然后连接顶层图

相关栏目:休闲