單片機電子時鐘的設(shè)計 單片機課程設(shè)計_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  在今天,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品是滲透到了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 現(xiàn)代生活的人們非常的重視時間觀念,對于那些對時間把握非常嚴(yán)格和準(zhǔn)確的人或事來說,時間的不準(zhǔn)確會帶來非常大的麻煩,所以以數(shù)碼管

2、為顯示器的時鐘比指針式的時鐘表現(xiàn)出了很大的優(yōu)勢。數(shù)碼管顯示的時間簡單明了而且讀數(shù)快、時間準(zhǔn)確顯示到秒。而機械式的依賴于晶體震蕩器,可能會導(dǎo)致誤差。數(shù)字鐘是采用數(shù)字電路實現(xiàn)對“時”、“分”、“秒”數(shù)字顯示的計時裝置。數(shù)字鐘的精度、穩(wěn)定度遠(yuǎn)遠(yuǎn)超過老式機械鐘。在這次設(shè)計中,我們采用LED 數(shù)碼管顯示時、分、秒,以24 小時計時方式,根據(jù)數(shù)碼管動態(tài)顯示原理來進行顯示,用12MHz 的晶振產(chǎn)生振蕩脈沖,定時器計數(shù)。在此次設(shè)計中,電路具有顯示時間的

3、其本功能,還可以實現(xiàn)對時間的調(diào)整。數(shù)字鐘是其小巧,價格低廉,走時精度高,使用方便,功能多,便于集成化而受廣大消費的喜愛,因此得到了廣泛的使用。 </p><p>  關(guān)鍵字:數(shù)字電子鐘;單片機 </p><p><b>  目 錄</b></p><p><b>  摘 要1</b></p><p&g

4、t;<b>  第1章 緒論1</b></p><p><b>  1.1研究背景1</b></p><p>  1.1 選題的目的和意義1</p><p>  1.2 本課程設(shè)計的主要內(nèi)容2</p><p>  第2章 單片機電子時鐘設(shè)計方案設(shè)計3</p><p>

5、;  2.1 設(shè)計方案3</p><p>  2.1.1 計時方案3</p><p>  2.2.2 顯示方案3</p><p>  2.2.3 鍵盤的基本原理4</p><p>  2.3.4 LED顯示器的基本結(jié)構(gòu)與原理7</p><p>  第3章 硬件設(shè)計9</p><p>

6、  3.1 硬件電路9</p><p>  3.2 數(shù)字鐘的程序設(shè)計9</p><p>  3.2.1 系統(tǒng)軟件設(shè)計流程圖10</p><p>  3.2.2 主程序10</p><p>  3.2.3 定時器中斷子程序11</p><p>  3.2.4 LED顯示子程序12</p><

7、;p>  3.2.5 按鍵控制子程序12</p><p><b>  第4章 結(jié)論14</b></p><p><b>  參考文獻15</b></p><p>  附錄1 軟件清單16</p><p><b>  第1章 緒論</b></p>&l

8、t;p><b>  1.1研究背景</b></p><p>  20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時間。忘記了要做的事情,當(dāng)事情不是很重要的時候,這

9、種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。 目前,單片機正朝著高性能和多品種方向發(fā)展趨勢將是進一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面發(fā)展。下面是單片機的主要發(fā)展趨勢。單片機應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計思想和設(shè)計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳

10、統(tǒng)控制技術(shù)的一次革命。 單片機模塊中最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。 數(shù)字鐘已成為人們?nèi)粘I钪校?lt;/p><p>  1.1 選題的目的和意義</p><p>  單片機課程設(shè)計是單片機課程后續(xù)學(xué)習(xí)階段的一個重要的實踐學(xué)習(xí)環(huán)節(jié),它既能增強學(xué)生對所學(xué)課程

11、內(nèi)容的理解和綜合,也能培養(yǎng)學(xué)生的綜合應(yīng)用及設(shè)計能力,同時,還可以拓寬課程內(nèi)容和培養(yǎng)創(chuàng)新意識。數(shù)字鐘是采用數(shù)字電路實現(xiàn)對.時,分,秒.數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程

12、序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴大其應(yīng)用,有著非常現(xiàn)實的意義。 </p><p>  1.2 本課程設(shè)計的主要內(nèi)容</p><p>  本設(shè)計電子時鐘主要功能為:</p><p><b>  自動計時功能。</b></p&

13、gt;<p>  能顯示計時時間,顯示效果良好。</p><p>  有校時功能,能對時間進行校準(zhǔn)。</p><p><b>  擴展功能:</b></p><p>  具有整點報時功能,在整點時使用蜂鳴器進行報時。</p><p>  具有定時鬧鐘功能,能設(shè)定定時鬧鐘,在時間到時能使蜂鳴器鳴叫。</

14、p><p>  第2章 單片機電子時鐘設(shè)計方案設(shè)計</p><p><b>  2.1 設(shè)計方案</b></p><p>  單片機電子時鐘方案選擇主要涉及兩個方面:計時方案和顯示方案。</p><p>  2.1.1 計時方案</p><p>  單片機電子時鐘計時有兩種方法:第一種是通過單片機內(nèi)部

15、的定時器/計數(shù)器,采用軟件編程來實現(xiàn)時鐘計時,這種實現(xiàn)的時鐘一般稱為軟時鐘,這種方法的硬件線路簡單,系統(tǒng)的功能一般與軟件設(shè)計相關(guān),通常用在對時間精度要求不高的場合;第二種是采用專用的硬件時鐘芯片計時,這種實現(xiàn)的時鐘一般稱為硬時鐘。專用的時鐘芯片功能比較強大,除了自動實現(xiàn)基本計時外,一般還具有日歷和閏年補償?shù)裙δ埽嫊r準(zhǔn)確,軟件編程簡單,但硬件成本相對較高,通常用在對時鐘精度要求較高的場合。</p><p>  2

16、.2.2 顯示方案</p><p>  對于電子時鐘而言,顯示是另一個重要的環(huán)節(jié)。顯示通常采用兩種方式:LED數(shù)碼管顯示和LCD液晶顯示。其中LED數(shù)碼管顯示亮度高,顯示內(nèi)容清晢,根據(jù)具體的連接方式可分為靜態(tài)顯示和動態(tài)顯示,在多個數(shù)碼管時一般采用動態(tài)顯示,動態(tài)顯示時須要占用CPU的大量時間來執(zhí)行動態(tài)顯示程序,顯示效果往往和顯示程序的執(zhí)行相關(guān)。LCD液晶顯示一般能顯示的信息多,顯示效果好,而且液晶顯示器一般都帶控制

17、器,顯示過程由自帶的控制器控制,不須要CPU參與,但液晶顯示器造價相對較高。</p><p>  為了便于比較與學(xué)習(xí),這里給出兩種設(shè)計方案,一種是軟件計時LED數(shù)碼管顯示的單片機電子時鐘,另一種是硬件定時LCD液晶顯示的單片機電子時鐘。軟件計時LED數(shù)碼管顯示的單片機電子時鐘總體設(shè)計框圖如圖2-1所示。硬件定時LCD液晶顯示的單片機電子時鐘總體設(shè)計框圖如圖2-2所示。</p><p>  

18、圖2-1 軟件計時LED顯示時鐘總體框圖</p><p>  圖2-2 硬件定時LCD顯示時鐘總體框圖</p><p>  2.2.3 鍵盤的基本原理</p><p>  鍵盤實際上是一組按鍵開關(guān)的集合,平時按鍵開關(guān)總是處于斷開狀態(tài),當(dāng)按下鍵時它才閉合,按下后可向計算機產(chǎn)生一脈沖波。按鍵開關(guān)的結(jié)構(gòu)和產(chǎn)生的波形如圖2-3所示。</p><p>

19、  (a) 鍵盤開關(guān)的結(jié)構(gòu) (b) 鍵盤產(chǎn)生的波形</p><p>  圖2-3 鍵盤開關(guān)及波形示意圖</p><p>  當(dāng)按鍵開關(guān)未按下時,開關(guān)處于斷開狀態(tài),向P1.1輸入高電平;當(dāng)按鍵開關(guān)按下時,開關(guān)處于閉合狀態(tài),向P1.1輸入低電平。因此可通過讀入P1.1的高低電平狀態(tài)來判斷按鍵開關(guān)是否按下。</p><p><

20、b> ?。?)抖動的消除</b></p><p>  在單片機應(yīng)用系統(tǒng)中,通常按鍵開關(guān)為機械式開關(guān),由于機械觸點的彈性作用,一個按鍵開關(guān)在閉合時往往不會馬上穩(wěn)定地接通,斷開時也不會馬上斷開,因而在閉合和斷開的瞬間都會伴隨著一串的抖動,如波形如圖2-4所示。按下鍵位時產(chǎn)生的抖動稱為前沿抖動,松開鍵位時產(chǎn)生的抖動稱為后沿抖動。如果對抖動不作處理,會出現(xiàn)按一次鍵而輸入多次,為確保按一次鍵只確認(rèn)一次,必

21、須消除按鍵抖動。消除按鍵抖動通常有硬件消抖和軟件消抖兩種方法。</p><p>  圖2-4 抖動波形示意圖</p><p>  硬件消抖是通過在按鍵輸出電路上添加一定的硬件線路來消除抖動,一般采用R-S觸發(fā)器或單穩(wěn)態(tài)電路,圖2-5是由兩個與非門組成的R-S觸發(fā)器消抖電路。平時,沒有按鍵時,開關(guān)倒向下方,上面的與非門輸入高電平,下面的與非門輸入低電平,輸出端輸出高電平。當(dāng)按下按鍵時,開關(guān)倒

22、向上方,上面的與非門輸入低電平,下面的與非門輸入高電平,由于R-S觸發(fā)器的反饋作用,使輸出端迅速的變?yōu)榈碗娖?,而不會產(chǎn)生抖動波形,而當(dāng)按鍵松開時,開頭回到下方時也一樣,輸出端迅速的回到高電平而不會產(chǎn)生抖動波形。經(jīng)過圖中的R-S觸發(fā)器消抖后,輸出端的信號就變?yōu)闃?biāo)準(zhǔn)的矩形波。</p><p>  圖2-5 硬件消抖電路</p><p>  軟件消抖是利用延時程序消除抖動。由于抖動時間都比較短,

23、因此可以這樣處理:當(dāng)檢測到有鍵按下時,執(zhí)行一段延時程序跳過抖動,再去檢測,通過兩次檢測來識別一次按鍵,這樣就可以消除前沿抖動的影響。對于后沿抖動,由于在接收一個鍵位后,一般都要經(jīng)過一定時間再去檢測有無按鍵,這樣就自然跳過后沿抖動時間而消除后沿抖動了。當(dāng)然在第二次檢測時有可能發(fā)現(xiàn)又沒有鍵按下,這是怎么回事呢?這種情況一般是線路受到外部電路干擾使輸入端產(chǎn)生干擾脈沖,這時就認(rèn)為沒有鍵輸入。在單片機應(yīng)用系統(tǒng)中,一般都采用軟件消抖。</p&

24、gt;<p><b> ?。?)鍵盤的分類</b></p><p>  一般來說,單片機應(yīng)用系統(tǒng)的鍵盤可分為兩類:獨立式鍵盤和行列鍵盤。</p><p>  獨立式鍵盤就是各按鍵相互獨立,每個按鍵各接一根I/O接口線,每根I/O接口線上的按鍵都不會影響其他的I/O接口線。因此,通過檢測各I/O接口線的電平狀態(tài)就可以很容易地判斷出哪個按鍵被按下了。獨立式鍵

25、盤如圖2-6所示。獨立式鍵盤的電路配置靈活,軟件簡單。但每個按鍵要占用一根I/O接口線,在按鍵數(shù)量較多時,I/O接口線浪費很大。故在按鍵數(shù)量不多時,經(jīng)常采用這種形式。</p><p>  圖2-6 獨立式鍵盤結(jié)構(gòu)圖</p><p>  行列鍵盤往往又叫矩陣鍵盤。用兩組I/O接口線排列成行、列結(jié)構(gòu),一組設(shè)定為輸入,一組設(shè)定為輸出,鍵位設(shè)置在行、列線的交點上,按鍵的一端接行線,一端接列線。例如

26、,圖2-7是由4根行線和4根列線組成的44矩陣鍵盤,行線為輸入,列線為輸出,可管理44=16個鍵。矩陣鍵盤占用的I/O接口線數(shù)目少,如圖2-7中44矩陣鍵盤總共只用了8根I/O接口線,比獨立式鍵盤少了一半的I/O接口線,而且鍵位越多,情況越明顯。因此,在按鍵數(shù)量較多時,往往采用矩陣式鍵盤。矩陣鍵盤的處理一般注意兩個方面:鍵位的編碼和鍵位的識別。</p><p>  (a)二進制組合編碼

27、(b)順序排列編碼</p><p>  圖2-7 矩陣鍵盤的結(jié)構(gòu)圖</p><p>  鍵位的編碼 矩陣鍵盤的編碼通常有兩種:二進制組合編碼和順序排列編碼。</p><p> ?。?)二進制組合編碼如圖2-7(a)每一根行線有一個編碼,每一根列線也有一個編碼,圖2-7 (a)中行線的編碼從下到上分別為1、2、4、8,列線的編碼從右到左分別為1、2、4、8,每個鍵位的

28、編碼直接用該鍵位的行線編碼和列線編碼組合一起得到。圖2-7 (a)中44鍵盤從右到左,從下到上的鍵位編碼分別是:11H 、12H、14H 、18H、21H、22H 、24H 、28H、41H、42H、44H、48H、81H、82H、84H、88H。這種編碼過程簡單,但得到的編碼復(fù)雜,不連續(xù),處理起來不方便。</p><p> ?。?)順序排列編碼如圖2-7 (b),每一行有一個行首碼,每一列有一個列號,圖2-7(

29、b)中4行的行首碼從下到上分別為0、4、8、12,4列的列號從右到左分別是0、1、2、3。每個鍵位的編碼用行首碼加列號得到,即:編碼=行首碼+列號。這種編碼雖然編碼過程復(fù)雜,但得到的編碼簡單,連續(xù),處理起來方便,現(xiàn)在矩陣鍵盤一般都采用順序編碼的方法。 </p><p><b>  (3)鍵位的識別</b></p><p>  矩陣式鍵盤鍵位的識別可分為兩步:第一步是首

30、先檢測鍵盤上是否有鍵按下;第二步是識別哪一個鍵按下。</p><p>  檢測鍵盤上是否有鍵按下的處理方法是:將列線送入全掃描字,讀入行線的狀態(tài)來判別。其具體過程如下:P2口低四位輸出都為低電平,然后讀連接行線的P1口低四位,如果讀入的內(nèi)容都是高電平,說明沒有鍵按下,則不用做下一步;如果讀入的內(nèi)容不全為1,則說明有鍵按下,再做第二步,識別是哪一個鍵按下。識別鍵盤中哪一個鍵按下的處理方法是:將列線逐列置成低電平,檢

31、查行輸入狀態(tài),稱為逐列掃描。其具體過程如下:從P2.0開始,依次輸出“0”,置對應(yīng)的列線為低電平,其它列為高電平,然后從P1低四位讀入行線狀態(tài)。在掃描某列時,如果讀入的行線全為“1”,則說明按下的鍵不在此列;如果讀入的行線不全為“1”,則按下的鍵必在此列,而且是該列與“0”電平行線相交的交點上的那個鍵。為求取編碼,在逐列掃描時,可用計數(shù)器記錄下當(dāng)前掃描列的列號,檢測到第幾行有鍵按下,就用該行的行首碼加列號得到當(dāng)前按鍵的編碼。</p

32、><p> ?。?)獨立式鍵盤與單片機的接口</p><p>  獨立式鍵盤每一個鍵用一根I/O接口線管理,電路簡單,通常用于鍵位較少的情況下。對某個鍵位的識別通過檢測對應(yīng)I/O線的高低電平來判斷,根據(jù)判斷結(jié)果直接進行相應(yīng)的處理。</p><p>  在MCS-51單片機系統(tǒng)中,獨立式鍵盤可直接用P0~P3四個并口中的I/O線來連接,連接時,如果用的是P1~P3口,因為

33、內(nèi)部帶上拉電阻,則外部可省力上拉電阻,如果用的是P0口,則須外部帶上接電阻。圖2-8是通過P1口低4位直接接4個獨立式按鍵的電路圖。直接判斷P1口低4位是否為低電平即可判斷相應(yīng)鍵是否按下。</p><p>  圖2-8 P1口接4個獨立式按鍵圖</p><p>  2.3.4 LED顯示器的基本結(jié)構(gòu)與原理</p><p>  LED數(shù)碼管顯示器是由發(fā)光二極管按一定的

34、結(jié)構(gòu)組合起來的顯示器件。在單片機應(yīng)用系統(tǒng)中通常使用的是7段或8段式LED數(shù)碼管顯示器,8段式比7段式多一個小數(shù)點。這里以8段式來介紹,單個8段式LED數(shù)碼管顯示器的外觀與引腳如圖2-9(a)所示,其中a,b,c,d,e,f,g和小數(shù)點dp為8段發(fā)光二極管,位置如圖中所示,組成一個“”形狀。</p><p>  (a) 引腳圖 (b) 共陰極

35、 (c) 共陽極</p><p>  圖2-9 8段式LED數(shù)碼管引腳與結(jié)構(gòu)</p><p>  8段發(fā)光二極管的連接有兩種結(jié)構(gòu):共陰極和共陽極。如圖2-9所示。其中,圖(b)為共陰極結(jié)構(gòu),8段發(fā)光二極管的陰極端連接在一起,陽極端分開控制,使用時公共端接地,要使哪根發(fā)光二極管亮,則對應(yīng)的陽極端接高電平;圖(b)為共陽極結(jié)構(gòu),8段發(fā)光二極管的陽極端連接在一起,陰極端分開控制,使用時公

36、共端接電源,要使哪根發(fā)光二極管亮,則對應(yīng)的陰極端接地。</p><p>  LED數(shù)碼管顯示器顯示時,公共端首先要保證有效,即共陰極結(jié)構(gòu)公共端接低電平,共陽極結(jié)構(gòu)公共端接高電平,這個過程我們稱為選通數(shù)碼管。再在另外一端送要顯示數(shù)字的編碼,這個編碼稱為字段碼,8位數(shù)碼管字段碼為8位,從高位到低位的順序依次為dp、g、f、e、d、c、b、a。如:共陰極數(shù)碼管數(shù)字“0”的字段碼為00111111B(3FH),共陽極數(shù)碼

37、管數(shù)字“1”的字段碼為11111001B(F9H),不同數(shù)字或字符其字段碼不一樣,對于同一個數(shù)字或字符,共陰極結(jié)構(gòu)和共陽極結(jié)構(gòu)的字段碼也不一樣,共陰極和共陽極的字段碼互為反碼,常見的數(shù)字和字符的共陰極和共陽極的字段碼如表5.2所示。</p><p>  表5.2 常見的數(shù)字和字符的共陰極和共陽極的字段碼</p><p><b>  第3章 硬件設(shè)計 </b><

38、/p><p><b>  3.1 硬件電路</b></p><p>  軟件計時LED數(shù)碼管顯示的時鐘的具體硬件電路如圖2-10所示,其中單片機采用應(yīng)用廣泛的AT89C51,系統(tǒng)時鐘采用12MHz的晶振,8個數(shù)碼管顯示,小時與分鐘、分鐘與秒鐘之間用短橫線間隔,采用共陽極七段式數(shù)碼管,由于并口上沒有連接其它的硬件電路,所以P0口直接作段選碼輸出端,P2口作位選碼輸出端。采用

39、簡化按鍵方式,只設(shè)定3個開關(guān)K0、K1和K2,通過P1口低3位相連。其中K0鍵為調(diào)時模式選擇鍵,K1為加1鍵,K2為減1健。</p><p>  圖2-10 軟件計時LED顯示時鐘硬件電路圖</p><p>  3.2 數(shù)字鐘的程序設(shè)計</p><p>  系統(tǒng)的軟件設(shè)計也是工具系統(tǒng)功能的設(shè)計。單片機軟件的設(shè)計主要包括執(zhí)行軟件(完成各種實質(zhì)性功能)的設(shè)計和監(jiān)控軟件的

40、設(shè)計。單片機的軟件設(shè)計通常要考慮以下幾個方面的問題: </p><p> ?。?)根據(jù)軟件功能要求,將系統(tǒng)軟件劃分為若干個相對獨立的部分,設(shè)計出合理的總體結(jié)構(gòu),使軟件開發(fā)清晰、簡潔和流程合理; </p><p> ?。?)培養(yǎng)良好的編程風(fēng)格,如考慮結(jié)構(gòu)化程序設(shè)計、實行模塊化、子程序化。既便于調(diào)試、鏈接,又便于移植和修改; </p><p> ?。?)建立正確的數(shù)學(xué)模

41、型,通過仿真提高系統(tǒng)的性能,并選取合適的參數(shù); </p><p> ?。?)繪制程序流程圖; </p><p> ?。?)合理分配系統(tǒng)資源; </p><p> ?。?)為程序加入注釋,提高可讀性,實施軟件工程; </p><p> ?。?)注意軟件的抗干擾設(shè)計,提高系統(tǒng)的可靠性。 </p><p>  3.2.1 系

42、統(tǒng)軟件設(shè)計流程圖</p><p>  這次的數(shù)字電子鐘設(shè)計用到很多子程序,它們的流程圖如下所示。 主程序是先開始,然后啟動定時器,定時器啟動后在進行按鍵檢測,檢測完后,就可以顯示時間。</p><p>  圖3-1 軟件流程圖</p><p><b>  3.2.2 主程序</b></p><p>  時間顯示是先秒個位

43、計算顯示,然后是秒十位計算顯示,再是分個位計算顯示,再然后是分十位顯示,再就是時個位計算顯示,最后是時十位顯示。定時器中斷時是先檢測1秒是否到,1秒如果到,秒單元就加1;如果沒到,就檢測1分鐘是否到,1分鐘如果到,分單元就加1;如果沒到,就檢測1小時是否到,1小時如果到,時單元就加1,如果沒到,就顯示時間。</p><p>  圖3-2 主程序流程圖</p><p>  3.2.3 定時器

44、中斷子程序</p><p>  定時器中斷時是先檢測1秒是否到,1秒如果到,秒單元就加1;如果沒到,就檢測1分鐘是否到,1分鐘如果到,分單元就加1;如果沒到,就檢測1小時是否到,1小時如果到時單元就加1,如果沒到,就顯示時間。</p><p>  3.2.4 LED顯示子程序</p><p>  時間顯示是先秒個位計算顯示,然后是秒十位計算顯示,再是分個位計算顯示,

45、再然后是分十位顯示,再就是時個位計算顯示,最后是時十位顯示。</p><p>  圖3-3 LED顯示子程序</p><p>  3.2.5 按鍵控制子程序</p><p>  按鍵處理設(shè)置為:如沒有按鍵,則時鐘正常走時。當(dāng)按K0鍵一次,時鐘暫停走動進入調(diào)小時狀態(tài),再按K0鍵一次,進入調(diào)分狀態(tài),再按K0鍵一次,回到正常走時;對于K1和K2按鍵,如果是正常走時,按K1

46、和K2不起作用,如果進入調(diào)時或調(diào)分狀態(tài),按K1可對時或分進行加1操作,小時加到24則回到0,分加到60則回到0;按K2可對時或分進行減1操作,小時減到負(fù)則回到23,分減到負(fù)則回到59。按鍵處理模塊流程如圖3-4所示。</p><p>  圖3-4 按鍵流程圖</p><p><b>  結(jié)論</b></p><p>  我在這一次數(shù)字電子鐘的設(shè)

47、計過程中,很是受益匪淺。通過對自己在大學(xué)三年時間里所學(xué)的知識的回顧,并充分發(fā)揮對所學(xué)知識的理解和對畢業(yè)設(shè)計的思考及書面表達(dá)能力,最終完成了。這為自己今后進一步深化學(xué)習(xí),積累了一定寶貴的經(jīng)驗。撰寫論文的過程也是專業(yè)知識的學(xué)習(xí)過程,它使我運用已有的專業(yè)基礎(chǔ)知識,對其進行設(shè)計,分析和解決一個理論問題或?qū)嶋H問題,把知識轉(zhuǎn)化為能力的實際訓(xùn)練。培養(yǎng)了我運用所學(xué)知識解決實際問題的能力。通過這次課程設(shè)計我發(fā)現(xiàn),只有理論水平提高了;才能夠?qū)⒄n本知識與實踐

48、相整合,理論知識服務(wù)于教學(xué)實踐,以增強自己的動手能力。這個實驗十分有意義 我獲得很深刻的經(jīng)驗。通過這次課程設(shè)計,我們知道了理論和實際的距離,也知道了理論和實際想結(jié)合的重要性,也從中得知了很多書本上無法得知的知識。我們的學(xué)習(xí)不但要立足于書本,以解決理論和實際教學(xué)中的實際問題為目的,還要以實踐相結(jié)合,理論問題即實踐課題,解決問題即課程研究,學(xué)生自己就是一個專家,通過自己的手來解決問題比用腦子解決問題更加深刻。學(xué)習(xí)就應(yīng)該采取理論與實踐結(jié)合的方

49、式,理論的問題,也就是實踐性的課題。這種做法既有助于完成理論知識的鞏固,又有助于帶動實踐,解決實</p><p><b>  參考文獻</b></p><p>  [1] 謝維成.楊加國.單片機原理與應(yīng)用及C51程序設(shè)計.北京.清華大學(xué)出版社;第二版</p><p>  [2] 童詩白.華成美.模擬電子技術(shù)基礎(chǔ).高等教育出版社.第四版</

50、p><p>  [3] 沙占友,孟志永.單片機外圍電路設(shè)計.北京:電子工業(yè)出版社,2006.6 </p><p>  [4] 顧德英,羅云林.計算機控制技術(shù).北京:北京郵電大學(xué)出版社,2009</p><p><b>  附錄1 軟件清單</b></p><p>  #include <REG52.H></

51、p><p>  unsigned char table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p>  unsigned char table2[]={0x3f,0x3f,0x40,0x3f,0x3f,0x40,0x3f,0x3f};</p><p>  unsigned char

52、 table3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};</p><p>  unsigned char i,a,b;</p><p>  sbitKEY=P1^7;</p><p>  sbitADD=P1^6;</p><p>  sbitCLK=P1^5;</p>&l

53、t;p>  sbitLLL=P3^0;</p><p>  intm=0,n=0,k=0,l=0,j=0;</p><p>  intmm=0,nn=0,kk=0;</p><p>  void DelayUs2x(unsigned char t);</p><p>  void DelayMs(unsigned char t);

54、</p><p>  /*------------------------------------------------</p><p><b>  定時器初始化子程序</b></p><p>  ------------------------------------------------*/</p><p>  

55、void Init_Timer0(void)</p><p><b>  {</b></p><p>  TMOD |= 0x01;//使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響</p><p>  //TH0=0x00;//給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出</

56、p><p>  //TL0=0x00;</p><p>  EA=1; //總中斷打開</p><p>  ET0=1; //定時器中斷打開</p><p>  TR0=1; //定時器開關(guān)打開</p><p><b>  }</b><

57、;/p><p>  void main()</p><p><b>  {</b></p><p>  Init_Timer0();</p><p><b>  P3=0x00;</b></p><p><b>  while(1)</b></p>

58、;<p><b>  {</b></p><p>  if(!KEY) //如果檢測到低電平,說明按鍵按下</p><p><b>  {</b></p><p>  DelayMs(10); //延時去抖,一般10-20ms</p><p>  if(!KEY) //再次確

59、認(rèn)按鍵是否按下,沒有按下則退出</p><p><b>  {</b></p><p>  while(!KEY);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待</p><p><b>  {</b></p><p>  mm++;//釋放則執(zhí)行需要的程序</p><p&

60、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(mm==4)</b></p><p><b>  { mm=0;}</b></p&

61、gt;<p><b>  if(mm==1)</b></p><p><b>  {</b></p><p>  if(!ADD) //如果檢測到低電平,說明按鍵按下</p><p><b>  {</b></p><p>  DelayMs(10); //延時

62、去抖,一般10-20ms</p><p>  if(!ADD) //再次確認(rèn)按鍵是否按下,沒有按下則退出</p><p><b>  {</b></p><p>  while(!ADD);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待</p><p>  { n++;//釋放則執(zhí)行需要的程序</

63、p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(!CLK) //如果檢測到低電平,說明按鍵按下</p><p><b>  {</b><

64、;/p><p>  DelayMs(10); //延時去抖,一般10-20ms</p><p>  if(!CLK) //再次確認(rèn)按鍵是否按下,沒有按下則退出</p><p><b>  {</b></p><p>  while(!CLK);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待</p>

65、<p><b>  {</b></p><p>  n--;//釋放則執(zhí)行需要的程序</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

66、;<b>  }</b></p><p><b>  if(mm==2)</b></p><p><b>  {</b></p><p>  if(!ADD) //如果檢測到低電平,說明按鍵按下</p><p><b>  {</b></p>

67、<p>  DelayMs(10); //延時去抖,一般10-20ms</p><p>  if(!ADD) //再次確認(rèn)按鍵是否按下,沒有按下則退出</p><p><b>  {</b></p><p>  while(!ADD);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待</p><p&

68、gt;<b>  {</b></p><p>  k++;//釋放則執(zhí)行需要的程序</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(!

69、CLK) //如果檢測到低電平,說明按鍵按下</p><p><b>  {</b></p><p>  DelayMs(10); //延時去抖,一般10-20ms</p><p>  if(!CLK) //再次確認(rèn)按鍵是否按下,沒有按下則退出</p><p><b>  {</b><

70、;/p><p>  while(!CLK);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待</p><p>  k--;//釋放則執(zhí)行需要的程序</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

71、/b></p><p><b>  }</b></p><p><b>  if(mm==3)</b></p><p><b>  {</b></p><p>  if(!ADD) //如果檢測到低電平,說明按鍵按下</p><p><b&

72、gt;  {</b></p><p>  DelayMs(10); //延時去抖,一般10-20ms</p><p>  if(!ADD) //再次確認(rèn)按鍵是否按下,沒有按下則退出</p><p><b>  {</b></p><p>  while(!ADD);//如果確認(rèn)按下按鍵等待按鍵釋放,沒

73、有釋放則一直等待</p><p><b>  {</b></p><p>  l++;//釋放則執(zhí)行需要的程序</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>&

74、lt;/p><p>  if(!CLK) //如果檢測到低電平,說明按鍵按下</p><p><b>  {</b></p><p>  DelayMs(10); //延時去抖,一般10-20ms</p><p>  if(!CLK) //再次確認(rèn)按鍵是否按下,沒有按下則退出</p><p>

75、;<b>  {</b></p><p>  while(!CLK);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待</p><p><b>  {</b></p><p>  l--;//釋放則執(zhí)行需要的程序</p><p><b>  }</b></p>

76、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p

77、>  P0=table2[i];//table1[i];</p><p>  P2=table3[i];</p><p>  for(a=10;a>0;a--)</p><p>  for(b=100;b>0;b--);</p><p><b>  P0=0x00;</b></p><

78、;p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  定

79、時器中斷子程序</b></p><p>  ------------------------------------------------*/</p><p>  void Timer0_isr(void) interrupt 1 using 1</p><p><b>  {</b></p><p>  

80、TH0=(65536-500)/256; //重新賦值 12M晶振計算,指令周期1uS,</p><p>  TL0=(65536-500)*256; //1mS方波半個周期500uS,即定時500次</p><p>  //溢出然后輸出端取反</p><p><b>  if(mm==0)</b></p>

81、<p><b>  {</b></p><p><b>  m++;</b></p><p>  if(m==1000)</p><p><b>  {m=0; </b></p><p><b>  n++; }</b></p>

82、<p><b>  if(n==60)</b></p><p><b>  { n=0;</b></p><p><b>  k++; }</b></p><p><b>  if(k==60)</b></p><p><b>  {

83、 k=0;</b></p><p><b>  l++; }</b></p><p><b>  if(j!=l)</b></p><p><b>  {</b></p><p><b>  if(n<5)</b></p>

84、<p><b>  {</b></p><p><b>  LLL=1;</b></p><p><b>  }else{</b></p><p><b>  LLL=0;</b></p><p><b>  j=l;</b&g

85、t;</p><p><b>  }</b></p><p><b>  }</b></p><p>  table2[0]=table1[l/10];</p><p>  table2[1]=table1[l%10];</p><p>  table2[3]=table1[

86、k/10];</p><p>  table2[4]=table1[k%10];</p><p>  table2[6]=table1[n/10];</p><p>  table2[7]=table1[n%10];</p><p><b>  }else{</b></p><p><b&g

87、t;  if(mm==1)</b></p><p><b>  {</b></p><p>  table2[0]=0x40;</p><p>  table2[1]=0x40;</p><p>  table2[3]=0x40;</p><p>  table2[4]=0x40;&l

88、t;/p><p>  table2[6]=table1[n/10];</p><p>  table2[7]=table1[n%10];</p><p><b>  }</b></p><p><b>  if(mm==2)</b></p><p><b>  {<

89、;/b></p><p>  table2[0]=0x40;</p><p>  table2[1]=0x40;</p><p>  table2[3]=table1[k/10];</p><p>  table2[4]=table1[k%10];</p><p>  table2[6]=0x40;</p&

90、gt;<p>  table2[7]=0x40;</p><p><b>  }</b></p><p><b>  if(mm==3)</b></p><p><b>  {</b></p><p>  table2[0]=table1[l/10];</p

91、><p>  table2[1]=table1[l%10];</p><p>  table2[3]=0x40;</p><p>  table2[4]=0x40;</p><p>  table2[6]=0x40;</p><p>  table2[7]=0x40;</p><p><b&g

92、t;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*------------------------------------------------</p><p>  uS延時函數(shù),含有輸入?yún)?shù) unsigned

93、char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時 長度如下 T=tx2+5 uS </p><p>  ------------------------------------------------*/</p><p>  void DelayUs2x(unsigned char t

94、)</p><p><b>  { </b></p><p>  while(--t);</p><p><b>  }</b></p><p>  /*------------------------------------------------</p><p>  

95、mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0~255 這里使用晶振12M,精確延時請使用匯編</p><p>  ------------------------------------------------*/</p><p>  void DelayMs(unsigned char t)<

96、;/p><p>  { while(t--)</p><p><b>  {</b></p><p><b>  //大致延時1mS</b></p><p>  DelayUs2x(245);</p><p>  DelayUs2x(245);</p><p

溫馨提示

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

評論

0/150

提交評論