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

下載本文檔

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

文檔簡介

1、<p><b>  微機(jī)原理及匯編語言</b></p><p><b>  課程設(shè)計(jì)報告</b></p><p><b>  目 錄</b></p><p>  第一章 微機(jī)應(yīng)用系統(tǒng)課程設(shè)計(jì)的目的及意義3</p><p>  1.1 課程設(shè)計(jì)的要求及目的

2、3</p><p>  1.2 課程設(shè)計(jì)的內(nèi)容3</p><p>  1.3 課程在教學(xué)計(jì)劃中的地位和作用3</p><p>  第二章 總體設(shè)計(jì)方案5</p><p>  2.1 設(shè)計(jì)思想5</p><p>  第三章 硬件設(shè)計(jì)6</p><p>  3.1 硬件設(shè)計(jì)概要

3、6</p><p>  3.2 芯片及其功能說明6</p><p>  3.2.1 單片機(jī)及其功能說明6</p><p>  3.2.2 MAX7219及其功能說明9</p><p>  3.3 硬件電路設(shè)計(jì)系統(tǒng)原理圖及其說明11</p><p>  第四章 軟件設(shè)計(jì)13</p>&

4、lt;p>  4.1 流程圖13</p><p>  4.2 軟件系統(tǒng)的使用說明14</p><p>  4.2.1 MAX7219驅(qū)動15</p><p>  4.2.2 時鐘進(jìn)位運(yùn)行規(guī)則16</p><p>  4.2.3 時間調(diào)整部分16</p><p>  4.2.4 鍵盤去

5、抖17</p><p>  4.3源程序及注釋17</p><p>  第五章 心得與體會33</p><p><b>  參考文獻(xiàn)35</b></p><p>  第一章 微機(jī)應(yīng)用系統(tǒng)課程設(shè)計(jì)的目的及意義</p><p>  1.1 課程設(shè)計(jì)的要求及目的</p><

6、;p>  以單片機(jī)為控制核心的智能電子鐘以時間準(zhǔn)、功能強(qiáng)、外形美而越來越受到人們的青睞。本實(shí)驗(yàn)通過設(shè)計(jì)一個智能電子鐘,旨在使學(xué)生能夠做到以下幾點(diǎn)。</p><p>  l.了解智能電子鐘的功能特點(diǎn)與工作原理。</p><p>  2.掌握以單片機(jī)為核心實(shí)現(xiàn)電子鐘功能的思路和方法。</p><p>  3.進(jìn)一步掌握多位數(shù)碼管顯示的原理和接口方法。</p&

7、gt;<p>  1.2 課程設(shè)計(jì)的內(nèi)容</p><p> ?。?)編程語言為C語言;</p><p> ?。?)基于單片機(jī)的硬件電路設(shè)計(jì)與調(diào)試;</p><p> ?。?)從鍵盤上輸入當(dāng)前時間,格式為“XX(小時):XX(分):XX(秒),以此為起點(diǎn),每秒刷新一次,1秒鐘延遲方式采用軟件方式并用子程序編寫或者定時器實(shí)現(xiàn),主程序用于顯示時間結(jié)果和調(diào)用

8、子程序,由于軟件延遲產(chǎn)生的誤差每小時調(diào)整一次,保證每小時誤差不超過0.1秒。</p><p>  1.3 課程在教學(xué)計(jì)劃中的地位和作用</p><p>  《微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與綜合實(shí)驗(yàn)》課程是測控技術(shù)專業(yè)本科生必修的一門技術(shù)基礎(chǔ)課程。通過該課程的學(xué)習(xí)使學(xué)生對微機(jī)系統(tǒng)有一個全面的了解、掌握常規(guī)芯片的使用方法、掌握簡單微型計(jì)算機(jī)應(yīng)用系統(tǒng)軟硬的設(shè)計(jì)方法。為了使我們微機(jī)應(yīng)用課程設(shè)計(jì)目標(biāo)更明確,要

9、求更具體,學(xué)生收獲更大,我們特編寫課程設(shè)計(jì)任務(wù)書,學(xué)生可根據(jù)本人的愛好任選其中一個課題,要求獨(dú)立完成課題,寫出課程設(shè)計(jì)說明書,設(shè)計(jì)出電路原理圖,說明工作原理,畫出電路板圖,編寫程序及程序流程圖。希望同學(xué)認(rèn)真閱讀本任務(wù)書,認(rèn)真查閱資料與上機(jī)調(diào)試,圓滿完成課程設(shè)計(jì)。</p><p>  通過課程設(shè)計(jì)進(jìn)一步鍛煉同學(xué)們在微型計(jì)算機(jī)應(yīng)用方面的實(shí)際工作能力。計(jì)算機(jī)科學(xué)在應(yīng)用上得到飛速發(fā)展,因此,學(xué)習(xí)這方面的知識必須緊密聯(lián)系實(shí)

10、際:掌握這方面的知識更要強(qiáng)調(diào)解決實(shí)際問題的能力。同學(xué)們要著重學(xué)會面對一個實(shí)際問題,如何去自己收集資料,如何自己去學(xué)習(xí)新的知識,如何自己去制定解決問題的方案并通過實(shí)踐不斷地去分析和解決前進(jìn)道路上的一切問題,最終到達(dá)勝利的彼岸。</p><p>  第二章 總體設(shè)計(jì)方案</p><p><b>  2.1 設(shè)計(jì)思想</b></p><p>  

11、要完成本實(shí)驗(yàn)任務(wù)要求的功能,可以將系統(tǒng)分為以下幾個部分來設(shè)計(jì):定時器/計(jì)數(shù)器電路、時間及功能設(shè)置電路、時間顯示電路等。其中,定時器/計(jì)數(shù)器電路是整個電子鐘設(shè)計(jì)的基礎(chǔ)。一般都是用定時/計(jì)數(shù)器來產(chǎn)生定時中斷信號(例如定時時間間隔為1/100s),然后通過軟件計(jì)數(shù)器來相繼獲得實(shí)時時鐘的秒、分、時等時間值。</p><p>  實(shí)現(xiàn)智能化電子鐘的軟件主要由主程序和中斷服務(wù)程序兩模塊組成。</p><p

12、>  在主程序中,除了完成對系統(tǒng)的初始化和中斷向量的設(shè)置外,需要對各種軟件時間計(jì)數(shù)器進(jìn)行查詢、比較和判斷,并根據(jù)判斷結(jié)果發(fā)出各種控制信號,以完成時鐘的顯示操作。</p><p>  在定時中斷服務(wù)程序中,需要設(shè)計(jì)1/100s計(jì)數(shù)器,秒個位、秒十位計(jì)數(shù)器,分個位、分十位計(jì)數(shù)器,時個位、時十位計(jì)數(shù)器以及由鍵盤設(shè)置的各定時時間計(jì)數(shù)器和各作息時間計(jì)數(shù)器等等,并對各計(jì)數(shù)器酌情作加1計(jì)數(shù)。然后,由主程序來完成對各種計(jì)數(shù)

13、器內(nèi)容的查詢。</p><p><b>  注意事項(xiàng):</b></p><p>  向定時器通道寫計(jì)數(shù)初值時,無論以二進(jìn)制還是十進(jìn)制形式寫入,如果其值超過255,需分兩次分別寫入計(jì)數(shù)器的高、低字節(jié),否則只需寫一次。究竟寫一次還是兩次,要在寫初值之前通過寫控制字來設(shè)置。</p><p><b>  第三章 硬件設(shè)計(jì)</b>

14、</p><p>  3.1 硬件設(shè)計(jì)概要</p><p>  這次做的是單片機(jī)時鐘程序設(shè)計(jì),顧名思義,首先應(yīng)該用到的是單片機(jī)。我們用單片機(jī)來驅(qū)動程序,完成程序的運(yùn)行。由于我們以前沒有學(xué)過單片機(jī)這方面的知識,我們運(yùn)用起來比較陌生,只能是一邊學(xué)一邊用,所以做的設(shè)計(jì)比較簡單,只有最基本的時鐘功能和校準(zhǔn)功能。當(dāng)然既然是時鐘,就少不了數(shù)碼管,這還要用到一片7219芯片來驅(qū)動數(shù)碼管,使它顯示相應(yīng)的

15、時間。</p><p>  這次我們的課程設(shè)計(jì),主要目的在于熟悉單片機(jī)的原理和應(yīng)用。由于時鐘設(shè)計(jì),所以相對的硬件設(shè)計(jì)較少且連線比較簡單,這里不再詳細(xì)介紹。</p><p>  3.2 所用到的芯片及其各自功能說明</p><p>  3.2.1單片機(jī)及其功能說明</p><p>  這次課程設(shè)計(jì)的主要目的就是熟悉單片機(jī),下面我們先就單片機(jī)的

16、一些功能加以介紹。</p><p>  首先我們來連接一下單片機(jī)的引腳圖,如果,具體功能在下面都有介紹。</p><p>  單片機(jī)的40個引腳大致可分為4類:電源、時鐘、控制和I/O引腳。</p><p> ?、?電源:  ⑴ VCC - 芯片電源,接+5V;</p><p> ?、?VSS - 接地端;</p>&

17、lt;p> ?、?時鐘:XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出端。</p><p> ?、?控制線:控制線共有4根,</p><p>  ⑴ ALE/PROG:地址鎖存允許/片內(nèi)EPROM編程脈沖    ① ALE功能:用來鎖存P0口送出的低8位地址    ② PROG功能:片內(nèi)有EPROM的芯片,在E

18、PROM編程期間,此引腳輸入編程脈沖。</p><p>  ⑵ PSEN:外ROM讀選通信號。</p><p>  ⑶ RST/VPD:復(fù)位/備用電源。</p><p>  ① RST(Reset)功能:復(fù)位信號輸入端。</p><p>  ② VPD功能:在Vcc掉電情況下,接備用電源。</p><p> ?、?EA

19、/Vpp:內(nèi)外ROM選擇/片內(nèi)EPROM編程電源。</p><p> ?、?EA功能:內(nèi)外ROM選擇端。</p><p>  ② Vpp功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,施加編程電源Vpp。</p><p><b> ?、?I/O線</b></p><p>  80C51共有4個8位并行I/O端口:P0

20、、P1、P2、P3口,共32個引腳。P3口還具有第二功能,用于特殊信號輸入輸出和控制信號(屬控制總線)。  </p><p>  〈51單片機(jī)引腳圖及引腳功能〉</p><p>  拿到一塊芯片,想要使用它,首先必須要知道怎樣連線,我們用的一塊稱之為89C51的芯片,下面我們就看一下如何給它連線。</p><p>  1、 電源:這當(dāng)然是必不可少

21、的了。單片機(jī)使用的是5V電源,其中正極接40管腳,負(fù)極(地)接20管腳。 2、 振蒎電路:單片機(jī)是一種時序電路,必須供給脈沖信號才能正常工作,在單片機(jī)內(nèi)部已集成了振蕩器,使用晶體振蕩器,接18、19腳。只要買來晶體震蕩器,電容,連上就能了,按圖1接上即可。 3、 復(fù)位管腳:按圖1中畫法連好,至于復(fù)位是何含義及為何需要復(fù)要復(fù)位,在單片機(jī)功能中介紹。 4、 EA管腳:EA管腳接到正電源端。 至此,一個單片機(jī)就接好,通上電,單片機(jī)就開始

22、工作了。</p><p>  我們的第一個任務(wù)是要用單片機(jī)點(diǎn)亮一只發(fā)光二極管LED,顯然,這個LED必須要和單片機(jī)的某個管腳相連,不然單片機(jī)就沒法控制它了,那么和哪個管腳相連呢?單片機(jī)上除了剛才用掉的5個管腳,還有35個,我們將這個LED和1腳相連。(見圖1,其中R1是限流電阻)</p><p>  按照這個圖的接法,當(dāng)1腳是高電平時,LED不亮,只有1腳是低電平時,LED才發(fā)亮。因此要1

23、腳我們要能夠控制,也就是說,我們要能夠讓1管腳按要求變?yōu)楦呋虻碗娖?。即然我們要控?腳,就得給它起個名字,總不能就叫它一腳吧?叫它什么名字呢?設(shè)計(jì)51芯片的INTEL公司已經(jīng)起好了,就叫它P1.0,這是規(guī)定,不能由我們來更改。</p><p>  3.2.2 MAX7219及其功能說明</p><p>  設(shè)計(jì)題目做的是數(shù)字時鐘,首先應(yīng)該有數(shù)碼管來顯示相應(yīng)的時間,這要用到一片7219芯片

24、來驅(qū)動所用到的數(shù)碼管。下面我們就7219的功能做一些簡單的介紹。</p><p>  MAX7219是MAXIM公司生產(chǎn)的串行輸入/輸出共陰極數(shù)碼管顯示驅(qū)動芯片,一片MAX7219可驅(qū)動8個7段(包括小數(shù)點(diǎn)共8段)數(shù)字LED、LED條線圖形顯示器、或64個分立的LED發(fā)光二級管。該芯片具有10MHz傳輸率的三線串行接口可與任何微處理器相連,只需一個外接電阻即可設(shè)置所有LED的段電流。。它的操作很簡單,MCU只需通

25、過模擬SPI三線接口就可以將相關(guān)的指令寫入MAX7219的內(nèi)部指令和數(shù)據(jù)寄存器,同時它還允許用戶選擇多種譯碼方式和譯碼位。此外它還支持多片7219串聯(lián)方式,這樣MCU就可以通過3根線(即串行數(shù)據(jù)線、串行時鐘線和芯片選通線)控制更多的數(shù)碼管顯示。MAX7219的外部引腳分配如圖1所示及內(nèi)部結(jié)構(gòu)如圖2所示。</p><p>  MAX7219的外部引腳分配</p><p><b> 

26、 各引腳的功能為:</b></p><p>  DIN:串行數(shù)據(jù)輸入端</p><p>  DOUT:串行數(shù)據(jù)輸出端,用于級連擴(kuò)展</p><p>  LOAD:裝載數(shù)據(jù)輸入</p><p>  CLK:串行時鐘輸入</p><p>  DIG0~DIG7:8位LED位選線,從共陰極LED中吸入電流<

27、/p><p>  SEG A~SEG G DP7段驅(qū)動和小數(shù)點(diǎn)驅(qū)動</p><p>  ISET:通過一個10k電阻和Vcc相連,設(shè)置段電流</p><p>  MAX7219有下列幾組寄存器:(如圖3)</p><p>  MAX7219內(nèi)部的寄存器如下圖,主要有:譯碼控制寄存器、亮度控制寄存器、掃描界限寄存器、關(guān)斷模式寄存器、測試控制寄存

28、器。編程時只有正確操作這些寄存器,MAX7219才可工作。</p><p>  MAX7219內(nèi)部的相關(guān)寄存器</p><p>  3.3硬件電路設(shè)計(jì)系統(tǒng)原理圖及其說明</p><p>  由于第一次使用單片機(jī),所做的課程設(shè)計(jì)相對比較簡單,只用到以上兩片芯片,其具體硬件電路設(shè)計(jì)系統(tǒng)原理圖如下圖所示:</p><p>  基于硬件的設(shè)計(jì)相對比較

29、簡單,因?yàn)槲覀冏龅亩际亲詈唵蔚墓δ?,沒有什么多余的附加功能,所以不管是從編程還是軟件設(shè)計(jì)方面都相對比較簡單。只需要在電腦用C語言完成相應(yīng)的功能,把程序下載到單片機(jī),用單片機(jī)來實(shí)現(xiàn)相應(yīng)的功能。用單片機(jī)的程序來驅(qū)動7219,使數(shù)碼管顯示相應(yīng)的時間。硬件連線的時候要注意單片機(jī)應(yīng)與試驗(yàn)箱共地,否則數(shù)碼管不會顯示時間。</p><p><b>  第四章 軟件設(shè)計(jì)</b></p>&l

30、t;p>  4.1 流程圖及其說明</p><p>  軟件編程我們可以分為幾個模塊來編程,這樣可以是整個程序顯得更清晰、容易理解。我們程序出現(xiàn)錯誤的時候也方便我們調(diào)試。具體整個程序的流程圖如下所示:</p><p>  4.2軟件系統(tǒng)的使用說明</p><p>  我們可以把整個軟件系統(tǒng)分成幾個部分:7219驅(qū)動;時鐘進(jìn)位部分;調(diào)整時間部分;延時函數(shù)及去抖

31、部分。下面我們對各個部分分別加以說明。</p><p>  4.2.1 MAX7219驅(qū)動</p><p>  對于時鐘電路的設(shè)計(jì)我們首先做的是數(shù)碼管驅(qū)動芯片7219。通過7219的驅(qū)動,是數(shù)碼管能顯示通過軟件設(shè)置的時間。電路原理圖如下圖,MAX7219與單片機(jī)的連接只需要3條線:LOAD(CS)片選引腳、CLK串行時鐘引腳、DIN串行數(shù)據(jù)引腳。其中C1 為電源濾波電容,R1用來設(shè)置段電流

32、。</p><p><b>  電路原理圖</b></p><p>  通過上面的原理和相應(yīng)的程序使數(shù)碼管完成顯示功能,具體程序?qū)⒃谙旅娴恼鹿?jié)分析。</p><p>  4.2.2時鐘運(yùn)行進(jìn)位規(guī)則</p><p>  這一部分是我們設(shè)計(jì)的主要部分,主要完成時鐘的進(jìn)位和正常的時間顯示問題。我們定義了一個長度為六的數(shù)組,分別

33、用來表示時鐘的時、分、秒的個位和十位。這當(dāng)中主要考慮的就是時間的進(jìn)位問題以及十、分、秒十位和各位的進(jìn)制問題。其中時、分、秒的個位都是十進(jìn)制。而十位是六進(jìn)制。當(dāng)分、秒的十位為六而個位為零的時候要同時清零,已達(dá)到時、分整體六十進(jìn)制。這對于軟件編程來說還是比較簡單的,只需要用if語句就可以完成。這主要需要注意的就是時分秒的同時清零問題,讓它完成時鐘的具體功能。具體的程序后面源程序清單中會有介紹。</p><p>  4

34、.2.3時間調(diào)整部分</p><p>  這部分主要做的是時間的初始化問題以及時間的調(diào)整問題。由于用的是51單片機(jī),沒有辦法連接電腦的鍵盤,所以時間鍵盤的初始化只能用按鈕來代替。由于他和時間的調(diào)整問題屬于一個功能,所以放在了一起進(jìn)行編程,這樣可以簡化程序,變得更加容易理解同時便于調(diào)試。在這一個功能我們設(shè)置了四個功能鍵。一個用來管理中斷,用來關(guān)和開中斷,方便我們對時間進(jìn)行調(diào)整。一個用來循環(huán)調(diào)整的哪一位,當(dāng)處于調(diào)整的

35、位是,數(shù)碼管所對應(yīng)的時間位的下面會出現(xiàn)一個亮點(diǎn)進(jìn)行提示。另外兩個就是負(fù)責(zé)對時間進(jìn)行調(diào)整,一個是加位調(diào)整,一個是減位調(diào)整。具體的實(shí)現(xiàn)問題用了兩個switch語句,來確認(rèn)有鍵按下了時候就進(jìn)行加一和減一的調(diào)整。具體的程序后面源程序清單中會有介紹。</p><p><b>  4.2.4鍵盤去抖</b></p><p>  這個部分相對比較簡單,延時函數(shù)主要是確定時間的精度問

36、題。而調(diào)整時間是按鍵的去抖問題主要就是利用延時函數(shù)。這里不在詳細(xì)介紹,后面的源程序中會有詳細(xì)的講解。</p><p><b>  4.3源程序及注釋</b></p><p>  #include <reg52.h></p><p>  #define DECODE_MODE 0x09 //譯碼控制寄存器</p>&

37、lt;p>  #define INTENSITY 0x0A //亮度控制寄存器</p><p>  #define SCAN_LIMIT 0x0B //掃描界限寄存器</p><p>  #define SHUT_DOWN 0x0C //關(guān)斷模式寄存器</p><p>  #define DISPLAY_TEST 0x0F //測試控制

38、寄存器</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit LOAD=P1^0; //MAX7219片選 12腳</p><p>  sbit DIN=P1^1; //MAX7219串行數(shù)據(jù)

39、1腳</p><p>  sbit CLK=P1^2; //MAX7219串行時鐘13腳</p><p>  sbit key1=P3^0; </p><p>  sbit key2=P3^1;</p><p>  sbit key3=P3^2;</p><p>  sbit key4=P3^3

40、; </p><p>  /*sbit KEY1=P1^3; //暫停或運(yùn)行</p><p>  sbit KEY2=P1^4;//位選擇</p><p>  sbit KEY3=P1^5;//增加</p><p>  sbit KEY4=P1^6;//減少</p><p><b

41、>  */</b></p><p>  uchar sj[7]={0};</p><p>  uint time=0,flash=0;</p><p>  uchar k=0,i=0;</p><p>  /*********************函數(shù)聲明**************************/</p&

42、gt;<p>  void Write7219(unsigned char address,unsigned char dat);</p><p>  void Initial(void);</p><p>  void Init(void);</p><p>  /*********************地址、數(shù)據(jù)發(fā)送子程序************

43、**************/</p><p>  void Write7219(unsigned char address,unsigned char dat)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  LOAD=0;

44、 //拉低片選線,選中器件</p><p>  for (i=0;i<8;i++) //發(fā)送地址</p><p><b>  {</b></p><p>  CLK=0; //清零時鐘總線</p><p&g

45、t;  DIN=(bit)(address&0x80); //每次取高字節(jié) </p><p>  address<<=1; //左移一位</p><p>  CLK=1; //時鐘上升沿,發(fā)送地址</p><p><b>  }</b>

46、</p><p>  for (i=0;i<8;i++) //發(fā)送數(shù)據(jù)</p><p><b>  {</b></p><p><b>  CLK=0;</b></p><p>  DIN=(bit)(dat&0x80); </p

47、><p>  dat<<=1; </p><p>  CLK=1; //時鐘上升沿,發(fā)送數(shù)據(jù)</p><p><b>  }</b></p><p>  LOAD=1; //發(fā)送結(jié)束,上升沿鎖存數(shù)據(jù)

48、</p><p><b>  }</b></p><p>  /*********************MAX7219初始化,設(shè)置MAX7219內(nèi)部的控制寄存器**************************/</p><p>  void Initial(void) </p><p>  { uint

49、 i=0;</p><p>  Write7219(SHUT_DOWN,0x01); //開啟正常工作模式(0xX1)</p><p>  Write7219(DISPLAY_TEST,0x00); //選擇工作模式(0xX0)</p><p>  Write7219(DECODE_MODE,0xff); //選用全譯碼模式</p>

50、<p>  Write7219(SCAN_LIMIT,0x05); //8只LED全用</p><p>  Write7219(INTENSITY,0x08); //設(shè)置初始亮度</p><p>  for(i=1;i<7;i++)</p><p><b>  {</b></p><p>  W

51、rite7219(i,sj[i]);//數(shù)碼管顯示</p><p><b>  } </b></p><p><b>  }</b></p><p>  /*********************單片機(jī)初始化**************************/</p><p>  

52、void Init(void){</p><p>  TMOD=0x01;</p><p><b>  TH0=0x4B;</b></p><p>  TL0=0xFF; </p><p><b>  EA=1;</b></p><p><b>  ET0=1;&l

53、t;/b></p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p>  /****************** 延時函數(shù) (精度2uS) *********************/</p><p>  /*void delay(ucha

54、r us){</p><p>  while(--us);</p><p><b>  } */</b></p><p>  void delayms(uchar aa)</p><p><b>  {</b></p><p>  uchar i,j;</p>

55、<p>  for(i=aa;i>0;i--)</p><p>  for(j=110;j>0;j--);</p><p><b>  } </b></p><p>  /******************** tiaoshi *********************/</p><p>

56、;  void keyscan()</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  if(key4==0)</p><p><b>  {</b></p><p>  delayms(10

57、0);</p><p>  if(key4==0)</p><p><b>  { /* </b></p><p>  while(!key4);</p><p>  TR0=0; //關(guān)定時器0</p><p>  Write7219(1,0);</p><p>  

58、Write7219(2,0);</p><p>  Write7219(3,0);</p><p>  Write7219(4,0);</p><p>  Write7219(5,0);</p><p>  Write7219(6,0); */</p><p>  for(i=1;i<7;i++)</p

59、><p><b>  {</b></p><p>  Write7219(i,sj[i]);//數(shù)碼管顯示</p><p><b>  }</b></p><p><b>  i=0;</b></p><p><b>  TR0=1;</

60、b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p>  delayms(100);</p>&l

61、t;p>  if(key1==0)</p><p><b>  {</b></p><p>  while(!key1);</p><p>  TR0=0; //關(guān)定時器0</p><p><b>  i++;</b></p><p><b>  if(i=

62、=7)</b></p><p><b>  {</b></p><p><b>  i=1;</b></p><p>  /* TH0=0x4B; //初始化定時器0</p><p><b>  TL0=0xFF;</b></p><p>

63、<b>  time=0;</b></p><p><b>  TR0=1;*/</b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p>

64、<p><b>  if(i!=0)</b></p><p><b>  {</b></p><p>  for(flash=0;flash<3;flash++) {</p><p>  Write7219(i,-1);</p><p>  delayms(20000);<

65、/p><p>  Write7219(i,sj[i]);</p><p>  delayms(20000); }</p><p>  if(key2==0) //增加鍵</p><p><b>  {</b></p><p>  delayms(100); </p><p&g

66、t;  if(key2==0) </p><p><b>  {</b></p><p>  while(!key2);// 確認(rèn)釋放</p><p><b>  switch(i)</b></p><p><b>  {</b></p><p>

67、;  case 1://秒個位加一</p><p><b>  {</b></p><p><b>  sj[1]++;</b></p><p>  if(sj[1]==10)</p><p><b>  sj[1]=0;</b></p><p

68、><b>  } break;</b></p><p>  case 2://秒十位加一</p><p><b>  {</b></p><p><b>  sj[2]++;</b></p><p>  if(sj[2]==6)</p><

69、;p><b>  sj[2]=0;</b></p><p><b>  } break;</b></p><p>  case 3://分個位加一</p><p><b>  {</b></p><p><b>  sj[3]++;</b&g

70、t;</p><p>  if(sj[3]==10)</p><p><b>  sj[3]=0;</b></p><p><b>  } break;</b></p><p>  case 4://分十位加一</p><p><b>  {</

71、b></p><p><b>  sj[4]++;</b></p><p>  if(sj[4]==6)</p><p><b>  sj[4]=0;</b></p><p><b>  } break;</b></p><p>  case 5:

72、//十個位加一</p><p><b>  {</b></p><p><b>  sj[5]++;</b></p><p>  if(sj[5]==10)</p><p><b>  sj[5]=0;</b></p><p><b&

73、gt;  } break;</b></p><p>  case 6://時十位加一</p><p><b>  {</b></p><p><b>  sj[6]++;</b></p><p>  if(sj[6]==3)</p><p><

74、b>  sj[6]=0;</b></p><p><b>  } break;</b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p>

75、<p>  if(key3==0)</p><p><b>  {</b></p><p>  delayms(100); </p><p>  if(key3==0)</p><p><b>  {</b></p><p>  while(!key3);<

76、;/p><p><b>  switch(i)</b></p><p><b>  {</b></p><p>  case 1://秒個位減一</p><p><b>  {</b></p><p><b>  sj[1]--;&l

77、t;/b></p><p>  if(sj[1]==-1)</p><p><b>  sj[1]=9; </b></p><p><b>  }break; </b></p><p>  case 2://秒十位減一</p><p><b> 

78、 {</b></p><p><b>  sj[2]--;</b></p><p>  if(sj[2]==-1)</p><p><b>  sj[2]=5;</b></p><p><b>  } break;</b></p><p> 

79、 case 3://分個位減一</p><p><b>  {</b></p><p><b>  sj[3]--;</b></p><p>  if(sj[3]==-1)</p><p><b>  sj[3]=9;</b></p><p&g

80、t;<b>  } break;</b></p><p>  case 4://分十位減一</p><p><b>  {</b></p><p><b>  sj[4]--;</b></p><p>  if(sj[4]==-1)</p><

81、p><b>  sj[4]=5;</b></p><p><b>  } break;</b></p><p>  case 5://時個位減一</p><p><b>  {</b></p><p><b>  sj[5]--;</b>

82、;</p><p>  if(sj[5]==-1)</p><p><b>  sj[5]=9;</b></p><p><b>  } break;</b></p><p>  case 6://是十位減一</p><p><b>  {</b

83、></p><p><b>  sj[6]--;</b></p><p>  if(sj[6]==-1)</p><p><b>  sj[6]=2;</b></p><p><b>  } break;</b></p><p><b>

84、  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main

85、(void)</p><p><b>  {</b></p><p>  uchar i,k=0; </p><p>  Initial();</p><p><b>  Init();</b></p><p>  //MAX7219初始化</p><p

86、><b>  while(1)</b></p><p><b>  { </b></p><p>  keyscan();//時間顯示和進(jìn)位</p><p>  if(sj[1]==10){</p><p><b>  sj[1]=0;</b></p&g

87、t;<p><b>  sj[2]++;</b></p><p>  if(sj[2]==6){</p><p><b>  sj[2]=0;</b></p><p><b>  sj[3]++;</b></p><p>  if(sj[3]==10){</

88、p><p><b>  sj[3]=0;</b></p><p><b>  sj[4]++;</b></p><p>  if(sj[4]==6){</p><p><b>  sj[4]=0;</b></p><p><b>  sj[5]++

89、;</b></p><p>  if(sj[5]==10){</p><p><b>  sj[5]=0;</b></p><p><b>  sj[6]++;</b></p><p><b>  }</b></p><p><b>

90、;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(sj[6]==2&&sj[5]==4){</p><p>&l

91、t;b>  sj[6]=0;</b></p><p><b>  sj[5]=0;</b></p><p><b>  }</b></p><p>  for(i=1;i<7;i++)</p><p><b>  {</b></p><

92、;p>  Write7219(i,sj[i]);//數(shù)碼管顯示</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void time0() interrupt 1</p&

93、gt;<p><b>  {</b></p><p><b>  TH0=0x4B;</b></p><p>  TL0=0xFF;</p><p><b>  time++;</b></p><p>  if(time==20){</p><

94、;p><b>  time=0;</b></p><p><b>  sj[1]++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  第五章 心得與體會</b&g

95、t;</p><p>  做了兩周的單片機(jī)課程設(shè)想,我有了很多的領(lǐng)會和感想。</p><p>  由于我們這學(xué)期學(xué)習(xí)的是微機(jī)原理,沒有學(xué)習(xí)單片機(jī)。所以這次這次課程設(shè)計(jì)對我們來說還是有一定的難度的。特別是在我們調(diào)試時,中間出現(xiàn)了一個問題我們怎么找都找不到。由于我們在宿舍編好程序,到實(shí)驗(yàn)室只需要粘貼上去就行了,當(dāng)我們編譯運(yùn)行的時候總是出現(xiàn)有不可編譯的字符的錯誤提示。我們不管怎么找都沒有辦法解決

96、這個問題。這個困擾了我們很長時間,最后實(shí)在想不出解決的辦法就請教直到我們試驗(yàn)的學(xué)長。原來使我們復(fù)制粘貼的時候把一個注釋的漢字一起粘貼到里面,而在程序里他卻被隱藏了。就這樣一個的小小的錯誤卻花費(fèi)了我們那么久的時間,這也說明了編程的需要的細(xì)心和耐心。不能絲毫的粗心大意和懈怠。還有一個就是我們再往單片機(jī)里下程序的問題總是出現(xiàn)無法加載的信息,不管怎么樣,程序總是下不到單片機(jī)里面去,對于這一點(diǎn)我們沒有很好的辦法解決,有時候只能通過更換單片機(jī)來解決

97、這個問題。也許這對于我們以后對單片機(jī)的學(xué)習(xí)有了一個提示,要通過以后的學(xué)習(xí)解決這個問題。通過這次的課程設(shè)計(jì)作品的制作讓我對單片機(jī)的理論有了更加深入的了解,同時在具體的制作過程中我們發(fā)現(xiàn)現(xiàn)在書本上的知識與實(shí)際的應(yīng)用存在著不小的差距,書本上的知識很多都是理想化后的結(jié)論,忽</p><p>  作為一名自動化專業(yè)的大三學(xué)生,我覺得做單片機(jī)課程設(shè)計(jì)是十分有意義的,而且是十分必要的。在已度過的大學(xué)時間里,我們大多數(shù)接觸的是專

98、業(yè)課。我們在課堂上掌握的僅僅是專業(yè)課的理論知識,如何去鍛煉我們的實(shí)踐能力?如何把我們所學(xué)的專業(yè)基礎(chǔ)課理論知識運(yùn)用到實(shí)踐中去呢?我想做類似的課程設(shè)計(jì)就為我們提供了良好的實(shí)踐平臺。</p><p>  最后,要做好一個課程設(shè)計(jì),就必須做到:在設(shè)計(jì)程序之前,對所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個系統(tǒng)的了解,知道該單片機(jī)內(nèi)有哪些資源;要有一個清晰的思路和一個完整的軟件流程圖;在設(shè)計(jì)程序時,不能妄想一次就將整個程序設(shè)計(jì)好,反復(fù)修改、

99、不斷改進(jìn)是程序設(shè)計(jì)的必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,一個程序的完美與否不僅僅是實(shí)現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設(shè)計(jì)課程過程中遇到問題是很正常德,但我們應(yīng)該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]DVCC-DJ4電機(jī)控制機(jī)電

100、一體化實(shí)驗(yàn)儀使用說明書.浙江:啟東計(jì)算機(jī)廠有限公司,2006.</p><p>  [2] 劉全忠.匯編語言實(shí)用程序.天津:天津大學(xué)出版社,1991.6</p><p>  [3]劉書明.高性能模數(shù)與數(shù)模轉(zhuǎn)換器件.西安:西安電子科技大學(xué)出版社,2000.</p><p>  [4]李朝青.單片機(jī)&DSP外圍數(shù)字IC技術(shù)手冊.北京:北京航空航天大學(xué)出版社,20

101、03</p><p>  [5] 周荷琴.微型計(jì)算機(jī)原理與接口技術(shù).合肥:中國科學(xué)技術(shù)大學(xué)出版社,2004.12</p><p>  [6]劉樂善.微型計(jì)算機(jī)接口技術(shù)及應(yīng)用.武漢:華中科技大學(xué)出版社,2004.</p><p>  [7]莫力.Protel電路設(shè)計(jì).北京:國防工業(yè)出版社,2005.1</p><p>  [8]楊宗德,Prot

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論