版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 51單片機電子時鐘課程設(shè)計實驗報告
- 51單片機電子時鐘課程設(shè)計實驗報告
- 51單片機電子時鐘課程設(shè)計實驗報告
- 單片機課程設(shè)計報告--電子時鐘
- 單片機課程設(shè)計報告---電子時鐘
- 單片機課程設(shè)計報告--電子時鐘
- 單片機課程設(shè)計-單片機課程設(shè)計---電子時鐘
- 電子時鐘單片機課程設(shè)計
- 單片機課程設(shè)計---電子時鐘
- 單片機課程設(shè)計——電子時鐘
- 單片機課程設(shè)計——電子時鐘
- 單片機課程設(shè)計-電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 單片機課程設(shè)計----電子時鐘
- 單片機課程設(shè)計-電子時鐘
- 單片機課程設(shè)計--電子時鐘
- 《單片機原理及應(yīng)用》電子時鐘課程設(shè)計報告
- 單片機課程設(shè)計報告--基于單片機的電子時鐘
- 單片機課程設(shè)計---單片機電子時鐘
評論
0/150
提交評論