8位電子時(shí)鐘課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩27頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  檢測(cè)理論及應(yīng)用</b></p><p><b>  課程設(shè)計(jì)</b></p><p>  題 目 時(shí)鐘計(jì)時(shí)器 </p><p>  學(xué)院(部) 工業(yè)制造學(xué)院   </p>

2、<p>  專 業(yè) 測(cè)控技術(shù)與儀器   </p><p>  學(xué)生姓名   </p><p>  學(xué) 號(hào) 年級(jí) 2012級(jí)1班 </p><p>  2014 年 12 月 7 日</p>

3、<p><b>  摘 要</b></p><p>  時(shí)鐘是人類日常生活必不可少的工具,本設(shè)計(jì)從日常生活中常見(jiàn)的事物入手,通過(guò)對(duì)電子時(shí)鐘的設(shè)計(jì),讓我們認(rèn)識(shí)到單片機(jī)已經(jīng)深入到我們生活的每個(gè)領(lǐng)域,該設(shè)計(jì)不僅可以鍛煉我們的動(dòng)手能力,而且可以加深我們對(duì)單片機(jī)的認(rèn)識(shí)和激發(fā)我們對(duì)未知科學(xué)領(lǐng)域的探索。</p><p>  本文利用單片機(jī)實(shí)現(xiàn)數(shù)字時(shí)鐘計(jì)時(shí)功能的主要內(nèi)容

4、。它體積小,成本低、功能強(qiáng)、使用方便、可靠性高等一系列優(yōu)點(diǎn),廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動(dòng)化上。本次設(shè)計(jì)采用獨(dú)立式按鍵進(jìn)行時(shí)間調(diào)整,其中STC89C52是核心元件,同時(shí)采用數(shù)碼管LED動(dòng)態(tài)顯示“時(shí)”,“分”,“秒”的現(xiàn)代計(jì)時(shí)裝置。與傳統(tǒng)機(jī)械表相比,它具有走時(shí)精確,顯示直觀等特點(diǎn)。它的計(jì)時(shí)周期為24小時(shí),顯滿刻度為“23時(shí)59分59秒”。該系統(tǒng)同時(shí)具有硬件設(shè)計(jì)簡(jiǎn)單、工作穩(wěn)定性高、價(jià)格低廉等優(yōu)點(diǎn)。</p><p>  

5、關(guān)鍵詞:STC89C52 ; LED數(shù)碼管。</p><p><b>  目錄</b></p><p><b>  設(shè)計(jì)要求1</b></p><p><b>  1.設(shè)計(jì)方案1</b></p><p>  2.系統(tǒng)硬件電路的設(shè)計(jì)2</p><p>

6、;  2.1單片機(jī)的選擇及引腳功能介紹2</p><p>  2.2顯示電路設(shè)計(jì)4</p><p>  2.3電源電路設(shè)計(jì)4</p><p>  3.控制系統(tǒng)的軟件設(shè)計(jì)5</p><p>  3.1主程序流程圖5</p><p>  3.2鬧鐘時(shí)間設(shè)定功能程序5</p><p>  

7、4.系統(tǒng)功能調(diào)試與整體指標(biāo)6</p><p>  4.1軟件調(diào)試與分析6</p><p><b>  4.2性能分析6</b></p><p>  5.元器件及元器件介紹7</p><p>  6.總結(jié)與思考及致謝8</p><p><b>  參考文獻(xiàn)9</b>

8、</p><p><b>  附錄 程序10</b></p><p><b>  電路27</b></p><p><b>  電子時(shí)鐘的設(shè)計(jì)</b></p><p><b>  設(shè)計(jì)要求</b></p><p>  利用單片

9、機(jī)作為控制核心,完成一個(gè)時(shí)鐘計(jì)時(shí)器。具體要求如下:</p><p>  (1)采用8位LED數(shù)碼顯示時(shí)、分、秒,開機(jī)流動(dòng)顯示學(xué)號(hào)。</p><p>  (2)時(shí)制式為24小時(shí)制,K1選擇模式。</p><p>  (3)按鍵K1進(jìn)行時(shí)鐘調(diào)時(shí) 、調(diào)分、調(diào)年、調(diào)月、調(diào)日,鬧鐘調(diào)時(shí)、調(diào)分,均以按下K1鍵的次數(shù)進(jìn)行模式改變,調(diào)整的位相應(yīng)閃爍,閃爍時(shí)按K2鍵相應(yīng)加1,K3則減

10、1。</p><p>  (4)正常顯示時(shí)鐘時(shí),按住K2不放顯示年月日,松開顯示時(shí)鐘。</p><p>  (5)正常顯示時(shí)鐘時(shí),按下K3切換到秒表模式,此時(shí)K2鍵對(duì)秒表進(jìn)行控制,K3鍵則為復(fù)位鍵,再按K3退出該模式。</p><p>  (6)K0對(duì)鬧鐘起啟停控制。</p><p><b>  1.設(shè)計(jì)方案</b>&l

11、t;/p><p>  此方案采用單片機(jī)內(nèi)部定時(shí)器T0、T1進(jìn)行計(jì)時(shí)、計(jì)數(shù),STC89S52實(shí)時(shí)控制。外部用按鍵進(jìn)行模式選擇,時(shí)鐘調(diào)整。</p><p>  2.系統(tǒng)硬件電路的設(shè)計(jì)</p><p>  2.1單片機(jī)的選擇及引腳功能介紹</p><p>  STC89C52具有如下特點(diǎn):40個(gè)引腳(引腳圖如圖四所示),4k Bytes Flash片內(nèi)

12、程序存儲(chǔ)器,128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。</p><p>  此外,STC89C52RC設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過(guò)軟件設(shè)置省電模式。空閑模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振

13、蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p>  圖 2 STC89C52芯片引腳圖</p><p><b>  引腳功能介紹:</b></p><p>  VCC(40):+5V; </p><p&g

14、t;  GND(20):接地;</p><p>  P0口(39-32):P0口為8位漏極開路雙向I/O口,每引腳可吸收8個(gè)TTL門電流;</p><p>  P1口(1-8):P1口是從內(nèi)部提供上拉電阻器的8位雙向I/O口,P1口緩沖器能接收和輸出4個(gè)TTL門電流;</p><p>  P2口(21-28):P2口為內(nèi)部上拉電阻器的8位雙向I/O口,P2口緩沖器可

15、接收和輸出4個(gè)TTL門電流;</p><p>  P3口(10-17):P3口是8個(gè)帶內(nèi)部上拉電阻器的雙向I/O口,可接收和輸出4個(gè)TTL門電流,P3口也可作為AT89C51的特殊功能口;</p><p>  RST(9):復(fù)位輸入。當(dāng)振蕩器復(fù)位時(shí),要保持RST引腳2個(gè)機(jī)器周期的高電平時(shí)間;</p><p>  ALE/PROG(30):當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存

16、允許的輸出電平用于鎖存地址的低位字節(jié),在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6,它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的,要注意的是,每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)1個(gè)ALE脈沖;</p><p>  PSEN(29):外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期2次PSEN有效,但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這2次

17、有效的PSEN信號(hào)將不出現(xiàn);</p><p>  EA/VPP(31):當(dāng)EA保持低電平時(shí),外部程序存儲(chǔ)器地址為(0000H-FFFFH)不管是否有內(nèi)部程序存儲(chǔ)器。FLASH編程期間,此引腳也用于施加12V編程電源(VPP);</p><p>  XTAL1(19):反向振蕩器放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入;</p><p>  XTAL2(18):來(lái)自反向振

18、蕩器的輸出。</p><p><b>  2.2顯示電路設(shè)計(jì)</b></p><p>  單片機(jī)中通常用七段LED構(gòu)成字型“8”,另外,還有一個(gè)小數(shù)點(diǎn)發(fā)光二極管以顯示小數(shù)位!這種顯示器有共陰和共陽(yáng)兩種!發(fā)光二極管的陽(yáng)極連在一起的(公共端)稱為共陽(yáng)極顯示器,陰極連在一起的稱為共陰極顯示器。一位顯示器由8個(gè)發(fā)光二極管組成,其中,7個(gè)發(fā)光二極管構(gòu)成字型“8”的各個(gè)筆劃(段)

19、,a_g,另一個(gè)小數(shù)點(diǎn)為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管上施加一定的正向電壓時(shí),該段筆畫即亮;不加電壓則暗。為了保護(hù)各段LED不被損壞,需外加限流電阻。由于共陰極連接需加驅(qū)動(dòng),故在這里我采用的是共陽(yáng)陽(yáng)極連接。</p><p>  以8位共陰極LED為例,各LED公共陰極接低電平,若向各控制端a,b, ┄,g,dp順次送入高平信號(hào),便可進(jìn)行顯示。共陰極7段LED顯示數(shù)字0 ~ F、文字、符號(hào)及小數(shù)點(diǎn)的編碼(a段為

20、最地位,dp點(diǎn)為最高位)。</p><p><b>  圖 3 </b></p><p><b>  2.3電源電路設(shè)計(jì)</b></p><p>  在各種電子設(shè)備中,直流穩(wěn)壓電源是必不可少的組成部分,它是電子設(shè)備唯一能量來(lái)源,它的設(shè)計(jì)思路是根據(jù)我們以前學(xué)過(guò)的模電電子技術(shù),要想得到我們所要的+6V輸出電壓,就需將交流220

21、V的電壓經(jīng)過(guò)變壓器、整流電路、濾波電路和穩(wěn)壓電路四個(gè)部分。</p><p>  3.控制系統(tǒng)的軟件設(shè)計(jì)</p><p><b>  3.1主程序流程圖</b></p><p>  本設(shè)計(jì)中主程序主要實(shí)現(xiàn)顯示的初始化和調(diào)用各子程序工作的功能,讀取時(shí)間的子程序主要實(shí)現(xiàn)初始化,時(shí)間信息的采集和顯示段碼的碼的存取。分別對(duì)各個(gè)器件的功能進(jìn)行編程設(shè)計(jì),根據(jù)

22、主程序流程圖(如下)進(jìn)行全面的分析。設(shè)計(jì)中計(jì)時(shí)主要以定時(shí)器T0中斷完成,定點(diǎn)鬧鈴使用峰鳴器來(lái)完成。當(dāng)端口有開關(guān)按下時(shí),轉(zhuǎn)入相應(yīng)的功能程序。其主程序執(zhí)行流程圖如下圖9:</p><p><b>  圖4 主程序流程圖</b></p><p>  3.2鬧鐘時(shí)間設(shè)定功能程序</p><p>  在時(shí)鐘狀態(tài)下,觸發(fā)外中斷1時(shí),進(jìn)入鬧鐘時(shí)間設(shè)定模式,且

23、不影響T0計(jì)時(shí)器的功能狀態(tài),在鍵盤上輸入對(duì)應(yīng)的數(shù)字進(jìn)行時(shí)間設(shè)定。當(dāng)分別按下調(diào)節(jié)時(shí)鐘、分鐘和秒鐘的個(gè)位時(shí),時(shí)間自動(dòng)確定,鬧鐘時(shí)間只精確到分鐘。鬧鐘時(shí)間設(shè)定流程圖如圖11所示:</p><p>  圖11 鬧鐘時(shí)間設(shè)定流程圖</p><p>  4.系統(tǒng)功能調(diào)試與整體指標(biāo)</p><p>  4.1軟件調(diào)試與分析</p><p>  軟件調(diào)時(shí)

24、在KEIL C51編譯器下進(jìn)行,源程序編譯及仿真調(diào)試應(yīng)分段或以子程序?yàn)閱挝恢饌€(gè)進(jìn)行,最后生成hex文件,并且能夠完美仿真。</p><p><b>  4.2性能分析</b></p><p>  按照設(shè)計(jì)程序分析,LED顯示器動(dòng)態(tài)掃描的頻率為167HZ,實(shí)際使用觀察時(shí)完全沒(méi)有閃爍。由于計(jì)時(shí)中斷程序中加了中斷延時(shí)誤差處理,所以實(shí)際計(jì)時(shí)精度非常高,可滿足多種場(chǎng)合的應(yīng)用需要

25、。</p><p><b>  5.元件及元件介紹</b></p><p>  8位數(shù)碼管:8位數(shù)碼管屬于LED發(fā)光器件的一種。LED發(fā)光器件一般常用的有兩類:數(shù)碼管和點(diǎn)陣。8位數(shù)碼管又稱為8字型數(shù)碼管。分為8段:a、b、c、d、e、f、g、p。其中p為小數(shù)點(diǎn)。數(shù)碼管常用的有10根管腳,每一段有一根管腳,另外兩根管腳位一個(gè)數(shù)碼管的公共端,兩根之間相互連通。用單片機(jī)驅(qū)動(dòng)

26、LED數(shù)碼管有很多方法,按顯示方法分為靜態(tài)顯示和動(dòng)態(tài)顯示。前者:顯示驅(qū)動(dòng)電路具有輸出鎖存功能,單片機(jī)將所有要顯示的數(shù)據(jù)送出后就不在控制LED,直到下一次顯示時(shí)再傳送一次新的顯示數(shù)據(jù)。靜態(tài)顯示的數(shù)據(jù)穩(wěn)定,占用的CPU時(shí)間少。靜態(tài)顯示中,每一個(gè)顯示器都要占用單獨(dú)的具有鎖存功能的I\O接口,該接口用于筆劃段字型代碼。這樣單片機(jī)只要把要顯示的字型代碼發(fā)送到接口電路。該字段可以顯示發(fā)送的字型。要顯示新的數(shù)據(jù)時(shí),單片機(jī)再發(fā)送新的字形碼。后者:是用其

27、接口電路把所有顯示器的8個(gè)筆劃段a-h同名端連在一起,而妹妹一個(gè)顯示器的公共極COM各自獨(dú)立的受控制。CPU向字段輸出口送出字形碼時(shí),所有顯示器接受到相同的字形碼,但究竟是哪個(gè)顯示器亮,則取決于公共端,而這一段是有I\O扣控制的,由單片機(jī)決定何時(shí)顯示哪一位。</p><p>  電容器:通常簡(jiǎn)稱其容納電荷的本領(lǐng)為電容,用字母C表示。電容器是電子設(shè)備中大量使用的電子元件之一,廣泛應(yīng)用于電路中的隔直通交,耦合,旁路,

28、濾波,調(diào)諧回路,能量轉(zhuǎn)換,控制等方面。</p><p>  極性電容:有極性電容是指電解電容一類的電容。它是由陽(yáng)極的鋁箔和陰極的電解液分別形成兩個(gè)電極,有陽(yáng)極鋁箔上產(chǎn)生的一層氧化鋁膜作為電介質(zhì)的電容,由于這種結(jié)構(gòu),使其具有極性,當(dāng)電容正接的時(shí)候,氧化鋁膜會(huì)由于電化反應(yīng)而保持穩(wěn)定,當(dāng)反接的時(shí)候,氧化鋁層會(huì)表薄,使電容容易被擊穿損壞,所以電解電容在電路中必須注意極性,普通的電容是無(wú)極性的,也可以把兩個(gè)電解電容陽(yáng)極或者

29、陰極相對(duì)串連形成無(wú)極性電解電容。</p><p>  晶振:是指一塊石英晶體上按一定方位切下薄片,石英晶體振蕩器,簡(jiǎn)稱為石英晶體或晶體、晶振;而在封裝內(nèi)部添加IC組成振蕩電路的晶體元件成為晶體振蕩器。其產(chǎn)品一般用金屬外殼封裝,也有用玻璃殼、陶瓷或塑料封裝的。</p><p>  電阻:在物理學(xué)中表示導(dǎo)體對(duì)電流阻礙作用的大小。導(dǎo)體電阻越大,表示導(dǎo)體對(duì)電流的阻礙作用越大。不同的導(dǎo)體,電阻一般不

30、同,電阻是導(dǎo)體本身的一種特性。電阻會(huì)導(dǎo)致電子流通量的變化,電阻越小,電子流通量越大,反之亦然。</p><p>  三極管:全稱應(yīng)為半導(dǎo)體三極管,也稱雙極型晶體管、晶體三極管,是一種電流控制電流的半導(dǎo)體器件,其作用是把微弱信號(hào)放大成幅值較大的電信號(hào),也用作無(wú)觸點(diǎn)開關(guān)晶體三極管,是半導(dǎo)體基本元器件之一,具有電流放大的作業(yè),是電子電路的核心元件。三極管是在一塊半導(dǎo)體基片上制作兩個(gè)相距很近的PN結(jié),兩個(gè)PN結(jié)把整塊半導(dǎo)

31、體分成三部分,中間部分是基區(qū),兩側(cè)部分是發(fā)射區(qū)和集電區(qū),排列方式有PNP和NPN兩種。</p><p><b>  按鍵:控制作用</b></p><p>  蜂鳴器:是一種一體化結(jié)構(gòu)的電子訊響器,采用電流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子廠品中作發(fā)聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。

32、</p><p>  6.總結(jié)與思考及致謝</p><p>  在老師的指導(dǎo)和同學(xué)的幫助之下,我完成了此次單片機(jī)課程設(shè)計(jì)。從開始接到課題要求到時(shí)鐘的實(shí)現(xiàn),再到論文的完成,每走一步對(duì)我來(lái)說(shuō)都是新的嘗試與挑戰(zhàn)。在這次的課程設(shè)計(jì)中不僅檢驗(yàn)了我所學(xué)習(xí)的知識(shí),也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設(shè)計(jì)過(guò)程中,與同學(xué)分工設(shè)計(jì),和同學(xué)們相互探討,相互學(xué)習(xí),相互監(jiān)督。課程設(shè)

33、計(jì)是我們專業(yè)課程知識(shí)綜合應(yīng)用的實(shí)踐訓(xùn)練,這是我們邁向社會(huì),從事職業(yè)工作前一個(gè)必不少的過(guò)程。</p><p>  這次時(shí)鐘計(jì)時(shí)器設(shè)計(jì)的經(jīng)歷也會(huì)使我終身受益,我感受到做設(shè)計(jì)是要用心去做的一件事情,是真正的自己學(xué)習(xí)的過(guò)程和研究的過(guò)程,沒(méi)有學(xué)習(xí)就不可能有研究的能力,沒(méi)有自己的研究,就不會(huì)有所突破。通過(guò)設(shè)計(jì),我在老師的精心指導(dǎo)和嚴(yán)格要求下,獲得了豐富的理論知識(shí),極大地提高了實(shí)踐能力。</p><p>

34、;  最后,再一次感謝我的老師.,老師嚴(yán)謹(jǐn)細(xì)致、一絲不茍的作風(fēng)一直是我學(xué)習(xí)的榜樣;老師循循善誘的教導(dǎo)和不拘一格的思路給予我無(wú)盡的啟迪;這次時(shí)鐘計(jì)時(shí)器設(shè)計(jì)的每個(gè)環(huán)節(jié),都離不開老師您的細(xì)心指導(dǎo)。我懂得了學(xué)習(xí)的重要性,了解到理論知識(shí)與實(shí)踐相結(jié)合的重要意義,學(xué)會(huì)了堅(jiān)持、耐心和努力,這將為自己今后的學(xué)習(xí)和工作做出了最好的榜樣。</p><p><b>  參考文獻(xiàn)</b></p><

35、;p>  [1] 張毅剛.單片機(jī)原理及接口技術(shù) [M].北京:人民郵電出版社, 2011</p><p>  [2] 張毅剛.單片機(jī)原理及應(yīng)用 [M].北京:高等教育出版社,2004</p><p>  [3] 張毅剛.單片機(jī)原理及應(yīng)用 [M].北京:高等教育出版社,2010</p><p>  [4] 張毅剛.單片機(jī)原理及應(yīng)用設(shè)計(jì) [M].北京:電子工業(yè)出版

36、社,2008</p><p><b>  附錄:程序</b></p><p>  #include <reg52.h></p><p>  unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //用一維數(shù)組定義-9

37、、橫杠、全滅</p><p>  unsigned char num[12]={2,0,1,2,1,0,1,1,4,1,2,7} ;</p><p>  unsigned char a[8]; </p><p>  unsigned char second=0,minute=0,hour=0,year=0,mon=1,day=1,day1,hsec,sec_m

38、,min_m,N,temp1;</p><p>  unsigned char minute1=0,hour1=0;</p><p>  unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//掃描</p><p>  unsigned char k=0;</p><p>

39、;  unsigned int temp; // 記錄毫秒為秒的變量</p><p>  unsigned char M,S_flag;//M是模式,更新時(shí)間的種模式加上正常模式S_flag閃爍標(biāo)志</p><p>  sbit K0=P3^7; //K0是鬧鐘起停標(biāo)志位</p><p>  sbit K1=P3^0;</p><p&g

40、t;  sbit K2=P3^1;</p><p>  sbit K3=P3^2;</p><p>  sbit BEEP=P3^3;</p><p>  void delay(unsigned n) //0.2毫秒</p><p><b>  {</b></p><p><b&

41、gt;  int x,y;</b></p><p>  for(x=0;x<n;x++)</p><p>  for(y=0;y<24;y++);</p><p><b>  } </b></p><p>  void init1()</p><p><b>  

42、{ </b></p><p>  S_flag=0; //閃爍標(biāo)志位</p><p>  TMOD=0x10; //定時(shí)器以方式定時(shí)</p><p><b>  TH1=0xfc;</b></p><p><b>  TL1=0x18;</b></p><

43、p>  EA=1; //打開總中斷</p><p>  ET1=1; //允許定時(shí)器中斷</p><p>  TR1=1; //開啟定時(shí)器(開始定時(shí)計(jì)數(shù))</p><p><b>  }</b></p><p>  void init0()</p><p><b>  

44、{ </b></p><p>  TMOD=0x01; //定時(shí)器以方式定時(shí)</p><p><b>  TH0=0xff;</b></p><p><b>  TL0=0xff;</b></p><p>  EA=1; //打開總中斷</p><p>

45、;  ET0=1; //允許定時(shí)器中斷</p><p>  TR0=0; //關(guān)閉定時(shí)器(關(guān)閉定時(shí)計(jì)數(shù))</p><p><b>  }</b></p><p>  void display_led() //流動(dòng)顯示學(xué)號(hào)</p><p><b>  {</b></p><

46、p><b>  int x;</b></p><p>  char l,a,m;</p><p>  for(a=0;a<21;a++)</p><p><b>  {</b></p><p><b>  x=a-8;</b></p><p>

47、;  for(l=0;l<6;l++)</p><p><b>  {</b></p><p>  for(m=0;m<8;m++)</p><p><b>  {</b></p><p><b>  P2=b[m];</b></p><p>

48、;  if(x>=0&&x<12) P1=led[num[x]];</p><p>  else P1=led[11];</p><p>  delay(20);</p><p><b>  x++;</b></p><p><b>  }</b></p>

49、<p><b>  x-=8;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void display() //顯示時(shí)鐘及顯示調(diào)節(jié)位<

50、;/p><p><b>  {</b></p><p><b>  switch(M)</b></p><p><b>  {</b></p><p><b>  case 0:</b></p><p><b>  {

51、 </b></p><p>  a[0]=led[hour/10];</p><p>  a[1]=led[hour%10];</p><p>  a[2]=led[10];</p><p>  a[3]=led[minute/10];</p><p>  a[4]=led[minute%10];</

52、p><p>  a[5]=led[10];</p><p>  a[6]=led[second/10];</p><p>  a[7]=led[second%10];</p><p><b>  }break;</b></p><p><b>  case 1:</b></

53、p><p><b>  {</b></p><p>  if(S_flag==1)</p><p><b>  {</b></p><p>  a[0]=led[hour/10];</p><p>  a[1]=led[hour%10];</p><p>

54、<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  a[0]=led[11];</p><p>  a[1]=led[11];</p><p><b>  }<

55、/b></p><p>  a[2]=led[10];</p><p>  a[3]=led[minute/10];</p><p>  a[4]=led[minute%10];</p><p>  a[5]=led[10];</p><p>  a[6]=led[second/10];</p>&

56、lt;p>  a[7]=led[second%10];</p><p><b>  }break;</b></p><p><b>  case 2:</b></p><p><b>  {</b></p><p>  a[0]=led[hour/10];</p&g

57、t;<p>  a[1]=led[hour%10];</p><p>  a[2]=led[10];</p><p>  if(S_flag==1)</p><p><b>  {</b></p><p>  a[3]=led[minute/10];</p><p>  a[4]=l

58、ed[minute%10];</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  a[3]=led[11];</p><p>  a[4]=led[11];&l

59、t;/p><p><b>  }</b></p><p>  a[5]=led[10];</p><p>  a[6]=led[second/10];</p><p>  a[7]=led[second%10];</p><p><b>  }break;</b></p&g

60、t;<p><b>  case 3:</b></p><p><b>  {</b></p><p>  if(S_flag==1)</p><p><b>  {</b></p><p>  a[0]=led[year/10];</p><

61、p>  a[1]=led[year%10];</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  a[0]=led[11];</p><p>  a[1]

62、=led[11];</p><p><b>  }</b></p><p>  a[2]=led[10];</p><p>  a[3]=led[mon/10];</p><p>  a[4]=led[mon%10];</p><p>  a[5]=led[10];</p><

63、p>  a[6]=led[day/10];</p><p>  a[7]=led[day%10];</p><p><b>  }break;</b></p><p><b>  case 4:</b></p><p><b>  {</b></p><

64、;p>  a[0]=led[year/10];</p><p>  a[1]=led[year%10];</p><p>  a[2]=led[10];</p><p>  if(S_flag==1)</p><p><b>  {</b></p><p>  a[3]=led[mon/10

65、];</p><p>  a[4]=led[mon%10];</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  a[3]=led[11];</p>

66、<p>  a[4]=led[11];</p><p><b>  }</b></p><p>  a[5]=led[10];</p><p>  a[6]=led[day/10];</p><p>  a[7]=led[day%10];</p><p><b>  }br

67、eak;</b></p><p><b>  case 5:</b></p><p><b>  {</b></p><p>  a[0]=led[year/10];</p><p>  a[1]=led[year%10];</p><p>  a[2]=led[

68、10];</p><p>  a[3]=led[mon/10];</p><p>  a[4]=led[mon%10];</p><p>  a[5]=led[10];</p><p>  if(S_flag==1)</p><p><b>  {</b></p><p>

69、  a[6]=led[day/10];</p><p>  a[7]=led[day%10];</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  a[6]=l

70、ed[11];</p><p>  a[7]=led[11];</p><p><b>  }</b></p><p><b>  }break;</b></p><p><b>  case 6:</b></p><p><b>  {<

71、;/b></p><p>  if(S_flag==1)</p><p><b>  {</b></p><p>  a[0]=led[hour1/10];</p><p>  a[1]=led[hour1%10];</p><p><b>  }</b></p&

72、gt;<p><b>  else</b></p><p><b>  {</b></p><p>  a[0]=led[11];</p><p>  a[1]=led[11];</p><p><b>  }</b></p><p>  

73、a[2]=led[10];</p><p>  a[3]=led[minute1/10];</p><p>  a[4]=led[minute1%10];</p><p>  a[5]=led[10];</p><p>  a[6]=led[11];</p><p>  a[7]=led[11];</p>

74、<p><b>  }break;</b></p><p><b>  case 7:</b></p><p><b>  {</b></p><p>  a[0]=led[hour1/10];</p><p>  a[1]=led[hour1%10];</p

75、><p>  a[2]=led[10];</p><p>  if(S_flag==1)</p><p><b>  {</b></p><p>  a[3]=led[minute1/10];</p><p>  a[4]=led[minute1%10];</p><p>&l

76、t;b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  a[3]=led[11];</p><p>  a[4]=led[11];</p><p><b>  }</b

77、></p><p>  a[5]=led[10];</p><p>  a[6]=led[11];</p><p>  a[7]=led[11];</p><p><b>  }</b></p><p><b>  }</b></p><p>&

78、lt;b>  } </b></p><p>  void key_prc()//時(shí)鐘和鬧鐘調(diào)節(jié)</p><p><b>  {</b></p><p><b>  if(K1==0)</b></p><p><b>  {</b></p>

79、;<p>  delay(10);//延時(shí)去抖 </p><p>  if(K1==0) //按K1進(jìn)行模式切換 </p><p><b>  { M++;</b></p><p><b>  if(M==8) </b></p><p><b>  M=0

80、;</b></p><p><b>  }</b></p><p>  while(!K1);//等待按鍵釋放</p><p>  } </p><p><b>  if(M!=0)</b></p><p><b>  {</b&g

81、t;</p><p><b>  switch(M)</b></p><p><b>  {</b></p><p>  case 1: //模式--調(diào)時(shí)</p><p><b>  { </b></p><p><b>  if(K2

82、==0)</b></p><p><b>  {</b></p><p>  delay(10);//延時(shí)去抖 </p><p>  if(K2==0) //加鍵按下</p><p><b>  { </b></p><p>  if(ho

83、ur<23) hour++;</p><p>  else hour=0;</p><p><b>  } </b></p><p>  while(!K2); //等待按鍵釋放</p><p><b>  }</b></p><p><b>  if(

84、K3==0)</b></p><p><b>  {</b></p><p>  delay(10); </p><p>  if(K3==0)</p><p><b>  { </b></p><p>  if(hour> 0) hour--;

85、</p><p>  else hour=23;</p><p><b>  }</b></p><p>  while(!K3); </p><p><b>  }</b></p><p><b>  } break;</b></p>

86、<p>  case 2: //模式--調(diào)分</p><p><b>  { </b></p><p><b>  if(K2==0)</b></p><p><b>  {</b></p><p>  delay(10);</p>

87、<p>  if(K2==0) </p><p><b>  {</b></p><p>  if(minute<59) minute++;</p><p>  else minute=0;</p><p><b>  } </b></p><p

88、>  while(!K2);</p><p><b>  }</b></p><p><b>  if(K3==0)</b></p><p><b>  {</b></p><p>  delay(10);</p><p>  if(K3=

89、=0) </p><p><b>  { </b></p><p>  if(minute>0) minute--;</p><p>  else minute=59;</p><p><b>  } </b></p><p>  while(!K3);</p

90、><p><b>  }</b></p><p><b>  } break;</b></p><p>  case 3: //模式--調(diào)年</p><p><b>  { </b></p><p><b>  if(K2==0)&

91、lt;/b></p><p><b>  {</b></p><p>  delay(10);</p><p>  if(K2==0) </p><p><b>  {</b></p><p>  if(year<99) year++;<

92、;/p><p>  else year=0;</p><p><b>  } </b></p><p>  while(!K2);</p><p><b>  }</b></p><p><b>  if(K3==0)</b></p><

93、p><b>  {</b></p><p>  delay(10);</p><p>  if(K3==0) </p><p><b>  { </b></p><p>  if(year>0) year--;</p><p>  else year=

94、99;</p><p><b>  } </b></p><p>  while(!K3);</p><p><b>  }</b></p><p><b>  } break;</b></p><p>  case 4: //模式--調(diào)月<

95、/p><p><b>  { </b></p><p><b>  if(K2==0)</b></p><p><b>  {</b></p><p>  delay(10);</p><p>  if(K2==0) </p&g

96、t;<p><b>  {</b></p><p>  if(mon<12) mon++;</p><p>  else mon=0;</p><p><b>  } </b></p><p>  while(!K2);</p><p><b

97、>  }</b></p><p><b>  if(K3==0)</b></p><p><b>  {</b></p><p>  delay(10);</p><p>  if(K3==0) </p><p><b>  { <

98、;/b></p><p>  if(mon>1) mon--;</p><p>  else mon=12;</p><p><b>  } </b></p><p>  while(!K3);</p><p><b>  }</b></p><

99、;p>  if(year%4==0&&mon==2)day1=29;//閏年2月為29天 </p><p>  if(year%4!=0&&mon==2)day1=28;//非閏年2月為28天 </p><p>  if(mon==4|mon==6|mon==9|mon==11)day1=30;</p><p>  if(mo

100、n==1|mon==3|mon==5|mon==7|mon==8|mon==10|mon==12)day1=31;</p><p><b>  } break;</b></p><p>  case 5: //模式--調(diào)日</p><p><b>  { </b></p><p>&

101、lt;b>  if(K2==0)</b></p><p><b>  { </b></p><p>  delay(10);</p><p>  if(K2==0) </p><p><b>  {</b></p><p>  if(d

102、ay<day1) day++;</p><p><b>  else</b></p><p><b>  {</b></p><p><b>  day=1;</b></p><p><b>  }</b></p><p>&

103、lt;b>  } </b></p><p>  while(!K2);</p><p><b>  }</b></p><p><b>  if(K3==0)</b></p><p><b>  {</b></p><p>  dela

104、y(10);</p><p>  if(K3==0) </p><p><b>  { </b></p><p>  if(day>1) day--;</p><p><b>  else</b></p><p><b>  {</b>

105、</p><p><b>  day=day1;</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  while(!K3);</p><p><b>  }</b></

106、p><p><b>  } break;</b></p><p>  case 6: //模式--鬧鐘調(diào)時(shí)</p><p><b>  { </b></p><p><b>  if(K2==0)</b></p><p><b>

107、  {</b></p><p>  delay(10); </p><p>  if(K2==0) </p><p><b>  { </b></p><p>  if(hour1<23)</p><p><b>  hour1++;</b

108、></p><p>  else hour1=0;</p><p><b>  }</b></p><p>  while(!K2); </p><p><b>  }</b></p><p><b>  if(K3==0)</b></p&

109、gt;<p><b>  {</b></p><p>  delay(10);</p><p>  if(K3==0) </p><p>  { if(hour1>0)</p><p><b>  hour1--;</b></p><p>  el

110、se hour1=23;</p><p><b>  }</b></p><p>  while(!K3); </p><p><b>  }</b></p><p><b>  } break;</b></p><p>  case 7: //

111、模式--鬧鐘調(diào)分 </p><p><b>  { </b></p><p><b>  if(K2==0)</b></p><p><b>  {</b></p><p>  delay(10); </p><p>  if(K2==0)

112、 </p><p><b>  { </b></p><p>  if(minute1<59)</p><p>  minute1++;</p><p>  else minute1=0;</p><p><b>  } </b></p>

113、<p>  while(!K2);</p><p><b>  }</b></p><p><b>  if(K3==0)</b></p><p><b>  {</b></p><p>  delay(10);//延時(shí)去抖</p><

114、p>  if(K3==0) //減鍵按下</p><p>  { if(minute1>0)</p><p>  minute1--;</p><p>  else minute1=59;</p><p><b>  }</b></p><p>  while(!K3); &l

115、t;/p><p><b>  } </b></p><p><b>  } break;</b></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  } &

116、lt;/b></p><p>  void display_rq() //年月日顯示</p><p><b>  {</b></p><p>  if(K2==0)</p><p><b>  {</b></p><p>  delay(10);</p&g

117、t;<p><b>  if(K2==0)</b></p><p><b>  { </b></p><p>  a[0]=led[year/10];</p><p>  a[1]=led[year%10];</p><p>  a[2]=led[10];</p><

118、;p>  a[3]=led[mon/10];</p><p>  a[4]=led[mon%10];</p><p>  a[5]=led[10];</p><p>  a[6]=led[day/10];</p><p>  a[7]=led[day%10];</p><p><b>  }</b

119、></p><p>  while(!K2); //等待按鍵釋放</p><p><b>  }</b></p><p><b>  }</b></p><p>  void key_prc2() //秒表模式轉(zhuǎn)換</p><p><b>  {&l

120、t;/b></p><p><b>  if(M==0)</b></p><p><b>  {</b></p><p><b>  if(K3==0)</b></p><p><b>  {</b></p><p>  de

121、lay(10);//延時(shí)去抖 </p><p>  if(K3==0) //按K3進(jìn)行模式切換 </p><p><b>  { N++;</b></p><p><b>  if(N==2) </b></p><p><b>  N=0;</b></

122、p><p><b>  }</b></p><p>  while(!K3);//等待按鍵釋放</p><p>  } </p><p><b>  } </b></p><p><b>  }</b></p><p>

123、;  void display_sec() //秒表顯示</p><p><b>  { </b></p><p><b>  if(N==1)</b></p><p><b>  {</b></p><p>  a[0]=led[min_m/10];</p>

124、;<p>  a[1]=led[min_m%10];</p><p>  a[2]=led[10];</p><p>  a[3]=led[sec_m/10];</p><p>  a[4]=led[sec_m%10];</p><p>  a[5]=led[10];</p><p>  a[6]=led

125、[hsec/10];</p><p>  a[7]=led[hsec%10];</p><p><b>  if(K2==0)</b></p><p><b>  {</b></p><p>  delay(10);//延時(shí)去抖 </p><p>  if(K2==0)

126、 //加鍵按下</p><p><b>  { </b></p><p><b>  TR0=!TR0;</b></p><p><b>  } </b></p><p>  while(!K2); //等待按鍵釋放</p><p&g

127、t;<b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void res_sec() //秒表復(fù)位</p><p><b>  {</b></p><p>

128、;<b>  if(K1==0)</b></p><p><b>  {</b></p><p>  delay(10);</p><p><b>  if(K1==0)</b></p><p><b>  {</b></p><p&g

129、t;<b>  min_m=0;</b></p><p><b>  sec_m=0;</b></p><p><b>  hsec=0;</b></p><p><b>  M=0;</b></p><p><b>  }</b>&

130、lt;/p><p>  while(!K1) ;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main() //主程序</p><p><b>  { </b></p>&

131、lt;p>  display_led();</p><p>  init0(); </p><p><b>  init1();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p

132、>  key_prc();</p><p>  key_prc2(); </p><p><b>  if(N==1)</b></p><p><b>  {</b></p><p>  display_sec();</p><p>  res_sec();</p

133、><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  display_rq();</p><p>  display();</p><p><

134、b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void time1() interrupt 3 //定時(shí)器中斷函數(shù)</p><p><b>  { </b></p>

135、<p>  if(year%4==0&&mon==2)day1=29;//閏年2月為29天 </p><p>  if(year%4!=0&&mon==2)day1=28;//非閏年2月為28天 </p><p>  if(mon==4|mon==6|mon==9|mon==11)day1=30;</p><p>  i

136、f(mon==1|mon==3|mon==5|mon==7|mon==8|mon==10|mon==12)day1=31;</p><p>  TH1=0xfc; //定時(shí)ms</p><p><b>  TL1=0x18;</b></p><p><b>  temp++;</b></p><

137、;p>  if(temp==1000) //配合定時(shí)器定時(shí)s</p><p>  { temp=0;</p><p>  second++;</p><p><b>  }</b></p><p>  if(second==60)</p><p>  { second

138、=0; </p><p>  if(minute<59)</p><p><b>  minute++;</b></p><p>  else { minute=0;</p><p>  hour++; </p><p>  if(hour==24) </p>

139、<p><b>  {</b></p><p><b>  hour=0;</b></p><p><b>  day++;</b></p><p>  if(day>day1)</p><p><b>  {</b></p>

140、<p><b>  day=1;</b></p><p><b>  mon++;</b></p><p>  if(mon>12)</p><p><b>  {</b></p><p><b>  mon=1;</b></p&

141、gt;<p><b>  year++;</b></p><p>  if(year==99)</p><p><b>  {year=0;}</b></p><p><b>  }</b></p><p><b>  }</b></p

142、><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(hour1==hour&&minute1==minute&&K0==0) //鬧鐘時(shí)間到</p&g

143、t;<p><b>  {</b></p><p>  BEEP=!BEEP;</p><p><b>  } </b></p><p>  if(temp%250==0) //每ms</p><p>  S_flag=!S_flag; //閃爍標(biāo)志

144、位取反 </p><p>  if(k==8) k=0;</p><p>  P1=a[k];</p><p>  P2=b[k++]; </p><p>  delay(1); </p><p>  P2=0xff;</p><p><b>  } </b&g

145、t;</p><p>  void sec_clo() interrupt 1 //秒表程序中斷</p><p><b>  {</b></p><p><b>  TH0=0xff;</b></p><p><b>  TL0=0xff;</b></p>

溫馨提示

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

評(píng)論

0/150

提交評(píng)論