2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單片機應(yīng)用課程設(shè)計</b></p><p><b>  ——電子時鐘</b></p><p><b>  一、設(shè)計任務(wù)及要求</b></p><p><b>  【電子時鐘】</b></p><p>  利用實驗板上4個LED

2、數(shù)碼管,設(shè)計帶有鬧鈴功能的數(shù)字時鐘,要求:</p><p>  1、在4位數(shù)碼管上顯示當(dāng)前時間。顯示格式“時時分分”;”</p><p>  2、由LED閃動做秒顯示;</p><p>  3、利用按鍵可對時間及鬧玲進行設(shè)置,并可顯示鬧玲時間。當(dāng)鬧玲時間到蜂鳴器發(fā)出聲響,按停止鍵使可使鬧玲聲停止。</p><p><b>  拓展設(shè)

3、計:</b></p><p>  用數(shù)碼管的小數(shù)點閃動替代二極管顯示秒,使之成為一個“完整的時鐘”;</p><p>  2、使數(shù)字時鐘的鬧鐘鈴聲為音樂。</p><p><b>  二、設(shè)計思路</b></p><p>  【工作原理及設(shè)計思路】</p><p>  計時功能利用單片

4、機的定時器來完成,由于定時器定時的時長有限,所以要利用中斷程序才能定時1秒,若中斷程序每隔5ms中斷一次并當(dāng)作一個計數(shù),則每中斷一次計數(shù)加1,當(dāng)計數(shù)200次時,則表示1s到了,秒變量加1,同理再判斷1min是否到了,再判斷1h是否到了。</p><p>  為了將時間在LED數(shù)碼管上顯示,可采用靜態(tài)顯示法和動態(tài)顯示法,由于靜態(tài)顯示法需要數(shù)據(jù)鎖存器等較多硬件,可采用動態(tài)顯示法實現(xiàn)LED顯示。</p>

5、<p>  鬧鈴聲由交流蜂鳴器產(chǎn)生,所以當(dāng)鬧鈴時間和當(dāng)前時間相等時,可以對蜂鳴器輸入方波信號,蜂鳴器就會發(fā)出聲音。</p><p><b>  三、設(shè)計分析</b></p><p><b>  【系統(tǒng)的主要功能】</b></p><p>  本實驗實際是設(shè)計一個電子表,可以顯示時和分,并且用一個二極管顯示秒。另外

6、,還可以對它進行時間調(diào)整,還要有鬧鈴功能。</p><p><b>  【所作題目的意義】</b></p><p>  時鐘電路在各個系統(tǒng)中都起著十分重要的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。同時時鐘電路整體的設(shè)計及其工作原理涉及到了單片機基礎(chǔ)課程中各章節(jié)的內(nèi)容,是對單片機理論基礎(chǔ)課程的一個綜合實踐,通過本課題不僅讓我對電子時鐘這一課題有更深入的了解,更加深了自己對單片機

7、課程整體知識的把握,將理論所學(xué)用于實踐,將知識綜合,達到融會貫通的高度。</p><p>  【硬件電路設(shè)計及描述】</p><p>  實驗用JD51開發(fā)板完成,本實驗的硬件包括顯示部分、鬧鈴部分、開關(guān)部分。</p><p><b>  ·顯示部分</b></p><p>  JD51上用于顯示部分的電路如下

8、圖:</p><p>  JD51上有四位共陽LED數(shù)碼管,其標(biāo)號分別為LED1—LED4,低電平選通,且任何時候僅有一位輸出低電平,顯示時對各顯示器進行動態(tài)掃描,顯示器分時輪流工作。雖然每次只有一個顯示器顯示,但是由于人的視覺暫留現(xiàn)象我們?nèi)詴杏X所有的顯示器都在同時顯示。P0口作為輸出口控制8個發(fā)光二極管的亮滅,控制數(shù)碼管的顯示。</p><p><b>  ·鬧鈴部

9、分</b></p><p>  蜂鳴器與P2.4口相連。</p><p><b>  ·開關(guān)部分</b></p><p>  本實驗中的開關(guān)是實驗儀上的四個邏輯開關(guān),它們分別與P3.2、P3.3、P3.4、P3.5相連。其總P3.2用于調(diào)整時鐘或鬧鐘的時,P3.3用于調(diào)整時鐘或鬧鐘的分,P3.5用于控制顯示時鐘還是顯示鬧鐘

10、,并且同時控制調(diào)整時鐘還是調(diào)整鬧鐘,按任意鍵(SW1、SW2、SW4)時停止鬧鐘。</p><p>  【軟件設(shè)計流程及描述】</p><p><b>  ·顯示部分</b></p><p>  顯示部分分為時鐘顯示、鬧鐘顯示和秒顯示三部分,主要由時鐘顯示子程序和鬧鐘顯示子程序構(gòu)成,鬧鐘顯示與時鐘顯示編程流程大致相同。</p&g

11、t;<p><b>  流程圖如下:</b></p><p><b>  ·鬧鈴部分</b></p><p>  設(shè)計思路及原理:音節(jié)由不同頻率的方波產(chǎn)生,音節(jié)與頻率的關(guān)系如下表所示。要產(chǎn)生音頻方波,設(shè)計利用延時來建立音符表NOTE,表格中的數(shù)存R3*20us,其倒數(shù)1/(R3*2*10us)對應(yīng)相應(yīng)音符的頻率。</

12、p><p>  另外,音樂的節(jié)拍是由延時實現(xiàn)的,如果1拍為0.4秒,1/4拍是0.1秒。只要設(shè)定延時時間,就可求得節(jié)拍的時間。延時作為基本延時時間,節(jié)拍值只能是它的整數(shù)倍。設(shè)計利用T1中斷產(chǎn)生10ms延時,取1/4拍為10H*10ms,相應(yīng)產(chǎn)生所需延時。 </p><p>  鬧鐘鈴聲選取情景比較合適的《豬之歌》,其曲譜如下圖:</p><p>  其相應(yīng)的音符和節(jié)拍表

13、NOTE和METRE如下:</p><p>  NOTE:DB 7FH,7FH,7FH,60H,65H,72H,72H,72H,7FH,72H</p><p>  DB 60H,72H,60H,72H,60H,72H,7FH,72H,7FH,98H,72H,7FH</p><p>  DB 7FH,7FH,7FH,60H,65H,72H,72H,72H,7FH,7

14、2H</p><p>  DB 60H,72H,60H,72H,60H,72H,7FH,72H,7FH,72H,4CH,55H,00H</p><p>  METRE:DB 80H,20H,20H,20H,20H,20H,20H,20H,20H,80H</p><p>  DB 20H,20H,20H,20H,40H,20H,20H,20H,20H,20H,20H

15、,80H</p><p>  DB 80H,20H,20H,20H,20H,20H,20H,20H,20H,80H</p><p>  DB 20H,20H,20H,20H,40H,20H,20H,20H,20H,20H,20H,40H</p><p>  ·開關(guān)掃描及處理部分</p><p>  本實驗用到了三個開關(guān),其中涉及開關(guān)

16、的掃描及處理。開關(guān)4控制數(shù)碼管當(dāng)前顯示的是時鐘還是鬧鐘,顯示時鐘時,可通過開關(guān)1和開關(guān)2調(diào)整時鐘的時和分;顯示鬧鐘時,也可以通過開關(guān)1和開關(guān)2調(diào)整時和分。開關(guān)4控制鬧鈴的開和關(guān)。</p><p>  按鍵調(diào)整鬧鐘與按鍵調(diào)整時鐘編程流程基本一致,按鍵掃描及處理流程圖如圖:</p><p>  ·T0中斷服務(wù)程序:</p><p>  采用定時器T0計時,中斷

17、程序每隔50ms中斷一次計數(shù)加1,當(dāng)計數(shù)20次時,則表示1s到了,秒變量加1,同理再判斷是否1分鐘到了,再判斷是否1小時到了,再判斷是否24小時到了。</p><p><b>  程序流程圖如下:</b></p><p>  三、源程序代碼及注釋</p><p>  ;**************************************

18、**************</p><p>  ;/******電子時鐘程序******/ </p><p>  ;程序主要包括MAIN函數(shù),T0、T1中斷程序,時間、鬧鐘顯示程序 ,按鍵掃描、處理程序</p><p>  ;**************************************************** </p>

19、<p><b>  ORG 0000H</b></p><p>  AJMP MAIN ;跳轉(zhuǎn)到主程序MAIN執(zhí)行</p><p><b>  ORG 000BH</b></p><p>  AJMP INTT0 ;跳到INTT0執(zhí)行</p>

20、<p><b>  ORG 001BH</b></p><p>  LJMP INTT1 ;跳到INTT1執(zhí)行</p><p><b>  ORG 0300H</b></p><p>  ;/******主函數(shù)******/預(yù)置T0\T1工作方式,置初值,預(yù)置時鐘、鬧鐘,置位數(shù)碼管<

21、;/p><p>  MAIN:MOV SP,#80H</p><p>  MOV TMOD,#11H ;設(shè)置定時器T0、T1工作于方式1</p><p>  MOV TH0,#3CH ;裝入時鐘定時初值(50ms)</p><p>  MOV TL0,#0B0H </p><p&g

22、t;  MOV TH1,#0D8H ;裝入鬧鈴定時初值(10ms)</p><p>  MOV TL1,#0F0H</p><p>  MOV R1,#00H ;確保首次默認鬧鈴工作</p><p>  MOV 20H,#00H </p><p>  MOV 21H,#00H

23、 </p><p>  MOV 22H,#00H ;預(yù)置時鐘分分</p><p>  MOV 23H,#00H ;預(yù)置時鐘時時</p><p>  MOV 30H,#30H ;預(yù)置鬧鈴分分</p><p>  MOV 31H,#08H ;預(yù)置鬧鈴時時</p><

24、p>  SETB P2.0 ;數(shù)碼管接P2口,置位數(shù)碼管,使其全滅</p><p><b>  SETB P2.1</b></p><p><b>  SETB P2.2</b></p><p>  SETB P2.3</p><p>  CLR P1.7

25、 ;發(fā)光二極管LED7\LED8用于顯示秒,清P1.7,發(fā)光二極管LED8亮</p><p>  SETB P1.6 ;置位P1.6,發(fā)光二極管LED7滅</p><p>  SETB EA ;開放總中斷</p><p>  SETB ET0

26、 ;允許T0中斷</p><p>  SETB TR0 ;開啟定時器T0</p><p>  LOOP:LCALL DISPT ;調(diào)用時間顯示子程序</p><p>  LCALL RING ;調(diào)用鬧鈴處理子程序</p><p>  LCALL KEY ;調(diào)用按鍵掃描子

27、程序</p><p>  JZ LOOP ;無鍵按下則循環(huán)</p><p>  LCALL CASE ;有鍵按下則轉(zhuǎn)按鍵處理子程序執(zhí)行</p><p>  SJMP LOOP ;循環(huán)</p><p>  ;/******T0一秒定時中斷程序INTT0******/正常時

28、鐘計時</p><p>  INTT0:PUSH PSW ;狀態(tài)字入棧保護</p><p>  PUSH ACC ;累加器入棧保護</p><p>  MOV TL0,#0B0H ;裝入計數(shù)初值,12MHZ晶振,形成1S中斷</p><p>  MOV TH0,

29、#3CH</p><p><b>  INC 20H</b></p><p><b>  MOV A,20H</b></p><p>  CJNE A,#20,RETURN</p><p>  CPL P1.7 ;一秒到發(fā)光二極管輪流亮,用于顯示秒</p>

30、<p><b>  CPL P1.6</b></p><p>  MOV 20H,#00H ;一秒到清20H</p><p><b>  MOV A,21H</b></p><p>  ADD A,#01H</p><p><b>  DA A</b>&l

31、t;/p><p><b>  MOV 21H,A</b></p><p>  CJNE A,#60H,RETURN</p><p>  MOV 21H,#00H ;一分到,21H單元清零</p><p><b>  MOV A,22H</b></p><p>  ADD

32、 A,#01H</p><p><b>  DA A</b></p><p><b>  MOV 22H,A</b></p><p>  CJNE A,#60H,RETURN</p><p>  MOV 22H,#00H ;一小時到,22H單元清零</p><p>

33、;<b>  MOV A,23H</b></p><p>  ADD A,#01H</p><p><b>  DA A</b></p><p><b>  MOV 23H,A</b></p><p>  CJNE A,#24H,RETURN</p><p&

34、gt;  MOV 23H,#00H ;滿24,23H單元清零</p><p>  RETURN:POP ACC</p><p><b>  POP PSW</b></p><p><b>  RETI</b></p><p>  ;/******時間顯示子程序******/</p

35、><p>  DISPT:MOV A,22H</p><p>  ANL A,#0FH</p><p>  MOV 2AH,A ;時鐘分的低位</p><p><b>  MOV A,22H</b></p><p>  ANL A,#0F0H</p><p&g

36、t;<b>  SWAP A</b></p><p>  MOV 2BH,A ;時鐘分的高位</p><p><b>  MOV A,23H</b></p><p>  ANL A,#0FH</p><p>  MOV 2CH,A ;時鐘時的低位</p&

37、gt;<p><b>  MOV A,23H</b></p><p>  ANL A,#0F0H</p><p><b>  SWAP A</b></p><p>  MOV 2DH,A ;時鐘時的高位</p><p>  LED1:SETB P2.3</p

38、><p><b>  MOV A,2DH</b></p><p>  MOV DPTR,#TAB</p><p>  MOVC A,@A+DPTR </p><p>  CLR P2.0 ;選通數(shù)碼管1</p><p>  MOV P0,A

39、;顯示時鐘時的十位部分</p><p>  LCALL DELAY</p><p>  LED2:SETB P2.0</p><p><b>  MOV A,2CH</b></p><p>  MOV DPTR,#TAB</p><p>  MOVC A,@A+DPTR </p>

40、<p>  CLR P2.1 ;選通數(shù)碼管2</p><p>  MOV P0,A ;顯示時鐘時的個位部分</p><p>  LCALL DELAY </p><p>  LED3:SETB P2.1</p><p><b>  MOV A,2BH&l

41、t;/b></p><p>  MOV DPTR,#TAB</p><p>  MOVC A,@A+DPTR </p><p>  CLR P2.2 ;選通數(shù)碼管3</p><p>  MOV P0,A ;顯示時鐘分的十位部分</p><p>  LCA

42、LL DELAY</p><p>  LED4:SETB P2.2</p><p><b>  MOV A,2AH</b></p><p>  JB P1.7,TA2</p><p>  TA1: ADD A,#10 ;用于利用數(shù)碼管的小數(shù)點來表示秒</p><p&g

43、t;  TA2: MOV DPTR,#TAB</p><p>  MOVC A,@A+DPTR</p><p>  CLR P2.3 ;選通數(shù)碼管4</p><p>  MOV P0,A ;顯示時鐘分的個位部分</p><p>  LCALL DELAY</p>

44、<p><b>  RET</b></p><p>  TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共陽數(shù)碼管的不帶小數(shù)點的時間顯示碼</p><p>  DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H;共陽數(shù)碼管的帶小數(shù)點的時間顯示碼</p>

45、<p>  ;/******按鍵掃描程序******/開關(guān)接P3口,判斷按鍵情況</p><p>  KEY: MOV P3,#0FFH </p><p><b>  MOV A,P3</b></p><p><b>  CPL A</b></p><p>  ANL A,#2CH<

46、;/p><p>  JZ RETK ;無鍵按下則返回</p><p>  LCALL DELAY ;延時消抖</p><p><b>  MOV A,P3</b></p><p><b>  CPL A</b></p><p>  ANL A,#2C

47、H</p><p>  JZ RETK ;鍵盤去抖動</p><p>  MOV R6,A ;將鍵值存入R6</p><p>  LOOP1:LCALL DISPT;</p><p><b>  MOV A,P3</b></p><p><b>  CP

48、L A</b></p><p>  ANL A,#2CH</p><p>  JNZ LOOP1 ;等待鍵釋放</p><p><b>  MOV A,R6</b></p><p><b>  RETK:RET</b></p><p>  ;/

49、******按鍵處理子程序******/根據(jù)按鍵情況進行處理</p><p>  CASE:MOV A,R6</p><p>  CLR P1.0 ;發(fā)光二極管LED1亮</p><p>  JB ACC.2,SETH ;轉(zhuǎn)調(diào)整時</p><p>  JB ACC.3,SETM ;轉(zhuǎn)調(diào)整分&

50、lt;/p><p>  JB ACC.5,SETR ;轉(zhuǎn)鬧鈴設(shè)置</p><p>  WAITCASE:LCALL DISPT ;無鍵按下時等待</p><p><b>  LCALL KEY</b></p><p>  JZ WAITCASE</p><p>  ;/******

51、時間調(diào)整程序******/按鍵調(diào)整時間</p><p>  SETT:LCALL DISPT</p><p><b>  LCALL KEY</b></p><p><b>  JZ SETT</b></p><p><b>  MOV A,R6</b></p>

52、<p>  JB ACC.2,SETH</p><p>  JB ACC.3,SETM</p><p>  JB ACC.5,KEYGO ;第二次按為確認離開</p><p>  KEYGO: SETB P1.0 ;發(fā)光二極管LED1、LED2滅</p><p><b>

53、  SETB P1.1</b></p><p><b>  RET</b></p><p>  SETH:MOV A,23H ;調(diào)整時鐘時,時加1</p><p>  ADD A,#01H</p><p>  DA A ;十進制調(diào)整<

54、;/p><p><b>  MOV 23H,A</b></p><p>  CJNE A,#24H,HD ;判斷是否到24,不到繼續(xù)</p><p>  MOV 23H,#00H ;到24時清零</p><p>  HD:LJMP SETT</p>&l

55、t;p>  SETM:MOV A,22H ;分加1</p><p>  ADD A,#01H</p><p>  DA A ;十進制調(diào)整 </p><p><b>  MOV 22H,A</b></p><p>  CJNE A,#60H,MD

56、 ;判斷是否到1小時,不到繼續(xù)</p><p>  MOV 22H,#00H ;到1小時則清零</p><p>  MD:LJMP SETT</p><p>  ;/******鬧鈴時間調(diào)整按鍵掃描及處理子程序******/</p><p>  KEYR: MOV P3,#0FFH

57、</p><p><b>  MOV A,P3</b></p><p><b>  CPL A</b></p><p>  ANL A,#2CH</p><p>  JZ RETK ;無鍵按下則返回</p><p>  LCALL DISPR

58、 ;延時消抖</p><p><b>  MOV A,P3</b></p><p><b>  CPL A</b></p><p>  ANL A,#2CH</p><p>  JZ RETK ;鍵盤去抖動</p><p>  MOV R6,A

59、 ;將鍵值存入R6</p><p>  LJMP LOOPR</p><p>  LOOPR:LCALL DISPR</p><p><b>  MOV A,P3</b></p><p><b>  CPL A</b></p><p>  ANL A,#2CH&l

60、t;/p><p>  JNZ LOOPR ;等待鍵釋放</p><p><b>  MOV A,R6</b></p><p><b>  AJMP RETK</b></p><p>  ;/******設(shè)置鬧鈴時間******/</p><p>  SETR:

61、SETB P1.0 ;發(fā)光二極管LED1滅</p><p>  CLR P1.1 ;發(fā)光二極管LED2亮,改顯示狀態(tài)</p><p>  LCALL DISPR</p><p>  MOV R1,#00H ;設(shè)置鬧鐘時重設(shè)R1,用于檢測鬧鈴播放與否</p><

62、p>  MOV 53H,#03H ;重設(shè)鬧鈴次數(shù)</p><p>  LCALL KEYR ;鬧鈴時間調(diào)整按鍵檢測</p><p><b>  JZ SETR</b></p><p><b>  MOV A,R6</b></p><p>  JB A

63、CC.2,SETRH</p><p>  JB ACC.3,SETRM</p><p>  JB ACC.5,KEYGO ;第二次按為確認離開</p><p>  SETRH:MOV A,31H ;鬧鐘時加1</p><p>  ADD A,#01H</p><p>  DA A

64、 ;十進制調(diào)整</p><p><b>  MOV 31H,A</b></p><p>  CJNE A,#24H,RHD ;判斷是否到24,不到繼續(xù)</p><p>  MOV 31H,#00H ;到24時則清零</p><p

65、>  RHD:LJMP SETR</p><p>  SETRM:MOV A,30H ;鬧鐘分加1</p><p>  ADD A,#01H</p><p>  DA A ;十進制調(diào)整</p><p><b>  MOV 30H,A</b><

66、/p><p>  CJNE A,#60H,RMD ;判斷是否到1小時,不到繼續(xù)</p><p>  MOV 30H,#00H ;到1小時則清零</p><p>  RMD:LJMP SETR</p><p>  ;/******鬧鐘設(shè)置顯示子程序******/</p><

67、p>  DISPR:MOV A,30H</p><p>  ANL A,#0FH ;屏蔽高四位</p><p>  MOV 3AH,A ;保留低位送3AH</p><p><b>  MOV A,30H</b></p><p>  ANL A,#0

68、F0H ;屏蔽低四位 </p><p>  SWAP A ;高四位與第四位交換</p><p>  MOV 3BH,A ;將保留的高4位送3BH</p><p><b>  MOV A,31H</b></p><p>  

69、ANL A,#0FH</p><p>  MOV 3CH,A ;低位</p><p><b>  MOV A,31H</b></p><p>  ANL A,#0F0H</p><p><b>  SWAP A</b></p><p>  MOV 3DH,A

70、 ;高位</p><p>  LEDR1:SETB P2.3</p><p><b>  MOV A,3DH</b></p><p>  MOV DPTR,#TAB</p><p>  MOVC A,@A+DPTR </p><p><b>  CLR P2.

71、0</b></p><p><b>  MOV P0,A</b></p><p>  LCALL DELAY</p><p>  LEDR2:SETB P2.0</p><p><b>  MOV A,3CH</b></p><p>  MOV DPTR,#TA

72、B</p><p>  MOVC A,@A+DPTR </p><p><b>  CLR P2.1</b></p><p><b>  MOV P0,A</b></p><p>  LCALL DELAY</p><p>  LEDR3:SETB P2.1</p&g

73、t;<p><b>  MOV A,3BH</b></p><p>  MOV DPTR,#TAB</p><p>  MOVC A,@A+DPTR </p><p><b>  CLR P2.2</b></p><p><b>  MOV P0,A</b><

74、;/p><p>  LCALL DELAY</p><p>  LEDR4:SETB P2.2</p><p><b>  MOV A,3AH</b></p><p>  MOV DPTR,#TAB</p><p>  MOVC A,@A+DPTR </p><p><

75、b>  CLR P2.3</b></p><p><b>  MOV P0,A</b></p><p>  LCALL DELAY</p><p><b>  RET</b></p><p>  ;/******延時子程序******/</p><p>  

76、DELAY:MOV R5,#2 </p><p>  D1:MOV R4,#250</p><p>  D2:DJNZ R4,D2</p><p>  DJNZ R5,D1</p><p><b>  RET</b></p><p>  ;/******鬧鈴

77、檢測程序******/</p><p>  RING:MOV A,23H ;比較時</p><p>  CJNE A,31H,RETR</p><p>  MOV A,22H ;比較分</p><p>  CJNE A,30H,RETR </p&g

78、t;<p>  LCALL SING</p><p><b>  RETR:RET</b></p><p>  ;/******定時器T1中斷子程序******/</p><p>  INTT1:PUSH PSW ;狀態(tài)字入棧保護</p><p>  PUSH AC

79、C ;累加器入棧保護</p><p>  INC 50H ;中斷服務(wù)程序,中斷計數(shù)器加1</p><p>  MOV TH1,#0D8H ;裝入計數(shù)初值,12M晶振,形成10MS中斷</p><p>  MOV TL1,#0F0H </p>

80、;<p><b>  POP ACC</b></p><p><b>  POP PSW</b></p><p><b>  RETI </b></p><p>  ;/******響鈴子程序******/</p><p>  SING:CJNE R1,#01

81、H,SING1 ;判斷是否已經(jīng)鬧鈴過一次</p><p><b>  LJMP RETS</b></p><p>  SING1:SETB ET1</p><p>  MOV 50H,#00H ;中斷計數(shù)器清0</p><p>  MOV 51H,#00H ;音符指針&l

82、t;/p><p>  MOV 52H,#00H ;節(jié)拍碼指針</p><p>  MOV 53H,#03H ;設(shè)置鬧鐘不退出響鈴次數(shù)</p><p>  GETNOT:MOV A,51H</p><p>  MOV DPTR,#NOTE ;表頭地址送DPTR</p>

83、;<p>  MOVC A,@A+DPTR ;查表取音符碼</p><p>  JZ ENDP ;是00H,則結(jié)束</p><p>  MOV R6,A ;存R6 </p><p><b>  INC 51H</b

84、></p><p>  CJNE A,#0FFH,GETMET ;不為0FFH,轉(zhuǎn)取節(jié)拍碼</p><p>  LJMP PAUSE ;轉(zhuǎn)休止播放</p><p>  LJMP GETNOT ;取音符碼</p><p>  GETMET:MOV

85、A,52H</p><p>  MOV DPTR,#METRE ;取節(jié)拍碼首地址</p><p>  MOVC A,@A+DPTR ;取節(jié)拍代碼送R7</p><p><b>  MOV R7,A</b></p><p><b>  INC 52H&l

86、t;/b></p><p>  PLAY:SETB TR1 ;啟動計數(shù)</p><p><b>  CPL P2.4</b></p><p><b>  LCALL KEY</b></p><p><b>  JNZ RETS</b></p

87、><p>  MOV A,R6 </p><p>  MOV R3,A ;音符碼存R3</p><p>  LCALL DELAY1</p><p>  MOV A,R7 ;取節(jié)拍碼放A與中斷計數(shù)比較</p><p>

88、;  CJNE A,50H,PLAY ;斷計數(shù)器(50H)=R7否,不等繼續(xù)循環(huán)</p><p>  MOV 50H,#00H ;等于,則取下一代碼</p><p>  LCALL DISPT</p><p>  LCALL DISPT</p><p>  LCAL

89、L DISPT</p><p>  LCALL DISPT</p><p><b>  CLR TR1</b></p><p>  LJMP GETNOT</p><p>  RETS:SETB P2.4 ;置位蜂鳴器,否則可能產(chǎn)生嘯叫</p><p>  MOV R1,#01H

90、 ;表明播放過一次</p><p>  CLR A ;清除A,防止進入按鍵處理子程序</p><p><b>  LJMP RETR</b></p><p>  PAUSE:CLR TR1 ;休止100毫秒</p><p>  MOV R2

91、,#0DH</p><p>  DELAY2: MOV R3,#0FFH</p><p>  LCALL DELAY1</p><p>  DJNZ R2,DELAY2</p><p><b>  RET</b></p><p>  ENDP:SETB P2.4</p><p

92、>  MOV R2,#0C7H ;歌曲結(jié)束,延時1秒后繼續(xù)</p><p>  END1M: MOV R3,#00H</p><p>  LCALL DELAY1</p><p>  DJNZ R2,END1M</p><p>  DJNZ 53H,SING</p><p><b> 

93、 RET</b></p><p>  DELAY1:NOP ;R3為01H時,DELAY延時為20uS</p><p>  DELAY3: MOV R4,#02H </p><p>  DELAY4: DJNZ R4,DELAY4</p><p>  DJNZ R3,DELAY3</p>

94、<p><b>  RET</b></p><p>  NOTE:DB 7FH,7FH,7FH,60H,65H,72H,72H,72H,7FH,72H</p><p>  DB 60H,72H,60H,72H,60H,72H,7FH,72H,7FH,98H,72H,7FH</p><p>  DB 7FH,7FH,7FH,60H

95、,65H,72H,72H,72H,7FH,72H</p><p>  DB 60H,72H,60H,72H,60H,72H,7FH,72H,7FH,72H,4CH,55H,00H</p><p>  METRE:DB 80H,20H,20H,20H,20H,20H,20H,20H,20H,80H</p><p>  DB 20H,20H,20H,20H,40H,2

96、0H,20H,20H,20H,20H,20H,80H</p><p>  DB 80H,20H,20H,20H,20H,20H,20H,20H,20H,80H</p><p>  DB 20H,20H,20H,20H,40H,20H,20H,20H,20H,20H,20H,40H</p><p><b>  END</b></p>

97、<p><b>  四、調(diào)試分析過程</b></p><p>  1、建立一個Keil51應(yīng)用程序</p><p>  首先新建一個工程項目文件zj,再為工程選擇目標(biāo)器件P80\P87C52X2,如圖所示。</p><p>  然后把源程序文件(.asm)添加到項目中.</p><p>  2、程序文件的編譯

98、、連接</p><p>  單擊工具欄Project選項,在彈出的下拉菜單中選擇“Option For Target ‘Target1’”命令為目標(biāo)設(shè)置工具選項,在Debug欄內(nèi)選中Use Simulator選項,單擊確定命令按鈕,此時配置為軟件仿真,在Output欄中選擇Create HEX Fi選項,用于生成HEX文件。</p><p>  經(jīng)過上述設(shè)置,就可以編譯程序了。單擊工具欄P

99、roject選項,在彈出的下拉菜單中選擇Build Target命令對源程序文件進行編譯,若出現(xiàn)下圖所示窗口,</p><p>  顯示無錯誤,繼續(xù)進行Rebuild all target fiels, 在信息輸出窗口會輸出一些相關(guān)的信息。第五行“Creating hex file from zj”說明已生成目標(biāo)文件zj.hex,最后一行說明在編譯過程中不存在錯誤和警告,編譯連接成功。若在編譯過程中出現(xiàn)錯誤,系統(tǒng)

100、會給出錯誤所在的行和該錯誤提示信息,我們可以根據(jù)這些提示信息更正程序中出項的錯誤,重新編譯調(diào)試程序,直至完全正確為止。</p><p>  3、將生成的目標(biāo)文件last.hex下載到Flash中</p><p> ?、?運行可執(zhí)行文件“SSTFlashFlex51.exe”。打開界面如圖2所示。</p><p> ?、邳c擊菜單“DetectChip/RS232”-&

101、gt;“Detect Target MCU…and RS232 Config”。打開界面如圖所示。</p><p> ?、鄹鶕?jù)板載單片機型號選擇“SST98C58”或“SST89E/V58RD2”。存儲器模式選“Internal Memory”。點擊確定。</p><p> ?、茉O(shè)置串行口參數(shù),如圖4所示。注意串口號應(yīng)選擇與學(xué)習(xí)板連接的端口,波特率選默認值38400。其他不用改動。按“De

102、tect MCU”。</p><p> ?、莞鶕?jù)彈出的對話框操作:先按下“確定”,然后按一下學(xué)習(xí)板的復(fù)位按鈕SW1。(如果MCU已經(jīng)復(fù)位,可以不用按SW1,應(yīng)視乎軟件能否檢測到MCU決定)。如果軟件檢測到MCU則界面如圖5所示(因MCU狀況不同可能有差異)。</p><p>  ⑥點擊“IAP Function”中的“Dnload/Run UserCode”,在彈出對話框中輸入要下載的程序

103、名(hex后綴)。</p><p>  ⑦彈出對話框問是否覆蓋原來代碼,點擊“是”,程序代碼即下載到學(xué)習(xí)板的單片機中并開始運行。時鐘開始運行(預(yù)置的是00:00,用于顯示秒的LED7\8開始閃爍)。</p><p><b>  4、在線調(diào)試</b></p><p> ?、龠x擇菜單“Project”->“Open Project”。選擇打開

104、項目文件zj.Uv2。</p><p>  ②打開項目后可看到源代碼。點擊左邊Project Workspace窗口的目錄樹最頂端的Target 1。</p><p>  然后選擇菜單“Project”->“Options for Target ‘Target 1’”。打開窗口如圖所示。</p><p> ?、埸c擊“Debug”選項卡。打開如圖所示界面,選擇右

105、邊“Use Keil Monitor-51 Driver”。選擇下面“Run to main()”復(fù)選框。然后點擊“Settings”按鈕。</p><p> ?、軓棾鰧υ捒蛑羞x擇串口號和波特率,串口號選擇與上文使用SST下載軟件時相同(如果串口連接沒有改變的話),波特率選擇38400。完成后點擊“確定”。再次點擊“確定”退出項目設(shè)置窗口。</p><p> ?、菰谥鹘缑嫔戏綀D標(biāo)按鈕處點擊

106、 按鈕。軟件即進入仿真調(diào)試狀態(tài)。</p><p>  ⑥黃色光標(biāo)停留在main函數(shù)的第一語句處。光標(biāo)下方紅色方塊為運行斷點,可以自行設(shè)置(雙擊黃色光標(biāo)下方的深灰色區(qū)域即可設(shè)置或取消斷點)。</p><p>  ⑦按全速執(zhí)行按鈕 執(zhí)行程序,光標(biāo)將停留在預(yù)設(shè)的斷點處。接著可</p><p>  按單步執(zhí)行按鈕執(zhí)行斷點處的語句。</p><p> 

107、?、嗤?,可繼續(xù)設(shè)置斷點或全速執(zhí)行全部程序。可在子函數(shù)內(nèi)部設(shè)置斷點,亦可使用 按鈕進入某個子函數(shù)。</p><p> ?、崛绻酉聛頉]有其他斷點而按全速運行按鈕,MCU將全速運行,軟件將不能再實時觀察到MCU的狀態(tài),此時可以觀察學(xué)習(xí)板的硬件運行情況是否和設(shè)想的一致。</p><p> ?、膺M入全速運行后要停止操作須按停止按鈕 。彈出對話框中選擇“Stop Debugging”。退出仿真調(diào)試

108、狀態(tài)后若須重新仿真調(diào)試,請先復(fù)位學(xué)習(xí)板MCU(按學(xué)習(xí)板的SW1按鈕)。</p><p><b>  五、課程設(shè)計體會</b></p><p>  【實驗中遇到的問題及解決方案】</p><p>  1、首先是定時的問題,一開始我用的是查詢方式,但是查詢方式得不斷查詢TF0的值,很繁瑣。后來我改用了中斷方式,較簡單。</p><

109、;p>  2、實驗中按鍵掃描及處理部分困擾了我很久。我直接用JD51上的四個按鍵,其中三個用于調(diào)整時、分、顯示變化,它們分別接在P3.2、P3.3、P3.5口,第一個問題是調(diào)整出現(xiàn)誤差,開關(guān)存在抖動現(xiàn)象,通過調(diào)用延時子程序、確認按鍵程序消除開關(guān)抖動現(xiàn)象;同時,由于延時太長,導(dǎo)致顯示出現(xiàn)閃爍或滅掉,最后解決的方法是在延時程序內(nèi)部也加入調(diào)用顯示程序的語句,這樣,顯示問題也解決了。</p><p>  3、在數(shù)碼

110、管選通的問題上一直很納悶,一直無法實現(xiàn)四個數(shù)碼管同時顯示的問題,后拉試驗以后才發(fā)現(xiàn)原來還存在視差問題,可以讓四個數(shù)碼管在一一選通的條件下也能四個同時顯示。</p><p>  4、基本功能實現(xiàn)后,我繼續(xù)實現(xiàn)兩個拓展功能,在鬧鈴中加入了音樂、用數(shù)碼管小數(shù)點顯示秒,之后發(fā)現(xiàn)在響鈴過程中計時混亂,后來才發(fā)現(xiàn), T0本是用于秒計時的,結(jié)果在音樂子程序中又用了T0,造成了計時混亂。改用T1后,問題便得到了修正。再有就是音樂

111、的實現(xiàn)通過在網(wǎng)上搜索相關(guān)資料,用頻率對應(yīng)的初值來產(chǎn)生相應(yīng)方波來翻譯曲譜,通過學(xué)長的指導(dǎo)發(fā)現(xiàn)直接用延時來實現(xiàn)效果也很好,改用這個以后 比較適合鬧鐘鈴聲的《豬之歌》編程最終音樂。</p><p>  5、答辯時老師要求我加入用最后一位數(shù)碼管的小數(shù)點閃動表示秒,為了更好的了解數(shù)碼顯示,我翻開了微機原理書,發(fā)現(xiàn)共陽的數(shù)碼管,最高位為低電平時小數(shù)點就會亮,因此只要在程序中屏蔽或不屏蔽最高位,就能實現(xiàn)小數(shù)點的亮與滅。<

112、/p><p>  5、最后一步是時鐘的校準,起初時鐘走得較快,通過逐步調(diào)整延時數(shù)值,雖最終與理論值有所偏差,但實現(xiàn)了使誤差保持在1s之內(nèi)。</p><p>  6、在調(diào)試過程中很多語句總是出現(xiàn)一樣的錯誤,后來發(fā)現(xiàn)是輸入法的問題,通過修改很快通過了調(diào)試。</p><p><b>  【心得體會】</b></p><p>  通

113、過本次做單片機課程設(shè)計,不僅對單片機理論課程的整體知識進行了全面的認識與深入的學(xué)習(xí),通過實踐將理論與實際進行契合,真正的全面理解單片機的功能。</p><p>  最開始準備編程時一點思路都沒有,通過后來在網(wǎng)上查找了相關(guān)編程,通過與實驗要求相比對,開始理清程序大致需要那幾部分,基本確定編程思想后,我就開始著手程序。通過老師FTP上的相關(guān)資料對JD51板進行了系統(tǒng)的了解,并通過羅列的方式找出自習(xí)所需信息,方便編程時

114、查找。其中整個過程中也遇到了很多問題,但本著遇到問題解決問題的原則,一一通過翻查書本和詢問同學(xué)最終基本解決了所以問題。整個課程設(shè)計過程學(xué)到了不少通過理論學(xué)習(xí)沒法學(xué)到的東西,真正增加了自己的一種能力。</p><p>  整個程序的邏輯性很強,通過一一分類理清,每一步程序的執(zhí)行都要非常的清晰,只要有一步出錯,整個程序都可能會受到影響,所以在構(gòu)思和查找資料方面就花了很長的時間。但是只要嚴謹?shù)木幊?,一步一步的認真分析,

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論