的電子時鐘顯示程序_第1頁
的電子時鐘顯示程序_第2頁
的電子時鐘顯示程序_第3頁
的電子時鐘顯示程序_第4頁
的電子時鐘顯示程序_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、/*= *名 稱: 可調(diào)電子時鐘程序 *功 能: 電子時鐘顯示實驗 *接 口: *說 明: 黑金II代FPGA開發(fā)板,一個主程序,兩個子程序。 *編者 時間: Ye.FuYao 2014-04-28 Cycione EP2C8Q208C8*=*/主程序module main(clk,RSTn,KEY,duan_xuan,wei_xuan);/外部接口input clk,RSTn; /時鐘,復(fù)位輸入input 3:0KEY; /物理按鍵key_in按為0,松開為1 output 7:0duan_xuan;/數(shù)碼管段選輸出output 5:0wei_xuan; /數(shù)碼管位選輸出/時鐘 /初始化時間

2、reg 7:0hour=8'd12;/時reg 7:0min=8'd0; /分reg 7:0sec=8'd0; /秒wire 3:0key_val;/按鍵值/調(diào)用子程序 ,獲取按鍵值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; /計數(shù)值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) /脈沖數(shù)滿足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/調(diào)時間,這段可以不用,直接初始化賦值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/調(diào)時結(jié)束end/*= *名 稱:調(diào)用六位數(shù)碼管顯示子程序 *功 能: *輸 入: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-時間參數(shù).duan_xuan(duan_xuan),.wei_xuan(

7、wei_xuan) /in_out-段選位選 );endmodule/=/*= *名 稱: 電子時鐘子程序 *功 能: 六位數(shù)碼管顯示時鐘 *接 口: *說 明: *編者 時間: Ye.FuYao 2014-04-23 Cycione EP2C8Q208C8*=*/電子時鐘子程序module display_LED(clk,RSTn,sec,min,hour,duan_xuan,wei_xuan);input clk,RSTn; /時鐘,復(fù)位輸入/時分秒input 7:0sec;input 7:0min;input 7:0hour;output 7:0duan_xuan;/數(shù)碼管段選輸出out

8、put 5:0wei_xuan; /數(shù)碼管位選輸出reg 7:0duan_xuan;reg 5:0wei_xuan;/段選碼表 reg 7:0 SMG9:0; /10個8位的數(shù)組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位的數(shù)組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/=/分離數(shù)據(jù)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/標(biāo)志位reg 3:0t=0; /07reg 31:0rData=0; /暫存數(shù)據(jù)/送數(shù)據(jù)always (posedge clk

12、 or negedge RSTn)beginif(!RSTn)/復(fù)位begint <= 4'd0;rData<=32'd0;duan_xuan<=8'b1111_1111;wei_xuan<=6'b111_111;endelse if(t = 4'd7) /標(biāo)志清0t <= 4'd0;else if(Count2 = T4MS) /等于4MS,標(biāo)志位變化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; /標(biāo)志加1endendendmodule /*= *名 稱: 按鍵子程序 *功 能: *接 口: *說 明: 物理按鍵key_in按為0,松開為1 *編者 時間: Ye.FuYao 2014-04-26 Cycione EP2C8Q208C8*=*/按鍵子程序module key_value(clk,RSTn,Key_in,key_val);input clk,RSTn;inp

15、ut 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; /同一脈沖,現(xiàn)態(tài)(如按鍵Key_in0按下1110)key_samp1_locked <= ke

16、y_samp1;/同一脈沖,原態(tài)(如無按鍵按下1111)end/當(dāng)key_samp1由1變?yōu)?時/key_changed1由0變?yōu)?,只維持一個時鐘周期,下個周期key_changed1還是0;wire 3:0key_changed1;/按下標(biāo)志assign key_changed1 = key_samp1_locked & (key_samp1); /目的:一有按鍵按下就標(biāo)記一次 /延時20msreg 3:0key_samp2,key_samp2_locked;parameter T20MS=19'd399_999; reg 18:0count;always (posedge

17、 clk or negedge RSTn)if(!RSTn)count<=19'd0;else if(key_changed1) /按鍵按下開始清一次0count<=19'd0;else count<=count+1'b1; /按鍵按下直到按鍵松開,如果沒有抖動/再次判斷/只有當(dāng)按鍵不變化(不抖動),且維持20ms以上時/才將i_key采集至key_samp2always (posedge clk or negedge RSTn)if(!RSTn)key_samp2<=4'b1111;else if(count = T20MS) /20m

18、s后,再判斷key_samp2<=Key_in; always (posedge clk or negedge RSTn)if(!RSTn)key_samp2_locked<=4'b1111;elsekey_samp2_locked<=key_samp2;/當(dāng)key_samp1由1變?yōu)?時/key_changed1由0變?yōu)?,只維持一個時鐘周期,下個周期key_changed1還是0;wire 3:0key_changed2;assign key_changed2 = key_samp2_locked & (key_samp2);/注意:這里按下為1松開為0!/每次按鍵穩(wěn)定后,輸出鍵值always (posedge clk or negedge RSTn)if(!RSTn)key_val <= 4'b0;elsecase(key_changed2)4'b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論