版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 微機原理及匯編語言</b></p><p><b> 課程設(shè)計報告</b></p><p><b> 目 錄</b></p><p> 第一章 微機應(yīng)用系統(tǒng)課程設(shè)計的目的及意義3</p><p> 1.1 課程設(shè)計的要求及目的
2、3</p><p> 1.2 課程設(shè)計的內(nèi)容3</p><p> 1.3 課程在教學計劃中的地位和作用3</p><p> 第二章 總體設(shè)計方案5</p><p> 2.1 設(shè)計思想5</p><p> 第三章 硬件設(shè)計6</p><p> 3.1 硬件設(shè)計概要
3、6</p><p> 3.2 芯片及其功能說明6</p><p> 3.2.1 單片機及其功能說明6</p><p> 3.2.2 MAX7219及其功能說明9</p><p> 3.3 硬件電路設(shè)計系統(tǒng)原理圖及其說明11</p><p> 第四章 軟件設(shè)計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 時鐘進位運行規(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> 參考文獻35</b></p><p> 第一章 微機應(yīng)用系統(tǒng)課程設(shè)計的目的及意義</p><p> 1.1 課程設(shè)計的要求及目的</p><
6、;p> 以單片機為控制核心的智能電子鐘以時間準、功能強、外形美而越來越受到人們的青睞。本實驗通過設(shè)計一個智能電子鐘,旨在使學生能夠做到以下幾點。</p><p> l.了解智能電子鐘的功能特點與工作原理。</p><p> 2.掌握以單片機為核心實現(xiàn)電子鐘功能的思路和方法。</p><p> 3.進一步掌握多位數(shù)碼管顯示的原理和接口方法。</p&
7、gt;<p> 1.2 課程設(shè)計的內(nèi)容</p><p> ?。?)編程語言為C語言;</p><p> ?。?)基于單片機的硬件電路設(shè)計與調(diào)試;</p><p> ?。?)從鍵盤上輸入當前時間,格式為“XX(小時):XX(分):XX(秒),以此為起點,每秒刷新一次,1秒鐘延遲方式采用軟件方式并用子程序編寫或者定時器實現(xiàn),主程序用于顯示時間結(jié)果和調(diào)用
8、子程序,由于軟件延遲產(chǎn)生的誤差每小時調(diào)整一次,保證每小時誤差不超過0.1秒。</p><p> 1.3 課程在教學計劃中的地位和作用</p><p> 《微機應(yīng)用系統(tǒng)設(shè)計與綜合實驗》課程是測控技術(shù)專業(yè)本科生必修的一門技術(shù)基礎(chǔ)課程。通過該課程的學習使學生對微機系統(tǒng)有一個全面的了解、掌握常規(guī)芯片的使用方法、掌握簡單微型計算機應(yīng)用系統(tǒng)軟硬的設(shè)計方法。為了使我們微機應(yīng)用課程設(shè)計目標更明確,要
9、求更具體,學生收獲更大,我們特編寫課程設(shè)計任務(wù)書,學生可根據(jù)本人的愛好任選其中一個課題,要求獨立完成課題,寫出課程設(shè)計說明書,設(shè)計出電路原理圖,說明工作原理,畫出電路板圖,編寫程序及程序流程圖。希望同學認真閱讀本任務(wù)書,認真查閱資料與上機調(diào)試,圓滿完成課程設(shè)計。</p><p> 通過課程設(shè)計進一步鍛煉同學們在微型計算機應(yīng)用方面的實際工作能力。計算機科學在應(yīng)用上得到飛速發(fā)展,因此,學習這方面的知識必須緊密聯(lián)系實
10、際:掌握這方面的知識更要強調(diào)解決實際問題的能力。同學們要著重學會面對一個實際問題,如何去自己收集資料,如何自己去學習新的知識,如何自己去制定解決問題的方案并通過實踐不斷地去分析和解決前進道路上的一切問題,最終到達勝利的彼岸。</p><p> 第二章 總體設(shè)計方案</p><p><b> 2.1 設(shè)計思想</b></p><p>
11、要完成本實驗任務(wù)要求的功能,可以將系統(tǒng)分為以下幾個部分來設(shè)計:定時器/計數(shù)器電路、時間及功能設(shè)置電路、時間顯示電路等。其中,定時器/計數(shù)器電路是整個電子鐘設(shè)計的基礎(chǔ)。一般都是用定時/計數(shù)器來產(chǎn)生定時中斷信號(例如定時時間間隔為1/100s),然后通過軟件計數(shù)器來相繼獲得實時時鐘的秒、分、時等時間值。</p><p> 實現(xiàn)智能化電子鐘的軟件主要由主程序和中斷服務(wù)程序兩模塊組成。</p><p
12、> 在主程序中,除了完成對系統(tǒng)的初始化和中斷向量的設(shè)置外,需要對各種軟件時間計數(shù)器進行查詢、比較和判斷,并根據(jù)判斷結(jié)果發(fā)出各種控制信號,以完成時鐘的顯示操作。</p><p> 在定時中斷服務(wù)程序中,需要設(shè)計1/100s計數(shù)器,秒個位、秒十位計數(shù)器,分個位、分十位計數(shù)器,時個位、時十位計數(shù)器以及由鍵盤設(shè)置的各定時時間計數(shù)器和各作息時間計數(shù)器等等,并對各計數(shù)器酌情作加1計數(shù)。然后,由主程序來完成對各種計數(shù)
13、器內(nèi)容的查詢。</p><p><b> 注意事項:</b></p><p> 向定時器通道寫計數(shù)初值時,無論以二進制還是十進制形式寫入,如果其值超過255,需分兩次分別寫入計數(shù)器的高、低字節(jié),否則只需寫一次。究竟寫一次還是兩次,要在寫初值之前通過寫控制字來設(shè)置。</p><p><b> 第三章 硬件設(shè)計</b>
14、</p><p> 3.1 硬件設(shè)計概要</p><p> 這次做的是單片機時鐘程序設(shè)計,顧名思義,首先應(yīng)該用到的是單片機。我們用單片機來驅(qū)動程序,完成程序的運行。由于我們以前沒有學過單片機這方面的知識,我們運用起來比較陌生,只能是一邊學一邊用,所以做的設(shè)計比較簡單,只有最基本的時鐘功能和校準功能。當然既然是時鐘,就少不了數(shù)碼管,這還要用到一片7219芯片來驅(qū)動數(shù)碼管,使它顯示相應(yīng)的
15、時間。</p><p> 這次我們的課程設(shè)計,主要目的在于熟悉單片機的原理和應(yīng)用。由于時鐘設(shè)計,所以相對的硬件設(shè)計較少且連線比較簡單,這里不再詳細介紹。</p><p> 3.2 所用到的芯片及其各自功能說明</p><p> 3.2.1單片機及其功能說明</p><p> 這次課程設(shè)計的主要目的就是熟悉單片機,下面我們先就單片機的
16、一些功能加以介紹。</p><p> 首先我們來連接一下單片機的引腳圖,如果,具體功能在下面都有介紹。</p><p> 單片機的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單片機引腳圖及引腳功能〉</p><p> 拿到一塊芯片,想要使用它,首先必須要知道怎樣連線,我們用的一塊稱之為89C51的芯片,下面我們就看一下如何給它連線。</p><p> 1、 電源:這當然是必不可少
21、的了。單片機使用的是5V電源,其中正極接40管腳,負極(地)接20管腳。 2、 振蒎電路:單片機是一種時序電路,必須供給脈沖信號才能正常工作,在單片機內(nèi)部已集成了振蕩器,使用晶體振蕩器,接18、19腳。只要買來晶體震蕩器,電容,連上就能了,按圖1接上即可。 3、 復(fù)位管腳:按圖1中畫法連好,至于復(fù)位是何含義及為何需要復(fù)要復(fù)位,在單片機功能中介紹。 4、 EA管腳:EA管腳接到正電源端。 至此,一個單片機就接好,通上電,單片機就開始
22、工作了。</p><p> 我們的第一個任務(wù)是要用單片機點亮一只發(fā)光二極管LED,顯然,這個LED必須要和單片機的某個管腳相連,不然單片機就沒法控制它了,那么和哪個管腳相連呢?單片機上除了剛才用掉的5個管腳,還有35個,我們將這個LED和1腳相連。(見圖1,其中R1是限流電阻)</p><p> 按照這個圖的接法,當1腳是高電平時,LED不亮,只有1腳是低電平時,LED才發(fā)亮。因此要1
23、腳我們要能夠控制,也就是說,我們要能夠讓1管腳按要求變?yōu)楦呋虻碗娖健<慈晃覀円刂?腳,就得給它起個名字,總不能就叫它一腳吧?叫它什么名字呢?設(shè)計51芯片的INTEL公司已經(jīng)起好了,就叫它P1.0,這是規(guī)定,不能由我們來更改。</p><p> 3.2.2 MAX7219及其功能說明</p><p> 設(shè)計題目做的是數(shù)字時鐘,首先應(yīng)該有數(shù)碼管來顯示相應(yīng)的時間,這要用到一片7219芯片
24、來驅(qū)動所用到的數(shù)碼管。下面我們就7219的功能做一些簡單的介紹。</p><p> MAX7219是MAXIM公司生產(chǎn)的串行輸入/輸出共陰極數(shù)碼管顯示驅(qū)動芯片,一片MAX7219可驅(qū)動8個7段(包括小數(shù)點共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ù)輸出端,用于級連擴展</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ù)點驅(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è)計系統(tǒng)原理圖及其說明</p><p> 由于第一次使用單片機,所做的課程設(shè)計相對比較簡單,只用到以上兩片芯片,其具體硬件電路設(shè)計系統(tǒng)原理圖如下圖所示:</p><p> 基于硬件的設(shè)計相對比較
29、簡單,因為我們做的都是最簡單的功能,沒有什么多余的附加功能,所以不管是從編程還是軟件設(shè)計方面都相對比較簡單。只需要在電腦用C語言完成相應(yīng)的功能,把程序下載到單片機,用單片機來實現(xiàn)相應(yīng)的功能。用單片機的程序來驅(qū)動7219,使數(shù)碼管顯示相應(yīng)的時間。硬件連線的時候要注意單片機應(yīng)與試驗箱共地,否則數(shù)碼管不會顯示時間。</p><p><b> 第四章 軟件設(shè)計</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ū)動;時鐘進位部分;調(diào)整時間部分;延時函數(shù)及去抖
31、部分。下面我們對各個部分分別加以說明。</p><p> 4.2.1 MAX7219驅(qū)動</p><p> 對于時鐘電路的設(shè)計我們首先做的是數(shù)碼管驅(qū)動芯片7219。通過7219的驅(qū)動,是數(shù)碼管能顯示通過軟件設(shè)置的時間。電路原理圖如下圖,MAX7219與單片機的連接只需要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時鐘運行進位規(guī)則</p><p> 這一部分是我們設(shè)計的主要部分,主要完成時鐘的進位和正常的時間顯示問題。我們定義了一個長度為六的數(shù)組,分別
33、用來表示時鐘的時、分、秒的個位和十位。這當中主要考慮的就是時間的進位問題以及十、分、秒十位和各位的進制問題。其中時、分、秒的個位都是十進制。而十位是六進制。當分、秒的十位為六而個位為零的時候要同時清零,已達到時、分整體六十進制。這對于軟件編程來說還是比較簡單的,只需要用if語句就可以完成。這主要需要注意的就是時分秒的同時清零問題,讓它完成時鐘的具體功能。具體的程序后面源程序清單中會有介紹。</p><p> 4
34、.2.3時間調(diào)整部分</p><p> 這部分主要做的是時間的初始化問題以及時間的調(diào)整問題。由于用的是51單片機,沒有辦法連接電腦的鍵盤,所以時間鍵盤的初始化只能用按鈕來代替。由于他和時間的調(diào)整問題屬于一個功能,所以放在了一起進行編程,這樣可以簡化程序,變得更加容易理解同時便于調(diào)試。在這一個功能我們設(shè)置了四個功能鍵。一個用來管理中斷,用來關(guān)和開中斷,方便我們對時間進行調(diào)整。一個用來循環(huán)調(diào)整的哪一位,當處于調(diào)整的
35、位是,數(shù)碼管所對應(yīng)的時間位的下面會出現(xiàn)一個亮點進行提示。另外兩個就是負責對時間進行調(diào)整,一個是加位調(diào)整,一個是減位調(diào)整。具體的實現(xiàn)問題用了兩個switch語句,來確認有鍵按下了時候就進行加一和減一的調(diào)整。具體的程序后面源程序清單中會有介紹。</p><p><b> 4.2.4鍵盤去抖</b></p><p> 這個部分相對比較簡單,延時函數(shù)主要是確定時間的精度問
36、題。而調(diào)整時間是按鍵的去抖問題主要就是利用延時函數(shù)。這里不在詳細介紹,后面的源程序中會有詳細的講解。</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; //暫?;蜻\行</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> /*********************單片機初始化**************************/</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);// 確認釋放</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();//時間顯示和進位</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> 做了兩周的單片機課程設(shè)想,我有了很多的領(lǐng)會和感想。</p><p> 由于我們這學期學習的是微機原理,沒有學習單片機。所以這次這次課程設(shè)計對我們來說還是有一定的難度的。特別是在我們調(diào)試時,中間出現(xiàn)了一個問題我們怎么找都找不到。由于我們在宿舍編好程序,到實驗室只需要粘貼上去就行了,當我們編譯運行的時候總是出現(xiàn)有不可編譯的字符的錯誤提示。我們不管怎么找都沒有辦法解決
96、這個問題。這個困擾了我們很長時間,最后實在想不出解決的辦法就請教直到我們試驗的學長。原來使我們復(fù)制粘貼的時候把一個注釋的漢字一起粘貼到里面,而在程序里他卻被隱藏了。就這樣一個的小小的錯誤卻花費了我們那么久的時間,這也說明了編程的需要的細心和耐心。不能絲毫的粗心大意和懈怠。還有一個就是我們再往單片機里下程序的問題總是出現(xiàn)無法加載的信息,不管怎么樣,程序總是下不到單片機里面去,對于這一點我們沒有很好的辦法解決,有時候只能通過更換單片機來解決
97、這個問題。也許這對于我們以后對單片機的學習有了一個提示,要通過以后的學習解決這個問題。通過這次的課程設(shè)計作品的制作讓我對單片機的理論有了更加深入的了解,同時在具體的制作過程中我們發(fā)現(xiàn)現(xiàn)在書本上的知識與實際的應(yīng)用存在著不小的差距,書本上的知識很多都是理想化后的結(jié)論,忽</p><p> 作為一名自動化專業(yè)的大三學生,我覺得做單片機課程設(shè)計是十分有意義的,而且是十分必要的。在已度過的大學時間里,我們大多數(shù)接觸的是專
98、業(yè)課。我們在課堂上掌握的僅僅是專業(yè)課的理論知識,如何去鍛煉我們的實踐能力?如何把我們所學的專業(yè)基礎(chǔ)課理論知識運用到實踐中去呢?我想做類似的課程設(shè)計就為我們提供了良好的實踐平臺。</p><p> 最后,要做好一個課程設(shè)計,就必須做到:在設(shè)計程序之前,對所用單片機的內(nèi)部結(jié)構(gòu)有一個系統(tǒng)的了解,知道該單片機內(nèi)有哪些資源;要有一個清晰的思路和一個完整的軟件流程圖;在設(shè)計程序時,不能妄想一次就將整個程序設(shè)計好,反復(fù)修改、
99、不斷改進是程序設(shè)計的必經(jīng)之路;要養(yǎng)成注釋程序的好習慣,一個程序的完美與否不僅僅是實現(xiàn)功能,而應(yīng)該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設(shè)計課程過程中遇到問題是很正常德,但我們應(yīng)該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。</p><p><b> 參考文獻</b></p><p> [1]DVCC-DJ4電機控制機電
100、一體化實驗儀使用說明書.浙江:啟東計算機廠有限公司,2006.</p><p> [2] 劉全忠.匯編語言實用程序.天津:天津大學出版社,1991.6</p><p> [3]劉書明.高性能模數(shù)與數(shù)模轉(zhuǎn)換器件.西安:西安電子科技大學出版社,2000.</p><p> [4]李朝青.單片機&DSP外圍數(shù)字IC技術(shù)手冊.北京:北京航空航天大學出版社,20
101、03</p><p> [5] 周荷琴.微型計算機原理與接口技術(shù).合肥:中國科學技術(shù)大學出版社,2004.12</p><p> [6]劉樂善.微型計算機接口技術(shù)及應(yīng)用.武漢:華中科技大學出版社,2004.</p><p> [7]莫力.Protel電路設(shè)計.北京:國防工業(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機原理課程設(shè)計-電子鐘
- 微機原理-電子鐘課程設(shè)計
- 【微機原理課程設(shè)計】電子鐘的設(shè)計
- 微機原理課程設(shè)計----簡單電子鐘設(shè)計
- 微機原理-多功能電子鐘課程設(shè)計
- 微機原理課程設(shè)計---電子鐘的設(shè)計報告
- 微機接口課程設(shè)計(電子鐘)
- 課程設(shè)計-- 智能電子鐘
- 微機接口電子鐘課程設(shè)計報告
- 電子鐘課程設(shè)計報告——微機原理與接口技術(shù)
- 電子鐘課程設(shè)計----數(shù)字電子鐘的設(shè)計
- eda電子鐘課程設(shè)計----電子鐘的設(shè)計
- 電子鐘課程設(shè)計
- 電子鐘課程設(shè)計--多功能電子鐘
- 電子鐘課程設(shè)計
- 電子鐘課程設(shè)計
- 單片機課程設(shè)計---智能電子鐘
- 智能時鐘課程設(shè)計--智能電子鐘(lcd顯示)
- 單片機原理課程設(shè)計--電子鐘
- 單片機課程設(shè)計-智能電子鐘
評論
0/150
提交評論