色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過(guò)FPGA實(shí)現(xiàn)顯示年、月、日、周、時(shí)、分、秒且能精準(zhǔn)校時(shí)的數(shù)字時(shí)鐘

電子工程師 ? 來(lái)源:lp ? 2019-03-07 16:12 ? 次閱讀

數(shù)字時(shí)鐘FPGA設(shè)計(jì)中較為常見(jiàn),其主要包含時(shí)鐘、分鐘、秒鐘,以及必備的校時(shí)功能,當(dāng)然還可以根據(jù)需要加入年、月,日,周,星期或者鬧鐘設(shè)置等元素。

在這里,我們給小伙伴分享如何通過(guò)FPGA實(shí)現(xiàn)顯示年、月、日、周、時(shí)、分、秒且能精準(zhǔn)校時(shí)的數(shù)字時(shí)鐘。

一、設(shè)計(jì)任務(wù)

通過(guò)FPGA編程驅(qū)動(dòng)實(shí)時(shí)時(shí)鐘芯片DS1340Z,實(shí)現(xiàn)時(shí)間寫入和讀出的功能,驅(qū)動(dòng)旋轉(zhuǎn)編碼器獲取操作信息,根據(jù)編碼器操作信息控制數(shù)字時(shí)鐘的邏輯(包括時(shí)間調(diào)節(jié),顯示控制),最后驅(qū)動(dòng)數(shù)碼管顯示數(shù)字時(shí)鐘信息。

二、設(shè)計(jì)準(zhǔn)備

硬件:小腳丫FPGA核心板、時(shí)鐘芯片DS1340Z、旋轉(zhuǎn)編碼器、數(shù)碼

軟件:Quartus Prime/Lattice Diamond

三、設(shè)計(jì)結(jié)構(gòu)

四、設(shè)計(jì)原理

1.實(shí)時(shí)時(shí)鐘芯片DS1340Z模塊

實(shí)時(shí)時(shí)鐘芯片DS1340Z模塊電路圖如下(上拉電阻未顯示),模塊電路中有電池座,電池電壓范圍為1.3V~5.5V,當(dāng)安裝電池后底板掉電不影響實(shí)時(shí)時(shí)鐘芯片的運(yùn)行,重新上電后讀取實(shí)時(shí)時(shí)鐘數(shù)據(jù)。另外,芯片內(nèi)部集成了起振電阻電容,只需外置時(shí)鐘晶振32.768KHz直接連接即可。

2.旋轉(zhuǎn)編碼器模塊

機(jī)械增量式旋轉(zhuǎn)編碼器,旋轉(zhuǎn)過(guò)程中提供周期性輸出,不能定位絕對(duì)位置,只能用于感知運(yùn)動(dòng)方向和增量,其電路圖如下,本設(shè)計(jì)所使用的旋轉(zhuǎn)編碼器為EC11系列的,支持按動(dòng)開(kāi)關(guān),共有5個(gè)管腳:

1、2管腳支持按動(dòng)開(kāi)關(guān),如同獨(dú)立按鍵連接方式。

3、4、5管腳支持旋轉(zhuǎn)編碼,4腳為公共端,3、5管腳分別為旋轉(zhuǎn)編碼器的A、B相輸出,如上圖所示,4腳接地,3、5管腳則需接上拉電阻,同時(shí)為了降低輸出脈沖信號(hào)的抖動(dòng)干擾,增加了電容到地做硬件去抖。

五、設(shè)計(jì)驅(qū)動(dòng)過(guò)程

1.DS1340Z驅(qū)動(dòng)設(shè)計(jì)

DS1340Z支持I2C通信400KHz快速模式同時(shí)兼容100KHz的標(biāo)準(zhǔn)模式,還有兩種模式下時(shí)序中的各種時(shí)間參數(shù),本設(shè)計(jì)中,通過(guò)分頻得到400KHz的時(shí)鐘。

I2C時(shí)序基本單元(啟動(dòng)、停止、發(fā)送、接收、發(fā)應(yīng)答、讀應(yīng)答)協(xié)議里統(tǒng)一的,所以所以基本單元狀態(tài)的設(shè)計(jì)也是不需要調(diào)整的。

啟動(dòng)時(shí)序狀態(tài)設(shè)計(jì)程序?qū)崿F(xiàn)同智能接近系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)。

發(fā)送單元和讀應(yīng)答單元合并,時(shí)序狀態(tài)設(shè)計(jì)程序?qū)崿F(xiàn)同智能接近系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)。

接收單元和寫應(yīng)答單元合并,時(shí)序狀態(tài)設(shè)計(jì)程序?qū)崿F(xiàn)同智能接近系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)。

停止時(shí)序狀態(tài)設(shè)計(jì)程序?qū)崿F(xiàn)同智能接近系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)。

DS1340Z芯片有很多寄存器,用于存儲(chǔ)實(shí)時(shí)時(shí)鐘的時(shí)間信息,同時(shí)芯片支持連續(xù)讀、寫寄存器操作(寄存器地址自加1),其設(shè)計(jì)程序?qū)崿F(xiàn)如下:

連續(xù)寫寄存器:

MAIN:begin
if(cnt_main>=6'd11)//對(duì)MAIN中的子狀態(tài)執(zhí)行控制cnt_main
cnt_main<=6'd0;?? //
elsecnt_main<=cnt_main+1'b1;??
case(cnt_main)
6'd0:beginstate<=START;end?? //I2C通信時(shí)序中的START
6'd1:begindata_wr<=8'hd0;state<=WRITE;end???? //寫地址為8'hd0
6'd2:begindata_wr<=8'h00;state<=WRITE;end???? //8'h00,起始寄存器
6'd3:begindata_wr<=adj_sec;state<=WRITE;end?? //00寄存器地址,寫秒
6'd4:begindata_wr<=adj_min;state<=WRITE;end?? //01寄存器地址,寫分
6'd5:begindata_wr<=adj_hour;state<=WRITE;end? //02寄存器地址,寫時(shí)
6'd6:begindata_wr<=adj_week;state<=WRITE;end? //03寄存器地址,寫周
6'd7:begindata_wr<=adj_day;state<=WRITE;end?? //04寄存器地址,寫日
6'd8:begindata_wr<=adj_mon;state<=WRITE;end?? //05寄存器地址,寫月
6'd9:begindata_wr<=adj_year;state<=WRITE;end? //06寄存器地址,寫年
6'd10:begindata_wr<=8'h40;state<=WRITE;end? ?//07寄存器地址,8'h40
6'd11:beginstate<=STOP;end??? //I2C通信時(shí)序中的STOP
default:state<=IDLE;//如果程序失控,進(jìn)入IDLE自復(fù)位狀態(tài)
endcase
end

連續(xù)讀寄存器:

MAIN:begin
if(cnt_main>=6'd32)//對(duì)MAIN中的子狀態(tài)執(zhí)行控制cnt_main
cnt_main<=6'd12;???????? //否則只執(zhí)行時(shí)間讀取操作
elsecnt_main<=cnt_main+1'b1;??
case(cnt_main)
6'd12:beginstate<=START;end?? //I2C通信時(shí)序中的START
6'd13:begindata_wr<=8'hd0;state<=WRITE;end//寫地址為8'hd0
6'd14:begindata_wr<=8'h00;state<=WRITE;end//8'h00,寄存器初始地址
6'd15:beginstate<=START;end?? //I2C通信時(shí)序中的START
6'd16:begindata_wr<=8'hd1;state<=WRITE;end//讀地址為8'hd1
6'd17:beginack<=ACK;state<=READ;end??? //讀秒
6'd18:beginrtc_sec<=rtc_data_r;end
6'd19:beginack<=ACK;state<=READ;end??? //讀分
6'd20:beginrtc_min<=rtc_data_r;end
6'd21:beginack<=ACK;state<=READ;end??? //讀時(shí)
6'd22:beginrtc_hour<=rtc_data_r;end
6'd23:beginack<=ACK;state<=READ;end??? //讀周
6'd24:beginrtc_week<=rtc_data_r;end
6'd25:beginack<=ACK;state<=READ;end??? //讀日
6'd26:beginrtc_day<=rtc_data_r;end
6'd27:beginack<=ACK;state<=READ;end??? //讀月
6'd28:beginrtc_mon<=rtc_data_r;end
6'd29:beginack<=ACK;state<=READ;end??? //讀年
6'd30:beginrtc_year<=rtc_data_r;end
6'd31:beginack<=NACK;state<=READ;end?? //控制
6'd32:beginstate<=STOP;end??? //I2C通信時(shí)序中的STOP,讀取完成標(biāo)志
default:state<=IDLE;//如果程序失控,進(jìn)入IDLE自復(fù)位狀態(tài)
endcase
end

上面兩段程序就是對(duì)于DS1340Z芯片的兩種操作,調(diào)時(shí)間和讀時(shí)間,對(duì)于時(shí)鐘來(lái)說(shuō)因?yàn)橛须姵?a target="_blank">供電,實(shí)時(shí)時(shí)鐘一直都處于工作狀態(tài),當(dāng)給FPGA上電時(shí)只需要讀時(shí)間即可,只有遇到時(shí)間不對(duì)的時(shí)候才需要調(diào)時(shí)間,所以DS1340Z驅(qū)動(dòng)模塊平時(shí)都在循環(huán)讀取時(shí)間,所以如果將調(diào)時(shí)間和讀時(shí)間的時(shí)序操作融合到同一個(gè)狀態(tài)下時(shí),對(duì)于cnt_main要加以控制,cnt_main初值為12,且運(yùn)行軌跡在12~32之間,控制程序調(diào)整如下:

if(cnt_main>=6'd32)//對(duì)MAIN中的子狀態(tài)執(zhí)行控制cnt_main
if(set_flag)cnt_main<=6'd0;?? //當(dāng)set_flag被置位時(shí)才會(huì)執(zhí)行時(shí)間寫入操作
elsecnt_main<=6'd12;???????? //否則只執(zhí)行時(shí)間讀取操作
elsecnt_main<=cnt_main+1'b1;??

上面set_flag為時(shí)間調(diào)整標(biāo)志位,只有按動(dòng)編碼器在調(diào)時(shí)間模式時(shí)需要用到寫時(shí)間數(shù)據(jù)的操作流程,可以根據(jù)按鍵脈沖置位set_flag并自鎖,每次完成寫入操作后再將set_flag復(fù)位。程序?qū)崿F(xiàn)如下:

reg set_flag;
always@(posedgeclkornegedgerst_n)begin
if(!rst_n)set_flag<=1'b0;
elseif(cnt_main==5'd11)set_flag<=1'b0;? //完成寫入時(shí)間操作復(fù)位set_flag
elseif(key_set)set_flag<=1'b1;????????? //按鍵脈沖控制set_flag置位
elseset_flag<=set_flag;
end

模塊端口如下:

moduleDS1340Z_driver
(
inputclk,rst_n,//系統(tǒng)時(shí)鐘和復(fù)位
inputkey_set, //按動(dòng)脈沖輸入
input[7:0]adj_hour,adj_min,adj_sec,//時(shí)分秒調(diào)整輸入
input[7:0]adj_year,adj_mon,adj_day,adj_week,//年份調(diào)整輸入
outputi2c_scl,//I2C總線SCL
inout i2c_sda,//I2C總線SDA
output[7:0]rtc_hour,rtc_min,rtc_sec,//實(shí)時(shí)時(shí)鐘輸出
output[7:0]rtc_year,rtc_mon,rtc_day,rtc_week //實(shí)時(shí)年份輸出
);

到這里就完成了萬(wàn)年歷中DS1340Z模塊的驅(qū)動(dòng)設(shè)計(jì),宏觀上講,該模塊的功能可以這樣描述:

正常模式下循環(huán)讀取時(shí)間信息,并把時(shí)間數(shù)據(jù)輸出

由旋轉(zhuǎn)編碼器按動(dòng)脈沖信號(hào)key_set觸發(fā)進(jìn)行一次寫操作,用于調(diào)節(jié)時(shí)間

每次寫操作調(diào)節(jié)時(shí)間的時(shí)間數(shù)據(jù)由其他模塊提供

2.旋轉(zhuǎn)編碼器驅(qū)動(dòng)設(shè)計(jì)

機(jī)械增量式旋轉(zhuǎn)編碼器的原理示意圖,中間圓形齒輪連接到旋轉(zhuǎn)編碼器的公共端4管腳,A、B兩個(gè)觸點(diǎn)連接到旋轉(zhuǎn)編碼器的A、B相輸出端3、5管腳,當(dāng)進(jìn)行旋轉(zhuǎn)操作時(shí),A、B觸點(diǎn)會(huì)先后接觸和錯(cuò)開(kāi)圓形齒輪,從而導(dǎo)致A、B相輸出信號(hào)產(chǎn)生相位不同的脈沖信號(hào):

順時(shí)針旋轉(zhuǎn)時(shí),A觸點(diǎn)超前于B觸點(diǎn)接觸和錯(cuò)開(kāi)圓形齒輪,A信號(hào)脈沖相位超前

逆時(shí)針旋轉(zhuǎn)時(shí),B觸點(diǎn)超前于A觸點(diǎn)接觸和錯(cuò)開(kāi)圓形齒輪,B信號(hào)脈沖相位超前

對(duì)A信號(hào)采樣程序?qū)崿F(xiàn)如下(對(duì)B信號(hào)一樣):

regkey_a_r,key_a_r1,key_a_r2;
//消除亞穩(wěn)態(tài)
always@(posedgeclk_500us)begin
key_a_r<=? ?key_a;
key_a_r1<=? ?key_a_r;
key_a_r2<=? ?key_a_r1;
end

然后簡(jiǎn)單去抖處理程序?qū)崿F(xiàn)如下(對(duì)B信號(hào)一樣):

regA_state;
//簡(jiǎn)單去抖動(dòng)處理
always@(key_a_r1orkey_a_r2)begin
case({key_a_r1,key_a_r2})
2'b11: A_state<=1'b1;
2'b00: A_state<=1'b0;
default:A_state<=A_state;
endcase
end

檢測(cè)A信號(hào)的邊沿程序?qū)崿F(xiàn)如下:

regA_state_r,A_state_r1;
//對(duì)A_state信號(hào)進(jìn)行邊沿檢測(cè)
always@(posedgeclk)begin
A_state_r<=A_state;
A_state_r1<=A_state_r;
end
wire A_pos=(!A_state_r1)&&A_state_r;
wire A_neg=A_state_r1&&(!A_state_r);

最后根據(jù)A信號(hào)邊沿與B信號(hào)的狀態(tài)組合判定旋轉(zhuǎn)的信息。

旋轉(zhuǎn)脈沖輸出程序?qū)崿F(xiàn)如下:

//當(dāng)A的上升沿伴隨B的高電平或當(dāng)A的下降沿伴隨B的低電平為向左旋轉(zhuǎn)
always@(posedgeclkornegedgerst_n)begin
if(!rst_n)L_pulse<=1'b0;
elseif((A_pos&&B_state)||(A_neg&&(!B_state)))L_pulse<=1'b1;
elseL_pulse<=1'b0;
end
//當(dāng)A的上升沿伴隨B的低電平或當(dāng)A的下降沿伴隨B的高電平為向右旋轉(zhuǎn)
always@(posedgeclkornegedgerst_n)begin
if(!rst_n)R_pulse<=1'b0;
elseif((A_pos&&(!B_state))||(A_neg&&B_state))R_pulse<=1'b1;
elseR_pulse<=1'b0;
end

通過(guò)上面程序最終實(shí)現(xiàn)了左旋右旋的脈沖輸出,脈沖的脈寬等于系統(tǒng)時(shí)鐘的周期。

3.模式控制:

本設(shè)計(jì)要實(shí)現(xiàn)8個(gè)模式(常態(tài)、調(diào)年、調(diào)月、調(diào)日、調(diào)周、調(diào)時(shí)、調(diào)分、調(diào)秒),對(duì)8個(gè)狀態(tài)編碼,常態(tài)—0、調(diào)秒—1、調(diào)分—2、調(diào)時(shí)—3、調(diào)周—4、調(diào)日—5、調(diào)月—6、調(diào)年—7,通過(guò)按動(dòng)旋轉(zhuǎn)編碼器切換,按照常識(shí)調(diào)時(shí)間從大到小調(diào)節(jié),先調(diào)節(jié)年份最后調(diào)秒鐘,所以我們這8個(gè)狀態(tài)的狀態(tài)機(jī)跳轉(zhuǎn)順序是固定的(0→7→6→5→4→3→2→1→0),依次循環(huán)跳轉(zhuǎn),程序?qū)崿F(xiàn)如下:

//時(shí)鐘運(yùn)行狀態(tài)控制
always@(posedgeclkornegedgerst_n)
if(!rst_n)state<=3'd0;
elseif(O_pulse)//按鍵脈沖控制時(shí)鐘運(yùn)行狀態(tài)的跳變,
if(state)state<=state-3'd1;
elsestate<=3'd7;
elsestate<=state;

4.調(diào)時(shí)控制:

調(diào)時(shí)控制在不同的調(diào)節(jié)模式對(duì)不同時(shí)間進(jìn)行調(diào)整,我們分別以常態(tài)模式和調(diào)秒模式為例進(jìn)行分析。時(shí)間調(diào)節(jié)要以當(dāng)時(shí)的時(shí)間為基礎(chǔ),常態(tài)模式下不需要調(diào)整任何時(shí)間,但是可以將實(shí)時(shí)時(shí)鐘讀出的時(shí)間數(shù)據(jù)賦給調(diào)節(jié)變量,這樣等跳轉(zhuǎn)到調(diào)節(jié)模式時(shí)對(duì)調(diào)節(jié)變量的控制就是以當(dāng)時(shí)的時(shí)間為基礎(chǔ)了,程序?qū)崿F(xiàn)如下:

3'd0: //正常模式
begin
if(O_pulse)begin //在常態(tài)下按動(dòng)編碼器將當(dāng)前實(shí)時(shí)時(shí)間賦值給調(diào)節(jié)寄存器
adj_sec<=rtc_sec;
adj_min<=rtc_min;
adj_hour<=rtc_hour;
adj_week<=rtc_week;
adj_day<=rtc_day;
adj_mon<=rtc_mon;
adj_year<=rtc_year;
end
end

調(diào)秒模式與其他調(diào)節(jié)模式操作一樣,不同的是調(diào)節(jié)的規(guī)則不同,例如秒和分的調(diào)節(jié)范圍為0~59,小時(shí)調(diào)節(jié)范圍0~11或0~23,日期調(diào)節(jié)范圍需要考慮年和月的值(1、3、5、7、8、10、12月范圍1~31,4、6、9、11月范圍1~30,2月平年范圍1~28,2月閏年范圍1~29),周調(diào)節(jié)范圍1~7,月調(diào)節(jié)范圍1~12,年調(diào)節(jié)范圍0~99。對(duì)秒鐘數(shù)據(jù)進(jìn)行調(diào)節(jié),程序?qū)崿F(xiàn)如下:

3'd1: //調(diào)秒模式
begin
if(L_pulse)begin//逆時(shí)針轉(zhuǎn)
if(adj_sec[3:0])adj_sec<=adj_sec-1'h1;
elseif(adj_sec[7:4])adj_sec<={adj_sec[7:4]-1'h1,4'h9};
elseadj_sec<=8'h59;
endelseif(R_pulse)begin//順時(shí)針轉(zhuǎn)
if(adj_sec[3:0]!=4'h9)adj_sec<=adj_sec+1'h1;
elseif(adj_sec[7:4]!=4'h5)adj_sec<={adj_sec[7:4]+1'h1,4'h0};
elseadj_sec<=8'h00;
endelseadj_sec<=adj_sec;
end

5.顯示控制:

首先使用8位數(shù)碼管分兩頁(yè)顯示時(shí)鐘數(shù)據(jù),第一頁(yè)顯示年月日周,第二頁(yè)顯示時(shí)分秒。任何一項(xiàng)時(shí)間選項(xiàng)都由兩位數(shù)碼管顯示,每頁(yè)最多顯示4個(gè)時(shí)間選項(xiàng),我們可以使用4位的變量disp_en[3:0]控制4個(gè)時(shí)間選項(xiàng)的點(diǎn)亮或熄滅,disp_en[3]控制最左側(cè)兩個(gè)數(shù)碼管,disp_en[0]控制最右側(cè)兩個(gè)數(shù)碼管,我們分別以常態(tài)模式和調(diào)秒模式為例進(jìn)行顯示使能控制的分析。常態(tài)模式下,轉(zhuǎn)動(dòng)編碼器控制顯示頁(yè)碼,兩個(gè)頁(yè)碼對(duì)應(yīng)的顯示控制,程序?qū)崿F(xiàn)如下:

3'd0: //正常模式
if(L_pulse)disp_en<=4'b1111;?? ?//逆時(shí)針轉(zhuǎn)顯示第一頁(yè),數(shù)碼管全亮
elseif(R_pulse)disp_en<=4'b0111;//順時(shí)針轉(zhuǎn)顯示第二頁(yè),時(shí)分秒亮
elsedisp_en<=disp_en;

調(diào)秒模式下,小時(shí)和分鐘數(shù)碼管點(diǎn)亮,秒鐘閃爍顯示,轉(zhuǎn)動(dòng)編碼器時(shí)秒鐘強(qiáng)制顯示,最后按動(dòng)旋轉(zhuǎn)編碼器切到常態(tài)模式時(shí),時(shí)分秒數(shù)碼管都回復(fù)顯示,程序?qū)崿F(xiàn)如下:

3'd1:begin //調(diào)秒模式
disp_en[3:1]<=3'b011;//時(shí)和分顯示
if(L_pulse|R_pulse)disp_en[0]<=1'b1;//轉(zhuǎn)動(dòng)時(shí)強(qiáng)制顯示
elseif(sec_pulse)disp_en[0]<=~disp_en[0];//秒鐘閃爍顯示
elseif(O_pulse)disp_en<=4'b0111;//返回常態(tài)時(shí)顯示時(shí)分秒
elsedisp_en[0]<=disp_en[0];
end

數(shù)碼管與時(shí)間選項(xiàng)是對(duì)應(yīng)關(guān)系,每個(gè)選項(xiàng)對(duì)應(yīng)兩位數(shù)碼管,程序?qū)崿F(xiàn)如下:

wire[7:0]data_en=//數(shù)碼管位選控制
{{2{disp_en[3]}},{2{disp_en[2]}},{2{disp_en[1]}},{2{disp_en[0]}}};
wire[7:0]dot_en=//數(shù)碼管小數(shù)點(diǎn)顯示控制
{1'b0,disp_en[3],1'b0,disp_en[2],1'b0,disp_en[1],1'b0,disp_en[0]};

時(shí)鐘顯示分兩頁(yè)實(shí)現(xiàn),我們以最右側(cè)兩個(gè)數(shù)碼管顯示內(nèi)容為例,這兩位數(shù)碼管在第一頁(yè)中顯示周數(shù)據(jù),在第二頁(yè)中顯示秒數(shù)據(jù),那么我們?cè)趺纯刂骑@示內(nèi)容呢?分析,萬(wàn)年歷8中模式,

常態(tài)模式下,顯示讀取的實(shí)時(shí)時(shí)鐘數(shù)據(jù),具體顯示周還是秒再次細(xì)化

? disp_en等于4'b1111的時(shí)候,對(duì)應(yīng)第一頁(yè),顯示周數(shù)據(jù)

? disp_en等于4'b0111的時(shí)候,對(duì)應(yīng)第二頁(yè),顯示秒數(shù)據(jù)

常態(tài)模式下,根據(jù)disp_en選擇顯示周數(shù)據(jù)還是秒數(shù)據(jù),程序?qū)崿F(xiàn)如下:

//常態(tài)下數(shù)碼管顯示數(shù)據(jù)
wire[7:0]data_rtc0=disp_en[3]?rtc_week:rtc_sec;

調(diào)節(jié)模式下,顯示寫入的調(diào)節(jié)時(shí)鐘數(shù)據(jù),具體顯示周還是秒再次細(xì)化

? 調(diào)年、調(diào)月、調(diào)日、調(diào)周 狀態(tài)下(state>=3),對(duì)應(yīng)第一頁(yè),顯示周數(shù)據(jù)

? 調(diào)時(shí)、調(diào)分、調(diào)秒 狀態(tài)下(state<3),對(duì)應(yīng)第二頁(yè),顯示秒數(shù)據(jù)

調(diào)節(jié)模式下,根據(jù)state選擇顯示周數(shù)據(jù)還是秒數(shù)據(jù),程序?qū)崿F(xiàn)如下:

//調(diào)節(jié)狀態(tài)下數(shù)碼管顯示數(shù)據(jù)
wire[7:0]data_adj0=state[2]?adj_week:adj_sec;

最后根據(jù)常態(tài)模式還是調(diào)節(jié)模式控制數(shù)碼管顯示實(shí)時(shí)時(shí)鐘數(shù)據(jù)還是調(diào)節(jié)時(shí)鐘數(shù)據(jù)

根據(jù)state選擇顯示實(shí)時(shí)時(shí)鐘數(shù)據(jù)還是調(diào)節(jié)時(shí)鐘數(shù)據(jù),程序?qū)崿F(xiàn)如下:

//根據(jù)狀態(tài)選擇顯示常態(tài)數(shù)據(jù)還是調(diào)節(jié)狀態(tài)數(shù)據(jù)
assign{data_7,data_8}=state?data_adj0:data_rtc3;

到這里為止,就完成了數(shù)字時(shí)鐘的設(shè)計(jì),當(dāng)然在本設(shè)計(jì)中,可以通過(guò)簡(jiǎn)化只留下時(shí)分秒及調(diào)時(shí)功能,實(shí)現(xiàn)24小時(shí)計(jì)時(shí),省去對(duì)于頁(yè)的判斷。同時(shí)對(duì)于旋轉(zhuǎn)編碼器有難度的,可以改為按鍵調(diào)時(shí)。有興趣的小伙伴可以動(dòng)手試試哦~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21784

    瀏覽量

    605034
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3663

    瀏覽量

    135017
  • 數(shù)字時(shí)鐘
    +關(guān)注

    關(guān)注

    2

    文章

    151

    瀏覽量

    20408

原文標(biāo)題:FPGA畢設(shè)系列 | 1.數(shù)字時(shí)鐘

文章出處:【微信號(hào):xiaojiaoyafpga,微信公眾號(hào):電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    [原創(chuàng)]基于FPGA萬(wàn)歷12864顯示-生肖---時(shí)---星.....

    ` 本帖最后由 qq274822790 于 2013-1-17 17:01 編輯 [原創(chuàng)]基于FPGA萬(wàn)歷12864顯示顯示-生
    發(fā)表于 01-17 17:01

    時(shí)鐘問(wèn)題

    本人編寫有一個(gè) 時(shí)鐘時(shí)鐘沒(méi)有問(wèn)題了,就是在年,
    發(fā)表于 05-20 23:17

    12時(shí)制數(shù)字顯示電子鐘,MCU為L(zhǎng)PC2103/2106

    12時(shí)制數(shù)字顯示電子鐘 設(shè)計(jì)一個(gè)數(shù)字顯示電子時(shí)鐘,要求:(1)時(shí)鐘的“時(shí)”要求用兩位
    發(fā)表于 07-10 19:20

    如何將時(shí)間分開(kāi)顯示 時(shí) 毫秒

    如何將時(shí)間分開(kāi)顯示 時(shí) 毫秒
    發(fā)表于 08-06 09:17

    FPGA實(shí)現(xiàn)顯示萬(wàn)歷電子時(shí)鐘

    使用FPGA實(shí)現(xiàn)顯示萬(wàn)歷電子時(shí)鐘,分鐘,小時(shí),月份,年份,,有
    發(fā)表于 04-19 14:33

    EAD萬(wàn)歷實(shí)訓(xùn)報(bào)告及Verilog HDL源碼

    設(shè)計(jì)一個(gè)數(shù)字日歷。 ⑵數(shù)字日歷顯示、時(shí)、
    發(fā)表于 07-03 05:38

    EAD萬(wàn)歷實(shí)訓(xùn)報(bào)告及Verilog HDL源碼

    設(shè)計(jì)一個(gè)數(shù)字日歷。 ⑵數(shù)字日歷顯示、時(shí)、
    發(fā)表于 07-09 04:35

    89c51時(shí)鐘萬(wàn)

    keil與protues的聯(lián)合仿真,使用的89c51和DS1302芯片,通過(guò)編程實(shí)現(xiàn)日歷/時(shí)鐘的計(jì)時(shí)顯示功能。具體要求是,開(kāi)機(jī)時(shí)DS1302初始化為:19
    發(fā)表于 06-14 17:54

    如何去實(shí)現(xiàn)一種基于51單片機(jī)的電子時(shí)鐘萬(wàn)歷設(shè)計(jì)

    、時(shí)、進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能。溫度采集選用DS18B20芯片,萬(wàn)歷采用直觀的數(shù)字顯示,數(shù)據(jù)
    發(fā)表于 11-10 08:12

    基于FPGA設(shè)計(jì)實(shí)現(xiàn)一個(gè)多功能數(shù)字鐘相關(guān)資料分享

    1、基于FPGA設(shè)計(jì)實(shí)現(xiàn)一個(gè)多功能數(shù)字鐘在FPGA中設(shè)計(jì)實(shí)現(xiàn)一個(gè)多功能數(shù)字鐘,具備以下功能:準(zhǔn)確
    發(fā)表于 07-08 17:26

    基于FPGA數(shù)字時(shí)鐘設(shè)計(jì)

    基于FPGA數(shù)字時(shí)鐘設(shè)計(jì),可實(shí)現(xiàn)鬧鐘的功能,可校時(shí)
    發(fā)表于 06-23 17:15 ?69次下載

    基于Multisim數(shù)字時(shí)鐘的設(shè)計(jì)與仿真

    數(shù)字時(shí)鐘具有、時(shí)的十進(jìn)制數(shù)字顯示,能夠隨時(shí)校正分鐘和小時(shí),當(dāng)
    發(fā)表于 11-27 11:13 ?322次下載
    基于Multisim<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>的設(shè)計(jì)與仿真

    鋯石FPGA A4_Nano開(kāi)發(fā)板視頻:數(shù)字時(shí)鐘的項(xiàng)目工程講解

    數(shù)字時(shí)鐘,就是以數(shù)字顯示取代模擬表盤的鐘表,在顯示上它用數(shù)字反應(yīng)此時(shí)的時(shí)間,它還能同時(shí)
    的頭像 發(fā)表于 09-24 07:05 ?1694次閱讀
    鋯石<b class='flag-5'>FPGA</b> A4_Nano開(kāi)發(fā)板視頻:<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>的項(xiàng)目工程講解

    設(shè)計(jì)數(shù)字時(shí)鐘的設(shè)計(jì)報(bào)告

    在QuartusⅡ軟件平臺(tái)下,運(yùn)用verilog硬件描述語(yǔ)言和DE2來(lái)實(shí)現(xiàn)數(shù)字時(shí)鐘功能。數(shù)字時(shí)鐘包括組合邏輯電路和時(shí)序電路,能夠正確
    發(fā)表于 07-23 17:45 ?44次下載
    設(shè)計(jì)<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>的設(shè)計(jì)報(bào)告

    基于FPGA數(shù)字電子時(shí)鐘設(shè)計(jì)

    利用數(shù)字電子技術(shù)、EDA設(shè)計(jì)方法、FPGA等技術(shù),設(shè)計(jì)、仿真并實(shí)現(xiàn)一個(gè)基于FPGA數(shù)字電子時(shí)鐘
    發(fā)表于 05-28 10:47 ?58次下載
    主站蜘蛛池模板: 人和拘一级毛片| 99在线观看| 2021扫黑风暴在线观看免费完整版 | 囯产精品久久久久免费蜜桃 | 俄罗斯美女z0z0z0在线| 国产视频这里只有精品| 久久伊人电影| 乳交高H糙汉宠文| 一级毛片皇帝 宫女| 办公室沙发口爆12P| 国拍自产精品福利区| 女神被调教成了精盆| 午夜十八岁禁| 91九色视频无限观看免费| 国产精品久久久久久久久LI无码 | 亚洲视频一区在线| mxgs-877痉挛媚药按摩| 国产人妻久久久精品麻豆| 美女网站免费看| 午夜向日葵高清在线观看| 18videosex性欧美黑色| 直插下身完整的欧美版| 成人在线视频免费| 久久精品九九亚洲精品天堂| 欧美亚洲综合另类无码| 亚洲乱码在线卡一卡二卡新区| G0GO人体大尺香蕉| 娇女的呻吟亲女禁忌h16| 日本黄色www| 中国老太太xxx| 国产免费啪嗒啪嗒视频看看 | 日韩插啊免费视频在线观看| 妖精视频在线观看高清| 国产99久久久欧美黑人刘玥| 美国色吧影院| 亚洲欧美日韩精品自拍| 动漫成年美女黄漫网站| 免费99精品国产自在现线| 性xxxx直播放免费| 边做边爱免费视频播放| 妈妈的朋友6未删减版完整在线|