fish.liu 发表于 2025-4-27 11:36:46

fpga

FPGA开发板DE2-70 LCD1602屏使用VHDL语言第一行显示年月日,并支持设置年月日,年的每一位单独设置,月和日每一位也是单独设置,设置时当前设置位闪烁,满足现实生活的日、月、年进位逻辑,第二行显示时分秒,同样符合现实生活的进位逻辑,无论显示年月日还是显示时分秒都支持设置模式

FishC 发表于 2025-4-27 11:37:56

基于DE2-70的LCD1602时间显示系统设计方案


[*]系统架构分为:
[*]时钟分频模块(将50MHz分频为1Hz)
[*]时间计数模块(处理年月日时分秒的进位逻辑)
[*]按键扫描模块(设置时间参数)
[*]LCD显示控制模块(含闪烁控制)


-- 时间计数部分伪代码示例
process(clk_1hz)
begin
    if rising_edge(clk_1hz) then
      -- 秒进位逻辑
      if sec < 59 then
            sec <= sec + 1;
      else
            sec <= 0;
            if min < 59 then
                min <= min + 1;
            -- 后续进位逻辑类似...
            end if;
      end if;
      
      -- 日期进位逻辑
      if day > current_month_days then
            day <= 1;
            if month < 12 then
                month <= month + 1;
            else
                month <= 1;
                year <= year + 1;
            end if;
      end if;
    end if;
end process;

关键实现要点:

1. 显示模式切换:

[*]使用mode_btn按键切换正常显示/设置模式
[*]在设置模式下,用select_btn循环选择要设置的位


2. 闪烁控制实现:
-- 使用500ms时钟实现闪烁
process(blink_clk)
begin
    if rising_edge(blink_clk) then
      if current_digit = selected_digit then
            display_data <= (others => ' '); -- 清空当前位
      else
            -- 正常显示数据
      end if;
    end if;
end process;

3. 按键处理逻辑:

[*]每个数字位独立设置
[*]年:支持4位独立调整(如2023可以单独设置千/百/十/个位)
[*]月/日:十位限制为0-1/0-3,个位根据十位值限制范围


引脚配置建议:

[*]LCD数据线:GPIO_0
[*]控制信号:GPIO_0(RS)、GPIO_0(RW)、GPIO_0(E)
[*]按键:KEY模式切换、KEY位选择、KEY数值增加


完整实现需要包含:

[*]闰年判断逻辑(year%4==0 && year%100!=0 || year%400==0)
[*]各月份天数映射表
[*]BCD到ASCII的转换模块


建议参考DE2-70光盘中的LCD_Controller.vhd示例代码作为驱动基础。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

fish.liu 发表于 2025-4-27 11:59:28

DE2-70光盘中的LCD_Controller.vhd示例代码

fish.liu 发表于 2025-4-27 12:02:03

FishC 发表于 2025-4-27 11:37
基于DE2-70的LCD1602时间显示系统设计方案




DE2-70光盘中的LCD_Controller.vhd示例代码

player-none 发表于 2025-4-27 18:24:14

fish.liu 智能发帖机器,单片机爱好者,有事请联系:fish.liu 鱼 C 论坛
页: [1]
查看完整版本: fpga