




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实现了从0000-9999年的时钟,其实万年历和十万年历,都是差不多,等到地球能转到9999年再改代码也不迟,哈哈!我这里有顶层和底层文件,顶层主要是调用模块和做按键处理,具体按键防抖动原理,参见偶的以前的博文,我写完这个万年历的代码,还没来得及优化,占用了太多了逻辑门,可以进一步优化。大致思路是:第一次按下KEY1 的时候,所有计时停止,再按KEY1,年就闪烁,按下KEY2和KEY3 进行加减。再按KEY1,月就闪烁,按下KEY2和KEY3 进行加减.依次为调 年-月-日-星期-时分秒, 再次按一下KEY1,进入正常运行模式。好了先上顶层模块module LCD(rst,clk,rw,rs,en,data,key1,key2,key3);input clk,rst;input key1,key2,key3;output rs,en,rw;output 7:0 data;reg key1_out,key2_out,key3_out;wire clk,rst;wire rs,en,rw;wire 7:0 data;disp U1(.clk(clk),.rst(rst),.rs(rs),.en(en),.rw(rw),.data(data),.key1(key1_out),.key2(key2_out),.key3(key3_out);/=key1,key2,key3 按键防抖动=/reg key1_reg1,key1_reg2;reg key2_reg1,key2_reg2;reg key3_reg1,key3_reg2;reg 31:0 count;always (posedge clk)begincount=count+1;if(count=500000)begincount=0;key1_reg1=key1;key2_reg1=key2;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底层模块:module disp(rst,clk,rw,rs,en,data,key1,key2,key3);input clk,rst;input key1,key2,key3;output rs,en,rw;output 7:0 data;reg rs,en_sel;reg 7:0 data;reg 14:0 year;reg 7:0 shi,fen,miao,month,dat;reg 31:0count,count1;/LCD CLK 分频计数器reg lcd_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_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 =8h00, /设置8位格式,2行,5*7 8h38;state1 =8h01,/整体显示,关光标,不闪烁 8h0C 闪烁 8h0estate2 =8h02,/设定输入方式,增量不移位8h06state3 =8h03,/清除显示8h01state4 =8h04,/显示第一行的指令80Hstate5 =8h05,/显示第二行的指令80H+40Hscan=8h06,nul=8h07;parameterdata0 =8h10,/2行32个数据状态data1 =8h11,data2 =8h12,data3 =8h13,data4 =8h14,data5 =8h15,data6 =8h16,data7 =8h17,data8 =8h18,data9 =8h19,data10 =8h20,data11 =8h21,data12 =8h22,data13 =8h23,data14 =8h24,data15 =8h25,data16 =8h26,data17=8h27,data18=8h28,data19=8h29,data20=8h30,data21 =8h31,data22 =8h32,data23 =8h33,data24 =8h34,data25 =8h35,data26 =8h36,data27 =8h37,data28 =8h38,data29 =8h39,data30 =8h40,data31 =8h41;initialbegin/第一行显示 年-月-日 星期 /Mon Tue Wed Thur Fri Sat Sunone_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= ;/第二行显示 Clock:00-00-00two_1=C; two_2=l; two_3=o; two_4=c; two_5=k; two_6=:; two_7= ; two_8= ;two_9=-;two_10= ;two_11= ;two_12=-;two_13= ;two_14= ;two_15= ;two_16= ;shi=8d0;fen=8d0;miao=8d0;end/=产生LCD 时序脉冲=always (posedge clk )/获得LCD时钟begincount=count+1;if(count=32d50000)begincount=32b0;lcd_clk=lcd_clk;endend/=产生闪烁扫描时钟=reg 31:0 count2;reg scan_flag;always (posedge clk or negedge rst)/获得校准时间选中闪烁状态beginif(!rst)beginscan_flag=1b0;endelsebegincount2=count2+1;if(count2=32d10000000)begincount2=32b0;scan_flag=scan_flag;endendend/=产生按键标志位=reg 3:0 flag;always (posedge clk or negedge rst )beginif(!rst)beginflag=4b0;endelseif(key1)beginflag=flag+1b1;if(flag=4b1000)flag=4b0000;endend/=计时以及校准=reg3:0 week;reg7:0 dat_flag;always (posedge clk or negedge rst )/时钟计数器beginif(!rst)begin/初始化显示 第一行 2012-05-19 Sat 第二行:Clock:00-00-00shi=8b0;fen=8b0;miao=8b0;month=8d5;dat=8d19;year=16d2012;week=4d5;count1=1b0;two_7=(shi/8d10)+8b00110000;two_8=(shi%8d10)+8b00110000;two_10=(fen/8d10)+8b00110000;two_11=(fen%8d10)+8b00110000;two_13=(miao/8d10)+8b00110000;two_14=(miao%8d10)+8b00110000;one_1=(year/16d1000)+8b00110000;one_2=(year%16d1000)/16d100)+8b00110000;one_3=(year%16d100)/8d10)+8b00110000;one_4=(year%8d10)+8b00110000;one_6=(month/8d10)+8b00110000;one_7=(month%8d10)+8b00110000;one_9=(dat/8d10)+8b00110000;one_10=(dat%8d10)+8b00110000;endelsebegintwo_7=(shi/8d10)+8b00110000;two_8=(shi%8d10)+8b00110000;two_10=(fen/8d10)+8b00110000;two_11=(fen%8d10)+8b00110000;two_13=(miao/8d10)+8b00110000;two_14=(miao%8d10)+8b00110000;one_1=(year/16d1000)+8b00110000;one_2=(year%16d1000)/16d100)+8b00110000;one_3=(year%16d100)/8d10)+8b00110000;one_4=(year%8d10)+8b00110000;one_6=(month/8d10)+8b00110000;one_7=(month%8d10)+8b00110000;one_9=(dat/8d10)+8b00110000;one_10=(dat%8d10)+8b00110000;/ 判断是否为31天的月份if(month=8d1|month=8d3|month=8d5|month=8d7|month=8d8|month=8d10|month=8d12)dat_flag=8d31;/ 判断是否为30天的月份else if(month=8d4|month=8d6|month=8d9|month=8d11)dat_flag=8d30;/ 判断是否为闰年和平年else if(month=8d2)beginif(year % 4 = 0 & year % 100 != 0 | year % 400 = 0)dat_flag=28;else dat_flag=27;endcase (week)/星期 /Mon Tue Wed Thu Fri Sat Sun4b0000:/1beginone_13=M;one_14=o;one_15=n;end4b0001:/2beginone_13=T;one_14=u;one_15=e;end4b0010:/3beginone_13=W;one_14=e;one_15=d;end4b0011:/4beginone_13=T;one_14=h;one_15=u;end4b0100:/5beginone_13=F;one_14=r;one_15=i;end4b0101:/6beginone_13=S;one_14=a;one_15=t;end4b0110:/7beginone_13=S;one_14=u;one_15=n;endendcasecase(flag)4b0000:beginen_sel=1b1;count1=count1+1b1;if(count1=32d49999999)begincount1=1b0;miao=miao+1b1;if(miao=8d59)beginmiao=1b0;fen=fen+1b1;if(fen=8d59)beginfen=1b0;shi=shi+1b1;if(shi=8d23)beginshi=1b0;dat=dat+1b1;week=week+1b1;if(week=4b0110)week=1b1;if(dat=dat_flag)begindat=8d1;month=month+1b1;if(month=8d12)beginmonth=8d1;year=year+1b1;if(year=16d9999)year=16d0;/可以计1万年endendendendendendend4b0001:begincount1=32b0;/shi=shi;fen=fen;miao=miao;year=year;month=month;dat=dat;week=week;end4b0010:/调年begincase(scan_flag)1b0:begincount1=32b0;/shi=shi;fen=fen;miao=miao;one_1=8d20;one_2=8d20;one_3=8d20;one_4=8d20;end1b1:begincount1=32b0;/shi=shi;fen=fen;miao=miao;endendcaseif(key2)/加数beginyear=year+1b1;if(year=16d9999)year=16d0;endif(key3)/减数beginyear=year-1b1;if(year=16d0)year=16d9999;endend4b0011:/调月begincase(scan_flag)1b0:begincount1=32b0;/shi=shi;fen=fen;miao=miao;one_6=8d20;one_7=8d20;end1b1:begincount1=32b0;/shi=shi;fen=fen;miao=miao;endendcaseif(key2)/加数beginmonth=month+1b1;if(month=8d12)month=8d0;endif(key3)/减数beginmonth=month-1b1;if(month=8d0)month=8d12;endend4b0100:/调日begincase(scan_flag)1b0:begincount1=32b0;/shi=shi;fen=fen;miao=miao;one_9=8d20;one_10=8d20;end1b1:begincount1=32b0;/shi=shi;fen=fen;miao=miao;endendcaseif(key2)/加数begindat=dat+1b1;if(dat=dat_flag)dat=8d0;endif(key3)/减数begindat=dat-1b1;if(dat=8d0)dat=dat_flag;endend4b0101:/调星期begincase(scan_flag)1b0:begincount1=32b0;/shi=shi;fen=fen;miao=miao;one_13=8d20;one_14=8d20;one_15=8d20;end1b1:begincount1=32b0;/shi=shi;fen=fen;miao=miao;endendcaseif(key2)/加数beginweek=week+1b1;if(week=4d6)week=4d0;endif(key3)/减数beginweek=week-1b1;if(week=4d0)week=4d7;endend4b0110:/调时begincase(scan_flag)1b0:begincount1=32b0;/shi=shi;fen=fen;miao=miao;two_7=8d20;two_8=8d20;end1b1:begincount1=32b0;/shi=shi;fen=fen;miao=miao;endendcaseif(key2)/加数beginshi=shi+8b00000001;if(shi=8d23)shi=8b0;endif(key3)/减数beginshi=shi-8b00000001;if(shi=8b0)shi=23;endend4b0111:/调分begincase(scan_flag)1b0:begincount1=32b0;/shi=shi;fen=fen;miao=miao;two_10=8d20;two_11=8d20;end1b1:begincount1=32b0;/shi=shi;fen=fen;miao=miao;endendcaseif(key2)/加数beginfen=fen+8b00000001;if(fen=8d59)fen=8b0;endif(key3)/减数beginfen=fen-8b00000001;if(fen=8b0)fen=59;endend4b1000:/调秒begincase(scan_flag)1b0:begincount1=32b0;/shi=shi;fen=fen;miao=miao;two_13=8d20;two_14=8d20;end1b1:begincount1=32b0;/shi=shi;fen=fen;miao=miao;endendcaseif(key2)/加数beginmiao=miao+8b00000001;if(miao=8d59)miao=8b0;endif(key3)/减数beginmiao=miao-8b00000001;if(miao=8b0)miao=59;endendendcaseendendalways (posedge lcd_clk )begincase(next)state0 :begin rs=1b0; data=8h38; next=state1; endstate1 :begin rs=1b0; data=8h0e; next=state2; endstate2 :begin rs=1b0; data=8h06; next=state3; endstate3 :begin rs=1b0; data=8h01; next=state4; endstate4 :begin rs=1b0; data=8h80; next=data0; end/显示第一行data0 :begin rs=1b1; data=one_1; next=data1 ; enddata1 :begin rs=1b1; data=one_2; next=data2 ; enddata2 :begin rs=1b1; data=one_3; next=data3 ; enddata3 :begin rs=1b1; data=one_4; next=data4 ; enddata4 :begin rs=1b1; data=one_5; next=data5 ; enddata5 :begin rs=1b1; data=one_6; next=data6 ; enddata6 :begin rs=1b1; data=one_7; next=data7 ; enddata7 :begin rs=1b1; data=one_8; next=data8 ; enddata8 :begin rs=1b1; data=one_9; next=data9 ; enddata9 :begin rs=1b1; data=one_10; next=data10 ; enddata10 :begin rs=1b1; data=one_11; next=data11 ; enddata11 :begin rs=1b1; data=one_12; next=data12 ; enddata12 :begin rs=1b1; data=one_13; next=data13 ; enddata13 :begin rs=1b1; data=one_14; next=data14 ; enddata14 :begin rs=1b1; data=one_15; next=data15 ; enddata15 :begin rs=1b1; data=one_16; next=state5 ; endstate5:begin rs=1b0;data=8hC0; next=data16; end /显示第二行data16 :begin rs=1b1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 慢性脓胸患者护理查房
- 小白脱白系列课程
- 感应与灵敏度
- 天津电子信息职业技术学院《人际沟通与礼仪》2023-2024学年第二学期期末试卷
- 湖南科技职业学院《海洋生物资源综合利用》2023-2024学年第二学期期末试卷
- 内蒙古交通职业技术学院《西方音乐史与作品欣赏(二)》2023-2024学年第二学期期末试卷
- 杜郎口中学2025届高三年级第二次教学质量检查考试数学试题含解析
- 天津市西青区2024-2025学年高三高考适应性练习(一)数学试题试卷含解析
- 小兔和乌龟课件
- 海南大学《食品工程理论》2023-2024学年第二学期期末试卷
- 人教版小学四年级数学下册《第三单元 运算律》大单元整体教学设计2022课标
- 中班音乐《月亮婆婆喜欢我》课件
- 网络舆情风险评估与预警
- 学做麦糊烧课件
- 内蒙古师范大学定向协议书
- T-CTSS 86-2024 原味茶饮料标准
- 财务管理委托代理会计服务 投标文件(技术方案)
- 南航社会招聘笔试题目
- 燃料电池汽车讲解
- DL∕T 5161.17-2018 电气装置安装工程质量检验及评定规程 第17部分:电气照明装置施工质量检验
- 金蝉养殖注意事项及常见病虫害防治
评论
0/150
提交评论