资源描述:
《基于fpga的lcd显示万年历》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、接着我的上一篇博文,终于完善好了,前几天太忙了,没有及时上传,呵呵,今天晚上刚比较早刚好凌晨,及时上传一下,实现了从0000---9999年的时钟,其实万年历和十万年历,都是差不多,等到地球能转到9999年再改代码也不迟,哈哈!!我这里有顶层和底层文件,顶层主要是调用模块和做按键处理,具体按键防抖动原理,参见偶的以前的博文,我写完这个万年历的代码,还没来得及优化,占用了太多了逻辑门,可以进一步优化。大致思路是:第一次按下KEY1的时候,所有计时停止,再按KEY1,年就闪烁,按下KEY2和KEY3进行加减。再按KEY1,月就闪烁,按下KEY2和KEY3进行加减......
2、..依次为调年-月-日-星期-时分秒,再次按一下KEY1,进入正常运行模式。好了先上顶层模块moduleLCD(rst,clk,rw,rs,en,data,key1,key2,key3);inputclk,rst;inputkey1,key2,key3;outputrs,en,rw;output[7:0]data;regkey1_out,key2_out,key3_out;wireclk,rst;wirers,en,rw;wire[7:0]data;dispU1(.clk(clk),.rst(rst),.rs(rs),.en(en),.rw(rw),.data(data
3、),.key1(key1_out),.key2(key2_out),.key3(key3_out));//=============key1,key2,key3按键防抖动================//regkey1_reg1,key1_reg2;regkey2_reg1,key2_reg2;regkey3_reg1,key3_reg2;reg[31:0]count;always@(posedgeclk)begincount<=count+1;if(count==500000)begincount<=0;key1_reg1<=key1;key2_reg1<=key2
4、;key3_reg1<=key3;endkey1_reg2<=key1_reg1;key2_reg2<=key2_reg1;key3_reg2<=key3_reg1;key1_out<=key1_reg2&(!key1_reg1);key2_out<=key2_reg2&(!key2_reg1);key3_out<=key3_reg2&(!key3_reg1);endendmodule底层模块:moduledisp(rst,clk,rw,rs,en,data,key1,key2,key3);inputclk,rst;inputkey1,key2,key3;outputr
5、s,en,rw;output[7:0]data;regrs,en_sel;reg[7:0]data;reg[14:0]year;reg[7:0]shi,fen,miao,month,dat;reg[31:0]count,count1;//LCDCLK分频计数器reglcd_clk;//2行32个数据寄存器reg[7:0]one_1,one_2,one_3,one_4,one_5,one_6,one_7,one_8,one_9,one_10,one_11,one_12,one_13,one_14,one_15,one_16;reg[7:0]two_1,two_2,two_
6、3,two_4,two_5,two_6,two_7,two_8,two_9,two_10,two_11,two_12,two_13,two_14,two_15,two_16;reg[7:0]next;parameterstate0=8'h00,//设置8位格式,2行,5*78'h38;state1=8'h01,//整体显示,关光标,不闪烁8'h0C闪烁8'h0estate2=8'h02,//设定输入方式,增量不移位8'h06state3=8'h03,//清除显示8'h01state4=8'h04,//显示第一行的指令80Hstate5=8'h05,//显示第二行的指令8
7、0H+40Hscan=8'h06,nul=8'h07;parameterdata0=8'h10,//2行32个数据状态data1=8'h11,data2=8'h12,data3=8'h13,data4=8'h14,data5=8'h15,data6=8'h16,data7=8'h17,data8=8'h18,data9=8'h19,data10=8'h20,data11=8'h21,data12=8'h22,data13=8'h23,data14=8'h24,data15=8'h25,data16=8'h26,data17=8'h27,d