電子時鐘計時器的設計(c語言版-調試完美通過-可直接使用)(附原理圖源程序以及完整的文檔)_第1頁
電子時鐘計時器的設計(c語言版-調試完美通過-可直接使用)(附原理圖源程序以及完整的文檔)_第2頁
電子時鐘計時器的設計(c語言版-調試完美通過-可直接使用)(附原理圖源程序以及完整的文檔)_第3頁
電子時鐘計時器的設計(c語言版-調試完美通過-可直接使用)(附原理圖源程序以及完整的文檔)_第4頁
電子時鐘計時器的設計(c語言版-調試完美通過-可直接使用)(附原理圖源程序以及完整的文檔)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、湖南人文科技學院課程設計報告課程名稱:單片機原理及應用課程設計設計題目: 電子時鐘的設計 系 別: 通信與控制工程系 專 業(yè): 通信工程 班 級: 09級通信二班 學生姓名: 袁 琦 黃文付 學 號: 09416230 09416227 起止日期: 2011年12月20日2011年12月30日指導教師: 王善偉 姚毅 謝四蓮 教研室主任: 劉建閩 1指導教師評語: 指導教師簽名: 年 月 日成績評定項 目權重成績袁琦黃文付1、設計過程中出勤、學習態(tài)度等方面0.22、課程設計質量與答辯0.53、設計報告書寫及圖紙規(guī)范程度0.3總 成 績 教研室審核意見:教研室主任簽字: 年 月 日教學系審核意見

2、: 主任簽字: 年 月 日摘 要時鐘是人類日常生活必不可少的工具,本設計從日常生活中常見的事物入手,通過對電子時鐘的設計,讓我們認識到單片機已經(jīng)深入到我們生活的每個領域,該設計不僅可以鍛煉我們的動手能力,而且可以加深我們對單片機的認識和激發(fā)我們對未知科學領域的探索。本文利用單片機實現(xiàn)數(shù)字時鐘計時功能的主要內容。它體積小,成本低、功能強、使用方便、可靠性高等一系列優(yōu)點,廣泛應用于智能產業(yè)和工業(yè)自動化上。本次設計采用獨立式按鍵進行時間調整,其中STC89C52是核心元件,同時采用數(shù)碼管LED動態(tài)顯示“時”,“分”,“秒”的現(xiàn)代計時裝置。與傳統(tǒng)機械表相比,它具有走時精確,顯示直觀等特點。它的計時周期

3、為24小時,顯滿刻度為“23時59分59秒”,另外利用DS1302具有校時功能,斷電后有記憶功能,恢復供電時可實現(xiàn)計時同步等特點。該系統(tǒng)同時具有硬件設計簡單、工作穩(wěn)定性高、價格低廉等優(yōu)點。關鍵詞:STC89C52 ; LED數(shù)碼管;8255芯片;DS1302芯片;目錄設計要求11方案論證與對比11.1方案一11.2方案二21.3方案對比22系統(tǒng)硬件電路的設計32.1單片機的選擇及引腳功能介紹32.2 8255A芯片的結構及引腳功能介紹42.3 DS1302芯片的結構及引腳功能介紹62.4顯示電路設計72.5電源電路設計82.6鍵盤動態(tài)掃描電路設計83控制系統(tǒng)的軟件設計103.1主程序流程圖10

4、3.2顯示子程序113.3鬧鐘時間設定功能程序113.4鍵盤掃描程序124系統(tǒng)功能調試與整體指標134.1硬件調試與分析134.2軟件調試與分析144.3性能分析145詳細儀器清單146總結與思考及致謝15參考文獻16附錄一:程序(方案一)17附錄二:程序(方案二)25電子時鐘的設計設計要求利用單片機作為控制核心,完成一個時鐘計時器。具體要求如下:(1)采用6位LED數(shù)碼顯示時、分、秒。(2)時制式為24小時制。(3)使用按鍵開關可實現(xiàn)時、分調整。(4)秒表/時鐘功能轉換。(5)定時設定提醒的功能。(6)整點提醒(蜂鳴)。(7)DS1302設時,對時,掉電記憶時間的功能。1方案論證與對比1.1

5、方案一此方案采用單片機內部定時器T0進行計時,STC89S52實時控制。如圖1所示:圖 1 方案一系統(tǒng)方框圖1.2方案二此方案采用專用時鐘芯片DS1302精確計時,單片機STC89C52實時讀取時鐘顯示至6位數(shù)碼管。如圖2所示:圖 2 方案二系統(tǒng)方框圖1.3方案對比以上方案中,方案一設計簡潔,編程比較簡單,計時精度不高,準確性不能完全保證。雖硬件簡潔、成本更低廉、便于實現(xiàn),綠色環(huán)保,編程簡單易寫,不能達到提高同學們編程的能力和對單片機及其擴展芯片的學習和深程度的去了解單片機及其更廣泛的應用,故在此我們選擇挑戰(zhàn),放棄對其選擇。雖然我們對其進行了放棄,但我們也把此方法的程序寫好以便進行對比。方案二

6、與方案一相比,編程比較復雜,計時精度較高,而且可以靈活運用,可擴展性好,并能充分的利用單片機的有效資源。還可讓我們培養(yǎng)我們的自學能力,自己去發(fā)掘單片機內部結構及其擴展功能,自己去學會怎樣對其他芯片控制的學習方法,使得課程設計具有一定的挑戰(zhàn)性,正因如此,故我們選擇方案二。2系統(tǒng)硬件電路的設計2.1單片機的選擇及引腳功能介紹STC89C52具有如下特點:40個引腳(引腳圖如圖四所示),4k Bytes Flash片內程序存儲器,128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,看

7、門狗(WDT)電路,片內時鐘振蕩器。此外,STC89C52RC設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式??臻e模式下,CPU暫停工作,而RAM定時計數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復位。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應不同產品的需求。圖4 STC89C52芯片引腳圖引腳功能介紹:VCC(40):5V; GND(20):接地; P0口(3932):P0口為8位漏極開路雙向I/O口,每引腳可吸收8個TTL門電流; P1口(18):P1口是從內部提供上拉電阻器的8位雙向I/O口

8、,P1口緩沖器能接收和輸出4個TTL門電流; P2口(2128):P2口為內部上拉電阻器的8位雙向I/O口,P2口緩沖器可接收和輸出4個TTL門電流; P3口(1017):P3口是8個帶內部上拉電阻器的雙向I/O口,可接收和輸出4個TTL門電流,P3口也可作為AT89C51的特殊功能口; RST(9):復位輸入。當振蕩器復位時,要保持RST引腳2個機器周期的高電平時間; ALE/PROG(30):當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié),在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6,它可用作對外

9、部輸出的脈沖或用于定時目的,要注意的是,每當訪問外部數(shù)據(jù)存儲器時,將跳過1個ALE脈沖; PSEN(29):外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期2次PSEN有效,但在訪問外部數(shù)據(jù)存儲器時,這2次有效的PSEN信號將不出現(xiàn); EA/VPP(31):當EA保持低電平時,外部程序存儲器地址為(0000HFFFFH)不管是否有內部程序存儲器。FLASH編程期間,此引腳也用于施加12V編程電源(VPP); XTAL1(19):反向振蕩器放大器的輸入及內部時鐘工作電路的輸入;XTAL2(18):來自反向振蕩器的輸出。2.2 8255A芯片的結構及引腳功能介紹8255A芯片是I

10、ntel公司生產的通用可編程并行接口電路,廣泛應用于單片機擴展并行I/O口。它具有8個位并行口PA、PB和PC。8255A芯片的內部結構及引腳如圖5所示。(1)8255A的內部結構8255A的內部結構有以下幾部分組成:a.并行I/O端口A、B、C 8255A的內部有3個8位并行I/O口:A口、B口、C口。3個I/O口都可以通過編程選擇為輸入口或輸出口,但在結構和功能上有所不同。A口:含有一個8位數(shù)據(jù)輸出鎖存/緩沖器和一個8位輸入鎖存器。B口:含有一個8位數(shù)據(jù)輸出鎖存/緩沖器和一個8位輸入鎖存器(不鎖存)。C口:含有一個8位數(shù)據(jù)輸出鎖存/緩沖器和一個8位輸入鎖存器(不鎖存)。當數(shù)據(jù)傳送不需要聯(lián)絡

11、信號時,這3個端口都可以用作輸入口或輸出口。當A口B口需要有聯(lián)絡信號時,C口可以作為A口和B口的聯(lián)絡信號線。b.工作方式控制電路:8255A的三個端口在使用使可分為A、B兩組。A組包括A口8位和C口高4位:B組包括B口8位和C口低4位。兩組的控制電路中分別有控制寄存器,根據(jù)寫入的控制字決定兩組的工作方式,也可對C口每一位置“1” 或清“0”。c.數(shù)據(jù)總線緩沖器:數(shù)據(jù)總線緩沖器是三態(tài)雙向的8位緩沖器,是8255A與單片機數(shù)據(jù)總線的接口,8255A的D0D7可以和AT89C51單片機的P0.0P0.7直接相連。數(shù)據(jù)的輸入輸出、控制字和狀態(tài)信息的傳遞,均可通過數(shù)據(jù)總線緩沖器進行。d.讀/寫控制邏輯:

12、8255A讀/寫控制邏輯的作用是從CPU的地址和控制總線上接受有關信號,轉變成各種控制命令送到數(shù)據(jù)緩沖器及A組和B組的控制電路,控制A、B、C3個端口的操作。其引腳圖如圖5所示:圖5 8255引腳圖引腳功能介紹:8255A共有40個引腳,一般為雙列直插DIP封裝,40個引腳可分為與CPU連接的數(shù)據(jù)線、地址和控制信號以及與外圍設備連接的三個端口線。D0D7:雙向三態(tài)數(shù)據(jù)總線。RESET:復位信號,輸入,高電平有效。復位后,控制寄存器清0,A口、B口、C口被置為輸入方式。CS:片選信號,輸入,低電平有效。RD.:讀信號,輸入,低電平有效。有效時,允許CPU通過8255A D0D7讀取數(shù)據(jù)或狀態(tài)信息

13、。WR.:寫信號,輸入,低電平有效。有效時,允許A1A0:端口控制信號,輸入。2位可構成四種狀態(tài),分別尋址A口、B口、C口和控制寄存器PA0PA7:A口數(shù)據(jù)線,雙向。PB0PB7:B口數(shù)據(jù)線,雙向。PC0PC7:C口數(shù)據(jù)/信號線,雙向。當8255A工作于方式0時,PC0PC7分為兩組(每組4位)并行I/O數(shù)據(jù)線;當8255A工作于方式1或方式2時,PC0PC7為A口、B口提供聯(lián)絡信號。2.3 DS1302芯片的結構及引腳功能介紹 DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5

14、V5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。(1)DS1302的引腳功能及結構 DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc10.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1

15、時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。SCLK

16、始終是輸入端。 DS1302的引腳功能以及單片機的連接圖如圖6圖6 DS1302引腳及其與單片機連接的原理圖2.4顯示電路設計單片機中通常用七段LED構成字型“8”,另外,還有一個小數(shù)點發(fā)光二極管以顯示小數(shù)位!這種顯示器有共陰和共陽兩種!發(fā)光二極管的陽極連在一起的(公共端)稱為共陽極顯示器,陰極連在一起的稱為共陰極顯示器。一位顯示器由8個發(fā)光二極管組成,其中,7個發(fā)光二極管構成字型“8”的各個筆劃(段),a_g,另一個小數(shù)點為dp發(fā)光二極管。當在某段發(fā)光二極管上施加一定的正向電壓時,該段筆畫即亮;不加電壓則暗。為了保護各段LED不被損壞,需外加限流電阻。由于共陰極連接需加驅動,故在這里我采用的

17、是共陽陽極連接。以共陽極LED為例,各LED公共陽極K0接高電平,若向各控制端a,b,,g,dp順次送入00011110信號,則該顯示器顯示“”字型。共陰極7段LED顯示數(shù)字0 F、文字、符號及小數(shù)點的編碼(a段為最地位,dp點為最高位),如圖7。圖7 數(shù)碼管的驅動顯示電路設計2.5電源電路設計在各種電子設備中,直流穩(wěn)壓電源是必不可少的組成部分,它是電子設備唯一能量來源,它的設計思路是根據(jù)我們以前學過的模電電子技術,要想得到我們所要的+6V輸出電壓,就需將交流220V的電壓經(jīng)過變壓器、整流電路、濾波電路和穩(wěn)壓電路四個部分。2.6鍵盤動態(tài)掃描電路設計在單片機系統(tǒng)中按鍵數(shù)量較多時,為了減少I/O口

18、的占用,常常將按鈕排列成矩陣式鍵盤中,每條水平線和直線在交叉處不直接連通,而是通過一個按鈕加以連接。這樣,一個端口(如P1口)就能組成4*4=16個按鈕,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條就能組成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是最合理的。矩陣式鍵盤的按鈕識別辦法確定矩陣式鍵盤上何鍵被按下簡紹一種“行掃描法”。行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的,按鈕識別辦法,如下圖示鍵盤,介紹過程如下。判斷鍵盤中有無鍵盤按下將全部行線置低電平,然后檢測列的電平為低,則表示鍵盤中有鍵

19、被按下,而且閉合的鍵位位于低電平線與4根行線相交叉的4個按鈕之中。若所有列線均為高電平,則鍵盤中無鍵按下。判斷閉合鍵所在的位置:在確認有鍵按下后,即可置某根行線為低電平時,其他線為高電平。在確定某根位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列與置為低電平的行線交叉處的按鈕就是閉合的按鈕。將程序通過串口下載到單片機中,在鍵盤上按任意鍵時,將會在數(shù)碼管上顯示對應的字符。為了驅動鍵盤,同上以8255_PC第四位作為輸入,8255PC高四位作為列掃描輸出,以此來實現(xiàn)動態(tài)掃描顯示法。如圖8所示:圖8 鍵盤動態(tài)掃描電路設計3控制系統(tǒng)的軟件設計3.1主程序流程圖本設計中主程序主要實現(xiàn)顯示的

20、初始化和調用各子程序工作的功能,讀取時間的子程序主要實現(xiàn)初始化,時間信息的采集和顯示段碼的碼的存取。分別對各個器件的功能進行編程設計,根據(jù)主程序流程圖(如下)進行全面的分析。設計中計時主要以定時器T0中斷完成,定點鬧鈴使用峰鳴器來完成。當端口有開關按下時,轉入相應的功能程序。其主程序執(zhí)行流程圖如下圖9:圖9 主程序流程圖3.2顯示子程序時間顯示子程序顯示時鐘芯片3個內存單元(小時、分鐘、秒鐘)的BCD碼數(shù)據(jù),8255的PA口送數(shù)碼管的位選編碼。8255的PB口送段選編碼,位選段選編碼存放在ROM表中。顯示時,先取出位選編碼數(shù)據(jù),然后送至PA口輸出,接著取出段選編碼數(shù)據(jù)送至PB口輸出,剩下的數(shù)碼

21、管以同樣地方法送數(shù)據(jù)直到將3個內存單元的數(shù)據(jù)分成6個位全部送去數(shù)碼管顯示。數(shù)碼管顯示子程序流程圖如圖9所示:圖 10 數(shù)碼管顯示子程序流程圖3.3鬧鐘時間設定功能程序在時鐘狀態(tài)下,觸發(fā)外中斷1時,進入鬧鐘時間設定模式,且不影響T0計時器的功能狀態(tài),在鍵盤上輸入對應的數(shù)字進行時間設定。當分別按下調節(jié)時鐘、分鐘和秒鐘的個位時,時間自動確定,鬧鐘時間只精確到分鐘。鬧鐘時間設定流程圖如圖11所示:圖11 鬧鐘時間設定流程圖3.4鍵盤掃描程序本設計采用動態(tài)掃描法,動態(tài)掃描法不僅掃描鍵陣,也可以實現(xiàn)顯示,是目前應用十分廣泛的一種方法。動態(tài)掃描法是采用輸出“移動”信號,輪流對各行按鍵進行檢測來實現(xiàn)的。設置行

22、線為輸出,列線為輸入,當無按鍵按下時,列輸入全為“1”.設計時,將某一行輸出為“0”,讀取列線值,若其中某一位為“0”,則表明行、列交叉處的按鍵按下,否則,無按鍵按下;繼續(xù)掃描下一行(將下一行輸出為“0”),直至全掃描完為止。鍵盤掃描程序流程圖如12圖所示:圖12 鍵盤掃描程序流程圖4系統(tǒng)功能調試與整體指標4.1硬件調試與分析(1)時間準確性調試硬件調試時可先檢查印制版及焊接的質量情況,將電子時鐘通電后,顯示00:00:00。觸發(fā)INT0中斷開始計時,每過一秒時間就顯示變化一次。計時準確,顯示穩(wěn)定。(2)鬧鈴功能調試將時鐘調到11點59分58秒,2秒后,時鐘開始定點鬧鈴,鈴聲為“嘀-嘀-嘀-嘀

23、”聲,持續(xù)1分鐘報時聲自動停止也可以觸發(fā)功能鍵來中止鬧鈴。設計的電子時鐘計時精確度較高,并可應用于日常生活中。 能夠通過鍵盤對電子時鐘進行調整,且調整過程簡單方便,易于操作,有較強的人性化設計。 并且可通過鍵盤實現(xiàn)鬧鈴與時間模式的切換,使電子時鐘的功能更加強大。 能夠進行定時鬧鈴,計時較準確,基本能實現(xiàn)測試目標。4.2軟件調試與分析軟件調時在KEIL C51編譯器下進行,源程序編譯及仿真調試應分段或以子程序為單位逐個進行,最后可結合硬件實時調試。4.3性能分析按照設計程序分析,LED顯示器動態(tài)掃描的頻率為167HZ,實際使用觀察時完全沒有閃爍。由于計時中斷程序中加了中斷延時誤差處理,所以實際計

24、時精度非常高,可滿足多種場合的應用需要。5詳細儀器清單表格 1 儀器清單儀器名稱儀器名稱STC89C52STC89C528255A8255A3位數(shù)碼管3位數(shù)碼管2個DS1302DS130211.0592k晶振11.0592k晶振32.768k晶振32.768k晶振矩陣鍵盤4×4矩陣30PF電容30PF電容100PF電容100PF電容1K電阻1K電阻蜂鳴器蜂鳴器6總結與思考及致謝在老師的指導和同學的幫助之下,我完成了此次單片機課程設計。從開始接到課題要求到時鐘的實現(xiàn),再到論文的完成,每走一步對我來說都是新的嘗試與挑戰(zhàn)。在這次的課程設計中不僅檢驗了我所學習的知識,也培養(yǎng)了我如何去把握一件

25、事情,如何去做一件事情,又如何完成一件事情。在設計過程中,與同學分工設計,和同學們相互探討,相互學習,相互監(jiān)督。課程設計是我們專業(yè)課程知識綜合應用的實踐訓練,著是我們邁向社會,從事職業(yè)工作前一個必不少的過程。這次時鐘計時器設計的經(jīng)歷也會使我終身受益,我感受到做設計是要用心去做的一件事情,是真正的自己學習的過程和研究的過程,沒有學習就不可能有研究的能力,沒有自己的研究,就不會有所突破。通過設計,我在老師的精心指導和嚴格要求下,獲得了豐富的理論知識,極大地提高了實踐能力。最后,再一次感謝我的老師.,老師嚴謹細致、一絲不茍的作風一直是我學習的榜樣;老師循循善誘的教導和不拘一格的思路給予我無盡的啟迪;

26、這次時鐘計時器設計的每個環(huán)節(jié),都離不開老師您的細心指導。我懂得了學習的重要性,了解到理論知識與實踐相結合的重要意義,學會了堅持、耐心和努力,這將為自己今后的學習和工作做出了最好的榜樣。參考文獻1 余錫存.單片機原理及接口技術 M.西安:西安電子科技大學出版社,2000 2 賈好來.MCS-51單片機原理及應用 M.北京:機械工業(yè)出版社,20063 樓然苗,李光飛.單片機課程設計指導M.北京:北京航空航天大學出版社,20074 夏路易,石宗義.電路原理圖與電路板設計教程北京希望電子工業(yè)出版20025 朱定華,戴汝平.單片微機原理與應用.(M) 北京:清華大學出版社,2003附錄一:程序(方案一)

27、#include<reg52.h>#include<absacc.h>#define uint unsigned int#define uchar unsigned char#define PA XBYTE0xD1FF#define PB XBYTE0xD2FF#define PC XBYTE0xD5FF #define PCON XBYTE0xD7FFsbit buzzer=P33;/蜂鳴器端口/數(shù)碼管0-9的段選編碼uchar code tabledu=0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28;/數(shù)碼管各位選

28、編碼uchar code tablewe=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/全局變量定義unsigned long num1,num2;uchar shi0,shi1,fen0,fen1,m0,m1,num,num3,aa,bb,cc,count,temp,count,S,flag,flag1;char hour,min,second,h0,h1,mi0,mi1,s0,s1;void init();/初始化函數(shù)聲明void display(uchar,uchar,uchar,uchar,uchar,uchar );/顯示函數(shù)聲明void delay(uint);/帶

29、參數(shù)延時函數(shù)聲明 1毫秒void keyscan();/鍵盤掃描函數(shù)void main()PCON=0x80;init();while(1)/主體循環(huán)keyscan();/時鐘分離部分m1=aa%10;m0=aa/10;fen1=bb%10;fen0=bb/10;shi1=cc%10;shi0=cc/10;/clock分離部分s1=second%10;s0=second/10;mi1=min%10;mi0=min/10;h1=hour%10;h0=hour/10;/時鐘顯示和clock顯示部分if(num3>=1&&num3<=4|count=0)display(s

30、hi0,shi1,fen0,fen1,m0,m1);elsedisplay(h0,h1,mi0,mi1,s0,s1);/*整點報時*/if(aa=0&&bb=0) /報時10秒TR1=1;/開啟定時器1flag=1;/控制整點報時計數(shù)num1+/*鬧鐘報時 */if(aa=second&&bb=min&&cc=hour)/鬧時一分鐘TR1=1;/開啟定時器1flag1=1;/控制鬧鐘計數(shù)num2+/*初始化函數(shù)*/void init()/*定時器0,1初始化*/TMOD=0x11;EA=1;ET0=1;ET1=1;TH0=(65536-50000

31、)/256;TL0=(65536-50000)%256;TH1=(65536-1000)/256;TL1=(65536-1000)%256;TR0=1;void time0() interrupt 1 /定時0時鐘函數(shù)(控制數(shù)碼時鐘)TH0=(65536-50000)/256;TL0=(65536-50000)%256;num+;if(num=20)num=0;aa+;if(aa=60)aa=0;bb+;if(bb=60)bb=0;cc+;if(cc=24)cc=0;void time1() interrupt 3/定時1時鐘函數(shù)(控制整點報時時間)TH1=(65536-1000)/256;T

32、L1=(65536-1000)%256;if(flag=1)num1+;if(flag1=1)num2+;buzzer=buzzer;if(num1=10000|num2=60000)num1=0;num2=0;buzzer=1;TR1=0;flag=0;flag1=0;/*數(shù)碼管顯示函數(shù)*/void display(uchar shi0,uchar shi1,uchar fen0,uchar fen1,uchar m0,uchar m1)PA=tablewe0;PB=tabledushi0;delay(1);PA=0XFF;PB=0XFF;PA=tablewe1;PB=tabledushi1

33、;delay(1);PA=0XFF;PB=0XFF;PA=tablewe2;PB=tabledufen0;delay(1);PA=0XFF;PB=0XFF;PA=tablewe3;PB=tabledufen1;delay(1);PA=0XFF;PB=0XFF;PA=tablewe4;PB=tabledum0;delay(1);PA=0XFF;PB=0XFF;PA=tablewe5;PB=tabledum1;delay(1);PA=0XFF;PB=0XFF;/*毫秒函數(shù)*/void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=124;y>0;

34、y-);/*鍵盤函數(shù)函數(shù)*/void keyscan()PC=0xfe;temp=PC;temp=temp&0xf0;if(temp!=0xf0)delay(5);temp=PC;temp=temp&0xf0;if(temp!=0xf0)temp=PC;switch(temp)case 0xee:num3=1;/秒鐘加一按鍵break;case 0xde:num3=2;/分鐘加一按鍵break;case 0xbe:num3=3;/時鐘加一按鍵break;case 0x7e:num3=4;/清零按鍵break;while(temp!=0xf0)/松手檢測temp=PC;temp=

35、temp&0xf0;display(shi0,shi1,fen0,fen1,m0,m1);switch(num3)case 1: aa+;if(aa>59)aa=0; break;case 2: bb+;if(bb>59)bb=0; break;case 3: cc+;if(cc>23)cc=0; break;case 4: aa=0,bb=0,cc=0;break; PC=0xfd;temp=PC;temp=temp&0xf0;if(temp!=0xf0)delay(5);temp=PC;temp=temp&0xf0;if(temp!=0xfe)te

36、mp=PC;switch(temp)case 0xed:num3=5;/定時器暫停,并進入設置clock狀態(tài)按鍵break;case 0xdd:num3=6;/設置clock的秒,分,時加時按鍵break;case 0xbd:num3=7;/設置clock的秒,分,時減時按鍵break;case 0x7d:num3=8;/定時器暫停,開啟按鍵break;while(temp!=0xf0)temp=PC;temp=temp&0xf0;display(h0,h1,mi0,mi1,s0,s1);switch(num3)case 5:TR0=0;count+;if(count=4)count=

37、0;TR0=1;break;case 6:if(count=1)second+;if(second=60)second=0;else if(count=2)min+;if(min=60)min=0;else if(count=3)hour+;if(hour=24)hour=0;break;case 7:if(count=1)second-;if(second=-1)second=59;else if(count=2)min-;if(min=-1)min=59;else if(count=3)hour-;if(hour=-1)hour=23;break;case 8:S+;if(S%2=1)TR

38、0=0;elseTR0=1;if(S=2)S=0;break;附錄二:程序(方案二)#include<reg52.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int#define uchar unsigned char#define PA XBYTE0xD1FF#define PB XBYTE0xD2FF#define PC XBYTE0xD5FF#define PCON XBYTE0xD7FFuchar num,temp,hour,minute,second,hour1,ho

39、ur2,minute1,minute2,second1,second2;uchar aa,aa1,aa2,bb,bb1,bb2,cc,cc1,cc2;sbit buzzer=P33;/蜂鳴器sbit D0=P10;/用來指示鬧鐘開啟關閉的LEDbit flag;/鬧鐘開啟關閉的標志位uint a0;uchar code tabledu=0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28;/數(shù)碼管0123456789的段選編碼uchar code tablewe=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/數(shù)碼管的位選編碼sbit

40、 SCLK=P32;sbit RST=P26;sbit IO=P35;/*毫秒延時程序*/void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/*微秒延時程序*/void delay_us(uchar n)uchar i; for(i=0;i<n;i+) ;/*1302做好準備*/void ready_init1302()RST=0;SCLK=0;RST=1;/*1302單字節(jié)數(shù)據(jù)寫入*/void write1302(uchar dat)uchar i;SCLK=0;delay_us(2);for(i=0;i

41、<8;i+) IO=dat&0x01;delay_us(2);SCLK=1;delay_us(2);SCLK=0;dat>>=1; /*1302雙字節(jié)數(shù)據(jù)寫入(寄存器地址和數(shù)據(jù))*/void write_set1302(uchar cmd,uchar dat)ready_init1302();delay_us(2);write1302(cmd);write1302(dat);SCLK=1;RST=0;/*1302單字節(jié)數(shù)據(jù)讀出*/uchar read1302()uchar i,dat;dat=0;delay_us(2);for(i=0;i<8;i+)dat>

42、;>=1;if(1=IO)dat=dat|0x80;SCLK=1;delay_us(2);SCLK=0;delay_us(2);return dat;/*1302單字節(jié)數(shù)據(jù)讀出(讀指定寄存器值)*/uchar read_set1302(uchar cmd)uchar dat;ready_init1302();write1302(cmd);dat=read1302();SCLK=1;RST=0;return dat;/*1302初始化(設置初始時間)*/void init1302()write_set1302(0x8e,0x00);write_set1302(0x80,(0/10)<

43、<4|(0%10);write_set1302(0x82,(27/10)<<4|(27%10);write_set1302(0x84,(10/10)<<4|(10%10);write_set1302(0x90,0xa5);/以2K電阻方式給備用電源充電write_set1302(0x8e,0x80);/*1302數(shù)據(jù)讀出(讀已經(jīng)設置好的時間)*/void readtime()uchar temp;temp=read_set1302(0x81);second=(temp&0x70)>>4)*10+(temp&0x0F);temp=read

44、_set1302(0x83);minute=(temp&0x70)>>4)*10+(temp&0x0F);temp=read_set1302(0x85);hour=(temp&0x70)>>4)*10+(temp&0x0F);/*數(shù)碼管顯示函數(shù)(入口參數(shù)為每個數(shù)碼管的段選序號)*/void dispaly(uchar du0,uchar du1,uchar du2,uchar du3,uchar du4,uchar du5)PA=tablewe0;PB=tabledudu0;delay(2);PA=0xff;PB=0xff;delay(2

45、);PA=tablewe1;PB=tabledudu1;delay(2);PA=0xff;PB=0xff;delay(2);PA=tablewe2;PB=tabledudu2;delay(2);PA=0xff;PB=0xff;delay(2);PA=tablewe3;PB=tabledudu3;delay(2);PA=0xff;PB=0xff;delay(2);PA=tablewe4;PB=tabledudu4;delay(2);PA=0xff;PB=0xff;delay(2);PA=tablewe5;PB=tabledudu5;delay(2);PA=0xff;PB=0xff;delay(2

46、);/*秒鐘加一調整(供鍵盤設置秒鐘)*/void second_inc()second+;if(second>=60)second=0;write_set1302(0x8e,0x00);write_set1302(0x80,(second)/10)<<4|(second)%10);write_set1302(0x8e,0x80);/*分鐘加一調整(供鍵盤設置分鐘)*/void minute_inc()minute+;if(minute>=60)minute=0;write_set1302(0x8e,0x00);write_set1302(0x82,(minute)/10

溫馨提示

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

評論

0/150

提交評論