菜单
  

    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. 基于中频信号的家用治疗...

  2. 基于嵌入式技术的智能家...

  3. 基于FPGA竞赛系统设计+程序

  4. Matlab基于前馈控制的加热炉温度控制系统设计

  5. MEMS基于SHARC型DSP的组合导航算法实现

  6. 基于LabVIEW的车牌图像识别技术研究

  7. 基于LabVIEW和MATLAB混合编程...

  8. java+mysql车辆管理系统的设计+源代码

  9. 电站锅炉暖风器设计任务书

  10. 中考体育项目与体育教学合理结合的研究

  11. 酸性水汽提装置总汽提塔设计+CAD图纸

  12. 杂拟谷盗体内共生菌沃尔...

  13. 大众媒体对公共政策制定的影响

  14. 当代大学生慈善意识研究+文献综述

  15. 十二层带中心支撑钢结构...

  16. 乳业同业并购式全产业链...

  17. 河岸冲刷和泥沙淤积的监测国内外研究现状

  

About

751论文网手机版...

主页:http://www.751com.cn

关闭返回