一.数字时钟设计
1.硬件资源:LCD1602液晶屏一块,FPGA开发板一块(A_C8V4);
2. 开发板资源:3颗独立按键,LCD1602接口;
3. 功能设计:三种功能:a.时钟功能;b.闹钟功能;c.校时功能;
4. 按键功能设计:按键1切换数字钟模式,按键2调整数字钟时钟显示(包括闹钟调时),按键3调整数字时钟分钟显示(包括闹钟调分);
二.数字时钟代码
1.数字时钟顶层模块RTL视图
1) 说明:这个为数字时钟的顶层模块,按键消抖模块debkey,数字钟功能模块digitalclk,LCD1602液晶显示模块lcd_ip;
2) 端口
输入:clk,reset,key;
输出:lcd_e,lcd_rw,lcd_rs,lcd_data,beep;
3) 代码
//数字时钟总模块
module digitalclk_top(clk,reset,key,lcd_rw,lcd_e,lcd_rs,lcd_data,beep);
input clk;
input reset;
input [2:0]key;
output lcd_rw;
output lcd_rs;
output lcd_e;
output [7:0]lcd_data;
output beep;
wire [2:0]debkey;
wire [255:0]disp;
debkey U0
(.clk(clk),
.reset(reset),
.key(key),
.debkey(debkey));
digitalclk U1
(.clk(clk),
.reset(reset),
.key(debkey),
.lcd_data_disp(disp),
.beep(beep));
lcd_ip U3
(.clk(clk),
.rst(reset),
.data_buf(disp),
.lcd_rw(lcd_rw),
.lcd_rs(lcd_rs),
.lcd_e(lcd_e),
.lcd_data(lcd_data));
endmodule
2.按键消抖模块
1) 说明:这个模块为按键消抖模块,三颗按键;
2) 端口
输入:clk,reset,key;
输出:debkey;
3) 代码
请参考按键消抖
3. LCD模块
1) 说明:这个为LCD1602模块,其中data_buf为256位,每一个格为8位,一共有32个,所以32x8=256;
2) 端口
输入:clk,rst,data_buf;
输出:lcd_e,lcd_rs,lcd_rw,lcd_data;
3)代码
请参考LCD模块
4.时钟钟功能模块
1) 说明:这个模块为数字钟功能模块,包括数字钟模式模块digitalclk_mode,数字钟时钟模块clock,数字钟闹钟模块alarm,数字钟校时模块adj,数字钟数据处理选择模块disp_sel,还有一个不和谐的闹铃铃声模块beep;
2) 端口
输入:clk,reset,key;
输出:beep,lcd_data_disp;
3) 代码
//数字时钟顶层模块
module digitalclk(clk,reset,key,lcd_data_disp,beep);
input clk;
input reset;
input [2:0]key;
output [255:0]lcd_data_disp;
output beep;
wire [2:0]mode;
wire [255:0]clock_disp,alarm_disp,adj_disp;
wire [255:0]sync_clock,sync_adj;
wire alarm_en;
digitalclk_mode U4
(.clk(clk),
.reset(reset),
.key(key),
.mode(mode));
clock U5
(.clk(clk),
.reset(reset),
.mode(mode),
.sync_clock(sync_clock),
.lcd_data_disp(clock_disp));
alarm U6
(.clk(clk),
.reset(reset),
.mode(mode),
.key(key),
.lcd_data_disp(alarm_disp));
adj U7
(.clk(clk),
.reset(reset),
.mode(mode),
.key(key),
.sync_adj(sync_adj),
.lcd_data_disp(adj_disp));
disp_sel U8
(.clk(clk),
.mode(mode),
.alarm_disp(alarm_disp),
.clock_disp(clock_disp),
.adj_