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...