單片機(jī)課程設(shè)計(jì) 時(shí)鐘跑表_第1頁
單片機(jī)課程設(shè)計(jì) 時(shí)鐘跑表_第2頁
單片機(jī)課程設(shè)計(jì) 時(shí)鐘跑表_第3頁
單片機(jī)課程設(shè)計(jì) 時(shí)鐘跑表_第4頁
單片機(jī)課程設(shè)計(jì) 時(shí)鐘跑表_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、成績課 程 設(shè) 計(jì)課程名稱單片機(jī)原理與應(yīng)用課程設(shè)計(jì)課題名稱時(shí)鐘跑表設(shè)計(jì)專 業(yè)班 級學(xué) 號姓 名指導(dǎo)老師林國漢、王迎旭、汪超、李曉秀等2017年5月22日電氣信息學(xué)院課程設(shè)計(jì)任務(wù)書課題名稱時(shí)鐘跑表設(shè)計(jì)姓 名專業(yè)班級學(xué)號指導(dǎo)老師林國漢課程設(shè)計(jì)時(shí)間2017年5月22日-2017年6月3日一、任務(wù)及要求設(shè)計(jì)任務(wù):本課題要求以MCS-51系列單片機(jī)為核心,設(shè)計(jì)一個(gè)數(shù)字時(shí)鐘。(1) 具有時(shí)鐘和跑表功能,用LED或者液晶顯示器進(jìn)行顯示;(2) 具有時(shí)鐘調(diào)整功能(3) * 具有鬧鐘功能,且鬧鐘時(shí)間可調(diào)整。(4) *其它功能設(shè)計(jì)要求:(1)確定系統(tǒng)設(shè)計(jì)方案;(2)進(jìn)行系統(tǒng)的硬件設(shè)計(jì);(3)完成應(yīng)用程序設(shè)計(jì);(4

2、)應(yīng)用系統(tǒng)的硬件和軟件的調(diào)試。二、進(jìn)度安排第一周:周一:集中布置課程設(shè)計(jì)任務(wù)和相關(guān)事宜,查資料確定系統(tǒng)總體方案。周二周三:完成硬件設(shè)計(jì)和電路連接周四周日:完成軟件設(shè)計(jì)第二周:周一周三:程序調(diào)試周四周五:設(shè)計(jì)報(bào)告撰寫。周五進(jìn)行答辯和設(shè)計(jì)結(jié)果檢查。三、參考資料1、王迎旭等.單片機(jī)原理及及應(yīng)用M. 2版.機(jī)械工業(yè)出版社,20122、胡漢才.單片機(jī)原理及其接口技術(shù)M.3版.清華大學(xué)出版社,2010.3、戴燦金.51單片機(jī)及其C語言程序設(shè)計(jì)開發(fā)實(shí)例M.清華大學(xué)出版社,2010目 錄第一章 總體方案設(shè)計(jì)11.1 設(shè)計(jì)方案設(shè)計(jì)任務(wù)與要求11.2 設(shè)計(jì)思路及系統(tǒng)框架圖1第二章 硬件電路設(shè)計(jì)32.1 單片機(jī)AT

3、89C5132.2 矩陣鍵盤電路42.3 蜂鳴器電路42.4 LED數(shù)碼管顯示電路5第三章 軟件設(shè)計(jì)63.1 系統(tǒng)主程序63.2 矩陣鍵盤功能程序63.4 定時(shí)功能程序8第四章 調(diào)試104.1 系統(tǒng)調(diào)試方法104.2 調(diào)試結(jié)果10第五章 總結(jié)11附錄12附錄A 電路仿真原理圖12附錄B 程序清單13第一章 總體方案設(shè)計(jì)1.1設(shè)計(jì)任務(wù)與要求設(shè)計(jì)任務(wù):本課題要求以MCS-51系列單片機(jī)為核心,設(shè)計(jì)一個(gè)數(shù)字時(shí)鐘。(1) 具有時(shí)鐘和跑表功能,用LED或者液晶顯示器進(jìn)行顯示;(2) 具有時(shí)鐘調(diào)整功能(3) * 具有鬧鐘功能,且鬧鐘時(shí)間可調(diào)整。(4) *其它功能設(shè)計(jì)要求:(1) 確定系統(tǒng)設(shè)計(jì)方案;(2)

4、進(jìn)行系統(tǒng)的硬件設(shè)計(jì);(3) 完成應(yīng)用程序設(shè)計(jì);(4) 應(yīng)用系統(tǒng)的硬件和軟件的調(diào)試。1.2 設(shè)計(jì)思路及系統(tǒng)框架圖我們采用的是AT89C51作為時(shí)鐘控制芯片。本次方案主要由時(shí)鐘模塊、秒表模塊和鬧鐘模塊組成,其中時(shí)鐘模塊包含時(shí)鐘顯示功能、時(shí)鐘調(diào)整功能和時(shí)鐘暫停功能,秒表模塊包含秒表啟動(dòng)功能、秒表暫停功能、秒表時(shí)間存儲(chǔ)功能和秒表回顯功能,鬧鐘模塊包含鬧鐘調(diào)整功能、鬧鐘顯示功能和鬧鐘存儲(chǔ)功能。時(shí)鐘通過定時(shí)器T0對時(shí)、分、秒的數(shù)值進(jìn)行操作,并且秒計(jì)算到60的時(shí)候,要自己清零并向分進(jìn)1,分計(jì)算到60的時(shí)候,要自己清零并向時(shí)進(jìn)1,時(shí)進(jìn)到24的時(shí)候,要清零,這樣才能進(jìn)行循環(huán)計(jì)時(shí)。秒表模塊需要重新顯示一個(gè)秒表界面

5、,同時(shí)也應(yīng)該需要通過另外一個(gè)定時(shí)器T1對秒表進(jìn)行操作,從而保證在秒表界面,時(shí)鐘顯示模塊的時(shí)間還在進(jìn)行。鬧鐘模塊則需要設(shè)計(jì)鬧鐘時(shí)間,當(dāng)設(shè)計(jì)的鬧鐘時(shí)間和時(shí)鐘的時(shí)間相等,蜂鳴器響起,從而達(dá)到鬧鐘功能,此外通過外接24c02存儲(chǔ)芯片,將鬧鐘時(shí)間進(jìn)行存儲(chǔ),且具有斷電存儲(chǔ)功能,當(dāng)系統(tǒng)斷電重新開啟以后,可顯示之前設(shè)定的鬧鐘值。此外還要實(shí)現(xiàn)對時(shí)間的調(diào)整功能,AT89C51的P1口外接一個(gè)矩陣鍵盤,當(dāng)按下K3鍵時(shí),進(jìn)行時(shí)鐘調(diào)整,當(dāng)K3按下一次時(shí),是對時(shí)間的分鐘進(jìn)行調(diào)整,按下K5鍵數(shù)值加一,按下K6鍵數(shù)值減一。當(dāng)按下K12鍵時(shí),進(jìn)行鬧鐘的調(diào)整,當(dāng)K3按下一次時(shí),是對鬧鐘的分鐘進(jìn)行調(diào)整,按下K5鍵數(shù)值加一,按下K6

6、鍵數(shù)值減一。對于秒表模塊,當(dāng)按下K7鍵時(shí),秒表啟動(dòng),當(dāng)按下K8鍵時(shí),顯示秒表當(dāng)前值,但秒表繼續(xù)走動(dòng)。在秒表計(jì)時(shí)過程中,每按下一次K9鍵,則對秒表當(dāng)前值進(jìn)行存儲(chǔ),每按下K10鍵,則對存儲(chǔ)值進(jìn)行一一回顯(矩陣鍵盤按鍵標(biāo)號詳見電路仿真圖)。在單片機(jī)內(nèi)部構(gòu)建兩個(gè)模塊:控制模塊、定時(shí)模塊,用以實(shí)現(xiàn)根據(jù)要求進(jìn)行自動(dòng)計(jì)數(shù)功能。單片機(jī)外部構(gòu)建四個(gè)電路:矩陣鍵盤電路、數(shù)碼管顯示電路、蜂鳴器電路、24C02存儲(chǔ)電路,用以實(shí)現(xiàn)對單片機(jī)內(nèi)部計(jì)數(shù)選擇控制、鬧鐘響鈴、鬧鐘存儲(chǔ)和時(shí)間輸出的正確顯示。該電子時(shí)鐘是顯示分、時(shí)值,秒為數(shù)碼表的DP位閃爍的一種計(jì)時(shí)裝置本次計(jì)時(shí)周期設(shè)置為24小時(shí)。為了確保時(shí)間正常校對,在系統(tǒng)中設(shè)有校

7、對按鈕,用以實(shí)現(xiàn)對數(shù)碼管顯示的正確調(diào)整,如圖1.1所示為系統(tǒng)框架圖。圖1.1 系統(tǒng)框架圖第2章 硬件電路設(shè)計(jì)2.1 單片機(jī)AT89C51AT89C51是一低電壓、高性能CMOS的8位微處理器,俗稱單片機(jī)。AT89C51是一種帶2K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案,如圖2.1所示為AT89C51的管腳圖。本次電路中用到單片機(jī)的P0、P1、P2、P3口,所示下面對這四個(gè)端口進(jìn)行

8、詳細(xì)介紹。 P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須接上拉電阻。本次課設(shè)中P0口接的是數(shù)碼管的8個(gè)管腳,P00P07依次接數(shù)碼管的ADP管腳。P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLAS

9、H編程和校驗(yàn)時(shí),P1口作為低八位地址接收。本次P1課設(shè)口接的數(shù)碼管的6個(gè)位選端口。 圖2.1 89C51引腳圖P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號和控制信號

10、。本次課設(shè)中P2口的P24P27分別接的是數(shù)碼管的位選W1W4。P3口:本次課設(shè)中P3口的P33和P34分別接的是24C02的SCL和SDA,P37接的是蜂鳴器的一端。2.2 矩陣鍵盤電路在本次設(shè)計(jì)中,矩陣鍵盤的S1S4列分別接P17P14引腳,H1H4行分別接的是P13P10引腳。先從P1口的高四位輸出高電平,低四位輸出低電平,從P1口的高四位讀取鍵盤狀態(tài)。再從P1口的高四位輸出低電平,低四位輸出高電平,從P1口的低四位讀取鍵盤狀態(tài)。將兩次讀取結(jié)果組合起來就可以得到當(dāng)前按鍵的特征編碼。使用上述方法我們得到16個(gè)鍵的特征編碼。如圖2.2所示為矩陣鍵盤接線圖。 圖2.2 矩陣鍵盤接線圖2.3 蜂

11、鳴器電路 當(dāng)時(shí)鐘顯示的時(shí)間與鬧鐘存儲(chǔ)的時(shí)間相同時(shí),P37引腳輸出低電平,使蜂鳴器接通,發(fā)出滴滴的響聲,響聲持續(xù)時(shí)間為20秒,20秒后P37引腳輸出高電平,蜂鳴器關(guān)斷,如圖2.3所示為蜂鳴器接線圖。圖2.3 蜂鳴器接線圖2.4 LED數(shù)碼管顯示電路在本次的設(shè)計(jì)中,采用的4位的數(shù)碼管顯示器。數(shù)碼管如果按照段數(shù)分可為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元,也就是多了一個(gè)小數(shù)點(diǎn)的顯示;如果按照發(fā)光二極管單元的連接方式又可以分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽極的數(shù)碼管是將所有發(fā)光二極管的陽極接到一起后就形成公共陽極(COM)的數(shù)碼管,共陽極數(shù)碼管在應(yīng)用時(shí)要將公共極(COM)

12、接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。共陰極數(shù)碼管是將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰極數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極(COM)接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽極為低電平時(shí),相應(yīng)字段就不亮。本次課設(shè)的數(shù)碼管選用共陽極八段數(shù)碼管,如圖2.4所示為LED數(shù)碼管接線圖。圖2.4 LED數(shù)碼管接線圖第3章 軟件設(shè)計(jì)3.1 系統(tǒng)主程序先對顯示單元和定時(shí)器/計(jì)數(shù)器初始化,然后重復(fù)調(diào)用數(shù)碼管顯示模塊和按鍵處理模塊,檢測矩陣按鍵值,則轉(zhuǎn)入相應(yīng)的功能程序。主程序

13、流程圖如圖3.1所示。 圖3.1 主程序流程圖 3.2 矩陣鍵盤功能程序 本次設(shè)計(jì)的16個(gè)矩陣按鍵共用到了12個(gè)按鍵,每個(gè)按鍵都有相應(yīng)的功能。K1鍵為時(shí)鐘啟動(dòng)鍵,按下K1鍵后數(shù)碼管顯示時(shí)鐘。此時(shí)按下K3鍵以后進(jìn)行時(shí)鐘調(diào)整,按一下進(jìn)行分鐘調(diào)整,按兩下進(jìn)行小時(shí)調(diào)整。接著按K5鍵數(shù)值加一,按K6鍵數(shù)值減一。每次調(diào)整分鐘或小時(shí)之后都要按K1鍵進(jìn)行確定之后才能重新按K3鍵進(jìn)行調(diào)整。按下K7鍵啟動(dòng)秒表,接著按下K8鍵,秒表暫停,但此時(shí)秒表還在走動(dòng),只是顯示按鍵時(shí)秒表的當(dāng)前值。在秒表走動(dòng)過程中,按下K9鍵則存儲(chǔ)當(dāng)前按下值,每按一下,存儲(chǔ)一個(gè)值,按下K10鍵后則回顯秒表之前存儲(chǔ)的值,每按一下,回顯一個(gè)時(shí)間,循

14、環(huán)顯示。K11鍵為鬧鐘顯示功能按鍵,K12為鬧鐘調(diào)整按鍵,按一下進(jìn)行分鐘調(diào)整,按兩下進(jìn)行小時(shí)調(diào)整。接著按K5鍵數(shù)值加一,按K6鍵數(shù)值減一。每次調(diào)整分鐘或小時(shí)之后都要按K11鍵進(jìn)行確定之后才能重新按K12鍵進(jìn)行調(diào)整。此外K2鍵為時(shí)鐘暫停鍵,K4鍵為系統(tǒng)清零鍵。時(shí)鐘模塊、秒表模塊和鬧鐘模塊對應(yīng)的矩陣鍵盤功能程序流程圖分別如圖3.3、圖3.4、圖3.5所示。 圖3.3 時(shí)鐘模塊矩陣鍵盤功能流程圖 圖3.4 秒表模塊矩陣鍵盤功能流程圖圖3.5 鬧鐘模塊矩陣鍵盤功能流程圖3.3 定時(shí)功能程序T0用于時(shí)鐘定時(shí),定時(shí)時(shí)間設(shè)為50ms,定時(shí)時(shí)間到則中斷,在中斷服務(wù)程序中用一個(gè)計(jì)數(shù)器對50ms計(jì)數(shù),計(jì)20次則對

15、秒單元加一。秒單元加到60則對分單元加一,同時(shí)秒單元清0;分單元加到60則對時(shí)單元加一,同時(shí)分單元清0;時(shí)單元加到24則對時(shí)單元清0,標(biāo)志一天時(shí)間計(jì)滿。T1用于秒表定時(shí),定時(shí)時(shí)間設(shè)為20ms,定時(shí)時(shí)間到則中斷,在中斷服務(wù)程序中用一個(gè)計(jì)數(shù)器對20ms計(jì)數(shù),計(jì)5次則對秒表的100毫秒單元加一。100毫秒單元加到10則對秒單元加一,同時(shí)100毫秒單元清0;秒單元加到1000則自動(dòng)清0。時(shí)鐘的秒顯示為數(shù)碼管第四位管子的DP值閃爍,每次秒加一DP就會(huì)閃爍一次。定時(shí)器T0功能流程圖如圖3.4所示,定時(shí)器T1功能流程圖如圖3.5所示。 圖3.4 定時(shí)器T0功能流程圖 圖3.5 定時(shí)器T1功能流程圖第4章 調(diào)

16、試4.1 系統(tǒng)調(diào)試方法 先在電腦上使用Proteus仿真軟件進(jìn)行電路的仿真進(jìn)行仿真,編程使用keil、調(diào)試工具并生成可執(zhí)行文件加載到單片機(jī)中,在Proteus中點(diǎn)擊運(yùn)行,查看運(yùn)行結(jié)果是否與預(yù)期要求相符,如果仿真成功,便可以到實(shí)驗(yàn)板上進(jìn)行實(shí)物實(shí)驗(yàn)。4.2 調(diào)試結(jié)果圖4.1 時(shí)鐘顯示調(diào)試圖 圖4.2 秒表顯示調(diào)試圖 圖4.3 鬧鐘顯示調(diào)試圖第5章 總結(jié)與體會(huì)附錄附錄A 電路仿真原理圖 附錄B 程序清單20#include"reg52.h"#include"intrins.h"#ifndef _I2C_H_#define _I2C_H_#define uint

17、 unsigned int#define uchar unsigned charuint xdata resultm100;uint xdata resultf100;uchar code duanxuan= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0x83,0xc6,0xa1,0x86,0x8e ,0xff;/共陽極0f數(shù)碼管編碼uchar code duanxuan1= 0xc0-0x80,0xf9-0x80,0xa4-0x80,0xb0-0x80,0x99-0x80,0x92-0x80,0x82-0x80,0xf8-0

18、x80,0x80-0x80,0x90-0x80,0x7f-0x80,0x83-0x80,0xc6-0x80,0xa1-0x80,0x86-0x80,0x8e-0x80 ,0xff-0x80;uchar code weixuan=0xe0,0xd0,0xb0,0x70;uchar flag3;uchar temp,timer0_shi,timer0_fen,timer0_miao;uchar timer1_fm,nao1,nao2,nao3,nao4;uint timer1_zm;uchar timer1_bw, timer1_sw, timer1_gw; uchar c,z,k; sbit b

19、eep =P37 ;sbit scl=P34;sbit sda=P35;uint t0=0,t1=0;/-定義使用的IO口-/sbit I2C_SCL = P34;sbit I2C_SDA = P35;void I2C_Delay10us();void I2C_Start();void I2C_Stop();uchar I2C_SendByte(uchar dat, uchar ack);uchar I2C_ReadByte();void At24c02Write(unsigned char addr,unsigned char dat);unsigned char At24c02Read(u

20、nsigned char addr);#endifvoid init(void)TMOD=0x11;TCON=0x01; TH0=0x3c; /定時(shí)50ms TL0=0x0b0; TH1=0xb1;/定時(shí)20ms TL1=0xe0; EA=1; EX0=1; ET0=1; ET1=1;void delay(uint x) /12Mhz延時(shí)xmsuint i,j;for(i=x;i>0;i-)for(j=20;j>0;j-);void smg_display(uchar dx,uchar wx)/數(shù)碼管位選P0=duanxuandx;P2=weixuanwx-1;delay(1);

21、void smg_display1(uchar dx,uchar wx)/數(shù)碼管位選P0=duanxuan1dx;P2=weixuanwx-1; delay(1); uchar keyscan()uchar temp_keyvalue,temp1_keyvalue;P1=0xf0;delay(1);temp_keyvalue=P1;if(temp_keyvalue!=0xf0)delay(2); temp_keyvalue=P1; if(temp_keyvalue!=0xf0)temp1_keyvalue=temp_keyvalue&0xf0; P1=0x0f; delay(2);te

22、mp_keyvalue=P1;temp1_keyvalue=temp1_keyvalue|temp_keyvalue; while(temp_keyvalue!=0x0f)P1=0x0f;temp_keyvalue=P1; return temp1_keyvalue;void naozhong(uchar s,uchar f) if(s=timer0_shi&&f=timer0_fen) if(timer0_miao<=20) beep=0; if(timer0_miao>20) beep=1;void disposal(void) uchar hour,secon

23、d,timer1_ffm; uchar zt_bw,zt_sw,zt_gw,zt_fm;uchar nao_fen,nao_shi; uchar nao_gsw,nao_ggw,nao_dsw,nao_dgw; uchar key_progress,timer0_gsw,timer0_ggw,flag1,flag2; uchar timer0_dsw,timer0_dgw,s1,s2,f1,f2; key_progress=keyscan(); switch(key_progress)case 0xbe:/ 時(shí)鐘暫停TR0=0;timer0_gsw=timer0_shi/10;timer0_g

24、gw=timer0_shi%10;timer0_dsw=timer0_fen/10;timer0_dgw=timer0_fen%10;smg_display(timer0_gsw,1); smg_display1(timer0_ggw,2); smg_display(timer0_dsw,3);smg_display(timer0_dgw,4); break;case 0xee: /清零TR0=0; TR1=0;timer1_zm=0; timer1_fm=0; timer0_shi=0; timer0_fen=0;timer0_dgw=timer0_fen%10;timer0_gsw=tim

25、er0_shi/10;timer0_ggw=timer0_shi%10;timer0_dsw=timer0_fen/10;timer0_dgw=timer0_fen%10;smg_display(timer0_gsw,1); smg_display1(timer0_ggw,2); smg_display(timer0_dsw,3);smg_display(timer0_dgw,4); break; case 0x7e:/時(shí)鐘啟動(dòng) keyscan(); temp=P1; nao1=At24c02Read(1); nao1=At24c02Read(1); nao2=At24c02Read(2);

26、nao2=At24c02Read(2); while(temp =0xf0) TR0=1; flag3=1; timer0_gsw=timer0_shi/10; timer0_ggw=timer0_shi%10; timer0_dsw=timer0_fen/10; timer0_dgw=timer0_fen%10; smg_display(timer0_gsw,1); delay(30); smg_display1(timer0_ggw,2); delay(30); smg_display(timer0_dsw,3); delay(30); smg_display(timer0_dgw,4);

27、 delay(30); if(nao1|nao2)!=0) naozhong(nao2,nao1); temp=P1; break; case 0xde: / 時(shí)鐘調(diào)整 keyscan(); flag3=0; temp=P1; flag2=0; flag1+; if(flag1>2) flag1=2; while(temp =0xf0) s1=timer0_gsw; s2=timer0_ggw;f1=timer0_dsw;f2=timer0_dgw; hour=s2+s1*10; second=f2+f1*10; smg_display(s1,1);delay(50);smg_displ

28、ay1(s2,2);delay(50);smg_display(f1,3);delay(50); smg_display(f2,4);delay(50);temp=P1; break; case 0x7d: /加時(shí)鐘 flag3=0; if(flag1=1|flag2=1) second+; if(flag1=2|flag2=2) hour+; if(hour>=24) hour=0; if(second>=60) second=0;keyscan(); temp=P1; while(temp =0xf0) s1=hour/10; s2=hour%10; f1=second/10;

29、f2=second%10; smg_display(s1,1); delay(50); smg_display(s2,2);delay(50);smg_display(f1,3);delay(50);smg_display(f2,4); delay(50);nao1=f2+f1*10; nao2=s2+s1*10;temp=P1;if(keyscan()=0x7e) timer0_fen=f2+f1*10; timer0_shi=s2+s1*10; flag1=0; flag2=0; if(keyscan()=0xdb) nao_fen=f2+f1*10; nao_shi=s2+s1*10;

30、flag1=0; flag2=0; break; case 0xbd: /減時(shí)鐘 flag3=0; if(flag1=2|flag2=2) if(hour<=0) hour=24; hour-; if(flag1=1|flag2=1) if(second<=0) second=60; second-; keyscan(); temp=P1; while(temp =0xf0) s1=hour/10; s2=hour%10; f1=second/10;f2=second%10; smg_display(s1,1); delay(50); smg_display(s2,2);delay

31、(50);smg_display(f1,3);delay(50);smg_display(f2,4); delay(50);temp=P1;nao1=f2+f1*10; nao2=s2+s1*10;if(keyscan()=0x7e) timer0_fen=f2+f1*10; timer0_shi=s2+s1*10; flag1=0; flag2=0; if(keyscan()=0xdb) nao_fen=f2+f1*10; nao_shi=s2+s1*10; flag1=0; flag2=0; break; case 0xeb:/ 鬧鐘調(diào)整 keyscan(); flag3=0; temp=

32、P1; flag2+; flag1=0; if(flag2>2) flag2=2; while(temp =0xf0) nao_gsw=nao2/10; nao_ggw=nao2%10; if(flag2=1)nao_dsw=nao1/10;nao_dgw=nao1%10;nao3=nao_ggw+nao_gsw*10; nao4=nao_dgw+nao_dsw*10;smg_display(nao_gsw,1);delay(50); smg_display1(nao_ggw,2);delay(50); smg_display(nao_dsw,3);delay(50);smg_displ

33、ay(nao_dgw,4); delay(50);temp=P1; break;case 0xdb:/鬧鐘確定 flag3=0; keyscan(); temp=P1; while(temp =0xf0) nao_gsw=nao2/10; nao_ggw=nao2%10;nao_dsw=nao1/10;nao_dgw=nao1%10;nao3=nao_ggw+nao_gsw*10; nao4=nao_dgw+nao_dsw*10;smg_display(nao_gsw,1);delay(20); smg_display1(nao_ggw,2);delay(20); smg_display(na

34、o_dsw,3);delay(20);smg_display(nao_dgw,4); delay(20);temp=P1;At24c02Write(1,nao1);At24c02Write(1,nao1);At24c02Write(2,nao2);At24c02Write(2,nao2);break; case 0xdd:/跑表啟動(dòng) keyscan(); flag3=0; temp=P1; while(temp =0xf0) TR1=1; timer1_bw=timer1_zm/100; timer1_sw=(timer1_zm/10)%10; timer1_gw=timer1_zm%100%

35、10; timer1_ffm=timer1_fm; smg_display(timer1_bw,1); delay(10); smg_display(timer1_sw,2); delay(10); smg_display1(timer1_gw,3); delay(10); smg_display(timer1_fm,4); delay(10); temp=P1; keyscan();if(keyscan()=0xed) zt_bw=timer1_bw; zt_sw=timer1_sw; zt_gw=timer1_gw; zt_fm=timer1_fm; break; case 0xed:/

36、跑表暫停 flag3=0; smg_display(zt_bw,1); delay(20); smg_display(zt_sw,2); delay(20); smg_display1(zt_gw,3); delay(20); smg_display(zt_fm,4); delay(20); break;case 0x7b:/ 跑表計(jì)次數(shù) k+; c=k;z=k;flag3=0; keyscan(); temp=P1;resultfk-1=timer1_fm; resultmk-1=timer1_bw*100+timer1_sw*10+timer1_gw; while(temp =0xf0)

37、TR1=1; timer1_bw=timer1_zm/100; timer1_sw=(timer1_zm/10)%10; timer1_gw=timer1_zm%100%10; timer1_ffm=timer1_fm; smg_display(timer1_bw,1); delay(5); smg_display(timer1_sw,2); delay(5); smg_display1(timer1_gw,3); delay(5); smg_display(timer1_fm,4); delay(5); temp=P1; keyscan();if(keyscan()=0xed) zt_bw=

38、timer1_bw; zt_sw=timer1_sw; zt_gw=timer1_gw; zt_fm=timer1_fm; keyscan();if(keyscan()=0xbb) k=0; break;case 0xbb:/ 跑表回顯 flag3=0; k=0;c-;timer1_ffm=resultfc;timer1_bw=resultmc/100; timer1_sw=(resultmc/10)%10; timer1_gw=resultmc%100%10; keyscan(); temp=P1; while(temp =0xf0) if(c=0) c=z; smg_display(tim

39、er1_bw,1); delay(30); smg_display(timer1_sw,2); delay(30); smg_display1(timer1_gw,3); delay(30); smg_display(timer1_ffm,4); delay(30); temp=P1; break;void main()init();while(1) keyscan(); disposal(); void timer0() interrupt 1 TH0=0x3c; TL0=0x0b0; t0+; if(t0=20) t0=0; timer0_miao+; if(flag3=1) smg_di

40、splay(10,4); delay(25); if(timer0_miao=60) timer0_miao=0; timer0_fen+; if(timer0_fen=60) timer0_fen=0; timer0_shi+; if(timer0_shi=24) timer0_shi=0; void timer1() interrupt 3 TH1=0xb1;/定時(shí)20ms TL1=0xe0; t1+; if(t1=5) t1=0; timer1_fm+; if(timer1_fm=10) timer1_fm=0; timer1_zm+; if(timer1_zm>=1000) ti

41、mer1_zm=0; void I2C_Delay10us()uchar a, b;for(b=1; b>0; b-)for(a=2; a>0; a-);void I2C_Start()I2C_SDA = 1;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立時(shí)間是I2C_SDA保持時(shí)間>4.7usI2C_SDA = 0;I2C_Delay10us();/保持時(shí)間是>4usI2C_SCL = 0;I2C_Delay10us();void I2C_Stop()I2C_SDA = 0;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立時(shí)間大于4.7usI2C_SDA = 1;I2

溫馨提示

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

評論

0/150

提交評論