FPGA數字電子鐘

2021-10-17 07:20:46 字數 4189 閱讀 1771

1.實驗內容

(1 )整體功能

數字電子鐘應能以秒為最小單位計時,同時用數字直觀的顯示當前時、分、秒。

(2)系統結構

數字電子鐘的系統結構框圖如圖7-1-1所示。圖中秒訊號產生電路產生1hz的標準計時訊號,計時電路記錄當前的時、分、秒,數字顯示以數字的方式顯示當前時間,報時電路用於整點報時,時分調整電路用於校正當前時或分,系統復位鍵用於系統整體清零。

(3)電氣指標

① 最小計時單位為1秒。

② 秒和分計時範圍為00~59,小時計時範圍為0~23或1~12。

③ 可以手動校準時、分。

(1)定義輸入輸出訊號和中間變數

module digital_clock(

input clk, //時鐘訊號,借2khz脈衝

input clr, //清零訊號,高電平有效

input set_m,

input set_h, //調分、調時訊號,高電平有效

output reg [5:0] wei, //位選訊號,低電平時選中該位

output reg [3:0] data //資料訊號

);reg [26:0] counter=0; //m=2000的計數器

reg [2:0] count_6=0; //m=6的計數器

reg [7:0] second=0;

reg [7:0] minute=0;

reg [7:0] hour=0; //存放時、分、秒的數值

reg [3:0] secondl;

reg [3:0] secondh;

reg [3:0] minutel;

reg [3:0] minuteh;

reg [3:0] hourl;

reg [3:0] hourh; //分離時、分、秒數值的十位和個位

(2)實現強制清零和自動清零

always@(posedge clk or posedge clr)

begin

if(clr==1) //清零鍵按下時將所有資料置零

begin

counter<=0;

second<=0;

minute<=0;

hour<=0;

endelse if(counter==2000) //經過2000個2khz時鐘脈衝上公升沿,即經過1s後計數器自動歸零

begin

counter<=0;

(3)分鐘調整

if(set_m==1)

begin

second<=second+1; //秒正常計數

if(minute==59)

begin

minute<=0;

if(hour==23)

begin

hour<=0; //23:59進製變為00:00

endelse

begin

hour<=hour+1; //59分進製為1小時

endend

else

begin

minute<=minute+1; //分鐘數值每秒增加1

endend

(4)小時調整

if(set_h==1)

begin

second<=second+1; //秒正常計數

if(hour==23)

begin

hour<=0; //24點進製變為0點

endelse

begin

hour<=hour+1; //小時數值每秒增加1

endend

(5)正常計時

if(second==59)        //秒針進製

begin

second<=0;

if(minute==59) //分針進製

begin

minute<=0;

if(hour==23) //時針進製

begin

hour<=0;

endelse //hour<23,小時+1

begin

hour<=hour+1;

endend

else //minute<59,分鐘+1

begin

minute<=minute+1;

endend

else //在調時、調分鍵都沒有按下的情況下,數字鐘正常計時

begin

second<=second+1;

end

(6)分離時、分、秒數值的十位和個位

begin                               //兩位數整數除10即得到十位數,取餘10即得到個位數

secondh<=second/10;

secondl<=second%10;

minuteh<=minute/10;

minutel<=minute%10;

hourh<=hour/10;

hourl<=hour%10;

endend

else

begin

counter<=counter+1; //時鐘訊號未計到1s時,計數器繼續計數

endend

(7)動態顯示位址計數器

always@(posedge clk)    //將每個時鐘週期選中的數碼管位址存放在count_6中,以2khz的頻率重新整理

if(count_6==3'b101)

count_6<=3'b000;

else

count_6<=count_6+1;

(8)輸出動態顯示

always@(count_6)  //每個時鐘週期用位選訊號選中當前編號的數碼管,並顯示該位當前數值

case(count_6)

3'b000:begin wei=6'b011111;data=hourh;end

3'b001:begin wei=6'b101111;data=hourl;end

3'b010:begin wei=6'b110111;data=minuteh;end

3'b011:begin wei=6'b111011;data=minutel;end

3'b100:begin wei=6'b111101;data=secondh;end

3'b101:begin wei=6'b111110;data=secondl;end

default:begin wei=6'b011111;data=4'b0000;end

endcase

endmodule

測試激勵檔案:

module digital_clock_test(

);reg clk;

reg clr;

reg set_m;

reg set_h;

wire [5:0] wei;

wire [3:0] data;

digital_clock u1(

.clk(clk),

.clr(clr),

.set_m(set_m),

.set_h(set_h),

.wei(wei),

.data(data)

);initial

begin

clk=0;

clr=1;

set_m=0;

set_h=0;

#100

clr=0;

#6000000

set_m=1;

#6000000

set_m=0;

set_h=1;

endalways #10 clk=~clk;

endmodule

電子鐘延時的實現

可以發現這個 相當簡潔,1 show函式,把當前時間值,比如08 10 15把上面這些數字和 分別送到緩衝區。2 display,就是把緩衝區中的值,動態顯示到各自的數碼管中。3 reflashtime,這個函式可以通過second的增加來重新整理當前時間值。在2與3之間就是1秒的延時。如何實現對電...

Verilog 綜合練習 電子鐘的實現

此次試驗為我們的一次課程練習,僅供參考。所用硬體為老師基於maxll系列emp240t100c5晶元設計的電路板,包含振盪器 64個發光二極體 按鈕,4個七段解碼顯示器等相關器件。要求編寫程式完成電子鐘功能。程式介面 pin 50,pin 51,未用。cp,振盪器脈衝輸入。rst,ch,cm,三個按...

用C C 寫的簡易電子鐘

先來看看簡易電子鐘的效果圖 程式所包含的函式如下表所示 函式名輸入 輸出main無無 numdisplay num,x,y 無setposition x,y無 separatenum numnumgroup dotdisplay x,y無 整個程式都不是特別難,下面就直接上流程圖和 了 的dev c...