eda數(shù)字時(shí)鐘veriloghdl_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p><b>  一、實(shí)驗(yàn)任務(wù)2</b></p><p><b>  實(shí)驗(yàn)?zāi)康?</b></p><p><b>  實(shí)驗(yàn)要求2</b></p><p><b>  二、設(shè)計(jì)思路2&l

2、t;/b></p><p><b>  硬件部分2</b></p><p><b>  軟件部分3</b></p><p><b>  三、完成情況6</b></p><p><b>  四、總結(jié)與收獲7</b></p><

3、;p><b>  具體分工7</b></p><p><b>  五、完整程序8</b></p><p><b>  一、實(shí)驗(yàn)任務(wù)</b></p><p><b>  實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  深入了解基于EDA工具的復(fù)雜時(shí)序邏輯電路

4、的設(shè)計(jì)。</p><p>  理解并熟練利用EDA工具進(jìn)行綜合設(shè)計(jì)。</p><p>  熟練掌握芯片燒錄的流程及步驟。</p><p>  掌握Verilog HDL 語言的語法規(guī)范及時(shí)序電路描述方法。</p><p>  掌握多個數(shù)碼管動態(tài)掃描與鍵盤掃描的顯示原理及設(shè)計(jì)方法。</p><p><b>  

5、實(shí)驗(yàn)要求</b></p><p>  設(shè)計(jì)一個帶鬧鐘功能的24 小時(shí)數(shù)字鐘,它包括以下幾個組成部分:</p><p> ?、?顯示屏,由4 個七段數(shù)碼管組成,用于顯示當(dāng)前時(shí)間(時(shí):分)或設(shè)置的鬧鐘時(shí)間;</p><p> ?、?數(shù)字鍵 ‘0’~‘9’,用于輸入新的時(shí)間或新的鬧鐘時(shí)間;</p><p> ?、?TIME(時(shí)間)鍵

6、,用于確定新的時(shí)間設(shè)置;</p><p>  ④ ALARM(鬧鐘)鍵,用于確定新的鬧鐘時(shí)間設(shè)置,或顯示已設(shè)置的鬧鐘時(shí)間;</p><p>  ⑤ 揚(yáng)聲器,在當(dāng)前時(shí)鐘時(shí)間與鬧鐘時(shí)間相同時(shí),發(fā)出蜂鳴聲。</p><p><b>  基本要求</b></p><p>  (1) 計(jì)時(shí)功能:這是本計(jì)時(shí)器設(shè)計(jì)的基本功能,每隔一秒

7、計(jì)時(shí)一次,并在顯示屏上顯示當(dāng)前時(shí)間。</p><p>  (2) 鬧鐘功能:如果當(dāng)前時(shí)間與設(shè)置的鬧鐘時(shí)間相同,則揚(yáng)聲器發(fā)出蜂鳴聲。</p><p>  (3) 設(shè)置新的計(jì)時(shí)器時(shí)間:用戶用數(shù)字鍵‘0’~‘9’輸入新的時(shí)間,然后按"TIME"鍵確認(rèn)。</p><p><b>  發(fā)揮部分</b></p><p

8、>  (1) 設(shè)置新的鬧鐘時(shí)間:用戶用數(shù)字鍵“0”~“9”輸入新的時(shí)間,然后按“ALARM”鍵確認(rèn)。</p><p>  (2) 顯示所設(shè)置的鬧鐘時(shí)間:在正常計(jì)時(shí)顯示狀態(tài)下,用戶直接按下“ALARM”鍵,則已設(shè)置的鬧鐘時(shí)間將顯示在顯示屏上。</p><p><b>  二、設(shè)計(jì)思路</b></p><p><b>  硬件部分&

9、lt;/b></p><p>  本次數(shù)字時(shí)鐘的設(shè)計(jì)主要在NC-EDA-2000C實(shí)驗(yàn)箱上完成,應(yīng)用的芯片為Altara公司的EP1K10TC100—3芯片。該芯片具有低內(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ò)展性,在芯片的兩邊各有一

10、個34腳的IDE插口,可以通過數(shù)據(jù)排線與其它應(yīng)用模塊相連接。</p><p>  除了主芯片外,主要包括三大部分:八個數(shù)碼管組成的顯示部分、4×4鍵盤構(gòu)成的按鍵輸入部分。以及其他輸入或輸出部分,如:"TIME"鍵、“ALARM”鍵、時(shí)鐘信號、蜂鳴器等。</p><p>  8位7段數(shù)碼管:采用2個進(jìn)口共陰高紅7段數(shù)碼管組成,其連接管腳位選信號在數(shù)碼管的左邊由連

11、接孔SEL0、SEL1、SEL2與其它模塊連接。</p><p>  數(shù)碼管顯示的設(shè)計(jì)示意圖如下:</p><p>  八位數(shù)碼管顯示設(shè)計(jì)示意圖</p><p>  4×4鍵盤: 4×4鍵盤主要是通過編程實(shí)現(xiàn)0~F的輸入,也可以作為一個控制鍵。在其上方的連接孔R1、R2、R3、R4控制橫向4位;C1、C2、C3、C4縱向4位。</p>

12、<p>  鍵盤輸入設(shè)計(jì)示意圖如下:</p><p>  4×4鍵盤輸入設(shè)計(jì)示意圖</p><p><b>  軟件部分</b></p><p>  軟件主要應(yīng)用軟件quartus,使用Verilog HDL語言來編寫程序。在老師所給的keyscan的基礎(chǔ)上加入計(jì)時(shí)部分、設(shè)置部分(時(shí)間的設(shè)置和鬧鐘的設(shè)置)以及鬧鈴部分。&

13、lt;/p><p><b>  計(jì)時(shí)部分</b></p><p>  always@(posedge clkl) //計(jì)時(shí)過程</p><p><b>  begin</b></p><p>  hour<=Hour;minute<=Minute;</p><p&

14、gt;  if(reset) begin hour<=0;minute<=0;second<=0;end</p><p><b>  else</b></p><p>  if(second==59)</p><p>  if(minute==59)</p><p>  if(hour ==23) be

15、gin second<=0;minute<=0;hour<=0;end</p><p>  else begin second<=0;minute<=0;hour<=hour+1;end</p><p>  else begin second<=0;minute<=minute+1;end</p><p>  else

16、 second<=second+1;</p><p><b>  end</b></p><p>  其中,clkl為1Hz的時(shí)鐘信號,當(dāng)每遇到一個時(shí)鐘信號的上升沿時(shí),秒鐘就加1秒;當(dāng)加到59時(shí),分鐘就加1,秒鐘自動回到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為清零信號,高

17、電平有效。</p><p><b>  設(shè)置部分</b></p><p>  always @(posedge clkh)</p><p><b>  begin</b></p><p>  if(w==1)//設(shè)置時(shí)間</p><p>  begin Hour=num1*

18、10+num2; Minute=num3*10+num4; end</p><p>  else if(p==1) //設(shè)置鬧鐘</p><p>  begin Ahour=num1*10+num2; Aminute=num3*10+num4; end</p><p><b>  end</b></p><p>  

19、將按下的鍵值存在num1、num2、num3、num4中,再通過w和p即所謂的TIME(時(shí)間)鍵與ALARM(鬧鐘)鍵將輸入的數(shù)值賦給初始時(shí)間或鬧鐘時(shí)間。</p><p><b>  鬧鈴部分</b></p><p>  always @(posedge clkh)//鬧鐘響</p><p><b>  begin</b>

20、</p><p>  if((hour==Ahour)&&(minute==Aminute)) ds=1; </p><p>  else ds=0;</p><p><b>  end</b></p><p>  當(dāng)設(shè)置的鬧鐘時(shí)間(時(shí):分)與當(dāng)前的時(shí)間(時(shí):分)相等時(shí),則鬧鈴發(fā)出響聲;ds信號可以接在

21、蜂鳴器上或者發(fā)光二極管上。</p><p>  本次設(shè)計(jì)的完整程序已附在報(bào)告的最后。整體程序編譯無誤。</p><p>  程序中涉及的變量名稱及其對應(yīng)的變量意義:</p><p><b>  引腳配置圖</b></p><p><b>  三、完成情況</b></p><p&g

22、t;  在這次實(shí)驗(yàn)過程中我們完成了24小時(shí)數(shù)字時(shí)鐘的設(shè)計(jì)。時(shí)鐘的顯示屏為七段數(shù)碼管。顯示出的時(shí)間格式為小時(shí)、分鐘、秒鐘(如圖1)。</p><p>  時(shí)鐘含有鬧鐘,可以在程序中設(shè)置鬧鐘時(shí)間,在實(shí)際時(shí)間和鬧鐘時(shí)間相吻合時(shí)蜂鳴器響。圖2中的二極管亮即可說明,在鬧鐘時(shí)間可以輸出高電平,該輸出接在蜂鳴器上即可使蜂鳴器響。</p><p>  本次設(shè)計(jì)的鬧鐘為響1分鐘自動關(guān)閉。圖3中二極管熄滅。&

23、lt;/p><p><b>  圖1 時(shí)間顯示</b></p><p>  圖2 鬧鐘響(體現(xiàn)為發(fā)光二極管發(fā)光)</p><p>  圖3 發(fā)光二極管熄滅(本次設(shè)計(jì)的鬧鐘為響1分鐘自動關(guān)閉)</p><p><b>  四、總結(jié)與收獲</b></p><p>  在實(shí)驗(yàn)設(shè)計(jì)的過

24、程中,我們首先嘗試了樹上和老師上課時(shí)所講的例程,在熟悉軟件和設(shè)計(jì)流程后開始了數(shù)字時(shí)鐘的設(shè)計(jì)。在設(shè)計(jì)數(shù)字時(shí)鐘時(shí),我們先分設(shè)計(jì)出來時(shí)鐘的自動計(jì)數(shù)顯示,實(shí)現(xiàn)了24小時(shí)時(shí)鐘。之后實(shí)驗(yàn)了4*4鍵盤,實(shí)現(xiàn)了鍵盤輸入值的掃描讀取。最后設(shè)計(jì)了鬧鐘部分,包括設(shè)置鬧鐘時(shí)間和到時(shí)間鬧鈴響。</p><p>  我們通過本次實(shí)驗(yàn)深入了解基于EDA工具的復(fù)雜時(shí)序邏輯電路的設(shè)計(jì),理解并熟練利用quartus進(jìn)行Verilog HDL語言的設(shè)

25、計(jì)。掌握了建立工程項(xiàng)目,編譯調(diào)試程序,下載程序的流程和步驟。在應(yīng)用的過程中掌握了數(shù)碼管和鍵盤掃描的原理和方法。并且對Verilog HDL語言的語法規(guī)則和幾種常用語句有了更深入的理解。實(shí)驗(yàn)過程中通過合作的方式,小組成員積極討論,對不同的語句進(jìn)行了對比,最終確定了本次實(shí)驗(yàn)的完整程序。</p><p>  這次完成的數(shù)字時(shí)鐘只是EDA實(shí)驗(yàn)箱中可以實(shí)現(xiàn)的眾多功能之一,我們也認(rèn)識到Verilog HDL語言可以實(shí)現(xiàn)的設(shè)計(jì)

26、還有很多,本次實(shí)驗(yàn)激發(fā)了我們對Verilog HDL語言的興趣,也讓我們認(rèn)識到課堂的學(xué)習(xí)是有限的,想更加深入學(xué)習(xí)Verilog HDL語言,還要在今后的學(xué)習(xí)中多多自學(xué),勤加練習(xí)。</p><p><b>  五、完整程序</b></p><p>  module zonghe (clkl,clkh,reset,q,w,p,kr,kc,a,b,c,d,e,f,g,sa,

27、sb,sc,ds);</p><p>  input clkl,clkh,reset; //計(jì)數(shù)時(shí)鐘脈沖、掃描頻率脈沖與復(fù)位信號</p><p>  input q,w,p; //啟動設(shè)置的控制信號、設(shè)置時(shí)間的控制信號及設(shè)置鬧鐘的控制信號 </p><p>  inout [3:0]kr; //4*4鍵盤的行輸入/輸出信號&

28、lt;/p><p>  inout [3:0]kc; //4*4鍵盤的列輸入/輸出信號</p><p>  output a,b,c,d,e,f,g,sa,sb,sc,ds; //LED的7個片選信號與3個位選信號</p><p>  reg a,b,c,d,e,f,g,sa,sb,sc,ds;</p><p>  reg [3

29、:0]kr,kc;</p><p>  reg [6:0] display ; </p><p>  reg [2:0] dcount,kcount; </p><p>  reg [3:0]keyr,keyc; </p><p>  reg kflag1,kflag2; </p><

30、p>  reg [6:0] buff7 ;</p><p>  reg [3:0] shiwei1,gewei1,shiwei2,gewei2,shiwei3,gewei3;</p><p>  reg[5:0] hour,minute,second,Ahour,Aminute,Hour,Minute; //儲存當(dāng)前時(shí)間的時(shí)分秒、鬧鐘的時(shí)分及設(shè)置的時(shí)間的時(shí)分</p>

31、<p>  always@(posedge clkh) //累加兩個計(jì)數(shù)值</p><p>  begin </p><p>  dcount<=dcount+1; </p><p>  kcount<=kcount+1;</p><p><b>  end</b></p

32、><p>  always @(posedge clkh) //掃描鍵盤 </p><p>  begin </p><p>  if(kcount==0) </p><p><b>  begin</b></p><p>  kr<=4'b1111;</p>

33、<p>  kc<=4'b0000;</p><p><b>  end</b></p><p>  else if(kcount==1) </p><p><b>  begin</b></p><p>  keyr<=kr; </p><p&

34、gt;  kr<=4'bZZZZ;</p><p><b>  end</b></p><p>  else if(kcount==2) </p><p><b>  begin</b></p><p>  kr<=4'b0000;</p><p>

35、;  kc<=4'b1111;</p><p><b>  end</b></p><p>  else if(kcount==3) </p><p><b>  begin</b></p><p><b>  keyc<=kc;</b></p>

36、<p>  kc<=4'bZZZZ;</p><p><b>  end</b></p><p><b>  end</b></p><p>  always@(posedge clkh) //改變鍵的標(biāo)志位 </p><p><b>  begin<

37、/b></p><p>  if(kcount==4 & keyr==4'b1111) </p><p>  kflag1<=0;</p><p>  else if(kcount==4) </p><p>  kflag1<=1; </p><p>  kfla

38、g2<=kflag1;</p><p><b>  end </b></p><p>  always@(posedge clkh) // 獲取相應(yīng)按鍵按下的結(jié)果</p><p>  begin </p><p>  if(kcount==5) </p><p>  i

39、f(keyr==4'b1110)</p><p>  case (keyc) </p><p>  4'b1110:buff7<=7'b0111111; //在LED上顯示0</p><p>  4'b1101:buff7<=7'b0000110; //在LED上顯示1</p><p>

40、  4'b1011:buff7<=7'b1011011; //在LED上顯示2</p><p>  4'b0111:buff7<=7'b1001111; //在LED上顯示3</p><p>  default :buff7<=buff7; //無變化</p><p><b>  endca

41、se</b></p><p>  else if (keyr==4'b1101) </p><p>  case (keyc)</p><p>  4'b1110:buff7<=7'b1100110; //在LED上顯示4</p><p>  4'b1101:buff7<=7'

42、b1101101; //在LED上顯示5</p><p>  4'b1011:buff7<=7'b1111101; //在LED上顯示6</p><p>  4'b0111:buff7<=7'b0000111; //在LED上顯示7</p><p>  default :buff7<=buff7; //

43、 無變化</p><p><b>  endcase</b></p><p>  else if(keyr==4'b1011) </p><p>  case (keyc) </p><p>  4'b1110:buff7<=7'b1111111; // 在LED上顯示8</p>

44、<p>  4'b1101:buff7<=7'b1101111; // 在LED上顯示9</p><p>  4'b1011:buff7<=7'b1110111; //在LED上顯示a</p><p>  4'b0111:buff7<=7'b1111100; //在LED上顯示b</p>&l

45、t;p>  default :buff7<=buff7; // 無變化</p><p><b>  endcase</b></p><p>  else if(keyr==4'b0111)</p><p>  case (keyc) </p><p>  4'b1110:buff7&

46、lt;=7'b0111001; //在LED上顯示c</p><p>  4'b1101:buff7<=7'b1011110; //在LED上顯示d</p><p>  4'b1011:buff7<=7'b1111001; //在LED上顯示e</p><p>  4'b0111:buff7<=

47、7'b1110001; // 在LED上顯示f</p><p>  default:buff7<=buff7; //無變化</p><p>  endcase </p><p><b>  end</b></p><p>  always@(posedge clkh

48、) //顯示過程</p><p>  begin </p><p>  sa<=dcount[0]; //將dcount賦給LED的三個片選信號</p><p>  sb<=dcount[1];</p><p>  sc<=dcount[2];</p><p>  shiwei1=h

49、our/10;</p><p>  gewei1=hour%10;</p><p>  shiwei2=minute/10;</p><p>  gewei2=minute%10;</p><p>  shiwei3=second/10;</p><p>  gewei3=second%10;</p>&

50、lt;p>  if(dcount==3'b111)//判斷位選dcount的值,并將此位上的值輸出到數(shù)碼管</p><p>  case(shiwei1) //在第一數(shù)碼管上顯示時(shí)鐘的十位</p><p>  4'b0000: display <= 7'b0111_111;</p><p>  4&

51、#39;b0001: display<= 7'b0000_110;</p><p>  4'b0010: display <= 7'b1011_011;</p><p>  4'b0011: display <= 7'b1001_111;</p><p>  4'b010

52、0: display <= 7'b1100_110;</p><p>  4'b0101: display <= 7'b1101_101;</p><p>  4'b0110: display <= 7'b1111_101;</p><p>  4'b0111:

53、 display <= 7'b0000_111;</p><p>  4'b1000: display <= 7'b1111_111;</p><p>  4'b1001: display <= 7'b1101_111; </p><p>  default: display

54、<= 7'b0000_000;</p><p><b>  endcase</b></p><p>  if(dcount==3'b000) //在第二個數(shù)碼管上顯示時(shí)鐘的個位</p><p>  case(gewei1)</p><p>  4'b0000: disp

55、lay <= 7'b0111_111;</p><p>  4'b0001: display <= 7'b0000_110;</p><p>  4'b0010: display <= 7'b1011_011;</p><p>  4'b0011: display <

56、;= 7'b1001_111;</p><p>  4'b0100: display <= 7'b1100_110;</p><p>  4'b0101: display <= 7'b1101_101;</p><p>  4'b0110: display <= 7

57、9;b1111_101;</p><p>  4'b0111: display <= 7'b0000_111;</p><p>  4'b1000: display <= 7'b1111_111;</p><p>  4'b1001: display <= 7'b1101

58、_111; </p><p>  default: display <= 7'b0000_000;</p><p><b>  endcase</b></p><p>  if(dcount==3'b001) //在第三個數(shù)碼管上顯示分鐘的十位</p><p>  case(sh

59、iwei2)</p><p>  4'b0000: display <= 7'b0111_111;</p><p>  4'b0001: display <= 7'b0000_110;</p><p>  4'b0010: display <= 7'b1011_011;&

60、lt;/p><p>  4'b0011: display <= 7'b1001_111;</p><p>  4'b0100: display <= 7'b1100_110;</p><p>  4'b0101: display <= 7'b1101_101;</p&g

61、t;<p>  4'b0110: display <= 7'b1111_101;</p><p>  4'b0111: display <= 7'b0000_111;</p><p>  4'b1000: display <= 7'b1111_111;</p><

62、;p>  4'b1001: display <= 7'b1101_111; </p><p>  default: display <= 7'b0000_000;</p><p><b>  endcase</b></p><p>  if(dcount==3'b010)

63、 //在第四個數(shù)碼管上顯示分鐘的個位</p><p>  case(gewei2)</p><p>  4'b0000: display <= 7'b0111_111;</p><p>  4'b0001: display <= 7'b0000_110;</p><p>  4

64、'b0010: display <= 7'b1011_011;</p><p>  4'b0011: display <= 7'b1001_111;</p><p>  4'b0100: display <= 7'b1100_110;</p><p>  4'b0

65、101: display <= 7'b1101_101;</p><p>  4'b0110: display <= 7'b1111_101;</p><p>  4'b0111: display <= 7'b0000_111;</p><p>  4'b1000:

66、 display <= 7'b1111_111;</p><p>  4'b1001: display <= 7'b1101_111; </p><p>  default: display <= 7'b0000_000;</p><p><b>  endcase</b&g

67、t;</p><p>  if(dcount==3'b011) //在第五個數(shù)碼管上顯示秒鐘的十位</p><p>  case(shiwei3)</p><p>  4'b0000: display <= 7'b0111_111;</p><p>  4'b0001: disp

68、lay <= 7'b0000_110;</p><p>  4'b0010: display <= 7'b1011_011;</p><p>  4'b0011: display <= 7'b1001_111;</p><p>  4'b0100: display <

69、;= 7'b1100_110;</p><p>  4'b0101: display <= 7'b1101_101;</p><p>  4'b0110: display <= 7'b1111_101;</p><p>  4'b0111: display <= 7

70、9;b0000_111;</p><p>  4'b1000: display <= 7'b1111_111;</p><p>  4'b1001: display <= 7'b1101_111; </p><p>  default: display <= 7'b0000_0

71、00;</p><p><b>  endcase</b></p><p>  if(dcount==3'b100) //在第六個數(shù)碼管上顯示秒鐘的個位</p><p>  case(gewei3)</p><p>  4'b0000: display <= 7'b0111

72、_111;</p><p>  4'b0001: display <= 7'b0000_110;</p><p>  4'b0010: display <= 7'b1011_011;</p><p>  4'b0011: display <= 7'b1001_111;&l

73、t;/p><p>  4'b0100: display <= 7'b1100_110;</p><p>  4'b0101: display <= 7'b1101_101;</p><p>  4'b0110: display <= 7'b1111_101;</p>

74、;<p>  4'b0111: display <= 7'b0000_111;</p><p>  4'b1000: display <= 7'b1111_111;</p><p>  4'b1001: display <= 7'b1101_111; </p><

75、;p>  default: display <= 7'b0000_000;</p><p><b>  endcase </b></p><p>  if(dcount==3'b101)display <=7'b1000_000; //在第七個數(shù)碼管上顯示“—”</p><p> 

76、 if(dcount==3'b110)display <=buff7; //在第八個數(shù)碼管上顯示按下的鍵值</p><p><b>  end</b></p><p>  always @(posedge clkh) //將display中存的值賦給LED的七個片選信號 </p><p>  begin

77、 </p><p>  a<=display[0];</p><p>  b<=display[1];</p><p>  c<=display[2];</p><p>  d<=display[3]; </p><p>  e<=display[4];</p><

78、;p>  f<=display[5];</p><p>  g<=display[6];</p><p><b>  end </b></p><p>  always@(posedge clkl) //計(jì)時(shí)過程 clkl的頻率為1Hz</p><p><b>  begin&l

79、t;/b></p><p>  hour<=Hour;minute<=Minute; //將設(shè)置的時(shí)間(時(shí)、分)賦給hour和minute</p><p>  if(reset) </p><p>  begin hour<=0;minute<=0;second<=0; end //當(dāng)reset為1時(shí),將時(shí)間清零即為00:

80、00:00</p><p>  else //正常計(jì)時(shí)</p><p>  if(second==59)</p><p>  if(minute==59)</p><p>  if(hour ==23) </p><p>  begin second<=0;minute<=0;hour<=0;

81、end</p><p>  else begin second<=0;minute<=0;hour<=hour+1;end</p><p>  else begin second<=0;minute<=minute+1;end</p><p>  else second<=second+1;</p><p>

82、;<b>  end</b></p><p>  integer i; //記錄按鍵按下的次數(shù)</p><p>  reg [3:0]num1,num2,num3,num4; //儲存按鍵的鍵值</p><p>  always @(posedge clkh)//儲存按下的鍵值</p><p><b&

83、gt;  begin</b></p><p>  if(q==1)//啟動設(shè)置</p><p><b>  begin</b></p><p><b>  i=0;</b></p><p>  if(keyc!=4'b1111) i=i+1; //當(dāng)有鍵按下時(shí),i自動加1<

84、;/p><p>  if(i==1) //將第一個按下的按鍵值存入num1</p><p><b>  begin</b></p><p>  case ({keyr,keyc}) </p><p>  4'b1110_1110:num1=0; </p><p&

85、gt;  4'b1110_1101:num1=1; </p><p>  4'b1110_1011:num1=2; </p><p>  4'b1110_0111:num1=3; </p><p>  4'b1101_1110:num1=4; </p><p>  4'b1101_1101:nu

86、m1=5; </p><p>  4'b1101_1011:num1=6; </p><p>  4'b1101_0111:num1=7; </p><p>  4'b1011_1110:num1=8; </p><p>  4'b1011_1101:num1=9; </p><

87、p>  default:num1=num1; </p><p><b>  endcase</b></p><p><b>  end</b></p><p>  if(i==2) //將第二個按下的按鍵值存入num2</p><p><b>  begi

88、n</b></p><p>  case ({keyr,keyc}) </p><p>  4'b1110_1110:num2=0; </p><p>  4'b1110_1101:num2=1; </p><p>  4'b1110_1011:num2=2; </p><p>

89、;  4'b1110_0111:num2=3; </p><p>  4'b1101_1110:num2=4; </p><p>  4'b1101_1101:num2=5; </p><p>  4'b1101_1011:num2=6; </p><p>  4'b1101_0111:num2

90、=7; </p><p>  4'b1011_1110:num2=8; </p><p>  4'b1011_1101:num2=9; </p><p>  default:num2=num2; </p><p><b>  endcase</b></p><p><

91、b>  end</b></p><p>  if(i==3) //將第三個按下的按鍵值存入num3</p><p><b>  begin</b></p><p>  case ({keyr,keyc}) </p><p>  4'b1110_1110:num3=0;

92、</p><p>  4'b1110_1101:num3=1; </p><p>  4'b1110_1011:num3=2; </p><p>  4'b1110_0111:num3=3; </p><p>  4'b1101_1110:num3=4; </p><p>  4

93、'b1101_1101:num3=5; </p><p>  4'b1101_1011:num3=6; </p><p>  4'b1101_0111:num3=7; </p><p>  4'b1011_1110:num3=8; </p><p>  4'b1011_1101:num3=9;

94、 </p><p>  default:num3=num3; </p><p><b>  endcase</b></p><p><b>  end</b></p><p>  if(i==4) //將第四個按下的按鍵值存入num4</p><p>

95、;<b>  begin</b></p><p>  case ({keyr,keyc}) </p><p>  4'b1110_1110:num4=0; </p><p>  4'b1110_1101:num4=1; </p><p>  4'b1110_1011:num4=2; <

96、/p><p>  4'b1110_0111:num4=3; </p><p>  4'b1101_1110:num4=4; </p><p>  4'b1101_1101:num4=5; </p><p>  4'b1101_1011:num4=6; </p><p>  4'

97、;b1101_0111:num4=7; </p><p>  4'b1011_1110:num4=8; </p><p>  4'b1011_1101:num4=9; </p><p>  default:num4=num4; </p><p><b>  endcase</b></p>

98、;<p><b>  end</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  always @(posedge clkh) //設(shè)置部分</p><p><b>  begin<

99、;/b></p><p>  if(w==1)//設(shè)置時(shí)間</p><p>  begin Hour=num1*10+num2; Minute=num3*10+num4; end</p><p>  else if(p==1) //設(shè)置鬧鐘時(shí)間</p><p>  begin Ahour=num1*10+num2; Aminute

100、=num3*10+num4; end</p><p><b>  end</b></p><p>  always @(posedge clkh)//鬧鐘響</p><p><b>  begin</b></p><p>  if((hour==Ahour)&&(minute==Am

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論