版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 1、引言 ··························
2、···························3</p><p> 2、總體設(shè)計 ····
3、83;····································&
4、#183;·····4</p><p> 3、詳細(xì)設(shè)計 ·························&
5、#183;··················5</p><p> 3.1硬件設(shè)計 ············
6、183;······························5</p><p> 3.2軟件設(shè)計
7、3;····································
8、183;····10</p><p> 4、實驗結(jié)果分析··························
9、83;·················26</p><p> 5、心得體會··············
10、···································27</p&g
11、t;<p> 6、參考文獻(xiàn)·································&
12、#183;···············27</p><p><b> 摘 要 </b></p><p> 單片機自20世紀(jì)70年代問世以來,以其極高的性能價格比,受到人們
13、的重視和關(guān)注,應(yīng)用很廣、發(fā)展很快。單片機體積小、重量輕、抗干擾能力強、環(huán)境要求不高、價格低廉、可靠性高、靈活性好、開發(fā)較為容易。由于具有上述優(yōu)點,在我國,單片機已廣泛地應(yīng)用在工業(yè)自動化控制、自動檢測、智能儀器儀表、家用電器、電力電子、機電一體化設(shè)備等各個方面,而51單片機是各單片機中最為典型和最有代表性的一種。這次畢業(yè)設(shè)計通過對它的學(xué)習(xí)、應(yīng)用,以AT89S51芯片為核心,輔以必要的電路,設(shè)計了一個簡易的電子時鐘,它由4.5V直流電源供電
14、,通過數(shù)碼管能夠準(zhǔn)確顯示時間,調(diào)整時間,從而到達(dá)學(xué)習(xí)、設(shè)計、開發(fā)軟、硬件的能力。 </p><p> 關(guān)鍵詞: 單片機 AT89C51</p><p><b> 1.引言</b></p><p> 20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和
15、社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時間。忘記了要做的事情,當(dāng)事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。 </p><p> 目前,單片機正朝著高性能和多品種方向發(fā)展趨勢將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價
16、格和外圍電路內(nèi)裝化等幾個方面發(fā)展。下面是單片機的主要發(fā)展趨勢。單片機應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計思想和設(shè)計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。 </p><p> 單片機模塊中最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械
17、式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用.</p><p> 數(shù)字鐘是采用數(shù)字電路實現(xiàn)對.時,分,秒.數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便。<
18、;/p><p><b> 2.總體設(shè)計</b></p><p> 1、準(zhǔn)確計時,以數(shù)字形式顯示時、分、秒的時間。</p><p> 2、小時以24小時計時形式,分秒計時為60進(jìn)位。 </p><p> 3、校正時間功能,即能隨意設(shè)定走時時間。</p><p> 4、設(shè)計5V直流電源,系統(tǒng)時鐘
19、電路、復(fù)位電路。 </p><p> 本次設(shè)計時鐘電路,使用了ATC89C51單片機芯片控制電路,單片機控制電單且省去了很多復(fù)雜的線路,使得電路簡明易懂,使用鍵盤鍵上的按鍵來調(diào)整時鐘的時、分、秒, 采用實時時鐘芯片</p><p> 現(xiàn)在市場上有很多實時時鐘集成電路,如DS1287、DS12887、DS1302等。</p><p> 實時時芯片具備年、月、日、
20、時、分、秒計時功能和多點定時功能,計時數(shù)據(jù)的更新每秒自動進(jìn)行一次,不需要程序干預(yù)。因此,在工業(yè)實時測控系統(tǒng)中多采用這一類專用芯片來實現(xiàn)實時時鐘功能。</p><p> 總設(shè)計原理框圖如下圖所示:</p><p><b> 3.詳細(xì)設(shè)計</b></p><p><b> 3.1硬件設(shè)計</b></p>&
21、lt;p> 3.1.1、STC89C51單片機介紹 </p><p> STC89C51單片機內(nèi)部主要包括累加器ACC(有時也簡稱為A)、程序狀態(tài)字PSW、地址指示器DPTR、只讀存儲器ROM、隨機存取存儲器RAM、寄存器、并行I/O接口P0~P3、定時器/計數(shù)器、串行I/O接口以及定時控制邏輯電路等。這些部件通過內(nèi)部總線聯(lián)接起來,構(gòu)成一個完整的微型計算機。其管腳圖如圖 </p><
22、p> STC89C51單片機管腳結(jié)構(gòu)圖</p><p><b> VCC:電源。</b></p><p><b> GND:接地。</b></p><p> P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程 序數(shù)據(jù)存儲器,
23、它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p> P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作 輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址
24、接收。 </p><p> P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻 拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存 儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存
25、儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器 的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p> P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p> P3口也可作為AT
26、89C51的一些特殊功能口,如下表所示:</p><p><b> 口管腳 備選功能</b></p><p> P3.0 RXD(串行輸入口)</p><p> P3.1 TXD(串行輸出口)</p><p> P3.2 /INT0(外部中斷0)</p><p> P3.3 /INT1(
27、外部中斷1)</p><p> P3.4 T0(記時器0外部輸入)</p><p> P3.5 T1(記時器1外部輸入)</p><p> P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)</p><p> P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)</p><p> P3口同時為閃爍編程和編程校驗接收一些控制信號。&
28、lt;/p><p> RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。</p><p> ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE 端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)
29、用作外部數(shù)據(jù)存儲器 時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p> PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。<
30、;/p><p> EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時, /EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> 3.1.2、上電按鈕復(fù)位電路</p><p> 本設(shè)計采用
31、上電按鈕復(fù)位電路:首先經(jīng)過上電復(fù)位,當(dāng)按下按鍵時,RST直接與VCC相連,為高電平形成復(fù)位,同時電解電容被電路放電;按鍵松開時,VCC對電容充電,充電電流在電阻上,RST依然為高電平,仍然是復(fù)位,充電完成后,電容相當(dāng)于開路,RST為低電平,單片機芯片正常工作。其中電阻R2決定了電容充電的時間,R2越大則充電時間長,復(fù)位信號從VCC回落到0V的時間也長。</p><p> 3.1.3、晶振電路</p>
32、<p> 本設(shè)計晶振電路采用12M的晶振。晶振的作用是給單片機正常工作提供穩(wěn)定的時鐘信號。單片機的晶振并不是只能用12M,只要不超過20M就行,在準(zhǔn)許的范圍內(nèi),晶振越大,單片機運行越快,還有用12M的就是好算時間,因為一個機器周期為1/12時鐘周期,所以這樣用12M的話,一個時鐘周期為12us,那么定時器計一次數(shù)就是1us了,電容范圍在20-40pF之間,這里連接的是30pF的電容。</p><p&g
33、t; 機器周期=10*晶振周期=12*系統(tǒng)時鐘周期</p><p> 3.1.4.下載端口</p><p> 設(shè)計用到的STC89C52單片機芯片的ISP下載線是通過單片機的TXD,RXD引腳把程序燒進(jìn)去的。管腳TXD和RXD用于異步串行通信。其實STC89C52單片機的ISP下載線就是一個max232芯片連接STC和計算機的串行通信口。計算機把程序從九針串口送到max232芯片,電
34、平轉(zhuǎn)換后送進(jìn)單片機的串行口,也就是TXD和RXD。然后單片機的串行模塊把數(shù)據(jù)送到程序區(qū)。</p><p> 3.1.5、顯示電路 </p><p> 就時鐘而言,通??刹捎靡壕э@示或數(shù)碼管顯示。由于一般的段式液晶屏要專門的驅(qū)動電路,而且液晶顯示具有亮度高、價格便宜等優(yōu)點。</p><p> 3.1.6時鐘顯示校正電路</p><p>
35、 本設(shè)計利用按鍵開關(guān)來校正時鐘顯示的數(shù)字。當(dāng)按鈕按下時,將在相應(yīng)的端口輸入一個低電平,通過相應(yīng)的程序來改變時鐘顯示。其中S1按鍵開關(guān)用來選擇要修改的數(shù)字;S2按鍵用來增加所選數(shù)字的數(shù)值;S3按鍵用來減少所選數(shù)字的數(shù)值。</p><p><b> 3.2軟件設(shè)計</b></p><p><b> 3.2.1主程序。</b></p>
36、<p> 主程序主要用于系統(tǒng)初始化:設(shè)置計時緩沖區(qū)的位置及初值,設(shè)置8155的工作方式、定時器的工作方式和計數(shù)初值等參數(shù)。主程序流程如下圖所示。</p><p><b> 開始</b></p><p><b> 定義堆棧區(qū)</b></p><p> T0、數(shù)據(jù)緩沖區(qū)、標(biāo)志位初始化</p>
37、<p><b> 調(diào)用鍵盤掃描程序</b></p><p><b> 否</b></p><p> 是C/R鍵? </p><p><b> 是</b></p><p> 地址指針指向計時緩沖區(qū)</p><p><b
38、> 調(diào)用時間設(shè)置程序</b></p><p><b> 主程序流程圖</b></p><p><b> 3.2.2計時。</b></p><p> 即定時器0中斷子程序,完成刷新計時緩沖區(qū)的功能。</p><p> 系統(tǒng)使用6MHz的晶振,假設(shè)定時器0工作在方式1,則定時
39、器的最大定時時間為65.536ms,這個值遠(yuǎn)遠(yuǎn)小于1s。因此本系統(tǒng)采用定時器與軟件循環(huán)相結(jié)合的定時方法。設(shè)定時器0工作在方式1,每隔50ms溢出中斷一次,則循環(huán)中斷20次延時時間是1s,上述過程重復(fù)60次為1分,分計時60次為1小時,小時計時24次則時間重新回到00:00:00。</p><p> 因定時器0工作在方式1,則50ms定時對應(yīng)的定時器初值為:65536-50ms/2us=40536=9E58H,即
40、TH0=9EH,TH0=58H。</p><p> 但應(yīng)當(dāng)指出:CPU從響應(yīng)T0中斷到完成定時器初值重裝這段時間,定時器T0并不停止工作,而是繼續(xù)計數(shù)。因此,為了確保T0能準(zhǔn)確定時50ms,重裝的定時器初值必須加以修正,修正的定時器初值必須考慮到從原定時器初值中扣除計數(shù)器多計的脈沖個數(shù)。由于定時器計數(shù)脈沖的周期恰好和機器周期吻合,因此修正量等于CPU從響應(yīng)中斷到重裝完TL0為止所用的機器周期數(shù)。CPU響應(yīng)中斷通
41、常要3~8個機器周期。經(jīng)過測試,定時器0重裝的計數(shù)初值設(shè)為9E5FH~9E67H,可以滿足精度要求。另外,MCS-51單片機只有二進(jìn)制加法指令,而時間是按十進(jìn)制遞增,因此用加法指令后必須進(jìn)行二-十進(jìn)制轉(zhuǎn)換。</p><p> 計時模塊流程圖如下圖所示。</p><p><b> 保護(hù)現(xiàn)場</b></p><p><b> 重裝定
42、時器初值</b></p><p><b> 循環(huán)次數(shù)減1</b></p><p><b> 否</b></p><p><b> 滿20次?</b></p><p><b> 是</b></p><p><
43、b> 秒單元加1</b></p><p><b> 否</b></p><p><b> 60s到?</b></p><p><b> 是</b></p><p> 秒單元清0,分單元加1</p><p><b>
44、 否</b></p><p><b> 60分到?</b></p><p><b> 是</b></p><p> 分單元清0,時單元加1</p><p><b> 否</b></p><p><b> 24小時到?<
45、;/b></p><p><b> 是</b></p><p><b> 時單元清0</b></p><p><b> 恢復(fù)現(xiàn)場</b></p><p><b> 返回</b></p><p> 3.2.3時間設(shè)置模
46、塊。</p><p> 該模塊由鍵盤輸入相應(yīng)的數(shù)據(jù)來設(shè)置當(dāng)前時間。程序通過調(diào)用一個鍵盤設(shè)置子程序通過鍵盤掃描將鍵入的6位時間值送入顯示緩沖區(qū)。</p><p> 設(shè)置時間后,時鐘要從這個時間開始計時,而時分秒單元各占一個字節(jié),鍵盤占6個字節(jié)。因此程序中要調(diào)用一個合字子程序?qū)@示緩沖區(qū)中的6位BCD碼合并為3位壓縮BCD碼,并送入計時緩沖區(qū),作為當(dāng)前計時起始時間。</p>
47、<p> 該程序同時要檢測輸入時間值的合法性,若鍵盤輸入的小時值大于23,分、秒值大于59,則不合法,將取消本次設(shè)置,清零重新開始計時。</p><p> 時間設(shè)置和鍵盤設(shè)置子程序的流程圖如下圖所示。</p><p><b> 保護(hù)現(xiàn)場</b></p><p> 調(diào)用鍵盤設(shè)置子程序KETIN</p><p&
48、gt; 調(diào)用合字子程序COMB</p><p><b> 恢復(fù)現(xiàn)場</b></p><p><b> 返回</b></p><p><b> 時間設(shè)置流程圖</b></p><p><b> 保護(hù)現(xiàn)場</b></p><p&g
49、t; 顯示緩沖區(qū)首地址送R0鍵盤輸入次數(shù)送R7</p><p> 調(diào)用鍵盤掃描程序KEYSCAN</p><p><b> 鍵號送@R0</b></p><p><b> 顯示緩沖區(qū)地址加1</b></p><p><b> 循環(huán)次數(shù)減1</b></p>
50、<p><b> 否</b></p><p><b> 循環(huán)結(jié)束?</b></p><p><b> 是</b></p><p><b> 恢復(fù)現(xiàn)場</b></p><p><b> 返回</b></p&g
51、t;<p> 鍵盤設(shè)置子程序流程圖</p><p><b> 3.2.4顯示。</b></p><p> 連接電源后,調(diào)整時間,lcd屏上會顯示出年月日時分秒。</p><p> 顯示程序流程圖如下圖所示。</p><p><b> 保護(hù)現(xiàn)場</b></p>&
52、lt;p><b> 否</b></p><p><b> 允許顯示?</b></p><p><b> 調(diào)用拆字程序</b></p><p><b> 是</b></p><p><b> 動態(tài)掃描顯示</b><
53、/p><p><b> 返回</b></p><p><b> 顯示程序流程圖</b></p><p><b> 掃描鍵盤</b></p><p><b> 否</b></p><p> 調(diào)用顯示程序
54、 有鍵按下?</p><p><b> 是</b></p><p><b> 調(diào)用顯示程序</b></p><p><b> 否</b></p><p><b> 有鍵按下?</b></p><p><b> 是
55、</b></p><p><b> 求取鍵號</b></p><p><b> 返回</b></p><p><b> 鍵盤掃描程序流程圖</b></p><p><b> 3.2.5程序:</b></p><p&g
56、t; #include<reg52.h></p><p> #include<intrins.h></p><p> #define uint unsigned int </p><p> #define uchar unsigned char</p><p> #define PIN P0</p&g
57、t;<p> sbit LCDE=P2^7;</p><p> sbit RW=P2^5;</p><p> sbit RS=P2^6;</p><p> sbit k1=P1^0;</p><p> sbit k2=P1^1;</p><p> sbit k3=P1^2;</p>
58、<p> sbit sck=P3^6;</p><p> sbit io=P3^4;</p><p> sbit RST=P3^5;</p><p> uint w[7]={0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //寫地址</p><p> uint r[7]={0x
59、81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; //讀地址</p><p> char num1[10]="0123456789";</p><p> unsigned char time1[7]={0x50,0x59,0x23,0x04,0x11,0x02,0x14};</p><p> uint se
60、cond,hour,min,num,a,time[7];</p><p> uint nian,yue,ri,shi,fen,miao,zhou;</p><p> void delay(uint z)//延時程序</p><p><b> {</b></p><p><b> uint
61、 x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> } </b></p><p> void writecom(uchar com) //LCD寫命令</p>
62、<p><b> {</b></p><p><b> LCDE=0;</b></p><p><b> RS=0;</b></p><p><b> RW=0;</b></p><p><b> PIN=com;</
63、b></p><p> delay(10);</p><p><b> LCDE=1;</b></p><p> delay(10);</p><p><b> LCDE=0;</b></p><p><b> }</b></p&g
64、t;<p> void writedata(uchar dat)//LCD寫數(shù)據(jù)</p><p><b> {</b></p><p><b> LCDE=0;</b></p><p><b> RS=1;</b></p><p><b>
65、; RW=0;</b></p><p><b> PIN=dat;</b></p><p> delay(10);</p><p><b> LCDE=1;</b></p><p> delay(10);</p><p><b> LCDE=
66、0;</b></p><p><b> RS=0;</b></p><p><b> }</b></p><p> void LCDINIT()//初始化LCD</p><p><b> { </b></p><p>
67、 delay(1000);</p><p><b> LCDE=0;</b></p><p><b> RW=0;</b></p><p> writecom(0x38);設(shè)置顯示模式</p><p> writecom(0x0c);不顯示光標(biāo),光標(biāo)不閃爍</p><p&
68、gt; writecom(0x06);寫一個指針加1</p><p> writecom(0x01);清屏</p><p> writecom(0x80);設(shè)置數(shù)據(jù)指針起點</p><p><b> }</b></p><p> void ds1302writebyte(uint dat)//ds1302寫
69、單個數(shù)據(jù)</p><p><b> {</b></p><p><b> uint i;</b></p><p><b> sck=0;</b></p><p><b> _nop_();</b></p><p><b
70、> _nop_();</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> io=dat&0x01;</p><p><b> dat>>=1;</b></p><
71、p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> sck=1;</b></p><p><b> _nop_();</b></p><p><b> _nop_(
72、);</b></p><p><b> sck=0;</b></p><p><b> _nop_();</b></p><p> _nop_();</p><p><b> }</b></p><p><b>
73、}</b></p><p> uint ds1302readbyte() //1302讀單個數(shù)據(jù)</p><p><b> {</b></p><p> uint i,value;</p><p><b> sck=0;</b></p><p>
74、<b> _nop_();</b></p><p><b> _nop_();</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> value>>=1;</p><p
75、><b> if(io)</b></p><p><b> {</b></p><p> value=value|0x80;</p><p><b> } </b></p><p><b> sck=1;</b></p>
76、<p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> sck=0;</b></p><p><b> _nop_();</b></p><p><b> _
77、nop_();</b></p><p><b> }</b></p><p> return value;</p><p><b> }</b></p><p> void ds1302wr(uint add,uint dat) //多個字節(jié)寫入</p>&l
78、t;p><b> {</b></p><p><b> RST=0;</b></p><p><b> _nop_();</b></p><p><b> sck=0;</b></p><p><b> _nop_();</
79、b></p><p><b> RST=1;</b></p><p><b> _nop_();</b></p><p> ds1302writebyte(add);</p><p> ds1302writebyte(dat);</p><p><b&g
80、t; RST=0;</b></p><p><b> _nop_();</b></p><p><b> }</b></p><p> uint ds1302rd(uint add)//讀取多個數(shù)據(jù)</p><p><b> {</b></p&g
81、t;<p><b> uint ks;</b></p><p><b> RST=0;</b></p><p><b> _nop_();</b></p><p><b> sck=0;</b></p><p><b>
82、_nop_();</b></p><p><b> RST=1;</b></p><p><b> _nop_();</b></p><p> ds1302writebyte(add);</p><p> ks=ds1302readbyte();</p><p
83、><b> RST=0;</b></p><p><b> _nop_();</b></p><p> io=0; //此條語句必不可少。如果少了這條語句的話,液晶顯示會不完全。</p><p><b> _nop_();</b></p><p><b&
84、gt; io=1;</b></p><p><b> _nop_();</b></p><p> return ks;</p><p><b> }</b></p><p> void Ds1302Init()</p><p><b> {&
85、lt;/b></p><p> unsigned char n;</p><p> ds1302wr(0x8E,0X00); //禁止寫保護(hù),就是關(guān)閉寫保護(hù)功能</p><p> for(n=3;n<7;n++)//寫入7個字節(jié)的時鐘信號:分秒時日月周年</p><p><b> {</b><
86、;/p><p> ds1302wr(w[n],time1[n]);</p><p><b> }</b></p><p> ds1302wr(0x8E,0x80); //打開寫保護(hù)功能</p><p><b> }</b></p><p> void rdtime
87、()//1302讀初始時間</p><p><b> {</b></p><p> miao=ds1302rd(r[0]);</p><p> fen=ds1302rd(r[1]);</p><p> shi=ds1302rd(r[2]); </p><p> zhou=d
88、s1302rd(r[5]);</p><p> ri=ds1302rd(r[3]);</p><p> yue=ds1302rd(r[4]);</p><p> nian=ds1302rd(r[6]);</p><p><b> }</b></p><p> void displ
89、ay()</p><p><b> { </b></p><p><b> //顯示函數(shù)</b></p><p> int i,j,a[8];</p><p> writecom(0x80);</p><p> a[0]=(num1[(nian)/16]);
90、 // 年</p><p> a[1]=(num1[(nian)%16]);</p><p> a[2]=0X3A;</p><p> a[3]=num1[yue/16];//月</p><p> a[4]=num1[yue%16];</p><p> a[5]=0X3A;</p&
91、gt;<p> a[6]=num1[ri/16];//日</p><p> a[7]=num1[ri%16];</p><p> for( i=0;i<8;i++)</p><p><b> {</b></p><p> writedata(a[i]);</p><
92、p> delay(10);</p><p><b> }</b></p><p> writecom(0x80+0x40+7);</p><p> a[0]=(num1[(shi)/16]); //小時</p><p> a[1]=(num1[(shi)%16]);</p><
93、p> a[2]=0X3A;</p><p> a[3]=num1[fen/16];//分鐘</p><p> a[4]=num1[fen%16];</p><p> a[5]=0X3A;</p><p> a[6]=num1[miao/16]; //秒鐘</p><p>
94、 a[7]=num1[miao%16];</p><p> for(j=0;j<8;j++) </p><p><b> { </b></p><p> writedata(a[j]);</p><p><b> }</b></p><p><b
95、> } </b></p><p> void showtime(uint address,uint time)</p><p><b> {</b></p><p> delay(500);</p><p> writedata(num1[time%16]);</p><p
96、> writecom(0x80+0x40+address);</p><p> writedata(num1[time/16]);</p><p> writecom(0x80+0x40+1+address);</p><p> writecom(0x0f);</p><p><b> }</b><
97、/p><p> void keyscan() //鍵盤掃描函數(shù)</p><p><b> { </b></p><p> if (0==k1) //K1時間停止</p><p><b> { </b></p><p> delay(1
98、0);</p><p><b> if(0==k1)</b></p><p><b> { </b></p><p><b> num++;</b></p><p> while(num>0&&num<=8)</p>
99、<p><b> {</b></p><p> if (0==k1)</p><p><b> {</b></p><p><b> if(0==k1)</b></p><p><b> {num++;</b></p>
100、<p> while(!k1)</p><p><b> {</b></p><p> switch(num)</p><p><b> {</b></p><
101、p><b> case 2:</b></p><p><b> { </b></p><p><b> uint i;</b></p><p><b> num++;</b></p><p><b> a=1;</b>
102、</p><p> writecom(0x80+0x40+0x0e);</p><p> writecom(0x0f);</p><p> for(i=0;i<7;i++)</p><p><b> {</b></p><p> time1[i]=ds1302rd(r[i]);;&
103、lt;/p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> case 4:</b></p><p><b> {<
104、/b></p><p><b> num++;</b></p><p> writecom(0x80+0x40+0x0b);</p><p> writecom(0x0f);</p><p><b> }</b></p><p><b> break
105、;</b></p><p><b> case 6:</b></p><p><b> {</b></p><p><b> num++;</b></p><p> writecom(0x80+0x40+0x08);</p><p>
106、 writecom(0x0f);</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 8:</b></p><p><b> {</b></p><p>
107、;<b> num=0;</b></p><p><b> a=0;</b></p><p> Ds1302Init();</p><p> delay(10);</p><p> writecom(0x0c);</p><p><b> }</b
108、></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }<
109、/b></p><p><b> if(0==k2)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(0==k2)</b></p><p&
110、gt;<b> {</b></p><p> while(!k2)</p><p> switch(num)//K2,時,分,秒加數(shù)</p><p><b> {</b></p><p><b> case 3:</b></p><p>
111、;<b> {</b></p><p> if(9==time1[0]%16)</p><p><b> { </b></p><p> time1[0]+=6;</p><p><b> }</b></p><p> time1[
112、0]++; </p><p> if(time1[0]==0x60)</p><p> time1[0]=0;</p><p> showtime(0xd,time1[0]);</p><p><b> }</b></p><p><b> break;</b
113、></p><p><b> case 5:</b></p><p><b> { </b></p><p> if(9==time1[1]%16)</p><p><b> { </b></p><p> time1[1]+=6;
114、</p><p><b> }</b></p><p> ++time1[1];</p><p> while(0x60==time1[1])</p><p> time1[1]=0;</p><p> showtime(0xa,time1[1]); </p&
115、gt;<p><b> }</b></p><p><b> break;</b></p><p><b> case 7:</b></p><p><b> { </b></p><p> if(9==time1[2]%16)&l
116、t;/p><p><b> { </b></p><p> time1[2]+=6;</p><p><b> }</b></p><p> ++time1[2];</p><p> while(0x24==time1[2])</p><p&g
117、t; time1[2]=0;</p><p> Ds1302Init();</p><p> showtime(7,time1[2]);</p><p><b> }</b></p><p><b> break;</b></p><p>
118、<b> }</b></p><p><b> }</b></p><p> } </p><p><b> if(0==k3)</b></p><p><b> {</b></p><p><
119、b> delay(5);</b></p><p><b> if(0==k3)</b></p><p><b> {</b></p><p> while(!k3)</p><p> switch(num) //K3,時,分,秒減數(shù)</p><
120、p><b> {</b></p><p><b> case 3:</b></p><p><b> {</b></p><p> if(0==time1[0]%16)</p><p><b> { </b></p><
121、;p> time1[0]-=6;</p><p> if((0-6)==time1[0])</p><p> time1[0]=0x5a;</p><p> } </p><p> --time1[0];</p><p> showtime(0x0d,time1[0]);&l
122、t;/p><p><b> }</b></p><p><b> break;</b></p><p><b> case 5:</b></p><p><b> { </b></p><p> if(0==time1[1]
123、%16)</p><p><b> { </b></p><p> time1[1]-=6;</p><p> if((0-6)==time1[1])</p><p> time1[1]=0x5a;</p><p><b> }</b></p>
124、<p> --time1[1];</p><p> showtime(0x0a,time1[1]);</p><p><b> }</b></p><p><b> break;</b></p><p><b> case 7:</b></p>
125、;<p> { </p><p> if(0==time1[2]%16)</p><p><b> { </b></p><p> time1[2]-=6;</p><p> if((0-6)==time1[2])</p><p> time1[
126、2]=0x5a;</p><p><b> }</b></p><p> --time1[2];</p><p> showtime(0x07,time1[2]);</p><p><b> }</b></p><p><b> break;<
127、;/b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }<
128、/b></p><p><b> } </b></p><p><b> } </b></p><p> void main()</p><p><b> {</b></p><p> Ds1302Init();</
129、p><p> LCDINIT();</p><p><b> while(1)</b></p><p><b> { </b></p><p> keyscan();</p><p><b> rdtime();</b></p>
130、<p> display();</p><p><b> }</b></p><p><b> } </b></p><p><b> 4.實驗結(jié)果與分析</b></p><p><b> 5.心得體會</b></p>
131、<p> 我在這一次電子鐘的設(shè)計過程中,很是受益匪淺。通過對自己在大學(xué)三年時間里所學(xué)的知識的回顧,并充分發(fā)揮對所學(xué)知識的理解和對畢業(yè)設(shè)計的思考及書面表達(dá)能力,最終完成了。這為自己今后進(jìn)一步深化學(xué)習(xí),積累了一定寶貴的經(jīng)驗。撰寫論文的過程也是專業(yè)知識的學(xué)習(xí)過程,它使我運用已有的專業(yè)基礎(chǔ)知識,對其進(jìn)行設(shè)計,分析和解決一個理論問題或?qū)嶋H問題,把知識轉(zhuǎn)化為能力的實際訓(xùn)練。培養(yǎng)了我運用所學(xué)知識解決實際問題的能力。</p>
132、<p> 通過這次課程設(shè)計我發(fā)現(xiàn),只有理論水平提高了;才能夠?qū)⒄n本知識與實踐相整合,理論知識服務(wù)于教學(xué)實踐,以增強自己的動手能力。這個實驗十分有意義 我獲得很深刻的經(jīng)驗。通過這次課程設(shè)計,我們知道了理論和實際的距離,也知道了理論和實際想結(jié)合的重要性,也從中得知了很多書本上無法得知的知識。 </p><p> 我們的學(xué)習(xí)不但要立足于書本,以解決理論和實際教學(xué)中的實際問題為目的,還要
133、以實踐相結(jié)合,理論問題即實踐課題,解決問題即課程研究,學(xué)生自己就是一個專家,通過自己的手來解決問題比用腦子解決問題更加深刻。學(xué)習(xí)就應(yīng)該采取理論與實踐結(jié)合的方式,理論的問題,也就是實踐性的課題。這種做法既有助于完成理論知識的鞏固,又有助于帶動實踐,解決實際問題,加強我們的動手能力和解決問題的能力。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]
134、 謝自美.電子線路設(shè)計·實驗·測試[M].武漢:華中理工大學(xué)出版社,1992.</p><p> [2] 何立民.單片機應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1993.</p><p> [3] 樓然笛.單片機開發(fā)[M].北京:人民郵電出版社,1994.[4] 付家才.單片機控制工程實踐技術(shù)[M].北京:化學(xué)工業(yè)出版社 2004.3.[5] 李光才.
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機電子時鐘課程設(shè)計報告
- 單片機電子時鐘課程設(shè)計報告
- 單片機電子時鐘課程設(shè)計報告
- 單片機電子時鐘課程設(shè)計報告
- 單片機電子時鐘課程設(shè)計報告
- 單片機電子時鐘課程設(shè)計報告
- 單片機電子時鐘課程設(shè)計
- 單片機電子時鐘課程設(shè)計
- 單片機電子時鐘課程設(shè)計
- 單片機電子時鐘課程設(shè)計
- 課程設(shè)計----單片機電子時鐘
- 51單片機電子時鐘課程設(shè)計報告
- 單片機電子時鐘課程設(shè)計報告 (2)
- 單片機課程設(shè)計---單片機電子時鐘
- 單片機課程設(shè)計--- 單片機電子時鐘設(shè)計
- 51單片機電子時鐘課程設(shè)計
- 單片機課程設(shè)計---單片機電子時鐘的設(shè)計
- 單片機電子時鐘的設(shè)計 單片機課程設(shè)計
- 51單片機電子時鐘課程設(shè)計實驗報告
- 51單片機電子時鐘課程設(shè)計實驗報告
評論
0/150
提交評論