FPGA的电子时钟显示程序_第1页
FPGA的电子时钟显示程序_第2页
FPGA的电子时钟显示程序_第3页
FPGA的电子时钟显示程序_第4页
FPGA的电子时钟显示程序_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/*= *名 称: 可调电子时钟程序 *功 能: 电子时钟显示实验 *接 口: *说 明: 黑金II代FPGA开发板,一个主程序,两个子程序。 *编者 时间: Ye.FuYao 2014-04-28 Cycione EP2C8Q208C8*=*/主程序module main(clk,RSTn,KEY,duan_xuan,wei_xuan);/外部接口input clk,RSTn; /时钟,复位输入input 3:0KEY; /物理按键key_in按为0,松开为1 output 7:0duan_xuan;/数码管段选输出output 5:0wei_xuan; /数码管位选输出/时钟 /初始化时间

2、reg 7:0hour=8'd12;/时reg 7:0min=8'd0; /分reg 7:0sec=8'd0; /秒wire 3:0key_val;/按键值/调用子程序 ,获取按键值key_value U1(.clk(clk),.RSTn(RSTn),.Key_in(KEY),.key_val(key_val);/key_val返回的按键值/秒定时器parameter T1S=25'd19_999_999;/定时值reg 24:0Count1; /计数值always(posedge clk or negedge RSTn)beginif(!RSTn)Count1

3、<=25'd0;else if(Count1=T1S)Count1<=25'd0;elseCount1<=Count1+1'b1;/脉冲累加end/计算时间always(posedge clk or negedge RSTn)beginif(!RSTn)sec<=8'd0; /秒计时器else if(Count1 = T1S) /脉冲数满足T1Sbeginif(sec < 8'd60) /059beginsec = sec+8'd1; /秒加1if(sec = 8'd60)/第60秒beginsec = 8&

4、#39;d0;if(min < 8'd60) /059beginmin = min+8'd1; /分加1if(min = 8'd60)/第60分beginmin = 8'd0;if(hour < 8'd24)/023beginhour=hour+8'd1; /时加1if(hour = 8'd24)/第24时hour = 8'd0;endendendendendend/调时间,这段可以不用,直接初始化赋值else if(key_val=4'd4) /key4按下beginif(hour<8'd23)

5、hour<=hour+8'd1;/+1 elsehour<=8'd0;endelse if(key_val=4'd3) /key3按下beginif(hour>8'd0)hour<=hour-8'd1;/-1elsehour<=8'd23;endelse if(key_val=4'd2) /key2按下beginif(min>0)min<=min-8'd1; /+1elsemin<=8'd59;endelse if(key_val=4'd1) /key1按下begin

6、if(min<8'd59)min<=min+8'd1; /-1elsemin<=8'd0;end/调时结束end/*= *名 称:调用六位数码管显示子程序 *功 能: *输 入:clk, RSTn, sec, min, hour, duan_xuan, wei_xuan *输 出:duan_xuan, wei_xuan *=*/ display_LED U2(.clk(clk),.RSTn(RSTn),.sec(sec),.min(min),.hour(hour), /input-时间参数.duan_xuan(duan_xuan),.wei_xuan(

7、wei_xuan) /in_out-段选位选 );endmodule/=/*= *名 称: 电子时钟子程序 *功 能: 六位数码管显示时钟 *接 口: *说 明: *编者 时间: Ye.FuYao 2014-04-23 Cycione EP2C8Q208C8*=*/电子时钟子程序module display_LED(clk,RSTn,sec,min,hour,duan_xuan,wei_xuan);input clk,RSTn; /时钟,复位输入/时分秒input 7:0sec;input 7:0min;input 7:0hour;output 7:0duan_xuan;/数码管段选输出out

8、put 5:0wei_xuan; /数码管位选输出reg 7:0duan_xuan;reg 5:0wei_xuan;/段选码表 reg 7:0 SMG9:0; /10个8位的数组initial begin SMG0<=8'hc0; SMG1<=8'hf9; SMG2<=8'ha4; SMG3<=8'hb0; SMG4<=8'h99; SMG5<=8'h92; SMG6<=8'h82; SMG7<=8'hf8; SMG8<=8'h80; SMG9<=8'h9

9、0;end/位选码表reg 5:0 wei5:0; /6个6位的数组initial begin wei0<=6'b111_110; wei1<=6'b111_101; wei2<=6'b111_011; wei3<=6'b110_111; wei4<=6'b101_111; wei5<=6'b011_111;end/=/分离数据reg 3:0rsec_One; /09reg 3:0rsec_Ten; /09reg 3:0rmin_One;reg 3:0rmin_Ten;reg 3:0rhour_One;reg

10、3:0rhour_Ten;always (posedge clk or negedge RSTn)beginif(!RSTn)begin rsec_Ten<=4'd0; rsec_One<=4'd0;endelsebeginrsec_Ten<=sec /10; /取十位 rsec_One<=sec %10; /取个位rmin_Ten<=min /10; /取十位 rmin_One<=min %10; /取个位rhour_Ten<=hour /10; /取十位 rhour_One<=hour %10; /取个位endend/=显示/

11、扫描定时器parameter T4MS = 17'd59_999; /4ms/20M*0.004=80000reg 16:0Count2;always (posedge clk or negedge RSTn)begin if(!RSTn) Count2 <= 17'd0; else if(Count2 = T4MS) Count2 <= 17'd0; else Count2 <= Count2 + 17'd1;end/标志位reg 3:0t=0; /07reg 31:0rData=0; /暂存数据/送数据always (posedge clk

12、 or negedge RSTn)beginif(!RSTn)/复位begint <= 4'd0;rData<=32'd0;duan_xuan<=8'b1111_1111;wei_xuan<=6'b111_111;endelse if(t = 4'd7) /标志清0t <= 4'd0;else if(Count2 = T4MS) /等于4MS,标志位变化begincase(t)4'd5: rData<=rhour_Ten; 4'd0: rData<=rhour_One; 4'd1:

13、 rData<=rmin_Ten; 4'd2: rData<=rmin_One; 4'd3: rData<=rsec_Ten; 4'd4: rData<=rsec_One; endcaseif(t < 4'd6) /05次beginduan_xuan <= SMGrData; /送段选wei_xuan <= weit; /送位选 endif(t = 4'd6) /第6次,秒闪beginif(rsec_One%2)beginduan_xuan <= 8'h7f; /送段选 wei_xuan <=

14、 wei1; /送位选endelse beginduan_xuan <= 8'hff; /送段选 wei_xuan <= wei1; /送位选 endendt <= t + 1'b1; /标志加1endendendmodule /*= *名 称: 按键子程序 *功 能: *接 口: *说 明: 物理按键key_in按为0,松开为1 *说 明: 参考 *编者 时间: Ye.FuYao 2014-04-26 Cycione EP2C8Q208C8*=*/按键子程序module key_value(clk,RSTn,Key_in,key_val);input clk

15、,RSTn;input 3:0Key_in; /读取按键output 3:0key_val; /返回按键值reg 3:0key_val; /按下开始reg 3:0key_samp1,key_samp1_locked;always (posedge clk or negedge RSTn)if(!RSTn)begin key_samp1 <= 4'b1111;key_samp1_locked <= 4'b1111;endelsebeginkey_samp1 <= Key_in; /同一脉冲,现态(如按键Key_in0按下1110)key_samp1_locked

16、 <= key_samp1;/同一脉冲,原态(如无按键按下1111)end/当key_samp1由1变为0时/key_changed1由0变为1,只维持一个时钟周期,下个周期key_changed1还是0;wire 3:0key_changed1;/按下标志assign key_changed1 = key_samp1_locked & (key_samp1); /目的:一有按键按下就标记一次 /延时20msreg 3:0key_samp2,key_samp2_locked;parameter T20MS=19'd399_999; reg 18:0count;always

17、 (posedge clk or negedge RSTn)if(!RSTn)count<=19'd0;else if(key_changed1) /按键按下开始清一次0count<=19'd0;else count<=count+1'b1; /按键按下直到按键松开,如果没有抖动/再次判断/只有当按键不变化(不抖动),且维持20ms以上时/才将i_key采集至key_samp2always (posedge clk or negedge RSTn)if(!RSTn)key_samp2<=4'b1111;else if(count = T2

18、0MS) /20ms后,再判断key_samp2<=Key_in; always (posedge clk or negedge RSTn)if(!RSTn)key_samp2_locked<=4'b1111;elsekey_samp2_locked<=key_samp2;/当key_samp1由1变为0时/key_changed1由0变为1,只维持一个时钟周期,下个周期key_changed1还是0;wire 3:0key_changed2;assign key_changed2 = key_samp2_locked & (key_samp2);/注意:这里按下为1松开为0!/每次按键稳定后,输出键值always (posedge clk or negedge RSTn)if(!RSTn)key_val <= 4'b0;elsecase(key_changed2)4'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论