基于FPGA的lcd1602闹钟
一、关于lcd的设置,以及命令格式见博主的另一篇转载的博客:https://blog.youkuaiyun.com/chengfengwenalan/article/details/80070058
二、设计思路
本例程主要是利用lcd实现了闹钟功能
第一行显示Alarm:00-00
第二行显示Clock:00-00-00
按下key1按键是进入adjust模式,按下key2是加,按下key3是减,这3个按键都支持连按和快速单击。系统框图如下:
图1.系统框图
由系统框图可以看出,本项目主要由debounce,alarm,lcd,led模块组成。
其中
debounce是按键消抖模块,他支持连续按,快速单击
alarm模块主要产生sec,min,hour,alarm_min,alarm_hour的信号,提供给lcd模块显示
lcd模块则是lcd1602的驱动,主要负责lcd1602的显示
led模块则是闹钟时,led闪烁
三、核心代码解说
lcd的驱动主要是用状态机实现的
//status_c
always@(posedge lcd_clk or negedge rst_n)begin
if(!rst_n)begin
status_c <= IDLE;
end
else begin
status_c <= status_n;
end
end
//status_n
always@(*)begin
case(status_c)
//----------------初始化------------------
IDLE:begin
rs <= 1'b0; //rs高是数据寄存器,rs低是指令寄存器
data <= 8'h38;
if(flag) //上电后等待15ms,电平稳定了再下一步
status_n <= INIT;
else
status_n <= status_c;
end
INIT:begin
rs <= 1'b0; //rs高是数据寄存器,rs低是指令寄存器
data <= 8'h38;
status_n <= S0;
end
S0:begin
rs <= 1'b0; //rs高是数据寄存器ÿ