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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  電氣信息工程學院</b></p><p><b>  單片機及應用</b></p><p><b>  課程設計報告</b></p><p>  設計題目: 定時器實驗 </p><p>  專

2、 業: 08自動化2班 </p><p><b>  摘要</b></p><p>  單片機,一個集成在一塊芯片上的完整計算機系統。盡管它的大部分功能集成在一塊小芯片上,但是它具有一個完整計算機所需要的大部分部件:CPU、內存、內部和外部總線系統,目前大部分還會具有外存。同時集成諸如通訊接口、定時器,實時時鐘等外圍設備。而

3、現在最強大的單片機系統甚至可以將聲音、圖像、網絡、復雜的輸入輸出系統集成在一塊芯片上。單片機89C52中有兩個16位定時器/計數器,分別為定時器/計數器0和定時器/計數器1,簡稱為定時器0(T0)和定時器1(T1)。定時器/計數器具有計數和定時功能,擁有4種工作方式,即工作方式0~3。本次課程設計采用的是定時器0的工作方式2來實現定時功能。利用工作方式2的區別于定時工作方式0和1的自動重新加載功能,循環定時,通過軟件和硬件的結合達到定時

4、2秒的目的。在單片機外部接連適當的電路,通過開關按鍵啟停定時功能,通過蜂鳴器響與否判斷定時時間到。其中涉及按鍵的去抖動問題,通過編程實現適當的延時可有效減輕抖動的影響以使觀察效果更加明顯。</p><p>  關鍵詞 單片機 ,89C52 ,定時器0 ,工作方式2 </p><p><b>  目 錄</b></p><p><b&

5、gt;  1 引言1</b></p><p>  1.1 課題意義1</p><p>  1.2 設計目的1</p><p>  1.3 設計內容1</p><p>  1.4 設計方法1</p><p>  2 課程設計題目描述和要求2</p><p>  2.

6、1 微處理器AT89S52單片機2</p><p>  2.2 AT89S52各引腳及功能2</p><p>  2.3 課題概述8</p><p>  2.4 系統主要功能8</p><p>  3 方案的論證與比較9</p><p>  3.1 控制部分的設計方案論證與選擇9</p>

7、<p>  3.2 鍵盤設計方案與選擇10</p><p>  3.3 數字顯示設計方案與選擇10</p><p>  4 課程設計報告內容10</p><p>  4.1 背景知識10</p><p>  4.1.1相關控制寄存器10</p><p>  4.1.2 定時器工作方式210&

8、lt;/p><p><b>  4.2 總體設計</b></p><p><b>  4.3 詳細設計</b></p><p>  4.3.1 硬件設計</p><p>  4.3.2 軟件設計</p><p><b>  4.4結果分析</b><

9、/p><p><b>  總 結11</b></p><p><b>  參考文獻13</b></p><p>  附錄A:定時器protell DXP原理圖</p><p>  附錄B:Protues 仿真效果圖</p><p><b>  致謝</b&g

10、t;</p><p><b>  1 引言</b></p><p><b>  1.1課題意義</b></p><p>  在我們平時的生活中,有許多地方可以看到定時的影子,如手表定時、電腦電視定時、工廠車間零件制作定時等等。定時不僅讓我們的生活變得時間化和規律化,也從一定程度上提高了生產力,提高了人民的生活水平?;趩?/p>

11、片機的定時,輕巧簡便,利于攜帶和操作,在當今物質文化飛速發展的今天更是必不可少的。所以研究基于單片機的定時器設計很有意義。</p><p><b>  1.2設計目的</b></p><p>  通過本次課題設計,應用《單片機原理及應用》等所學相關知識及查閱資料,完成簡易30S定時器的設計,以達到理論與實踐更好的結合、進一步提高綜合運用所學知識和設計的能力的目的。&l

12、t;/p><p>  通過本次設計的訓練,可以使我在基本思路和基本方法上對基于MCS-51單片機的嵌入式系統設計有一個比較感性和理性上的認識,并具備一定程度的設計能力,分析和解決具體問題的能力,把理論和時間結合起來,也讓我感覺到理論也是相當重要,實踐總是建立在理論的基礎上的;但也是我看到了理論和實踐的一些差距,有些東西在實際中不需要考慮,但有的時候也不得不考慮。</p><p><b&g

13、t;  1.3設計內容</b></p><p> ?。?)本課題以單片機為核心,設計出定時器,具有以下功能:</p><p> ?。?)具有30秒定時功能;</p><p> ?。?)做時鐘時在2位LED 顯示器上顯示30-00秒,實現到時報警的功能;</p><p> ?。?)當按下清零按鈕跑表開始倒計時,按下停止按鈕停止計時;

14、</p><p> ?。?)完成Proteus中的仿真和程序的調試,實現定時功能。</p><p><b>  1.4設計方法</b></p><p>  電路采用動態顯示,由八位共陽極數碼管通過P0口,P2口與單片機分別相連,且數碼管A,B,C,D,E,F,G分別依次與單片機的P2口相連,P2口做為字碼控制端,數碼管的1,2各引腳分別與單片機

15、的P0.0—P0.1相連,P0口做為數碼管的位控制端,動態顯示是每次數碼管只顯示一位,由于人的視覺停留是0.05到0.2秒之間,當數碼管依次點亮各個位時,使循環的頻率高于人的視覺停留時間,人們就會認為數碼管是同時點亮的,就可以達到動態顯示的效果。</p><p>  輸入鍵盤采用獨立鍵盤。采用軟件識別鍵值并執行相應的操作,程序運行時依次掃描各行,查詢是否有鍵按下,如果有則進入鍵盤識別處理程序,實現相應的運算,然后

16、通過數碼管輸出結果,如果沒有按鍵就調用顯示程序顯示一個0,等待按鍵按下,在進入按鍵掃描程序。這樣循環執行。</p><p>  2 課程設計題目描述和要求</p><p>  2.1微處理器AT89S52單片機</p><p>  AT89S52單片機是低功耗,高性能,采用COMS工藝的8位單片機。其片內具有8KB的可在線編程的Flash存儲器。該單片機采用了AT

17、MEL公司的高密度、非易失性存儲器技術,與工業標準型80C51單片機的指令系統和引腳完全兼容;片內的Flash存儲器可在線重新編程,或使用通用的非易失性存儲器編程器;通用的8位CPU與在線可編程Flash集成在一塊芯片上,從而是AT89S52功能更加完善,應用更加靈活;具有較高的性能價格比,使其在嵌入式控制系統中有著廣泛的應用前景。</p><p>  AT89S52單片機具有如下的特征:</p>

18、<p>  片內存儲器包含8KB的Flash,可在線編程,擦寫次數不少于1000次;</p><p>  具有256字節的片內RAM,具有可編程的32根I/O口線(P0,P1,P2和P3);</p><p>  具有3個可編程定時器T0、T1和T2,內含2個數據指針TPTR0和TPTR1;</p><p>  中斷系統是具有8個中斷源、6個中斷矢量、2級優

19、先權的中斷結構;</p><p>  串行通信是一個全雙工的UART串行口;</p><p>  2個低功耗節電工作方式為空閑模式和掉電模式;</p><p>  具有3級程序鎖定位,含有1個看門狗定時器,具有斷電標志POF;</p><p>  工作電源電壓為4.0-5.5V,全靜態工作模式為0-3MHz</p><p&

20、gt;  2.2 AT89S52各引腳及功能</p><p>  AT89S52具有PDIP,PLCC和TQFP3種封裝形式。該設計使用的是PDIP封裝,其引腳功能如圖3.1所示:</p><p>  圖3.1 AT89S52單片機引腳圖</p><p>  VCC:芯片主電源,外接DC5V。GND:芯片地,外接電源地。</p><p> 

21、 P0口——8位、開漏極、雙向I/O口。</p><p>  當用做通用I/O口是,每個引腳可驅動8個TTL負載;當用作輸入口時,每個端口首先置1。P0口也可用做訪問片外數據存儲器和程序存儲器時的地8位地址/數據總線的復用口。這種情況下,P0口內含上拉電阻。</p><p>  P1口——8位、雙向I/O口,內含上拉電阻。</p><p>  P1口為用戶使用的通用

22、I/O口,每個引腳可驅動4個TTL負載。當用做輸入時,每個端口首先置1。P1.0和P1.1也用做定時器2的外部計數輸入(P1.0/T2)和觸發器輸入(P1.1/T2EX)。在編程時可作為低字節地址。</p><p>  P2口——8位、雙向I/O口,內部具有上拉電阻。</p><p>  P2口可用做通用I/O口,可以驅動4個TTL負載。對P2口各位寫入1,可以做位輸入。P2口可作為訪問外

23、部程序和數據存儲器的高8位地址。</p><p>  P3口——8位、雙向I/O口,內部含有上拉電阻。</p><p>  P3口用做通用I/O口時,可以驅動4個TTL負載。當用做輸入時,要現將P3口各位置1。若外部負載將P3口拉低,則經過上拉電阻向外輸出電流。P3口也具有第二功能。如表3.1所示:</p><p>  表3.1 P3口的第二功能</p>

24、;<p>  ALE/PROG——地址鎖存允許/編程脈沖輸入</p><p>  在訪問外部程序存儲器和外部數據存儲器時,該引腳輸出一個地址鎖存脈沖ALE,其下降沿可將低8位地址鎖存于片外地址鎖存器中,在編程時,向該引腳輸入一個編程負脈沖PROG。</p><p>  PSEN——外部程序存儲器讀選通,低電平有效。</p><p>  當AT89S52

25、執行片外程序存儲器的指令代碼時,PSEN在每個機器周期內兩次有效。在訪問外部數據存儲器時無效。</p><p>  EA/Vpp——片外程序存儲器訪問允許。</p><p>  如果EA接地,則單片機只有執行外部程序存儲器的指令,地址 0000H-FFFFH。如果EA接Vcc,則單片機執行片內程序存儲器的指令(0000H-1FFFH);如果需要,可自動轉到執行片外程序存儲器的、中的指令(2

26、000H-FFFFH)。</p><p>  XTAL1和XTAL2——XTAL1是片內振蕩器反相放大器和時鐘發生器的輸入端,XTAL2是片內振蕩器反相放大器的輸出端。</p><p>  單片機內部結構圖如圖3.2所示:</p><p>  圖 3.2 AT89S52單片機內部結構框圖</p><p>  由圖3.2可知,AT89S52單

27、片機由運算器和控制器組成的微處理器、片內存儲器RAM/ROM、P0—P3組成的I/O端口以及各種存儲器組成的特殊功能寄存器SFR和串行接口、定時/計數器、中斷系統、振蕩器構成。</p><p>  要使單片機轉入程序后能夠正常工作,單片機外圍必須要接相應電路,以構成單片機最小系統。構成單片機最小系統的必備條件為:電源、EA引腳、晶體振蕩電路和復位電路。最小系統如圖3.3所示:</p><p&g

28、t;  圖3.3 單片機最小系統</p><p><b>  2.3 課題概述</b></p><p>  在單片機控制應用的定時和計數的需求很多,為此在單片機中都有定時器/計數器。89C52的兩個定時器/計數器都是16位加法計數結構。由于在89C52中只能使用8為字節寄存器,所以把兩個16位定時器分解為4個8位定時器,依次為TL0、TL1、TH0和TH1。它們均

29、屬于專用寄存器之列。</p><p>  單片機的定時功能是通過計數器的計數來實現的,不過此時的計數脈沖來自單片機芯片內部,每個機器周期有一個計數脈沖,即每個機器周期計數器加1。由于一個機器周期等于12個振蕩脈沖周期,因此,計數頻率為振蕩頻率的1/12。如果單片機采用12MHz晶振,則計數頻率為1MHz,即每微妙計數器加1。這樣,在使用定時器是既可以根據計數值計算出定時時間,也可以通過定時時間的要求算出計數器的預

30、置值。</p><p>  要實現定時器的功能,需要用到與定時器/計數器應用有關的控制寄存器,它們分別是:定時器控制寄存器(TCON)、定時器方式選擇寄存器(TMOD)、中斷允許控制寄存器(IE)。</p><p><b>  2.4系統主要功能</b></p><p>  此課題所要設計的系統比較簡易,其主要功能是:利用定時器/計數器定時50

31、ms,每到50ms定時計數器變量加1,當變量的值等于20時,定時1S,按下去開始鍵開始計時,再按下停止則停止計時。</p><p>  另外當定時時間到,蜂鳴器響:本次課程設計設計的是30秒定時器實驗,當定時時間到30S蜂鳴器響,能達到定時器實驗的目的。</p><p><b>  3 方案論證與比較</b></p><p>  3.1控制部分

32、的設計方案論證與選擇</p><p>  根據設計要求,控制器主要用于數碼管顯示的控制和定時時間的處理。對于控制器的選擇有以下三種方案。</p><p>  方案一:定時器芯片實現。</p><p>  這種設計方案計算效率高、速度快、而且成本也相對較低,但是元器件難找,顯示和鍵盤部分比較難實現。所以對實現我所要的功能比較麻煩,所以舍棄這個方案。</p>

33、<p>  方案二:采用FPGA(現場可編程門陣列)作為系統的控制器。</p><p>  FPGA將所有器件集成到一塊芯片上,體積小,節省空間,提高了穩定性;直接面向用戶,具有極大的靈活性和通用性,使用方便,硬件測試和實現快捷,開發效率高,工作可靠性好??梢詫崿F各種復雜的邏輯功能,規模大,密度高,采用并行的輸入輸出方式,系統處理速度高,適合作為大規模實時系統的控制核心。由FPGA本設計對數據處理速

34、度的要求不是很高,FPGA的高速處理的優勢得不到充分的體現,由于其集成度高,使其成本偏高,同時由于芯片的引腳較多,實物電路板布線復雜,加重了電路設計和實際焊接的工作。并且FPGA的價格相對較高,性價比太低。</p><p>  方案三、用AT89s52單片機實現。</p><p>  由于單片機集成了運算器電路、控制電路、存儲器、中斷系統、定時器/計數器以及輸入/輸出口電路等,所以用單片機

35、設計控制電路省去了很多分立元器件。由于單片機是可編程芯片,并且它可以運用C語言編寫,對于一些復雜的計算功能,可以調用C語言庫函數。使編寫程序變得非常簡單。所以該課題用單片機實現,不僅功能易于實現,而且精確度高,穩定性好,抗干擾能力強。并且由于其成本低、體積小、技術成熟和功耗小等優點,且技術比較成熟。性價比也相當高。更重要的是本人經過兩年年的學習,對單片機已有深刻的理解,并且可以靈活運用。</p><p>  綜上

36、所述,并通過各個方面綜合比較為達到最佳效果。我們采用方案三利用單片機控制器。</p><p>  3.2鍵盤設計方案與選擇</p><p>  方案一:獨立鍵盤。獨立鍵盤為一端接地,另一端接I/O口,并且要接上拉電阻。這種鍵盤的硬件都很容易實現,但每一個按鍵就要用一個I/O口,非常的浪費單片機的I/O口資源。</p><p>  方案二:自制編碼鍵盤。這個得使用編碼

37、器,譯碼器,元器件也很難找,且增加了不必要的麻煩,舍棄這個方案;</p><p>  方案三:4*4矩陣式鍵盤。這種鍵盤的硬件簡單,使用的I/O口也不多,而且這種鍵盤的編程方法已很成熟。</p><p>  所以本次設計所需要的鍵盤比較少,所以采用這種獨立式鍵盤。</p><p>  3.3數字顯示設計方案與選擇</p><p>  方案一:

38、采用數碼管顯示:數碼管價格便宜,適合于比較單一的數值顯示,對于比較簡單的數值顯示可以采用此方案;</p><p>  方案二:LCD顯示:LCD顯示占用的I/O口比較少,能顯示的內容比較豐富,且耗能能比較少,但是價格比較貴,對一般的設計沒有太大的必要。</p><p>  由于本次設計的顯示部分比較單一,且顯示的數值比較少,所以選擇方案一。</p><p>  4

39、 課程設計報告內容</p><p><b>  4.1 背景知識</b></p><p>  4.1.1 相關控制寄存器</p><p>  在89C52中,與定時器/計數器應用有關的控制寄存器共有3個,分別是定時控制寄存器、工作方式控制寄存器和中斷允許控制寄存器。本次課程設計將會涉及這三個控制寄存器,現對它們說明如下。</p>

40、<p>  定時器控制寄存器(TCON)</p><p>  TCON寄存器地址為88H,位地址為8FH~88H。該寄存器位定義及位地址表示如表3-1所示。</p><p>  表3-1 TCON寄存器表示</p><p>  定時器控制寄存器中,與定時器/計數器有關的控制位共4位,即TF1、TR1、TF0和TR0,它們的作用分別為:</p>

41、;<p>  TR0和TR1——運行控制位。TR0(TR1)=0,停止定時器/計數器工作;TR0(TR1)=1,啟動定時器/計數器工作??刂朴嫈祮⑼V恍栌密浖椒ㄊ蛊渲?或清0即可。</p><p>  TF0和TF1——計數溢出標志位。當計數器產生計數溢出時,相應溢出標志位由硬件置1。計數溢出標志用于表示定時/計數是否完成,因此,它是供查詢的狀態位。當采用查詢方法是,溢出標志位被查詢,并在后續處理

42、程序中應以軟件方法及時將其清0。而當采用中斷方法是,溢出標志位不但能自動產生中斷請求,而且連清0操作也能在轉向中斷服務程序時由硬件自動進行。</p><p>  定時器方式選擇寄存器(TMOD)</p><p>  TMOD寄存器用于設定定時器/計數器的工作方式。寄存器地址為89H,但它沒有位地址,不能進行位尋址,只能用字節傳送指令設置其內容。該寄存器的位定義如表3-2所示。</p&

43、gt;<p>  表3-2 TMOD寄存器表示</p><p>  它的低半字節對應定時器/計數器0,高半字節對應定時器/計數器1,前后半字節的位格式完全對應。位定義如下:</p><p>  GATE——門控位。GATE=0,以運行控制位TR啟動定時器;GATE=1,以外中斷請求信號(或)啟動定時器,這可以用于外部脈沖寬度測量。</p><p> 

44、 ——定時方式或計數方式選擇為。</p><p>  =0,定時工作方式; =1,計數工作方式。</p><p>  M1M0——工作方式選擇位。</p><p>  M1M0=00,工作方式0;M1M0=01,工作方式1;</p><p>  M1M0=10,工作方式2;M1M0=11,工作方式3。</p><p>

45、  中斷允許控制寄存器(IE)</p><p>  表3-3 IE寄存器表示</p><p>  其中與定時器/計數器有關的是定時器/計數器中斷允許控制位ET0和ET1。</p><p>  ET0(ET1)=0,禁止定時器中斷;</p><p>  ET0(ET1)=1,允許定時器中斷。</p><p>  4.1.

46、2 定時器工作方式2</p><p>  89C52的兩個定時器/計數器都有4種工作方式是,即工作方式0~3。由于本次課程設計主要涉及定時器/計數器0的工作方式2,所以以下將重點介紹定時器/計數器0的工作方式2。</p><p>  本次課程設計使用定時器工作方式2,是由于其相對定時器工作方式0和工作方式1有一定的長處。工作方式0和工作方式1有一個共同點,就是計數溢出后計數器全為0,因此

47、循環定時應用時就需要反復設置計數初值。這不但影響定時精度,而且也給程序設計帶來麻煩。工作方式2就是針對此問題而設置的,它具有自動重新加載計數初值的功能,免去了反復設置計數初值的麻煩。</p><p>  定時器/計數器0的工作方式0和工作方式2所對應的電路邏輯結構圖分別如圖3-1和圖3-2所示。</p><p>  圖3-1 定時器/計數器0的工作方式0邏輯結構</p>&l

48、t;p>  圖3-2 定時器/計數器0的工作方式2邏輯結構</p><p>  對比上述兩圖,我們可以發現工作方式0和工作方式2對應的邏輯結構還是有許多部分相同的,如兩圖的右半部分,而兩圖左半部分則有所差異。下面將對其相同點和不同點作簡要分析,這也是為什么這次課程設計選擇工作方式2的原因。</p><p>  相同點:兩種工作方式,計數脈沖既可以來自芯片內部,也可以來自外部。來自內部

49、的是機器周期脈沖,圖中OSC是英文Oscillator(振蕩器)的縮寫,表示芯片的晶振脈沖,經12分頻后,即為單片機的機器周期脈沖。來自外部的計數脈沖由T0(P3.4)引腳輸入,計數脈沖由控制寄存器TMOD的位進行控制。當=0時,接通機器周期脈沖,計數器每個機器周期進行一次加1,這就是定時器工作方式;當=1時,接通外部計數引腳T0(P3.4),從T0引入計數脈沖輸入,這就是計數工作方式。</p><p>  不同

50、點:如圖3-1所示的左半部分,工作方式0條件下,TL0使用了5位,當TL0的低5位計數溢出時,向TH0進位;而全部13位計數溢出時,向計數溢出標志位TF0進位,將其置1。如圖3-2所示的左半部分,工作方式2條件下,16位計數器被分成兩部分,TL作為計數器使用,TH作為預置寄存器使用,初始化時把計數初值分別裝入TL和TH中。當計數溢出后,由預置寄存器TH以硬件方法自動給計數器TL重新加載。變軟件加載為硬件加載。更詳細點,初始化時,8位計數

51、初值同時裝入TL0和TH0。當TL0計數溢出時,置位TF0,并用保存在預置寄存器TH0中的計數初值自動加載TL0,然后開始重新計數。如此重復,這樣不但省去了用戶程序中的重裝指令,而且也有利于提高定時精度。</p><p><b>  4.2 總體設計</b></p><p>  如圖3-3所示是此次課題設計的總體框架圖。</p><p>  

52、圖3-3 定時器總體框架圖</p><p><b>  4.3 詳細設計</b></p><p>  4.3.1 硬件設計</p><p><b>  定時器設計電路圖</b></p><p>  本次課程設計采用protell DXP設計的電路圖如圖3-4所示。圖中單片機采用AT89C52,由圖

53、可見:</p><p>  圖3-4 定時器電路圖</p><p>  Protues仿真實驗效果實驗效果圖:</p><p>  4.3.2 軟件設計</p><p><b>  (1)計數初值計算</b></p><p>  根據定時器/ 計數器0的工作方式2邏輯結構圖可知,使用工作方式2的計

54、數范圍是1~255,定時時間的計算公式為:</p><p>  (28-計數初值)*晶振周期*12</p><p>  或 (28-計數初值)*機器周期</p><p>  本次課題設計的晶振頻率為12MHz,所以機器周期為1微秒。由于工作方式2計數最高限值為255,所以這里選定定時時間為250微秒,這樣可計算出計數初值。設計數初值為 x,則<

55、;/p><p>  (28- x)*1*10-6s=250*10-6s</p><p>  計算得 x=6D=06H。所以寄存器TL0和TH0都設置初值為06H。</p><p>  總定時時間要求是2秒,所以可利用軟件方法實現8000次250微秒的定時,這就是循環定時。</p><p><b>  (2)詳細流程圖</b>

56、</p><p>  定時器設計的詳細流程圖如圖3-5所示。</p><p>  圖3-5 定時器設計詳細流程圖</p><p>  (3)定時器實驗程序</p><p><b>  源代碼:</b></p><p>  #include<reg51.h>//頭文件</p>

57、<p>  #include<intrins.h>//頭文件</p><p>  #define uchar unsigned char//宏定義</p><p>  #define uint unsigned int//宏定義</p><p>  uint aa, bai,shi,ge,bb; //定義變量</p&g

58、t;<p>  /*數碼管顯示0-9*/</p><p>  Uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p><b>  /*子函數聲明*/</b></p><p>  void delay0(uint z);</

59、p><p>  void delay1();</p><p>  void delay(uchar j);</p><p>  void display(uint ge,uint shi);</p><p>  void init();</p><p>  void speaker();</p>&

60、lt;p>  uint pause;</p><p>  int temp;</p><p>  sbit LED = P1^7;</p><p>  sbit sound = P3^7;</p><p>  /*********************************************************&

61、lt;/p><p><b>  主函數</b></p><p>  *********************************************************/</p><p>  void main()</p><p><b>  {</b></p><

62、p>  EA=1;//開中斷</p><p>  EX0=1;//允許外部中斷INT0中斷</p><p>  IT0=0;//定義INT0觸發方式</p><p>  PX0=1;//中斷優先級高</p><p>  EX1=1;//允許外部中斷INT1中斷</p><p>  IT1=0;//定義INT1觸發

63、方式</p><p>  PX1=1;//中斷優先級高</p><p><b>  P0=0XFF;</b></p><p><b>  P1=0xFF;</b></p><p><b>  P2=0xFF;</b></p><p><b> 

64、 while(1)</b></p><p><b>  {</b></p><p><b>  init();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  

65、/*定時器的初始化--相關寄存器的配置*/</p><p>  void init()</p><p><b>  {</b></p><p>  temp=31;//變量賦初值</p><p>  TMOD=0x01;//定時器T0工作于方式1</p><p><b>  TH0=0

66、x4c;</b></p><p>  TL0=0x00;//定時器賦初值</p><p>  EA=1;//開中斷</p><p>  ET0=1;//開定時中斷</p><p>  TR0=1;//開定時器T0</p><p><b>  while(1)</b></p>

67、<p><b>  { </b></p><p>  if(aa==20)//定時20*50MS=1S</p><p><b>  {</b></p><p>  aa=0;//定時完成一次后清0</p><p>  temp--;//變量自減</p><p>

68、;  if(temp<0)</p><p><b>  {</b></p><p><b>  LED=~LED;</b></p><p>  speaker();</p><p><b>  delay(2);</b></p><p><b

69、>  LED=1;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  shi=0;</b></p><p><b>  ge=0;</b></p>

70、<p>  display(ge,shi);</p><p><b>  }</b></p><p><b>  }</b></p><p>  shi=temp%100/10;//顯示十位</p><p>  ge=temp%10;//顯示個位</p><p&g

71、t;<b>  }</b></p><p>  display(ge,shi);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*數碼管顯示子函數*/</p><p>  void display

72、(uint ge,uint shi)</p><p><b>  {</b></p><p><b>  P0=0xfd;</b></p><p>  P2=table[shi];//顯示十位</p><p>  delay0(5);</p><p><b>  P

73、0=0xfe;</b></p><p>  P2=table[ge];//顯示個位</p><p>  delay0(5);</p><p><b>  }</b></p><p>  void xint0() interrupt 0 //外部中斷INT0</p><p><

74、;b>  {</b></p><p>  display(ge,shi);</p><p><b>  }</b></p><p>  void xint1() interrupt 2 //外部中斷INT1</p><p><b>  {</b></p><

75、;p><b>  shi=0;</b></p><p><b>  ge=0;</b></p><p>  display(ge,shi);</p><p><b>  temp=31;</b></p><p>  delay0(1);</p><p&

76、gt;<b>  }</b></p><p><b>  /*聲音子函數*/</b></p><p>  void speaker()</p><p><b>  {</b></p><p><b>  int i;</b></p><

77、;p>  for(i=0;i<800;i++)</p><p><b>  {</b></p><p><b>  sound=0;</b></p><p><b>  delay1();</b></p><p><b>  sound=1;</b&

78、gt;</p><p><b>  delay1();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*定時中斷子函數*/</p><p>  void xtimer0() interr

79、upt 1</p><p><b>  {</b></p><p><b>  TH0=0x4c;</b></p><p><b>  TL0=0x00;</b></p><p><b>  aa++;</b></p><p>&l

80、t;b>  }</b></p><p><b>  /*延時子函數*/</b></p><p>  void delay0(uint z)</p><p><b>  {</b></p><p><b>  uint i,j;</b></p>

81、<p>  for(i=0;i<z;i++)</p><p>  for(j=0;j<110;j++);</p><p><b>  }</b></p><p><b>  /*延時子函數*/</b></p><p>  void delay1()</p>&l

82、t;p><b>  {</b></p><p>  unsigned char i;</p><p>  for(i=0;i<200;i++);</p><p><b>  }</b></p><p>  /***************************************

83、******************</p><p><b>  500ms延時函數</b></p><p>  晶振:11.0592MHz</p><p>  *********************************************************/</p><p>  void delay

84、(uchar j) </p><p><b>  { </b></p><p><b>  uchar k;</b></p><p><b>  uint i;</b></p><p>  for(;j>0;j--)</p><p><b&g

85、t;  {</b></p><p>  for(i=1250;i>0;i--) </p><p><b>  {</b></p><p>  for(k=180;k>0;k--);</p><p><b>  }</b></p><p><b&g

86、t;  }</b></p><p><b>  } </b></p><p><b>  4.4結果分析</b></p><p>  此次課程設計主要利用中斷法,運用中斷嵌套循環的方法,簡單的說是運用幾個中斷,按照不同的中斷優先級來處里鍵盤和定時器計數的功能;</p><p>  課程設

87、計硬件和軟件設計結束后,可以看到當開關按鍵按下計時開始后,數碼管開始倒計時,再按暫停按鍵。但實際操作過程中,由于消除開關抖動及代碼執行所需時間的影響,設計后的效果并不精準,還有改進的空間。</p><p><b>  總 結</b></p><p>  這次的單片機課程設計是自己的一次親手設計電路以及實現相關硬件仿真功能的一次經歷?!岸〞r器實驗”設計的課題,這個課題

88、和課本聯系得很緊密,較其它課題簡單多了。但許多問題還得同樣得仔細對待。</p><p>  在我設計電路和調試電路遇到了很多問題,但這些問題都得到了自己的解決,感覺很有成就感。盡管課本上已提供給了我們非常詳盡的信息,但在應用時我們還是感覺理論和實踐的差別,理論離不開實踐,實踐也更離不開理論,也許時間很倉促,在這方面還有很多得完善,這個小東西也讓自己學到了很多東西,自己會更加努力學習,彌補自己欠缺的東西。</

89、p><p>  在代碼的編輯上對于我來說還是很順手的,因為之前弄過單片機,所以弄起來毫不費勁,代碼編輯完后,調試中還遇到了很多問題,雖然程序沒有語法錯誤,但是在具體功能上還是不能實現的,最后通過自己耐心的調試,在網上找相應問題的答案,問題得到了最終的解決,心里有點小小的成就感。</p><p>  總結起來,這次課題設計不僅培養或者說提高了我的動手能力,也讓我們在單片機理論理解方面有了新的加深

90、與突破。相信這次寶貴的經歷,會是我們以后自己動手設計實現硬件的重要臺階!</p><p><b>  致 謝</b></p><p>  這次課程設計,首先感謝學校和學院給我們這次實踐的機會,鍛煉了我們,讓我們在實踐過程中總結了經驗和教訓,相信這對我們以后的從業生涯會有很大的幫助!</p><p>  最后要感謝這次我所參考的資料的作者們,你

91、們的總結與心得對我的幫助很大。正是由于資料的正確與完整,讓我能夠更快地完成這次的課程設計,從中也收獲了許多課余之外的經驗。</p><p>  另一個助手,那就是網絡了。網絡在快速獲取知識方面挺管用的,但也或多或少反映出自己在單片機理論知識以及把它與實踐相結合的能力等方面的不足,希望以后會得到提高!</p><p><b>  參考文獻</b></p>

92、<p>  1 周興華.手把手教你學單片機C語言版.北京:航空航天大學出版社,2006</p><p>  2 王建華.Mcs51單片機原理及其應用. 北京:機械工業出版社,2008</p><p>  3 張春光.微型計算機控制技術.北京:化學工業出版社,2002</p><p>  4 李貴山.微型計算機測控技術.北京:機械工業出版社,2002

93、</p><p>  5 AT89S52單片機數據手冊</p><p>  6 Protel DXP范例入門與提高.北京:清華大學出版社</p><p>  7 單片機C語言與protues仿真技能實訓</p><p>  附錄A:定時器protell DXP原理圖</p><p>  附錄B:Protues 仿

94、真效果圖</p><p><b>  致 謝</b></p><p>  這次課程設計,首先感謝學校和學院給我們這次實踐的機會,鍛煉了我們,讓我們在實踐過程中總結了經驗和教訓,相信這對我們以后的從業生涯會有很大的幫助!</p><p>  最后要感謝這次我所參考的資料的作者們,你們的總結與心得對我的幫助很大。正是由于資料的正確與完整,讓我能夠

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論