簡易時鐘設(shè)計剖析_第1頁
簡易時鐘設(shè)計剖析_第2頁
簡易時鐘設(shè)計剖析_第3頁
簡易時鐘設(shè)計剖析_第4頁
簡易時鐘設(shè)計剖析_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、II海前2移冬院HUNANINSTITUTEOFENGINEERING課程設(shè)計課程名稱單片機原理與應(yīng)用課程設(shè)計課題名稱簡易時鐘設(shè)計專業(yè)電子信息工程班級電信1301班學(xué)號31姓名彭題指導(dǎo)老師林國漢2016年3月25日電氣信息學(xué)院課程設(shè)計任務(wù)書課題名稱簡易時鐘設(shè)計姓名彭顆專業(yè)電子信息工程班級1301學(xué)號01指導(dǎo)老師林國漢課程設(shè)計時間2016年3月14日-2016年3月25日(3、4周)教研室意見意見:審核人:一、任務(wù)及要求設(shè)計任務(wù):本課題要求以MCS-51系列單片機為核心,設(shè)計一個數(shù)字時鐘。(1)具有時鐘和跑表功能,用LED或者液晶顯示器進行顯示;(2)具有時鐘調(diào)整功能(3)具有鬧鐘功能,(4)*

2、能將鬧鐘時間在AT24C02保存(5)*其它功能設(shè)計要求:(1)確定系統(tǒng)設(shè)計方案;(2)進行系統(tǒng)的硬件設(shè)計;(3)完成應(yīng)用程序設(shè)計;(4)應(yīng)用系統(tǒng)的硬件和軟件的調(diào)試。二、進度安排第一周:周一:集中布置課程設(shè)計任務(wù)和相關(guān)事宜,查資料確定系統(tǒng)總體方案。周二周三:完成硬件設(shè)計和電路連接周四周日:完成軟件設(shè)計第二周:周一周三:程序調(diào)試周四周五:設(shè)計報告撰寫。周五進行答辯和設(shè)計結(jié)果檢查。三、參考資料1、51單片機C語言教程郭天祥編著電子工業(yè)出版社2、單片機原理與應(yīng)用第2版王迎旭主編機械工業(yè)出版社3單片機原理與應(yīng)用及C51程序設(shè)計楊加國清華大學(xué)出版社,20091 總體方案設(shè)計11.1 設(shè)計方案11.2 設(shè)

3、計思路及系統(tǒng)框架圖12硬件電路設(shè)計21.1 單片機AT89C5121.2 復(fù)位電路和時鐘電路31.3 LED顯示電路和按鍵電路43 軟件設(shè)計53.1 主程序53.2 數(shù)碼管顯示模塊53.3 按鍵模塊53.4 定時器模塊64 調(diào)試74.1 系統(tǒng)調(diào)試74.2 調(diào)試中遇到的問題及解決方法75 總結(jié)8參考文獻9附錄A原理圖-9附錄B程序清單10iii1總體方案設(shè)計1.1 設(shè)計方案(1)、通過單片機內(nèi)部的計數(shù)/定時器,采用軟件編程來實現(xiàn)時鐘計數(shù),一般稱為軟時鐘,這種方法的硬件線路簡單,系統(tǒng)的功能一般與軟件設(shè)計相關(guān),通常用在對時間精度要求不高的場合。(2)、采用時鐘DS1302K片,它的功能強大,功能部件

4、集成在芯片內(nèi)部,具有自動產(chǎn)生時鐘等相關(guān)功能,硬件成本相對較高;軟件編程簡單,通常用在對時鐘精度要求較高的場合。方案選擇:最終這次我選擇的是方案(1),因為方案(1)硬件電路簡單,操作更方便簡單。1.2 設(shè)計思路及系統(tǒng)框架圖我們采用的是AT89C51作為時鐘控制芯片。電子時鐘主要由時鐘顯示模塊、校時模塊、秒表模塊和鬧鐘模塊組成。其中需要對時,分,秒的數(shù)值進行操作,并且秒計算到60的時候,要自己清零并向分進1;分計算到60的時候,要自己清零并向時進1,時進到24的時候,要清零,這樣才能進行循環(huán)計時。秒表模塊需要重新顯示一個秒表界面,同時也應(yīng)該需要通過另外一個定時器T1對秒表進行操作,從而保證在秒表

5、界面,時鐘顯示模塊的時間還在進行。鬧鐘模塊則需要設(shè)計鬧鐘時間,當(dāng)設(shè)計的鬧鐘時間和時鐘的時間相等,蜂鳴器響起,從而達到鬧鐘功能。此外還要實現(xiàn)對時間的調(diào)整功能,AT89C51的P3.2、P3.3、P3.5外接三個獨立按鍵,當(dāng)按下P3.2按鍵時,系統(tǒng)進行功能切換,依次可以切換成時鐘功能,秒表功能,時鐘設(shè)置功能,鬧鐘設(shè)置功能;當(dāng)按下P3.3按鍵時,時鐘顯示時對顯示的數(shù)碼管進行加一的功能,或者在進入秒表功能時,實現(xiàn)啟動和暫停功能;當(dāng)按下P3.5按鍵時,對顯示的數(shù)碼管進行移位的功能,達到調(diào)整時間的目的。或者在進入秒表后,實現(xiàn)清零功能。在單片機內(nèi)部構(gòu)建三個模塊:控制模塊、譯碼模塊、定時模塊,用以實現(xiàn)自動計數(shù)

6、、譯碼顯示功能。單片機外部構(gòu)建四個電路:時鐘電路、復(fù)位電路、外部按鈕電路、顯示電路,用以實現(xiàn)對單片機內(nèi)部計數(shù)控制以及譯碼輸出的正確顯示。該電子時鐘是將秒、分、時顯示在人的視覺器官面前的一種計時裝置。故將計時周期設(shè)置為24小時,當(dāng)顯示滿刻度是23時59分59秒時,數(shù)碼管顯示為0。為了確保時間正常校對,在系統(tǒng)中設(shè)有校對按鈕,用以實現(xiàn)對數(shù)碼管顯示的正確調(diào)整。如圖1所示為系統(tǒng)框架圖- 1 -51卑片機時紳設(shè)置電路復(fù)位電路外部按鈕電路系統(tǒng)框架圖4.制模M數(shù)碼管M示電路2硬件電路設(shè)計2.1 單片機 AT89C51AT89C51是一種帶4K字節(jié)FLASHK器的低電壓、高性能CMOS勺8位微處理 器,俗稱單片

7、機。AT89C51是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單 片機。單片機的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEH密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPlffl閃爍存儲器組合在單個芯片中, ATMEL勺AT89C51 是一種高效微控制器。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性 高且價廉的方案。如圖2所示為AT89C51的管腳圖PPPPPPPPRO JD/ACJOPO .1po .芝川g之 PO 3/AD3 PO .q/>QJ>a PO與40與 PO 后/JKTMSPO 7goyP

8、NQm目 F-3 T /A9P2.2ZA1 O P2.3/A1 1 P2 4/A1 2 P2 S£A1 3 P2.6XA1 4P2 7£A1 5P3.D/RXD P3.1 XTXDP3P3.3MMT1P3t 4rTOP3.S/TH戶m石心eP3.Z/RD-圖2 AT89C51管腳-3 -由于電路原理中只用到單片機的p0、pl、p2口,所示下面對這三個端口進行詳細介紹。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時,P0口

9、作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。本次課設(shè)中我P0口接的是74LS245的輸入和8個電阻。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH®程和校驗時,P1口作為低八位地址接收。本次P1口接的數(shù)碼管的6個位選端口。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因

10、此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH®程和校驗時接收高八位地址信號和控制信號。本次課設(shè)中P2口接的是開關(guān)和蜂鳴器。2.2 復(fù)位電路和時鐘電路計算機在啟動運行時都需要復(fù)位,復(fù)位時使中央處理器CPUffl內(nèi)部其他部件處于一個確定的初始狀態(tài),從這個狀態(tài)開始工作。AT89C51單片機有一個復(fù)位引腳RST高電平有效。在時鐘電路工作以后,當(dāng)外部

11、電路使得RS礎(chǔ)出現(xiàn)兩個機器周期(24個時鐘周期)以上的高電平,系統(tǒng)內(nèi)部復(fù)位。復(fù)位有兩種方式:上電復(fù)位和按鈕復(fù)位。在此次的設(shè)計中,我采用按鍵復(fù)位,只要RST保持高電平,AT89C51單片機將循環(huán)復(fù)位。復(fù)位期間,ALE、PSEN輸出高電平。RST從高電平變?yōu)榈碗娖胶?PC指針變?yōu)?000H,使單片機從程序存儲器地址為0000H的單元開始執(zhí)行程序。當(dāng)單片機執(zhí)行程序出錯或進入死循環(huán)時,可按復(fù)位按鈕重新啟動。在本次設(shè)計中,時鐘電路設(shè)計就是采用內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路。AT89C51單片機內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器。引腳XTAL1和XTAL2是高增益反相放大器的輸入端和輸出端。這

12、個高增益反相放大器將與作為反饋元件的片外晶體諧振器一起構(gòu)成一個自激振蕩器。外接晶體振蕩器以及電容C1和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。此系統(tǒng)電路的晶體振蕩器的值為12MHz,我的電容為選取18pF。如圖3所示為復(fù)位和時鐘電路。圖3復(fù)位和時鐘電路2.3 LED顯示電路和按鍵電路eas&s模式選擇一p智,開施暫將- - -圖4LED顯示電路和按鍵電路在本次的設(shè)計中,采用的6位的數(shù)碼管顯示器。數(shù)碼管如果按照段數(shù)分可為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元,也就是多了一個小數(shù)點的顯示;如果按能夠顯示多少個“8”分類的話,也可以可分為1位、2位、4位等數(shù)

13、碼管,如果按照發(fā)光二極管單元的連接方式又可以分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽極的數(shù)碼管是將所有發(fā)光二極管的陽極接到一起后就形成公共陽極(COM)的數(shù)碼管,共陽極數(shù)碼管在應(yīng)用時要將公共極(COM)接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮,當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。共陰極數(shù)碼管是將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰極數(shù)碼管在應(yīng)用時應(yīng)將公共極(COM)接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點亮,當(dāng)某一字段的陽極為低電平時,相應(yīng)字段就不亮。獨立式鍵盤是各按鍵相互獨立,每個按鍵各接一根I/O接口線,每

14、根I/O接口線的按鍵是不會影響其他的I/O接口線。本次課設(shè)中按鍵K1、K2、K3分別接I0口P3.2、P33P3.6,來控制數(shù)碼管的顯示。如上圖4所示3.4定時器模塊3軟件設(shè)計3.1 主程序先對顯示單元和定時器/計數(shù)器初始化,然后重復(fù)調(diào)用數(shù)碼管顯示模塊和按鍵處理模塊,檢測按鍵標(biāo)志位K1_bit,則轉(zhuǎn)入相應(yīng)的功能程序。3.2 數(shù)碼管顯示模塊本設(shè)計有6個數(shù)碼管,從右到左為時、分、秒。在本系統(tǒng)中數(shù)碼管顯示采用軟件譯碼動態(tài)顯示。在系統(tǒng)中從P0端口控制數(shù)碼管的段選,輸入數(shù)碼管數(shù)組對數(shù)碼管進行顯示。同時在P1端口對6位數(shù)碼管實現(xiàn)位選。由于本次課設(shè)要求時鐘和秒表的功能,因為我分別寫了兩個數(shù)碼管顯示函數(shù),兩個

15、功能顯示的格式進行了更改。3.3 按鍵模塊本次設(shè)計按鍵模塊我采用的是按鍵掃描,設(shè)置K1為功能切換鍵,設(shè)立一個模式切換的標(biāo)志K1_bit,然后檢測K1_bit的值來進行模式的切換,然后每個模式下都實現(xiàn)不同的功能。當(dāng)K1_bit=0時,顯示時鐘時間。K1_bit=1時,顯示秒表功能,按下K2可以實現(xiàn)開始/暫停功能,按下K3可以實現(xiàn)清零功能。K1_bit=2時,進入時鐘調(diào)整功能,按下K2可以實現(xiàn)閃現(xiàn)時長標(biāo)記位加1功能,按下K3實現(xiàn)切換時長標(biāo)志位。K1_bit=3時,進入鬧鐘功能,K2,K3和在時鐘調(diào)整時的功能一樣。如圖5所示T0用于計時,選中方式一,重復(fù)定時,定時時間設(shè)為50ms,定時時間到則中斷,

16、在中斷服務(wù)程序中用一個計數(shù)器對50ms計數(shù),計20次則對秒單元加一。秒單元加到60則對分單元加一,同時秒單元清0;分單元加到60則對時單元加一,同時分單元清0;時單元加到24則對時單元清0,標(biāo)志一天時間計滿。在對各單元計數(shù)的同時,把他們的值放到存儲器單元的指定位置。流程圖如圖6:主程序流程圖T0中斷服務(wù)程序-# -圖6定時器框架圖4調(diào)試4.1系統(tǒng)調(diào)試單片機應(yīng)用系統(tǒng)的調(diào)試包括硬件和軟件兩部分,但是他們并不能完全分開。一般的方法是排除明顯的硬件故障,再進行綜合調(diào)試,排除可能的軟/硬件故障。硬件調(diào)試過程中注意數(shù)碼管是共陰極還是共陽極,搞反了就會出現(xiàn)數(shù)碼管亂碼的現(xiàn)象。軟件程序的調(diào)試一般可以將重點放在分

17、模塊調(diào)試上,統(tǒng)調(diào)是最后一環(huán)。軟件調(diào)試可以采取離線調(diào)試和在線調(diào)試兩種方式。前者不需要硬件仿真器,可借助于軟件仿真器即可;后者一般需要仿真系統(tǒng)的支持。本次課題,Keil軟件來調(diào)試程序,通過各個模塊程序的單步或跟蹤調(diào)試,使程序逐漸趨于正確,最后統(tǒng)調(diào)程序。仿真部分采用protus6professional軟件,此軟件功能強大且操作較為簡單,可以很容易的實現(xiàn)各種系統(tǒng)的仿真。首先打開protus6professional軟件,在元件庫中找到要選用的所有元件,然后進行原理圖的繪制;繪制好后再選擇已經(jīng)編譯好的*.hex文件,選擇運行,觀察顯示結(jié)果,根據(jù)顯示的結(jié)果和課題的要求再修改程序,再運行查,直到滿足要求。

18、4.2調(diào)試中遇到的問題及解決方法在調(diào)試的過程我遇到了一個問題,當(dāng)我在編寫鬧鐘模塊的時候,我定義一個鬧鐘函數(shù),寫好鬧鐘函數(shù)之后,我在主函數(shù)里面去調(diào)用的時候編譯老是顯示”重復(fù)定義”的錯誤,最后在請教老師的情況下,我得到了解決,把鬧鐘函數(shù)加進了主函數(shù),鬧鐘功能得以實現(xiàn)。- 7 -5總結(jié)通過這次課程設(shè)計,我學(xué)到了不少課本上沒有的知識,也鍛煉了自己的動手能力,將以前學(xué)過的零散的知識串到一起。首先硬件方面,基本了解了電子產(chǎn)品的開發(fā)流程和所要做的工作?;菊莆樟薖ROTUES理圖的方法,并設(shè)計了一個單片機最小系統(tǒng)。通過開發(fā)板的設(shè)計和硬件搭建的過程,使我對51系單片機的接口有了更深層次的理解,熟悉了一些單片機

19、常用的外圍電路引腳和連接方法。并且我學(xué)會了分析問題解決問題的能力,加深了對所學(xué)理論知識的理解和運用。我的動手能力得到了很大的提高,創(chuàng)新意識得到了鍛煉。設(shè)計主要用到的原件不多,最主要的是程序比較繁瑣尤其是校時模塊。顯示模塊以前都有學(xué)過,所以想對來說較為簡單。這次設(shè)計就是讓我們學(xué)以致用,將書本上學(xué)到的知識應(yīng)用于實踐。雖然在設(shè)計中遇到了不少困難,在我們通過自己的各種方式解決問題的同時,也提升了自己的專業(yè)水平。這次課程設(shè)計,我收獲了很多,在設(shè)計過程中遇到了不少困難,都在同學(xué)老師的幫助下一步步得到解決。我深深體會到團結(jié)合作,互相幫助是何等重要。還加深了對51單片機系列知識及其系統(tǒng)的認識。這個設(shè)計題目并不

20、怎么新穎,但從中體現(xiàn)到了個系統(tǒng)開發(fā)設(shè)計的過程,讓我們受益匪淺.在這次的設(shè)計中,讓我更進一步的提高了動手能力,也重新復(fù)習(xí)了一次單片機的程序編程能力,加強了對編程能力的理解和對相應(yīng)資料的查閱。最后要感謝林國漢老師對我此次課設(shè)的悉心指導(dǎo),使我的課設(shè)能實現(xiàn)相應(yīng)的功能。-9 -參考資料1、51單片機C語言教程郭天祥編著電子工業(yè)出版社2、單片機原理與應(yīng)用第2版王迎旭主編機械工業(yè)出版社3單片機原理與應(yīng)用及C51程序設(shè)計楊加國清華大學(xué)出版社,2009附錄A原理圖il> E d:2dM.1ln335SI P1P1PIP1P1P1P1P1XWXSX - Jb-i1- -用國口中 raiwzri 加州口i 田

21、泊M HUM" 陽皿江后 曲以比苦 的撞黑附颯I FT.1.IA3P22W0 阻縱11 用4閔2 丑陋 P2QAXU PJ7AM5用斷的 豉哩 P31W 電癰FTP1MP35Ti_ 能阻屈 林面 U2淞_jv-l 1_、=_4一 Tfw-i3 .的團固K第監(jiān)院附MJQ艙對峙U射金W?-ILJ£Z1F, aZq7亡;叩UI .a呼*.送鈣.附錄B程序清單#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodeTab0=/定義數(shù)碼管數(shù)組,沒有小數(shù)點0x3f,0x06,0x5b,0

22、x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;ucharcodeTab1=/定義數(shù)碼管數(shù)組,有小數(shù)點0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;sbitK1=P3A2;/模式選擇鍵,本程序三種模式,分別是時間顯示、秒表、時間設(shè)置sbitK2=P3A3;/設(shè)置時間時加一/開始(暫停)秒表按鍵sbitK3=P3A6;/切換設(shè)置位/清零秒表按鍵/ 分別定義三個變量表示鬧鐘的秒,sbitbeep=P2A6;uinttimes=20,timemin=57,timeh=23;/ 延時函數(shù)/ 時間顯示函數(shù)/ 秒表顯示函數(shù)/ 時間設(shè)

23、置顯示函數(shù)/ 鬧鐘設(shè)置顯示函數(shù)/ 中斷初始化函數(shù)/ 模式切換函數(shù)/ 檢測秒表操作按鍵/ 檢測時間設(shè)置按鍵分,時voidDelay(ucharx);voidDisplay0();voidDisplay1();voidDisplay2();voidDisplay3();voidInit();voidMode_K1();voidKEY_MiaoBiao();voidKEY_Time_Set();ucharHours=23,Minutes=56,seconds=55;/分別定義三個變量表示時、分、秒ucharTime0_bit=0;/用于定時器0的溢出標(biāo)志bitSet_Time=0;/設(shè)置時閃爍時長的

24、標(biāo)志位bitSet0=0;bitSet1=0;ucharK1_bit=0;/設(shè)置時間標(biāo)志,確定是設(shè)置分還設(shè)置時/用于模式切換的標(biāo)志ucharMiao_Biao0,Miao_Biao1,Miao_Biao2,Miao_Biao3,Miao_Biao4;/用于秒表的變量voidmain()Init();while(1)Mode_K1();switch(K1_bit)case0:Display0();break;case 1:Display1();KEY_MiaoBiao()break;case 2:Display2();位KEY_Time_break;case 3:Display3();if(K1

25、_bit=3)置模式if(K2=0)(下同)/中斷初始化/死循環(huán)/模式掃描/模式選擇/顯示時間/顯示秒表/掃描秒表操作/設(shè)置時間時的顯示程序,可閃爍定Set();/掃描按鍵/判斷是否為鬧鐘設(shè)/K2有按下Delay(10);/延時消抖(下- 13 -同)/ 再次檢測是否if(K2=0)為誤按if(Set1=0)timemin+;/分加1if(timemin=60)/當(dāng)'分'加到60時,重新賦值0timemin=0;elsetimeh+;if(timeh=24)/當(dāng)'時'加到24時,重新賦值0timeh=0;while(!K2);/按鍵松開檢測,消除松開按鍵時的抖動

26、干擾if(K3=0)Delay(10);if(K3=0)Set1=Set1;/K3每按一次Set1取反,以確定是設(shè)置時還是設(shè)置分,Set0為0時設(shè)置分,Set0為1時設(shè)置時while(!K3);if(times=seconds&&timemin=Minutes&&timeh=Hours)beep=!beep;Delay(50);while(times=seconds&&timemin=Minutes&&timeh=Hours)break;/ 設(shè)置時間時的按鍵掃描函數(shù)voidKEY_Time_Set()if(K1_bit=2)/判斷

27、是否為時間設(shè)置模式if(K2=0)/K2有按下(下同)Delay(10);/延時消抖(下同)if(K2=0)/再次檢測是否為誤按if(Set0=0)/檢測是設(shè)置時還是分,Set0為0時設(shè)置分,Set0為1時設(shè)置時Minutes+;/分加1if(Minutes=60)/當(dāng)'分'加到60時,重新賦值0Minutes=0;elseHours+;/時加1if(Hours=24)/當(dāng)'時'加到24時,重新賦值0Hours=0;while(!K2);/按鍵松開檢測,消除松開按鍵時的抖動干擾if(K3=0)Delay(10);if(K3=0)Set0=Set0;/K3每按一次

28、Set0取反,以確定是設(shè)置時還是設(shè)置分,Set0為0時設(shè)置分,Set0為1時設(shè)置時while(!K3);- 15 -voidKEY_MiaoBiao()if(K1_bit=1)if(K2=0)Delay(10);if(K2=0)TR1=TR1;始定時器1,達到暫?;蜷_始秒表的目的while(!K2);if(K3=0)Delay(10);if(K3=0)并停止定時器1TR1=0;Miao_Biao0=0;Miao_Biao1=0;Miao_Biao2=0;Miao_Biao3=0;Miao_Biao4=0;while(!K3);/檢測秒表按鍵操作/判斷是否為秒表模式/K2每按一次TR1取反,暫停

29、或開/當(dāng)K3按下時秒表所有數(shù)據(jù)清零,/停止定時器1/清零數(shù)據(jù)voidMode_K1()/模式選擇鍵,本程序四種模式,分別是時間顯示、秒表、時間設(shè)置、鬧鐘if(K1=0)Delay(10);if(K1=0)K1_bit+;if(K1_bit=3)K1_bit=0;while(!K1);/*當(dāng)K1_bit為0時顯示時鐘,為1時進入秒表,*為2時進入時間設(shè)置模式,為3時進入鬧鐘模式*/voidTime1()interrupt3/定時器1函數(shù)TH1=(65536-50000)/256;TL1=(65536-50000)%256;/重裝初值Miao_Biao0+;if(Miao_Biao0=2)/以下為

30、秒表數(shù)據(jù)處理Miao_Biao0=0;Miao_Biao1+;if(Miao_Biao1=10)/Miao_Biao1每加1次為100ms,Miao_Biao1=0;Miao_Biao2+;if(Miao_Biao2=60)Miao_Biao2=0;Miao_Biao3+;if(Miao_Biao3=60)Miao_Biao3=0;Miao_Biao4+;if(Miao_Biao4=10)Miao_Biao4=0;- 29 -voidTime0()interrupt1TH0=(65536-50000)/256;TL0=(65536-50000)%256;Time0_bit+;if(Time0_

31、bit%10)=0)Set_Time=Set_Time;/定時器0函數(shù)/重裝初值/每溢出10次Time0_bit取反一次/0.5秒閃爍一次if(Time0_bit=20)/以下為時間數(shù)據(jù)處理Time0_bit=0;seconds+;if(seconds=60)seconds=0;Minutes+;if(Minutes=60)Minutes=0;Hours+;if(Hours=24)Hours=0;voidInit()/EA=1;/TMOD=0X11;/擇1種工作方式TH0=(65536-50000)/256;/TL0=(65536-50000)%256;ET0=1;/TR0=1;/中斷初始化函

32、數(shù)開總中斷定時器工作方式選擇,定時器0和定時器1都選定時器0裝初值,定時50ms開定時器0開關(guān)開定時器0小開關(guān)TH1=(65536-50000)/256;TL1=(65536-50000)%256;ET1=1;/定時器1裝初值,定時50ms/開定時器1開關(guān)TR1=0;/關(guān)定時器1小開關(guān)voidDisplay3()/鬧鐘時間設(shè)置時的顯示函數(shù)if(Set1=0)/判斷是否為設(shè)置時還是分P0=Tab0times%10;P1=0xdf;Delay(10);P0=0X00;/顯示秒的個位/段選/延時/消隱P0=Tab0times/10;/顯示秒的十位P1=0xef;/段選Delay(10);/延時P0=

33、0X00;/消隱if(Set_Time)/這個if語句實現(xiàn)分鐘以0.5秒的頻率閃爍分隔符P0=Tab1timemin%10;/顯示分的個位,需要加上小數(shù)點做P1=0xf7;/段選Delay(10);/延時P0=0X00;/消隱P0=Tab0timemin/10;/顯示分的十位P1=0xfb;/段選Delay(10);/延時P0=0X00;/消隱P0=0x00;/顯示分的個位,需要加上小數(shù)點做分隔符P1=0xf7;/段選Delay(10);/延時P0=0X00;/消隱P0=0x00;/顯示分的十位P1=0xfb;/段選Delay(10);/延時P0=0X00;/消隱else閃爍分隔符elseP0

34、=Tab1timeh%10;P1=0xfd;Delay(10);P0=0X00;/顯示時的個位,需要加上小數(shù)點做分隔符/段選/延時/消隱P0=Tab0timeh/10;/顯示時的十位P1=0xfe;/段選Delay(10);/延時P0=0X00;/消隱需要加上小數(shù)點做分隔符/時鐘閃爍P1=0xdf;Delay(10);P0=0X00;/段選/延時/消隱P0=Tab0times/10;/顯示秒的十位P1=0xef;/段選Delay(10);/延時P0=0X00;/消隱P0=Tab1timemin%10;/顯示分的個位,需要加上小數(shù)點做分隔符P1=0xf7;/段選Delay(10);/延時P0=0

35、X00;/消隱P0=Tab0timemin/10;/顯示分的十位P1=0xfb;/段選Delay(10);/延時P0=0X00;/消隱if(Set_Time)/這個if語句實現(xiàn)時鐘以0.5秒的頻率P0=Tab1timeh%10;/顯示時的個位,需要加上小數(shù)點做P1=0xfd;/段選Delay(10);/延時P0=0X00;/消隱P0=Tab0timeh/10;/顯示時的十位顯示秒的個位P0=Tab0times%10;/P1=0xfe;Delay(10);P0=0X00;elseP0=0x00;P1=0xFF;Delay(10);P0=0X00;P0=0X00;P1=0xFF;Delay(10)

36、;P0=0X00;voidDisplay2()if(Set0=0)P0=Tab0seconds%10;P1=0xdf;Delay(10);P0=0X00;P0=Tab0seconds10;P1=0xef;Delay(10);P0=0X00;if(Set_Time)P0=Tab1Minutes%10;分隔符P1=0xf7;Delay(10);P0=0X00;P0=Tab0Minutes10;P1=0xfb;Delay(10);P0=0X00;段選延時消隱顯示時的個位,需要加上小數(shù)點做分隔符段選延時消隱顯示時的十位段選延時消隱時間設(shè)置時的顯示函數(shù)判斷是否為設(shè)置時還是分顯示秒的個位段選延時消隱顯示秒

37、的十位段選延時消隱這個if語句實現(xiàn)分鐘以0.5秒的頻率閃爍顯示分的個位,需要加上小數(shù)點做段選延時消隱顯示分的十位段選延時消隱elseP0=0x00;P1=0xf7;Delay(10);P0=0X00;/顯示分的個位,需要加上小數(shù)點做分隔符/段選/延時/消隱P0=0x00;P1=0xfb;Delay(10);P0=0X00;/顯示分的十位/段選/延時/消隱P0=Tab1Hours%10;P1=0xfd;Delay(10);P0=0X00;/顯示時的個位,需要加上小數(shù)點做分隔符/段選/延時/消隱P0=Tab0Hours/10;P1=0xfe;Delay(10);P0=0X00;/顯示時的十位/段選

38、/延時/消隱else/時鐘閃爍P0=Tab0seconds%10;/P1=0xdf;/Delay(10);/P0=0X00;/P0=Tab0seconds/10;/P1=0xef;/Delay(10);/P0=0X00;/P0=Tab1Minutes%10;/P1=0xf7;/Delay(10);/P0=0X00;/顯示秒的個位 段選 延時 消隱顯示秒的十位 段選 延時 消隱顯示分的個位,需要加上小數(shù)點做分隔符 段選 延時 消隱顯示分的十位P0=Tab0Minutes/10;/P1=0xfb;Delay(10);P0=0X00;/段選延時消隱閃爍分隔符if(Set_Time)P0=Tab1Hours%10;P1=0xfd;Delay(10);P0=0X00;/這個if語句實現(xiàn)時鐘以/顯示時的個位,需要加上小數(shù)點做/段選/延時/消隱0.5秒的頻率加上小數(shù)點做elseP0=Tab0Hours/10;

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論