FPGA的電子時(shí)鐘顯示程序.doc_第1頁
FPGA的電子時(shí)鐘顯示程序.doc_第2頁
FPGA的電子時(shí)鐘顯示程序.doc_第3頁
FPGA的電子時(shí)鐘顯示程序.doc_第4頁
FPGA的電子時(shí)鐘顯示程序.doc_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

/*= *名 稱: 可調(diào)電子時(shí)鐘程序 *功 能: 電子時(shí)鐘顯示實(shí)驗(yàn) *接 口: *說 明: 黑金II代FPGA開發(fā)板,一個(gè)主程序,兩個(gè)子程序。 *編者 時(shí)間: Ye.FuYao 2014-04-28 Cycione EP2C8Q208C8*=*/主程序module main(clk,RSTn,KEY,duan_xuan,wei_xuan);/外部接口input clk,RSTn; /時(shí)鐘,復(fù)位輸入input 3:0KEY; /物理按鍵key_in按為0,松開為1 output 7:0duan_xuan;/數(shù)碼管段選輸出output 5:0wei_xuan; /數(shù)碼管位選輸出/時(shí)鐘 /初始化時(shí)間reg 7:0hour=8d12;/時(shí)reg 7:0min=8d0; /分reg 7:0sec=8d0; /秒wire 3:0key_val;/按鍵值/調(diào)用子程序 ,獲取按鍵值key_value U1(.clk(clk),.RSTn(RSTn),.Key_in(KEY),.key_val(key_val);/key_val返回的按鍵值/秒定時(shí)器parameter T1S=25d19_999_999;/定時(shí)值reg 24:0Count1; /計(jì)數(shù)值always(posedge clk or negedge RSTn)beginif(!RSTn)Count1=25d0;else if(Count1=T1S)Count1=25d0;elseCount1=Count1+1b1;/脈沖累加end/計(jì)算時(shí)間always(posedge clk or negedge RSTn)beginif(!RSTn)sec=8d0; /秒計(jì)時(shí)器else if(Count1 = T1S) /脈沖數(shù)滿足T1Sbeginif(sec 8d60) /059beginsec = sec+8d1; /秒加1if(sec = 8d60)/第60秒beginsec = 8d0;if(min 8d60) /059beginmin = min+8d1; /分加1if(min = 8d60)/第60分beginmin = 8d0;if(hour 8d24)/023beginhour=hour+8d1; /時(shí)加1if(hour = 8d24)/第24時(shí)hour = 8d0;endendendendendend/調(diào)時(shí)間,這段可以不用,直接初始化賦值else if(key_val=4d4) /key4按下beginif(hour8d23)hour=hour+8d1;/+1 elsehour8d0)hour=hour-8d1;/-1elsehour0)min=min-8d1; /+1elsemin=8d59;endelse if(key_val=4d1) /key1按下beginif(min8d59)min=min+8d1; /-1elsemin=8d0;end/調(diào)時(shí)結(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í)間參數(shù).duan_xuan(duan_xuan),.wei_xuan(wei_xuan) /in_out-段選位選 );endmodule/=/*= *名 稱: 電子時(shí)鐘子程序 *功 能: 六位數(shù)碼管顯示時(shí)鐘 *接 口: *說 明: *編者 時(shí)間: Ye.FuYao 2014-04-23 Cycione EP2C8Q208C8*=*/電子時(shí)鐘子程序module display_LED(clk,RSTn,sec,min,hour,duan_xuan,wei_xuan);input clk,RSTn; /時(shí)鐘,復(fù)位輸入/時(shí)分秒input 7:0sec;input 7:0min;input 7:0hour;output 7:0duan_xuan;/數(shù)碼管段選輸出output 5:0wei_xuan; /數(shù)碼管位選輸出reg 7:0duan_xuan;reg 5:0wei_xuan;/段選碼表 reg 7:0 SMG9:0; /10個(gè)8位的數(shù)組initial begin SMG0=8hc0; SMG1=8hf9; SMG2=8ha4; SMG3=8hb0; SMG4=8h99; SMG5=8h92; SMG6=8h82; SMG7=8hf8; SMG8=8h80; SMG9=8h90;end/位選碼表reg 5:0 wei5:0; /6個(gè)6位的數(shù)組initial begin wei0=6b111_110; wei1=6b111_101; wei2=6b111_011; wei3=6b110_111; wei4=6b101_111; wei5=6b011_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 3:0rhour_Ten;always (posedge clk or negedge RSTn)beginif(!RSTn)begin rsec_Ten=4d0; rsec_One=4d0;endelsebeginrsec_Ten=sec /10; /取十位 rsec_One=sec %10; /取個(gè)位rmin_Ten=min /10; /取十位 rmin_One=min %10; /取個(gè)位rhour_Ten=hour /10; /取十位 rhour_One=hour %10; /取個(gè)位endend/=顯示/掃描定時(shí)器parameter T4MS = 17d59_999; /4ms/20M*0.004=80000reg 16:0Count2;always (posedge clk or negedge RSTn)begin if(!RSTn) Count2 = 17d0; else if(Count2 = T4MS) Count2 = 17d0; else Count2 = Count2 + 17d1;end/標(biāo)志位reg 3:0t=0; /07reg 31:0rData=0; /暫存數(shù)據(jù)/送數(shù)據(jù)always (posedge clk or negedge RSTn)beginif(!RSTn)/復(fù)位begint = 4d0;rData=32d0;duan_xuan=8b1111_1111;wei_xuan=6b111_111;endelse if(t = 4d7) /標(biāo)志清0t = 4d0;else if(Count2 = T4MS) /等于4MS,標(biāo)志位變化begincase(t)4d5: rData=rhour_Ten; 4d0: rData=rhour_One; 4d1: rData=rmin_Ten; 4d2: rData=rmin_One; 4d3: rData=rsec_Ten; 4d4: rData=rsec_One; endcaseif(t 4d6) /05次beginduan_xuan = SMGrData; /送段選wei_xuan = weit; /送位選 endif(t = 4d6) /第6次,秒閃beginif(rsec_One%2)beginduan_xuan = 8h7f; /送段選 wei_xuan = wei1; /送位選endelse beginduan_xuan = 8hff; /送段選 wei_xuan = wei1; /送位選 endendt = t + 1b1; /標(biāo)志加1endendendmodule /*= *名 稱: 按鍵子程序 *功 能: *接 口: *說 明: 物理按鍵key_in按為0,松開為1 *說 明: 參考/yuphone/archive/2010/03/13/1684999.html *編者 時(shí)間: Ye.FuYao 2014-04-26 Cycione EP2C8Q208C8*=*/按鍵子程序module key_value(clk,RSTn,Key_in,key_val);input clk,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 = 4b1111;key_samp1_locked = 4b1111;endelsebeginkey_samp1 = Key_in; /同一脈沖,現(xiàn)態(tài)(如按鍵Key_in0按下1110)key_samp1_locked = key_samp1;/同一脈沖,原態(tài)(如無按鍵按下1111)end/當(dāng)key_samp1由1變?yōu)?時(shí)/key_changed1由0變?yōu)?,只維持一個(gè)時(shí)鐘周期,下個(gè)周期key_changed1還是0;wire 3:0key_changed1;/按下標(biāo)志assign key_changed1 = key_samp1_locked & (key_samp1); /目的:一有按鍵按下就標(biāo)記一次 /延時(shí)20msreg 3:0key_samp2,key_samp2_locked;parameter T20MS=19d399_999; reg 18:0count;always (posedge clk or negedge RSTn)if(!RSTn)count=19d0;else if(key_changed1) /按鍵按下開始清一次0count=19d0;else count=count+1b1; /按鍵按下直到按鍵松開,如果沒有抖動(dòng)/再次判斷/只有當(dāng)按鍵不變化(不抖動(dòng)),且維持20ms以上時(shí)/才將i_key采集至key_samp2always (posedge clk or negedge RSTn)if(!RSTn)key_samp2=4b1111;else if(count = T20MS) /20ms后,再判斷key_samp2=Key_in; always (posedge clk or negedge RSTn)if(!RSTn)key_samp2_locked=4b1111;elsekey_samp2_locked=key_samp2;/當(dāng)key_samp1由1變?yōu)?時(shí)/key_changed1由0變?yōu)?,只維持一個(gè)時(shí)鐘周期,下個(gè)周期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(!

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論