基于LCD1602的简易秒表的设计与实现 联系客服

发布时间 : 星期六 文章基于LCD1602的简易秒表的设计与实现更新完毕开始阅读

直到key_en第二次为'1'时,en_out延迟一段时间后变为'0'。 以后的状态与此类似。

⑨BTN1复位开关消抖模块fuweixiaodou:

输入端口:clk :in std_logic; fuwei:in std_logic;

输出端口:fuwei_out:out std_logic;

仿真波形:

波形分析:

当fuwei为'1'时,fuwei_out延迟一段时间后变为'1',

然后fuwei_out又重新回到低电平'0'。

四、源程序(完整代码、含注释)

①顶层文件

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY clock IS PORT(

reset1: IN STD_LOGIC; --BTN1 start: IN STD_LOGIC; --BTN0

clk1: IN STD_LOGIC; --系统时钟50MHZ LCD_RS1 : out std_logic; --寄存器选择信号 LCD_RW1 : out std_logic; --液晶读写信号 LCD_EN1 : out std_logic; --液晶时钟信号 LCD_Data1 : out std_logic_vector(7 downto 0));

--液晶数据信号

end clock;

ARCHITECTURE struc OF clock IS

COMPONENT fpq --分频器模块fpq(500000分频) port ( );

第 21 页 共 37 页

clk : in std_logic; clkout : out std_logic

end COMPONENT;

COMPONENT fpq1 --分频器模块fpq1(50000分频) port ( );

end COMPONENT;

COMPONENT xiaodou --BTN0启动/停止开关消抖模块xiaodou port ( );

end COMPONENT;

COMPONENT fuweixiaodou --BTN1复位开关消抖模块fuweixiaodou port ( );

end COMPONENT;

COMPONENT cnt10 --10进制计数器模块cnt10 PORT

( reset,en,clk: IN STD_LOGIC; carry: OUT STD_LOGIC;

q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT;

COMPONENT cnt6 --6进制计数器模块cnt6 PORT (

reset,en,clk: IN STD_LOGIC; carry : OUT STD_LOGIC;

q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT;

COMPONENT cnt24 --24进制计数器模块cnt24

第 22 页 共 37 页

clk : in std_logic; clkout : out std_logic

clk :in std_logic; key_en:in std_logic; en_out:out std_logic

clk :in std_logic; fuwei :in std_logic; fuwei_out:out std_logic

PORT (

en,Reset,clk: in STD_LOGIC; carry: out STD_LOGIC;

qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); qb: out STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT;

COMPONENT yima --译码模块yima Port (

carry : in STD_LOGIC;

data: in std_logic_vector(3 downto 0); dataout: out std_logic_vector(7 downto 0)); end COMPONENT;

COMPONENT LCD1602 --LCD1602显示模块LCD1602 Port (

LCD_Clk: in std_logic; --状态机时钟信号

--同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间 carry: in STD_LOGIC; --前级计数部分输出的进位信号 LCD_RS: out std_logic; --寄存器选择信号 LCD_RW: out std_logic; --液晶读写信号 LCD_EN: out std_logic; --液晶时钟信号 LCD_Data : out std_logic_vector(7 downto 0); --液晶数据信号

YIMA_DATA1: in std_logic_vector(7 downto 0); --译码数据信号1,秒表百分秒位

YIMA_DATA2: in std_logic_vector(7 downto 0); --译码数据信号2,秒表十分秒位

YIMA_DATA3: in std_logic_vector(7 downto 0); --译码数据信号3,秒表秒钟部分个位

YIMA_DATA4: in std_logic_vector(7 downto 0); --译码数据信号4,秒表秒钟部分十位

YIMA_DATA5: in std_logic_vector(7 downto 0); --译码数据信号5,秒表分钟部分个位

YIMA_DATA6: in std_logic_vector(7 downto 0); --译码数据信号6,秒表分钟部分十位

YIMA_DATA7: in std_logic_vector(7 downto 0); --译码数据信号7,秒表小时部分个位

YIMA_DATA8: in std_logic_vector(7 downto 0)); --译码数据信号8,秒表小时部分十位

第 23 页 共 37 页

end COMPONENT;

SIGNAL clk2: STD_LOGIC;

--系统时钟(50MHZ)经过500000分频后得到的时钟(100HZ) SIGNAL clk3: STD_LOGIC;

--系统时钟(50MHZ)经过50000分频后得到的时钟(1KHZ) SIGNAL carry1: STD_LOGIC;

--秒表百分秒部分10进制计数器的输出进位信号 SIGNAL carry2: STD_LOGIC;

--秒表十分秒部分10进制计数器的输出进位信号 SIGNAL carry3: STD_LOGIC;

--秒表秒钟部分个位10进制计数器的输出进位信号 SIGNAL carry4: STD_LOGIC;

--秒表秒钟部分十位6进制计数器的输出进位信号 SIGNAL carry5: STD_LOGIC;

--秒表分钟部分个位10进制计数器的输出进位信号 SIGNAL carry6: STD_LOGIC;

--秒表分钟部分十位6进制计数器的输出进位信号 SIGNAL carry7: STD_LOGIC;

--秒表小时部分24进制计数器的输出进位信号

SIGNAL en_1: STD_LOGIC; --启动/停止开关消抖后信号

SIGNAL en_2: STD_LOGIC; --复位开关消抖后信号

SIGNAL q1: STD_LOGIC_VECTOR(3 DOWNTO 0); --秒表百分秒部分10进制计数器的输出信号

SIGNAL q2: STD_LOGIC_VECTOR(3 DOWNTO 0); --秒表十分秒部分10进制计数器的输出信号

SIGNAL q3: STD_LOGIC_VECTOR(3 DOWNTO 0); --秒表秒钟部分个位10进制计数器的输出信号

SIGNAL q4: STD_LOGIC_VECTOR(3 DOWNTO 0); --秒表秒钟部分十位6进制计数器的输出信号

SIGNAL q5: STD_LOGIC_VECTOR(3 DOWNTO 0); --秒表分钟部分个位10进制计数器的输出信号

SIGNAL q6: STD_LOGIC_VECTOR(3 DOWNTO 0); --秒表分钟部分十位6进制计数器的输出信号

SIGNAL qa1: STD_LOGIC_VECTOR(3 DOWNTO 0); --秒表小时部分24进制计数器的低位输出信号

SIGNAL qb1: STD_LOGIC_VECTOR(3 DOWNTO 0); --秒表小时部分24进制计数器的高位输出信号

第 24 页 共 37 页