菜单
  

    if flag='1' then
    if count=3 then
    count<="0000";
    else
    count<=count+1;
    end if;
    else
    count<=count+1;
    if count=9 then
    count<="0000";
    end if;    
    end if;   end if;
    end process k1;
    END addram3_architecture;
    程序中当有按键信号输入时,先确定flag的状态,当其为高电平时,即小时高位为2,小时低位只能在0到3之间变动,count=3,count清零;当flag为低电平时,即小时高位为1,小时低位可以在0到9之间变动count=9时count清零。小时低位按键控制模块的仿真波形如图10所示。
     
    图10 小时低位按键控制模块波形仿真
    3.计数模块
    (1) 秒低位计数模块
    该模块框图如图11所示。模块主要完成计数向秒的高位进位,产生脉冲信号。clk1s为标准1Hz脉冲信号,当有时钟信号上升沿到来时count开始计数,当count=9,count清零,秒计数满10向分进位,os输出1。
     
    图11 秒低位计数模块逻辑框图
    秒低位计数子程序:
    LIBRARY ieee;
    USE ieee.std_logic_1164.all;
    USE ieee.std_logic_unsigned.all;
    USE ieee.std_logic_arith.all;
    ENTITY sl IS
    PORT   (clk_1s : IN STD_LOGIC;
    os : OUT STD_LOGIC;
    addr_1s : OUT STD_LOGIC_vector(3 downto 0));
    END sl;
    ARCHITECTURE sl_architecture OF sl IS
    BEGIN
    k1:process(clk_1s)
    variable count:integer range 0 to 10:=0;
    begin
    if rising_edge(clk_1s) then
    if count=9 then
    os<='1';
    count:=0;
    else
    os<='0';
    count:=count+1;
    end if;
    end if;
    addr_1s<=CONV_STD_LOGIC_VECTOR(count,4);
    end process k1;
    end sl_architecture ;
     该模块的仿真波形如图12所示。
     
    图12 秒低位计数模块波形仿真
    对于秒的高位高位计数程序只需将count=9改成count=6即可。
    (2)分低位计数器
    分模块主要完成分低位向高位的进位,产生脉冲信号。该模块框图如图13所示。图中iset为控制开关信号,当iset为低电平时,分低位由外部信号iset-addr[30]输入。当iset为高电平时随着标准时钟信号的到来开始计数,count=9时计数器清零,既分低位清零向高位进位。
     、
    图13 分低位逻辑框图
     分低位计数子程序:
    LIBRARY ieee;
    USE ieee.std_logic_1164.all;
    USE ieee.std_logic_unsigned.all;
    USE ieee.std_logic_arith.all;
    ENTITY ml IS
    PORT    (clk_1s : IN STD_LOGIC;
    iset : IN STD_LOGIC;
    iset_addr : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
    addr_1s : OUT STD_LOGIC_vector(3 downto 0);
    os : OUT STD_LOGIC);
    END ml;
    ARCHITECTURE ml_architecture OF ml IS
    BEGIN
    k1:process(clk_1s,iset)
    variable count:integer range 0 to 10:=0;
    begin
    if iset='0' then
    count:=CONV_INTEGER(iset_addr);
    addr_1s<=iset_addr;
    elsif rising_edge(clk_1s) then
    if count=9 then
    os<='1';
    count:=0;
    addr_1s<=CONV_STD_LOGIC_VECTOR(count,4);
    else
    os<='0';
    count:=count+1;
    addr_1s<=CONV_STD_LOGIC_VECTOR(count,4);
    end if;
    end if;
    end process k1;
    END ml_architecture;
    对于分高位计数模块的程序,只需将上面程序中的计数器count=9改成count=6即可。
    (3) 小时低位计数模块
    小时低位模块主要完成小时低位向高位的进位,产生脉冲信号,同时根据flag信号的不同判断出小时高位时1还是2,从而来确定小时低位变化范围是0到3或0到9,该模块框图如图14所示。iset为调整控制信号,当iset为高电平时,小时低位数据由外部按键输入,当iset为低电平时开始计数,flag为高电平时,小时高位为1,低位计数到9时向高位进位,当flag为低电平时,低位计数到3向高位进位。
  1. 上一篇:AT89C55单片机的数字音乐盒设计+仿真图+电路原理图+源码
  2. 下一篇:51单片机的角度测量系统设计+仿真图+源码
  1. 基于oversim的P2P通信仿真系统设计

  2. 基于力控组态软件的PLC系...

  3. 基于SIMATICS7-200的小型锅炉...

  4. 基于Arduino的自动浇花系统设计+电路图+程序

  5. DC-DC基于超级电容的电梯弱电供电系统设计

  6. 基于图像识别的电子锁设计+PCB电路图+程序

  7. 单片机的信号发生器的设计任务书

  8. 浅析中国古代宗法制度

  9. 上市公司股权结构对经营绩效的影响研究

  10. 高警觉工作人群的元情绪...

  11. C++最短路径算法研究和程序设计

  12. g-C3N4光催化剂的制备和光催化性能研究

  13. 现代简约美式风格在室内家装中的运用

  14. 巴金《激流三部曲》高觉新的悲剧命运

  15. 江苏省某高中学生体质现状的调查研究

  16. 中国传统元素在游戏角色...

  17. NFC协议物理层的软件实现+文献综述

  

About

优尔论文网手机版...

主页:http://www.youerw.com

关闭返回