




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)字時(shí)鐘及鬧鐘 目錄一、實(shí)驗(yàn)任務(wù)2實(shí)驗(yàn)?zāi)康?實(shí)驗(yàn)要求2二、設(shè)計(jì)思路2硬件部分2軟件部分3三、完成情況6四、總結(jié)與收獲7具體分工7五、完整程序815一、實(shí)驗(yàn)任務(wù)實(shí)驗(yàn)?zāi)康?. 深入了解基于EDA工具的復(fù)雜時(shí)序邏輯電路的設(shè)計(jì)。2. 理解并熟練利用EDA工具進(jìn)行綜合設(shè)計(jì)。3. 熟練掌握芯片燒錄的流程及步驟。4. 掌握Verilog HDL 語言的語法規(guī)范及時(shí)序電路描述方法。5. 掌握多個(gè)數(shù)碼管動(dòng)態(tài)掃描與鍵盤掃描的顯示原理及設(shè)計(jì)方法。實(shí)驗(yàn)要求設(shè)計(jì)一個(gè)帶鬧鐘功能的24 小時(shí)數(shù)字鐘,它包括以下幾個(gè)組成部分: 顯示屏,由4 個(gè)七段數(shù)碼管組成,用于顯示當(dāng)前時(shí)間(時(shí):分)或設(shè)置的鬧鐘時(shí)間; 數(shù)字鍵 09,用于輸入
2、新的時(shí)間或新的鬧鐘時(shí)間; TIME(時(shí)間)鍵,用于確定新的時(shí)間設(shè)置; ALARM(鬧鐘)鍵,用于確定新的鬧鐘時(shí)間設(shè)置,或顯示已設(shè)置的鬧鐘時(shí)間; 揚(yáng)聲器,在當(dāng)前時(shí)鐘時(shí)間與鬧鐘時(shí)間相同時(shí),發(fā)出蜂鳴聲?;疽?1) 計(jì)時(shí)功能:這是本計(jì)時(shí)器設(shè)計(jì)的基本功能,每隔一秒計(jì)時(shí)一次,并在顯示屏上顯示當(dāng)前時(shí)間。(2) 鬧鐘功能:如果當(dāng)前時(shí)間與設(shè)置的鬧鐘時(shí)間相同,則揚(yáng)聲器發(fā)出蜂鳴聲。(3) 設(shè)置新的計(jì)時(shí)器時(shí)間:用戶用數(shù)字鍵09輸入新的時(shí)間,然后按TIME鍵確認(rèn)。發(fā)揮部分(1) 設(shè)置新的鬧鐘時(shí)間:用戶用數(shù)字鍵“0”“9”輸入新的時(shí)間,然后按“ALARM”鍵確認(rèn)。(2) 顯示所設(shè)置的鬧鐘時(shí)間:在正常計(jì)時(shí)顯示狀態(tài)下,用
3、戶直接按下“ALARM”鍵,則已設(shè)置的鬧鐘時(shí)間將顯示在顯示屏上。二、設(shè)計(jì)思路硬件部分本次數(shù)字時(shí)鐘的設(shè)計(jì)主要在NC-EDA-2000C實(shí)驗(yàn)箱上完成,應(yīng)用的芯片為Altara公司的EP1K10TC1003芯片。該芯片具有低內(nèi)核電壓、低功耗的特點(diǎn)。芯片內(nèi)門電路高達(dá)1萬門,內(nèi)部使用RAM作電路結(jié)構(gòu),速度高達(dá)幾百M(fèi)HZ,其輸出可用管腳已全部開放,位于芯片的四周,用戶可以根據(jù)自己的要求和芯片本身的功能自己任意定義管腳。同時(shí)為了體現(xiàn)實(shí)驗(yàn)箱的可擴(kuò)展性,在芯片的兩邊各有一個(gè)34腳的IDE插口,可以通過數(shù)據(jù)排線與其它應(yīng)用模塊相連接。除了主芯片外,主要包括三大部分:八個(gè)數(shù)碼管組成的顯示部分、44鍵盤構(gòu)成的按鍵輸入部
4、分。以及其他輸入或輸出部分,如:TIME鍵、“ALARM”鍵、時(shí)鐘信號、蜂鳴器等。8位7段數(shù)碼管:采用2個(gè)進(jìn)口共陰高紅7段數(shù)碼管組成,其連接管腳位選信號在數(shù)碼管的左邊由連接孔SEL0、SEL1、SEL2與其它模塊連接。數(shù)碼管顯示的設(shè)計(jì)示意圖如下:八位數(shù)碼管顯示設(shè)計(jì)示意圖44鍵盤: 44鍵盤主要是通過編程實(shí)現(xiàn)0F的輸入,也可以作為一個(gè)控制鍵。在其上方的連接孔R(shí)1、R2、R3、R4控制橫向4位;C1、C2、C3、C4縱向4位。鍵盤輸入設(shè)計(jì)示意圖如下:44鍵盤輸入設(shè)計(jì)示意圖 軟件部分軟件主要應(yīng)用軟件quartus,使用Verilog HDL語言來編寫程序。在老師所給的keyscan的基礎(chǔ)上加入計(jì)時(shí)部
5、分、設(shè)置部分(時(shí)間的設(shè)置和鬧鐘的設(shè)置)以及鬧鈴部分。a) 計(jì)時(shí)部分always(posedge clkl) /計(jì)時(shí)過程beginhour=Hour;minute=Minute;if(reset) begin hour=0;minute=0;second=0;endelseif(second=59)if(minute=59)if(hour =23) begin second=0;minute=0;hour=0;endelse begin second=0;minute=0;hour=hour+1;endelse begin second=0;minute=minute+1;endelse sec
6、ond=second+1;end其中,clkl為1Hz的時(shí)鐘信號,當(dāng)每遇到一個(gè)時(shí)鐘信號的上升沿時(shí),秒鐘就加1秒;當(dāng)加到59時(shí),分鐘就加1,秒鐘自動(dòng)回到0重新計(jì)時(shí);當(dāng)分鐘加到59時(shí),時(shí)鐘就加1,然后分鐘回到0;當(dāng)計(jì)時(shí)到23:59:59時(shí),則回到00:00:00再進(jìn)入計(jì)時(shí)。reset為清零信號,高電平有效。b) 設(shè)置部分always (posedge clkh)begin if(w=1)/設(shè)置時(shí)間begin Hour=num1*10+num2; Minute=num3*10+num4; endelse if(p=1) /設(shè)置鬧鐘begin Ahour=num1*10+num2; Aminute=n
7、um3*10+num4; end end將按下的鍵值存在num1、num2、num3、num4中,再通過w和p即所謂的TIME(時(shí)間)鍵與ALARM(鬧鐘)鍵將輸入的數(shù)值賦給初始時(shí)間或鬧鐘時(shí)間。c) 鬧鈴部分 always (posedge clkh)/鬧鐘響beginif(hour=Ahour)&(minute=Aminute) ds=1; else ds=0;end當(dāng)設(shè)置的鬧鐘時(shí)間(時(shí):分)與當(dāng)前的時(shí)間(時(shí):分)相等時(shí),則鬧鈴發(fā)出響聲;ds信號可以接在蜂鳴器上或者發(fā)光二極管上。本次設(shè)計(jì)的完整程序已附在報(bào)告的最后。整體程序編譯無誤。程序中涉及的變量名稱及其對應(yīng)的變量意義:引腳配置圖三、完成情
8、況在這次實(shí)驗(yàn)過程中我們完成了24小時(shí)數(shù)字時(shí)鐘的設(shè)計(jì)。時(shí)鐘的顯示屏為七段數(shù)碼管。顯示出的時(shí)間格式為小時(shí)、分鐘、秒鐘(如圖1)。時(shí)鐘含有鬧鐘,可以在程序中設(shè)置鬧鐘時(shí)間,在實(shí)際時(shí)間和鬧鐘時(shí)間相吻合時(shí)蜂鳴器響。圖2中的二極管亮即可說明,在鬧鐘時(shí)間可以輸出高電平,該輸出接在蜂鳴器上即可使蜂鳴器響。本次設(shè)計(jì)的鬧鐘為響1分鐘自動(dòng)關(guān)閉。圖3中二極管熄滅。圖1 時(shí)間顯示圖2 鬧鐘響(體現(xiàn)為發(fā)光二極管發(fā)光)圖3 發(fā)光二極管熄滅(本次設(shè)計(jì)的鬧鐘為響1分鐘自動(dòng)關(guān)閉)四、總結(jié)與收獲在實(shí)驗(yàn)設(shè)計(jì)的過程中,我們首先嘗試了樹上和老師上課時(shí)所講的例程,在熟悉軟件和設(shè)計(jì)流程后開始了數(shù)字時(shí)鐘的設(shè)計(jì)。在設(shè)計(jì)數(shù)字時(shí)鐘時(shí),我們先分設(shè)計(jì)出來
9、時(shí)鐘的自動(dòng)計(jì)數(shù)顯示,實(shí)現(xiàn)了24小時(shí)時(shí)鐘。之后實(shí)驗(yàn)了4*4鍵盤,實(shí)現(xiàn)了鍵盤輸入值的掃描讀取。最后設(shè)計(jì)了鬧鐘部分,包括設(shè)置鬧鐘時(shí)間和到時(shí)間鬧鈴響。我們通過本次實(shí)驗(yàn)深入了解基于EDA工具的復(fù)雜時(shí)序邏輯電路的設(shè)計(jì),理解并熟練利用quartus進(jìn)行Verilog HDL語言的設(shè)計(jì)。掌握了建立工程項(xiàng)目,編譯調(diào)試程序,下載程序的流程和步驟。在應(yīng)用的過程中掌握了數(shù)碼管和鍵盤掃描的原理和方法。并且對Verilog HDL語言的語法規(guī)則和幾種常用語句有了更深入的理解。實(shí)驗(yàn)過程中通過合作的方式,小組成員積極討論,對不同的語句進(jìn)行了對比,最終確定了本次實(shí)驗(yàn)的完整程序。這次完成的數(shù)字時(shí)鐘只是EDA實(shí)驗(yàn)箱中可以實(shí)現(xiàn)的眾多
10、功能之一,我們也認(rèn)識(shí)到Verilog HDL語言可以實(shí)現(xiàn)的設(shè)計(jì)還有很多,本次實(shí)驗(yàn)激發(fā)了我們對Verilog HDL語言的興趣,也讓我們認(rèn)識(shí)到課堂的學(xué)習(xí)是有限的,想更加深入學(xué)習(xí)Verilog HDL語言,還要在今后的學(xué)習(xí)中多多自學(xué),勤加練習(xí)。五、完整程序module zonghe (clkl,clkh,reset,q,w,p,kr,kc,a,b,c,d,e,f,g,sa,sb,sc,ds); input clkl,clkh,reset; /計(jì)數(shù)時(shí)鐘脈沖、掃描頻率脈沖與復(fù)位信號 input q,w,p; /啟動(dòng)設(shè)置的控制信號、設(shè)置時(shí)間的控制信號及設(shè)置鬧鐘的控制信號 inout 3:0kr; /4*
11、4鍵盤的行輸入/輸出信號 inout 3:0kc; /4*4鍵盤的列輸入/輸出信號 output a,b,c,d,e,f,g,sa,sb,sc,ds; /LED的7個(gè)片選信號與3個(gè)位選信號 reg a,b,c,d,e,f,g,sa,sb,sc,ds; reg 3:0kr,kc; reg 6:0 display ; reg 2:0 dcount,kcount; reg 3:0keyr,keyc; reg kflag1,kflag2; reg 6:0 buff7 ; reg 3:0 shiwei1,gewei1,shiwei2,gewei2,shiwei3,gewei3; reg5:0 hour,
12、minute,second,Ahour,Aminute,Hour,Minute; /儲(chǔ)存當(dāng)前時(shí)間的時(shí)分秒、鬧鐘的時(shí)分及設(shè)置的時(shí)間的時(shí)分 always(posedge clkh) /累加兩個(gè)計(jì)數(shù)值 begin dcount=dcount+1; kcount=kcount+1; end always (posedge clkh) /掃描鍵盤 begin if(kcount=0) begin kr=4b1111; kc=4b0000; end else if(kcount=1) begin keyr=kr; kr=4bZZZZ; end else if(kcount=2) begin kr=4b00
13、00; kc=4b1111; end else if(kcount=3) begin keyc=kc;kc=4bZZZZ; end end always(posedge clkh) /改變鍵的標(biāo)志位 begin if(kcount=4 & keyr=4b1111) kflag1=0; else if(kcount=4) kflag1=1; kflag2=kflag1; end always(posedge clkh) / 獲取相應(yīng)按鍵按下的結(jié)果begin if(kcount=5) if(keyr=4b1110) case (keyc) 4b1110:buff7=7b0111111; /在LED
14、上顯示0 4b1101:buff7=7b0000110; /在LED上顯示1 4b1011:buff7=7b1011011; /在LED上顯示2 4b0111:buff7=7b1001111; /在LED上顯示3 default :buff7=buff7; /無變化 endcase else if (keyr=4b1101) case (keyc) 4b1110:buff7=7b1100110; /在LED上顯示4 4b1101:buff7=7b1101101; /在LED上顯示5 4b1011:buff7=7b1111101; /在LED上顯示6 4b0111:buff7=7b0000111
15、; /在LED上顯示7 default :buff7=buff7; / 無變化 endcase else if(keyr=4b1011) case (keyc) 4b1110:buff7=7b1111111; / 在LED上顯示8 4b1101:buff7=7b1101111; / 在LED上顯示9 4b1011:buff7=7b1110111; /在LED上顯示a 4b0111:buff7=7b1111100; /在LED上顯示b default :buff7=buff7; / 無變化 endcase else if(keyr=4b0111) case (keyc) 4b1110:buff7
16、=7b0111001; /在LED上顯示c 4b1101:buff7=7b1011110; /在LED上顯示d 4b1011:buff7=7b1111001; /在LED上顯示e 4b0111:buff7=7b1110001; / 在LED上顯示f default:buff7=buff7; /無變化 endcase end always(posedge clkh) /顯示過程 begin sa=dcount0; /將dcount賦給LED的三個(gè)片選信號 sb=dcount1; sc=dcount2; shiwei1=hour/10;gewei1=hour%10;shiwei2=minute/1
17、0;gewei2=minute%10;shiwei3=second/10;gewei3=second%10;if(dcount=3b111)/判斷位選dcount的值,并將此位上的值輸出到數(shù)碼管case(shiwei1) /在第一數(shù)碼管上顯示時(shí)鐘的十位 4b0000: display = 7b0111_111;4b0001: display= 7b0000_110;4b0010: display = 7b1011_011;4b0011: display = 7b1001_111;4b0100: display = 7b1100_110;4b0101: display = 7b1101_101;
18、4b0110: display = 7b1111_101;4b0111: display = 7b0000_111;4b1000: display = 7b1111_111;4b1001: display = 7b1101_111; default: display = 7b0000_000;endcaseif(dcount=3b000) /在第二個(gè)數(shù)碼管上顯示時(shí)鐘的個(gè)位case(gewei1) 4b0000: display = 7b0111_111;4b0001: display = 7b0000_110;4b0010: display = 7b1011_011;4b0011: displ
19、ay = 7b1001_111;4b0100: display = 7b1100_110;4b0101: display = 7b1101_101;4b0110: display = 7b1111_101;4b0111: display = 7b0000_111;4b1000: display = 7b1111_111;4b1001: display = 7b1101_111; default: display = 7b0000_000;endcaseif(dcount=3b001) /在第三個(gè)數(shù)碼管上顯示分鐘的十位case(shiwei2) 4b0000: display = 7b0111_
20、111;4b0001: display = 7b0000_110;4b0010: display = 7b1011_011;4b0011: display = 7b1001_111;4b0100: display = 7b1100_110;4b0101: display = 7b1101_101;4b0110: display = 7b1111_101;4b0111: display = 7b0000_111;4b1000: display = 7b1111_111;4b1001: display = 7b1101_111; default: display = 7b0000_000;endc
21、aseif(dcount=3b010) /在第四個(gè)數(shù)碼管上顯示分鐘的個(gè)位case(gewei2) 4b0000: display = 7b0111_111;4b0001: display = 7b0000_110;4b0010: display = 7b1011_011;4b0011: display = 7b1001_111;4b0100: display = 7b1100_110;4b0101: display = 7b1101_101;4b0110: display = 7b1111_101;4b0111: display = 7b0000_111;4b1000: display = 7
22、b1111_111;4b1001: display = 7b1101_111; default: display = 7b0000_000;endcase if(dcount=3b011) /在第五個(gè)數(shù)碼管上顯示秒鐘的十位case(shiwei3) 4b0000: display = 7b0111_111;4b0001: display = 7b0000_110;4b0010: display = 7b1011_011;4b0011: display = 7b1001_111;4b0100: display = 7b1100_110;4b0101: display = 7b1101_101;4
23、b0110: display = 7b1111_101;4b0111: display = 7b0000_111;4b1000: display = 7b1111_111;4b1001: display = 7b1101_111; default: display = 7b0000_000;endcaseif(dcount=3b100) /在第六個(gè)數(shù)碼管上顯示秒鐘的個(gè)位case(gewei3) 4b0000: display = 7b0111_111;4b0001: display = 7b0000_110;4b0010: display = 7b1011_011;4b0011: displa
24、y = 7b1001_111;4b0100: display = 7b1100_110;4b0101: display = 7b1101_101;4b0110: display = 7b1111_101;4b0111: display = 7b0000_111;4b1000: display = 7b1111_111;4b1001: display = 7b1101_111; default: display = 7b0000_000;endcase if(dcount=3b101)display =7b1000_000; /在第七個(gè)數(shù)碼管上顯示“”if(dcount=3b110)displa
25、y =buff7; /在第八個(gè)數(shù)碼管上顯示按下的鍵值endalways (posedge clkh) /將display中存的值賦給LED的七個(gè)片選信號 begin a=display0; b=display1; c=display2; d=display3; e=display4; f=display5; g=display6; end always(posedge clkl) /計(jì)時(shí)過程 clkl的頻率為1Hzbeginhour=Hour;minute=Minute; /將設(shè)置的時(shí)間(時(shí)、分)賦給hour和minuteif(reset) begin hour=0;minute=0;seco
26、nd=0; end /當(dāng)reset為1時(shí),將時(shí)間清零即為00:00:00else /正常計(jì)時(shí)if(second=59)if(minute=59)if(hour =23) begin second=0;minute=0;hour=0;endelse begin second=0;minute=0;hour=hour+1;endelse begin second=0;minute=minute+1;endelse second=second+1;endinteger i; /記錄按鍵按下的次數(shù)reg 3:0num1,num2,num3,num4; /儲(chǔ)存按鍵的鍵值always (posedge c
27、lkh)/儲(chǔ)存按下的鍵值begin if(q=1)/啟動(dòng)設(shè)置 begin i=0; if(keyc!=4b1111) i=i+1; /當(dāng)有鍵按下時(shí),i自動(dòng)加1 if(i=1) /將第一個(gè)按下的按鍵值存入num1 begin case (keyr,keyc) 4b1110_1110:num1=0; 4b1110_1101:num1=1; 4b1110_1011:num1=2; 4b1110_0111:num1=3; 4b1101_1110:num1=4; 4b1101_1101:num1=5; 4b1101_1011:num1=6; 4b1101_0111:num1=7; 4b1011_1110:num1=8; 4b1011_1101:num1=9; default:num1=num1; endcase endif(i=2) /將第二個(gè)按下的按鍵值存入num2 begin case (keyr,keyc) 4b1110_1110:num2=0; 4b1110_1101:num2=1; 4b1110_1011:num2=2; 4b1110_0111:num2=3; 4b1101_1110:num2=4; 4b1101_1101:num2=5; 4b1101_1011:num2=6; 4b1101_0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣西城市職業(yè)大學(xué)單招職業(yè)技能考試題庫及完整答案一套
- 2025年廣元中核職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫a4版
- 2025年貴州財(cái)經(jīng)職業(yè)學(xué)院單招職業(yè)技能考試題庫新版
- 2025年滁州城市職業(yè)學(xué)院單招職業(yè)技能考試題庫及完整答案一套
- 2025年廣東茂名農(nóng)林科技職業(yè)學(xué)院單招綜合素質(zhì)考試題庫及參考答案
- 2025年貴州省六盤水市單招職業(yè)傾向性測試題庫有答案
- 2025年廣州科技貿(mào)易職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫參考答案
- 2025年廣東嶺南職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫及答案一套
- 城市垃圾處理站承包合同2025
- 合同轉(zhuǎn)讓及主體變更協(xié)議書
- 小升初生涯規(guī)劃
- 第二章陸地和海洋【真題訓(xùn)練】(人教版)(原卷版)
- 小吃街概念性規(guī)劃
- 創(chuàng)新小白實(shí)操手冊 第2版 課件全套 吳雋 模塊1-8 人人皆可創(chuàng)新-商業(yè)呈現(xiàn)與商業(yè)計(jì)劃
- 2024年世界職業(yè)院校技能大賽高職組“關(guān)務(wù)實(shí)務(wù)組”賽項(xiàng)參考試題庫(含答案)
- 電商提成合同模板
- 正念八周課件
- 服務(wù)響應(yīng)時(shí)間和服務(wù)保障方案
- 蟾蜍毒抗病毒作用機(jī)制
- 光伏發(fā)電監(jiān)理合同協(xié)議
- 新能源汽車概論課件 3.1認(rèn)知純電動(dòng)汽車
評論
0/150
提交評論