![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/20/59219ef0-4531-479b-917c-bc3dab2381bd/59219ef0-4531-479b-917c-bc3dab2381bdpic.jpg)
![基于at89c51單片機(jī)的多功能電子萬年歷的設(shè)計(jì)的畢業(yè)設(shè)計(jì)_第1頁](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/20/59219ef0-4531-479b-917c-bc3dab2381bd/59219ef0-4531-479b-917c-bc3dab2381bd1.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)設(shè)計(jì)(論文)</p><p> 基于AT89C51單片機(jī)的多功能電子萬年歷的設(shè)計(jì)</p><p> AT89C51 SCM-BASED ELCTRONIC DESIGN CALENDAR</p><p><b> 摘要</b></p><p> 本文介紹了基于AT89C51單片機(jī)的多功能
2、電子萬年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計(jì)方法。系統(tǒng)以AT89C51單片機(jī)為控制器,以串行時(shí)鐘日歷芯片DS1302記錄日歷和時(shí)間,它可以對年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能。萬年歷采用直觀的數(shù)字顯示,可以在LED上同時(shí)顯示年、月、日、周日、時(shí)、分、秒,還具有時(shí)間校準(zhǔn)等功能。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),具有廣闊的市場前景。</p><p> 關(guān)鍵字AT89C
3、51;電子萬年歷; DS1302</p><p><b> 目 錄</b></p><p><b> 第一章 引言1</b></p><p> 1.1課題研究的背景1</p><p> 1.2課題的研究目的與意義1</p><p> 1.3課題解決
4、的主要內(nèi)容1</p><p> 第二章 系統(tǒng)的總體設(shè)計(jì)2</p><p> 2.1系統(tǒng)方案的構(gòu)想與確定2</p><p> 2.2 器件的選用2</p><p> 2.2.1單片機(jī)的選擇2</p><p> 第三章 系統(tǒng)硬件的設(shè)計(jì)4</p><p> 3.1系統(tǒng)硬件電路設(shè)
5、計(jì)4</p><p> 3.1.1系統(tǒng)硬件框圖4</p><p> 3.1.2 AT89C51單片機(jī)4</p><p> 3.1.3 8位移位寄存器74LS164(串行輸入,并行輸出)8</p><p> 3.1.4 ds130211</p><p> 第四章 系統(tǒng)的軟件設(shè)計(jì)14</p>
6、;<p> 4.1 主程序14</p><p> 4.2 從1302讀取日期和時(shí)間程序15</p><p> 4.3 系統(tǒng)源代碼15</p><p> 第五章 PROTEUS使用16</p><p> 5.1編程環(huán)境PROTEUS16</p><p> 5.2用PROTEUS ISI
7、S對電子萬年歷的硬件電路設(shè)計(jì)26</p><p> 5.3用PROTEUS ISIS進(jìn)行電子萬年歷的仿真測試30</p><p><b> 結(jié)論33</b></p><p><b> 致謝34</b></p><p><b> 參考文獻(xiàn)35</b></p
8、><p><b> 附錄36</b></p><p><b> 第一章 引言</b></p><p> 1.1 課題研究的背景</p><p> 隨著科技的快速發(fā)展,時(shí)間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。它可以對年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷?/p>
9、種功能,而且DS1302的使用壽命長,誤差小。對于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、時(shí)、分、秒和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。該電路采用AT89C51單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電?! 〈巳f年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。</p><p> 1.2課題的研究目
10、的與意義</p><p> 二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展的時(shí)代,而單片機(jī)在數(shù)字化高速發(fā)展的時(shí)代扮演著極為重要的角色。電子萬年歷的開發(fā)與研究在信息化時(shí)代的今天亦是當(dāng)務(wù)之急,因?yàn)樗鼞?yīng)用在學(xué)校、機(jī)關(guān)、企業(yè)、部隊(duì)等單位禮堂、訓(xùn)練場地、教學(xué)室、公共場地等場合,可以說遍及人們生活的每一個(gè)角落。所以說電子萬年歷的開發(fā)是國家之所需,社會之所需,人民之所需。</p><p> 由于社會對信息交換不斷
11、提高的要求及高新技術(shù)的逐步發(fā)展,促使電子萬年歷發(fā)展并且投入市場得到廣泛應(yīng)用。</p><p> 1.3課題解決的主要內(nèi)容</p><p> 本課題所研究的電子萬年歷是單片機(jī)控制技術(shù)的一個(gè)具體應(yīng)用,主要研究內(nèi)容包括以下幾個(gè)方面:</p><p> ?。?)選用電子萬年歷芯片時(shí),應(yīng)重點(diǎn)考慮功能實(shí)在、使用方便、單片存儲、低功耗、抗斷電的器件。</p>&
12、lt;p> ?。?)根據(jù)選用的電子萬年歷芯片設(shè)計(jì)外圍電路和單片機(jī)的接口電路。</p><p> ?。?)在硬件設(shè)計(jì)時(shí),結(jié)構(gòu)要盡量簡單實(shí)用、易于實(shí)現(xiàn),使系統(tǒng)電路盡量簡單。</p><p> (4)根據(jù)硬件電路圖,在開發(fā)板上完成器件的焊接。</p><p> ?。?)根據(jù)設(shè)計(jì)的硬件電路,編寫控制AT89C51芯片的單片機(jī)程序。</p><p&
13、gt; ?。?)通過編程、編譯、調(diào)試,把程序下載到單片機(jī)上運(yùn)行,并實(shí)現(xiàn)本設(shè)計(jì)的功能。</p><p> ?。?)在硬件電路和軟件程序設(shè)計(jì)時(shí),主要考慮提高人機(jī)界面的友好性,方便用戶操作等因素。</p><p> ?。?)軟件設(shè)計(jì)時(shí)必須要有完善的思路,要做到程序簡單,調(diào)試方便。</p><p> 第二章 系統(tǒng)的總體設(shè)計(jì)</p><p> 2.
14、1系統(tǒng)方案的構(gòu)想與確定</p><p> 系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過成本,性能,功耗等多方面的考慮決定用三個(gè)8位74LS164串行接口外接LED顯示器,RESPACK-8對單片機(jī)AT89C51進(jìn)行供電,時(shí)間芯片DS1302連接單片機(jī)AT89C51。從而實(shí)現(xiàn)電子萬年歷的功能。</p><p><b> 2.2 器件的選用</b></p>
15、<p> 單片機(jī)AT89C51</p><p> 電容RESPACK-8</p><p> 三個(gè)74LS164串行接口</p><p><b> 傳感器DS1302</b></p><p> 2.2.1單片機(jī)的選擇</p><p> 單片機(jī)自70年代問世以來以微處理器(MPU
16、)技術(shù)及超大規(guī)模集成電路技術(shù)的發(fā)展為先導(dǎo),用廣泛的應(yīng)用領(lǐng)域拉動得到蓬勃發(fā)展,單片機(jī)功能正日漸完善。單片機(jī)的應(yīng)用,使許多領(lǐng)域的技術(shù)水平和自動化程度大大提高,可以說當(dāng)今世界正在經(jīng)受一場以單片機(jī)技術(shù)為標(biāo)志的新技術(shù)革命浪潮的沖擊。主要單片機(jī)類型如下:</p><p> (1)MCS-51系列單片機(jī)</p><p> MCS-51系列單片機(jī)主要是指Intel公司生產(chǎn)的以51位內(nèi)核的單片機(jī)芯片,具
17、有8位CPU、4K字節(jié)ROM、128字節(jié)RAM、可擴(kuò)展外部64K字節(jié)RAM和ROM、2個(gè)16位的定時(shí)器/計(jì)數(shù)器、4個(gè)8位并行I/O口、1個(gè)全雙工串行I/O口、21字節(jié)的專用寄存器、5個(gè)中斷源、片內(nèi)自帶振蕩器、片內(nèi)單總線等功能部件。</p><p> ?。?)AT89C51單片機(jī)</p><p> AT89C51單片機(jī)的主要特性如下:</p><p> 與MCS-
18、51產(chǎn)品指令系統(tǒng)完全兼容</p><p> 4K字節(jié)的在線編程Flash存儲器,1000次擦寫周期</p><p> 4.0~5.5V的工作電壓范圍</p><p> 全靜態(tài)工作模式:0~33MHz</p><p><b> 三級程序存儲器鎖</b></p><p> 128×
19、8字節(jié)內(nèi)部RAM </p><p> 32個(gè)可編程I/O口線</p><p> 2個(gè)16位定時(shí)/計(jì)數(shù)器</p><p><b> 6個(gè)中斷源</b></p><p> 全雙工串行UART通道</p><p> 低功耗空閑和掉電模式</p><p> 中斷可從空閑
20、模式喚醒系統(tǒng)</p><p> 看門狗(WDT)及雙數(shù)據(jù)指針</p><p> 掉電標(biāo)識和快速編程特性</p><p> 具有掉電狀態(tài)下的中斷恢復(fù)功能</p><p> 靈活的在系統(tǒng)編程(ISP字節(jié)或頁寫模式)</p><p> 由于AT89C51單片機(jī)片內(nèi)有4K字節(jié)的在線編程Flash存儲器,可以擦寫100
21、0次,具有掉電模式,而且具有掉電狀態(tài)下的中斷恢復(fù)功能,對設(shè)計(jì)開發(fā)非常實(shí)用。所以選用AT89C51單片機(jī)作為電子萬年歷芯片的控制單片機(jī)。</p><p> 第三章 系統(tǒng)硬件的設(shè)計(jì)</p><p> 3.1系統(tǒng)硬件電路設(shè)計(jì)</p><p> 3.1.1系統(tǒng)硬件框圖</p><p> 系統(tǒng)硬件框圖如圖3-1</p><p
22、> 圖3-1 系統(tǒng)硬件框圖</p><p> 3.1.2 AT89S51單片機(jī)</p><p> 本系統(tǒng)采用的是美國ATMEL公司生產(chǎn)的AT89C51單片機(jī),首先我們來熟悉一下AT89C51單片機(jī)的外部引腳和內(nèi)部結(jié)構(gòu)。</p><p> 1.單片機(jī)的引腳功能</p><p> AT89C51單片機(jī)有40個(gè)引腳。</p&g
23、t;<p> Vcc:電源電壓+5V</p><p><b> GND:接地</b></p><p> P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能驅(qū)動8個(gè)TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。</p><p> 在訪問外部數(shù)據(jù)存儲器或程序存儲器時(shí),這組口
24、線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線服用,在訪問期間激活內(nèi)部上拉電阻。</p><p> 在Flash編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí)要求外接上拉電阻。</p><p> P1口:P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個(gè)TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸
25、入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號拉低時(shí)會輸出一個(gè)電流。</p><p> Flash 編程和程序校驗(yàn)期間,P1接收低8位地址。</p><p> P2口:P2口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個(gè)TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某
26、個(gè)引腳被外部信號拉低時(shí)會輸出一個(gè)電流。</p><p> 在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX@DPTR指令)時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(MOVX @Ri指令)時(shí),P2口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中P2寄存器的內(nèi)容),在整個(gè)訪問期間不改變。</p><p> Flash 編程和程序校驗(yàn)期間,P2亦接收低高位
27、地址和其他控制信號。</p><p> P3口:P3口是一組帶內(nèi)部上拉電阻的8位雙向I/O,P3的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個(gè)TTL邏輯門電路。對P3口寫入“1”時(shí),它們被內(nèi)部的上拉電阻拉高并可作為輸入端口。作輸入端時(shí),被外部拉低的P3口將用上拉電阻輸出電流。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,見表3-1所示:</p><p> P3口還接收一些用于
28、Flash閃速存儲器編程和程序校驗(yàn)的控制信號。</p><p> 表3-1 P3口的第二功能圖</p><p> RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。WDT溢出將使引腳輸出高電平,設(shè)置SFR AUXR的DISRT0(地址8EH)可打開或關(guān)閉該功能。DISRT0位缺省為RESET輸出高電平打開狀態(tài)。</p><p&g
29、t; ALE/PROG:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時(shí),ALE(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時(shí)將跳過一個(gè)ALE脈沖。</p><p> 對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。</p><p>
30、; 如有必要,可通過多特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置,可禁止ALE操作。該位置后,只有一條MOVX和MOVC指令A(yù)LE才會被激活。另外,該引腳會被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE無效。</p><p> PSEN:程序存儲允許(PSEN)輸出是外部程序存儲器的讀選通信號,當(dāng)AT89C51由外部程序存儲器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。當(dāng)訪問外部
31、數(shù)據(jù)存儲器,沒有兩次有效的PSEN信號。</p><p> EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。需要注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會鎖存EA端狀態(tài)。</p><p> 如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器中的指令。</p><p> Fla
32、sh存儲器編程時(shí),該引腳加上+12V的變成電壓Vpp.</p><p> XTAL1:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。</p><p> XTAL2:振蕩器反相放大器的輸出端。</p><p> AT89C51單片機(jī)內(nèi)部結(jié)構(gòu)</p><p> 2.AT89C51單片機(jī)與MCS-51完全兼容 </p><p
33、> 看門狗(WDT):WDT是一種需要軟件控制的復(fù)位方式。WDT 由13位計(jì)數(shù)器和特殊功能寄存器中的看門狗定時(shí)器復(fù)位存儲器(WDTRST)構(gòu)成。WDT 在默認(rèn)情況下無法工作;為了激活WDT,用戶必須往WDTRST 寄存器(地址:0A6H)中依次寫入01EH 和0E1H。當(dāng)WDT激活后,晶振工作,WDT在每個(gè)機(jī)器周期都會增加。WDT計(jì)時(shí)周期依賴于外部時(shí)鐘頻率。除了復(fù)位(硬件復(fù)位或WDT溢出復(fù)位),沒有辦法停止WDT工作。當(dāng)WDT溢
34、出,它將驅(qū)動RSR引腳輸出一個(gè)高電平。</p><p> 可編程串口(UART)在AT89C51中,UART 的操作與AT89C51 和AT89C52 一樣。AT89C51系列單片機(jī)的串行通信口可以工作于同步和異步通信方式。當(dāng)工作于異步方式時(shí),它具有全雙工的操作功能,也就是說,它可以同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收。串行口內(nèi)的接收器采用的是雙緩沖結(jié)構(gòu),能夠在接收到的第一個(gè)字節(jié)從接收寄存器讀走之前就開始接收第二個(gè)字節(jié)(當(dāng)
35、然,如果第二個(gè)字節(jié)接收完畢,而第一個(gè)字節(jié)仍然沒有被讀走,那將會丟掉一個(gè)字節(jié))。串行口的發(fā)送和接收操作都是通過特殊功能寄存器中的數(shù)據(jù)緩沖寄存器SBUF進(jìn)行的,但在SBUF的內(nèi)部,接收寄存器和發(fā)送寄存器在物理結(jié)構(gòu)上是完全獨(dú)立的。如果將數(shù)據(jù)寫入SBUF,數(shù)據(jù)會被送入發(fā)送寄存器準(zhǔn)備發(fā)送。如果執(zhí)行SBUF指令,則讀出的數(shù)據(jù)一定來自接收緩存器。因此,CPU對SBUF的讀寫,實(shí)際上是分別訪問2個(gè)不同的寄存器。這2個(gè)寄存器的功能決不能混淆。</p
36、><p> 振蕩電路:AT89C51系列單片機(jī)的內(nèi)部振蕩器,由一個(gè)單極反相器組成。XTAL1反相器的輸入,XTAL2為反相器的輸出??梢岳盟鼉?nèi)部的振蕩器產(chǎn)生時(shí)鐘,只要XTAL1和XTAL2引腳上一個(gè)晶體及電容組成的并聯(lián)諧振電路,便構(gòu)成一個(gè)完整的振蕩信號發(fā)生器,此方式稱為內(nèi)部方式。另一種方式由外部時(shí)鐘源提供一個(gè)時(shí)鐘信號到XTAL1端輸入,而XTAL2端浮空。在組成一個(gè)單片機(jī)應(yīng)用系統(tǒng)時(shí),多數(shù)采用這種方式,這種方式結(jié)構(gòu)
37、緊湊,成本低廉,可靠性高。在電路中,對電容C1和C2的值要求不是很嚴(yán)格,如果使用高質(zhì)的晶振,則不管頻率為多少,C1、C2通常都選擇30pF。</p><p> 定時(shí)/計(jì)數(shù)器:AT89C51單片機(jī)內(nèi)含有2個(gè)16位的定時(shí)器/計(jì)數(shù)器。當(dāng)用于定時(shí)器方式時(shí),定時(shí)器的輸入來自內(nèi)部時(shí)鐘發(fā)生電路,每過一個(gè)機(jī)器周期,定時(shí)器加1,而一個(gè)機(jī)器周期包含有12個(gè)振蕩周期,所以,定時(shí)器的技術(shù)頻率為晶振頻率的1/12,而計(jì)數(shù)頻率最高為晶振頻
38、率的1/24。為了實(shí)現(xiàn)定時(shí)和計(jì)數(shù)功能,定時(shí)器中含有3種基本的寄存器:控制寄存器、方式寄存器和定時(shí)器/計(jì)數(shù)器??刂萍拇嫫魇且粋€(gè)8位的寄存器,用于控制定時(shí)器的工作狀態(tài),方式寄存器是一個(gè)8位的寄存器,用于確定定時(shí)器的工作方式,定時(shí)器/計(jì)數(shù)器是16位的計(jì)數(shù)器,分為高字節(jié)和低字節(jié)兩部分。</p><p> RAM:高于7FH內(nèi)部數(shù)據(jù)存儲器的地址是8位的,也就是說其地址空間只有256字節(jié),但內(nèi)部RAM的尋址方式實(shí)際上可提供
39、384字節(jié)。的直接地址訪問同一個(gè)存儲空間,高于7FH的間接地址訪問另一個(gè)存儲空間。這樣,雖然高128字節(jié)區(qū)分與專用寄器 ,即特殊功能寄存器區(qū)的地址是重合的,但實(shí)際上它們是分開的。究竟訪問哪一區(qū),存是通過不同的尋址方式加以區(qū)分的。</p><p> SFR:SFR是具有特殊功能的所有寄存器的集合,共含有22個(gè)不同寄存器,它們的地址分配在80H~FFH中。雖然如此,不是所有的單元都被特殊功能寄存器占用,未被占用的單
40、元,其內(nèi)容是不確定的。如對這些單元進(jìn)行讀操作,得到的是一些隨機(jī)數(shù),而寫入則無效,所以在編程時(shí)不應(yīng)該將數(shù)據(jù)寫入這些未確定的地址單元中,特殊功能寄存器主要有累加器ACC、B寄存器、程序狀態(tài)字寄存器PSW、堆棧指針SP、數(shù)據(jù)指針DPTR、I/O端口、串行口數(shù)據(jù)緩沖器SBUF、定時(shí)器寄存器、捕捉寄存器、控制寄存器。</p><p> 中斷系統(tǒng):AT89C51單片機(jī)有6個(gè)中斷源,中斷系統(tǒng)主要由中斷允許寄存器IE、中斷優(yōu)先
41、級寄存器IP、優(yōu)先級結(jié)構(gòu)和一些邏輯門組成。IE寄存器用于允許或禁止中斷;IP寄存器用于確定中斷源的優(yōu)先級別;優(yōu)先級結(jié)構(gòu)用于執(zhí)行中斷源的優(yōu)先排序;有關(guān)邏輯門用于輸入中斷請求信號。在整個(gè)中斷響應(yīng)過程中CPU所執(zhí)行的操作步驟如下:</p><p> ?。?)完成當(dāng)前指令的操作</p><p> (2)將PC內(nèi)容壓入堆棧</p><p> ?。?)保存當(dāng)前的中斷狀態(tài)<
42、;/p><p> (4)阻止同級的中斷請求</p><p> ?。?)將中斷程序入口地址送PC寄存器</p><p> (6)執(zhí)行中斷服務(wù)程序</p><p><b> ?。?)返回</b></p><p> 3.1.3 8位移位寄存器74LS164(串行輸入,并行輸出)</p>
43、<p> 74LS164為8位移位寄存器,其主要電特性的典型值如表3-2:</p><p> 表3-2 74LS164主要電特性典型值</p><p> 當(dāng)清除端(CLEAR)為低電平時(shí),輸出端(QA-QH)均為低電平。</p><p> 串行數(shù)據(jù)輸入端(A,B)可控制數(shù)據(jù)。當(dāng)A、B任意一個(gè)為低電平時(shí)停止新數(shù)據(jù)輸入,在時(shí)鐘端(CLOCK)脈沖上升沿
44、作用下Q0為低電平。當(dāng)有一個(gè)為高電平,則另一個(gè)就允許輸入數(shù)據(jù),并在CLOCK上升沿作用Q0的狀態(tài)。</p><p><b> 引出端符號</b></p><p> CLOCK 時(shí)鐘輸入端</p><p> CLEAR 同步清除輸入端(低電平有效)</p><p> A,B 串行數(shù)據(jù)輸入端<
45、;/p><p> QA-QH 輸出端</p><p> 邏輯及封裝圖,如3-2,3-3</p><p><b> 圖3-2 邏輯圖</b></p><p><b> 圖3-3 封裝圖</b></p><p><b> 極限值</b></p
46、><p> 電源電壓…………………………………7V</p><p> 輸入電壓…………………………………5.5V</p><p><b> 工作環(huán)境溫度</b></p><p> 54164……………………………………-55~125℃</p><p> 74164……………………………………
47、-0~70℃</p><p> 儲存溫度……………………………………-65℃~150℃</p><p><b> 表3-3真值表</b></p><p> H-高電平L-低電平X-任意電平↑-低到高電平跳變</p><p> QA0,QB0,QH0-規(guī)定的穩(wěn)態(tài)條件建立前的電平</p><p&g
48、t; QAn,QGn-時(shí)鐘最近的↑前的電平</p><p><b> 時(shí)序圖如下3-4</b></p><p><b> 圖3-4 時(shí)序圖</b></p><p> 推薦工作條件如表3-4:</p><p> 表3-4推薦工作條件 </p><p> 靜態(tài)特性(T
49、A為工作環(huán)境溫度范圍)如表3-5</p><p> 表3-5工作環(huán)境溫度范圍</p><p> [1]:測試條件中的“最小”和“最大”用推薦工作條件中的相應(yīng)值。</p><p> 動態(tài)特性(TA=25℃)如表3-6</p><p><b> 表3-6動態(tài)特性</b></p><p> [
50、2]:fmax最大時(shí)鐘頻率。tPLH輸出由低電平到高電平傳輸延遲時(shí)間tPHL輸出由高電平到低</p><p><b> 電平傳輸延遲時(shí)間</b></p><p> 3.1.4 ds1302 </p><p> 現(xiàn)在流行的串行時(shí)鐘電路很多,如DS1302、 DS1307、PCF8485等。這些電路的接口簡單、價(jià)格低廉、使用方便,被廣泛地采用
51、。本文介紹的實(shí)時(shí)時(shí)鐘電路DS1302是DALLAS公司的一種具有涓細(xì)電流充電能力的電路,主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768kHz晶振。 </p><p> DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用
52、三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時(shí)提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。 </p><p> DS1302的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能
53、保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段
54、。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。SCLK始終是輸入端。 DS1302 的控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS13
55、02中,位6如果為0,則表示</p><p> DS1302的實(shí)時(shí)時(shí)間流程。根據(jù)流程框圖,不難采集實(shí)時(shí)時(shí)間。下面對DS1302的基本操作進(jìn)行編程: </p><p> 根據(jù)本人在調(diào)試中遇到的問題,特作如下說明: DS1302 與微處理器進(jìn)行數(shù)據(jù)交換時(shí),首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯1,如果D7=0,則禁止寫DS1302,即寫保護(hù);D6
56、=0,指定時(shí)鐘數(shù)據(jù),D6=1,指定RAM數(shù)據(jù);D5~D1指定輸入或輸出的特定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入), D0=1,指定讀操作(輸出)。 在DS1302的時(shí)鐘日歷或RAM進(jìn)行數(shù)據(jù)傳送時(shí),DS1302必須首先發(fā)送命令字節(jié)。若進(jìn)行單字節(jié)傳送,8位命令字節(jié)傳送結(jié)束之后,在下2個(gè)SCLK周期的上升沿輸入數(shù)據(jù)字節(jié),或在下8個(gè)SCLK周期的下降沿輸出數(shù)據(jù)字節(jié)。 DS1302與RAM相關(guān)的寄存器分為兩
57、類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的RAM寄存器,在此方式下可一次性讀、寫所有的RAM的31個(gè)字節(jié)。 要特別說明的是備用電源B1,可以用電池或者超級電容器(0.1F以上)。雖然DS1302在主電源掉電后的耗電很小,但是</p><p> 第四章 系統(tǒng)的軟件設(shè)計(jì)</p><
58、p><b> 4.1 主程序</b></p><p> 主程序如圖4-1所示:</p><p><b> 圖4-1 主程序圖</b></p><p> 4.2 從1302讀取日期和時(shí)間程序</p><p> 圖4-2 從1302讀取程序</p><p> 4
59、.3 系統(tǒng)源代碼</p><p><b> DELAY.C</b></p><p> #define DELAY_C</p><p> #include”includes.h”</p><p> #define XTAL 12</p><p> void delay_lus(void)
60、</p><p><b> {</b></p><p> asm(”nop”):</p><p><b> }</b></p><p> void delay_nus(unsigned int n) </p><p><b> {</b>
61、</p><p> unsigned int i=0;</p><p> for(i=0;i<n;i++)</p><p> delay_lus();</p><p><b> }</b></p><p> void delay_ims(void)</p><p
62、><b> {</b></p><p> unsigned int i;</p><p> for(i=0:i<(unsigned int)(XTAL*143-2);i++);</p><p><b> }</b></p><p> void delay_nms(unsigne
63、d int n) </p><p><b> {</b></p><p> unsigned int i=0;</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> delay_ims();</
64、p><p><b> }</b></p><p><b> }</b></p><p><b> DSl302.C</b></p><p> #include”includes.h”</p><p> #define DSl302_C</p&
65、gt;<p> unsigned char bflag;</p><p> unsigned char bpm;</p><p> unsigned char get_hours(void)</p><p><b> {</b></p><p> unsigned char i;</p>
66、;<p> unsigned char R_Byte;</p><p> unsigned char TmpByte;</p><p><b> reset();</b></p><p> write(0x85);</p><p> ddr_set_io();</p><p&g
67、t; R_Byte=0x00;</p><p> Prt_clear_io();</p><p> ddr_clear_io();</p><p> for(i:0;i<4;i++)</p><p><b> }</b></p><p> TmpByte=0;</p>
68、<p> if((pinp&(1<<io)))</p><p> TmpByte=1;</p><p> TmpByte<<=7;</p><p> R_Byte>>=1;</p><p> R_Byte I=TmpByte;</p><p> Pr
69、t_set_clk();</p><p> delay_nus(2);</p><p> prt_clear_clk();</p><p> delay_nus(2);</p><p><b> }</b></p><p><b> bflag=0;</b><
70、/p><p> if((pinp&(1<<io)))</p><p><b> bflag=l;</b></p><p> prt_set_clk();</p><p> delay_nus(2);</p><p> prt_clear_clk();</p>
71、<p> delay_nus(2);</p><p><b> bpm=0;</b></p><p> if((pinp&(1<<io)))</p><p><b> bpm=1;</b></p><p> prt_set_clk();</p>
72、<p> delay_nus(2);</p><p> prt_clear_clk();</p><p> delay_nus(2);</p><p> prt_clear_rst();</p><p> prt_clear_clk();</p><p> R_Byte >>=4;
73、</p><p> return R_Byte;</p><p><b> }</b></p><p> unsigned char readbyte(unsigned char w_byte)</p><p><b> {</b></p><p> unsigne
74、d char temp;</p><p><b> reset();</b></p><p> write(w_byte);</p><p> temp=read();</p><p> prt_clear_rst();</p><p> prt_clear_clk();</p&g
75、t;<p> return temp;</p><p><b> }</b></p><p> void writebyte(unsigned char w_byte,unsigned char w_2_byte) {</p><p><b> reset();</b></p><
76、;p> write(w_byte);</p><p> write(w_2_byte);</p><p> prt_clear_rst();</p><p> prt_clear_clk();</p><p><b> }</b></p><p> void reset(void
77、)</p><p><b> {</b></p><p> ddr_set_rst();</p><p> prt_clear_clk();</p><p> prt_clear_rst();</p><p> prt_set_rst();</p><p><
78、;b> }</b></p><p> void write(unsigned char W_Byte)</p><p><b> {</b></p><p> unsigned char i;</p><p> DDRC=0xFF;</p><p> for(i=0;
79、i<8;i++)</p><p><b> {</b></p><p> Prt_clear_io();</p><p> if(W_Byte &0x01)</p><p><b> {</b></p><p> prt_set_io();</p
80、><p><b> }</b></p><p> Prt_set_clk();</p><p> delay_nus(1);//delay_nus(2);</p><p> prt_clear_clk();</p><p> delay_nus(1);//delay_nus(2);</
81、p><p> W_Byte>>=1;</p><p><b> }</b></p><p><b> }</b></p><p> unslgned char read(void)</p><p><b> {</b></p>
82、;<p> unsigned char i;</p><p> unsigned char R_Byte;</p><p> unsigned char R_Byte2;</p><p> unsigned char TmpByte;</p><p> ddr_set_io();</p><p>
83、; R_Byte=0x00;</p><p> R_Byte2=0x00;</p><p> prt_clear_io();</p><p> ddr_clear_io();</p><p> for(i=0;i<4;i++)//get the first 4 bits</p><p><b>
84、; {</b></p><p> TmpByte=0;</p><p> if((pinp&(1<<io)))</p><p><b> {</b></p><p> TmpByte=1;</p><p> TmpByte=0x80;</p>
85、<p><b> }</b></p><p> //TmpByte<<=7;</p><p> R_Byte= (R-Byte>>1);//R_Byte>>=1;</p><p> R_Byte |=TmpByte;</p><p> prt_set_clk(
86、);</p><p> delay_nus(1);//delay_nus(2);</p><p> prt_chear_clk();</p><p> delay_nus(1);//delay_nus(2);</p><p><b> }</b></p><p> for(i=0;i&l
87、t;4;i++)</p><p><b> {</b></p><p> TmpByte=0;</p><p> if((pinp&(1<<io)))</p><p><b> {</b></p><p> TmpByte=1;</p>
88、;<p> TmpByte=0x80;</p><p><b> }</b></p><p> ?。疶mpByte<<=7;</p><p> R_Byte2=(R_Byte2>>1);//R_Byte2>>=l;</p><p> R_Byte2 |=TmpB
89、yte;</p><p> Prt_set_clk();</p><p> delay_nus(1)://delay_nus(2);</p><p> prt_clear_clk();</p><p> delay_nus(1);//delay_nus(2);</p><p><b> }</
90、b></p><p> R_Byte>>=4;</p><p> R_Byte2>>=4;</p><p> R_Byte=(R_Byte2*10)+R_Byte;</p><p> return R_Byte;</p><p><b> }</b><
91、/p><p><b> HD44780.C</b></p><p> #include”includes.h”</p><p> #define HD44780_C</p><p> void lcd_pulse(void)</p><p><b> {</b><
92、/p><p> Icd—set—e()</p><p> delay_nms(1);</p><p> Icd_clear_e();</p><p> delay_nms(1);</p><p><b> }</b></p><p> void icd_wait(v
93、oid)</p><p><b> {</b></p><p> asm(”nop”);</p><p><b> }</b></p><p> void icd_send(unsigned char data) </p><p><b> {<
94、;/b></p><p> Lcd_wait();</p><p> dataport=data;</p><p> lcd_pulse();</p><p><b> }</b></p><p> void clrscr(void)</p><p><
95、;b> {</b></p><p> lcd_clear_rs();</p><p> lcd_clear_rw();</p><p> icd_send(0x01);</p><p> lcd_wait();</p><p><b> }</b></p>
96、<p> void gotoz(unsigned char z)</p><p><b> {</b></p><p> lcd_clear_rs();</p><p> lcd_clear_rw();</p><p> lcd_send(z || 0x80);</p><p&
97、gt;<b> }</b></p><p> void gotoxy(unsigned char x,unsigned char y)</p><p><b> {</b></p><p> gotoz((x)|((y)<(6));</p><p><b> }</b
98、></p><p> void put_char(char c)</p><p><b> {</b></p><p> lcd_clear_rw();</p><p> lcd_set_rs();</p><p> lcd_send(c);</p><p>
99、;<b> }</b></p><p> void outtext(unsigned char*text)</p><p><b> {</b></p><p> unsigned char i;</p><p> for(i=0; text[i]&&i<16;i++)<
100、;/p><p> put_char(text[i]);</p><p><b> }</b></p><p> void initgraph(void)</p><p><b> {</b></p><p> dirport_data:0xFF;</p>
101、<p> dirport_con |=(LCD_E | LCD_RS | LCD_RW);</p><p> lcd_clear_rs();</p><p> lcd_clear_rw();</p><p> lcd_send(0x3C);</p><p> lcd_send(0x3C);</p><p
102、> lcd_send(0x3C);</p><p> lcd_send(0x06);</p><p> lcd_send(0x0C);</p><p><b> }</b></p><p> #define LCD_C</p><p> #include”includes.h”&
103、lt;/p><p> void LCD_INIT(void)</p><p><b> {</b></p><p> LCD_DIR_PORT=0xff;</p><p> LCD_0Pl_PORT=0x30;</p><p> lcd_clear_rw();</p><
104、p> lcd_clear_rs();</p><p> lcd_set_e();</p><p> asm(”nop”);</p><p> asm(”nop”);</p><p> icd_clear_e();</p><p> delay_nus(40);</p><p>
105、 icd_clear_rw();</p><p> icd_clear_rs();</p><p> lcd__set_e();</p><p> asm(”nop”);</p><p> asm(”nop”);</p><p> icd_clear_e();</p><p> d
106、elay_nus(40);</p><p> icd_set_e();</p><p> asm(”nop”):</p><p> asm(”nop”);</p><p> lcd_clear_e();</p><p> delay_nus(40);</p><p> LCD_OP_
107、PORT=0x20;</p><p> icd_set_e();</p><p> asm(”nop”);</p><p> asm(”nop“);</p><p> lcd_clear_e();</p><p> delay_nus(40);</p><p><b> }
108、</b></p><p> void LCD_Busy(void)</p><p><b> {</b></p><p> unsigned char temp,high;</p><p> unsigned char low;</p><p> LCD_DIR_PORT=0
109、x0f;</p><p><b> do</b></p><p><b> {</b></p><p> teap=LCD_OP_PORT;</p><p> temp=temp&BIT3;</p><p> LCD_OP_PORT=temp;</p&
110、gt;<p> Lcd_set_rw(); //Set LCD to READ</p><p> lcd_clear_rs();</p><p> lcd_set_e();</p><p> delay_nus(3);</p><p> high=LCD_IP_PORT;</p><p>
111、 lcd_clear_e();</p><p> lcd_set_e();</p><p> asm(”nop”);</p><p> asm(”nop”);</p><p> low=LCD—IP—PORT;.</p><p> lcd_clear_e();</p><p> }
112、while(high&0x80);</p><p> delay_nus(20);</p><p><b> }</b></p><p> void LCD_WriteControl(unsigned char CMD)</p><p><b> {</b></p><p
113、> char temp;</p><p> LCD_Busy();</p><p> LCD_DIR_PORT=0xff;</p><p> temp=LCD_OP_PORT;</p><p> temp=temp&BIT3:</p><p> LCD_OP_PORT=(CMD &0xf0)|
114、 temp;</p><p> lcd_clear_rw();</p><p> lcd_clear_rs();</p><p> lcd_set_e();</p><p> asm(”nop”);</p><p> asm(”nop”);</p><p> lcd_clear_e(
115、);</p><p> LCD_OP_PORT=(CMD<<4)|temp;</p><p> lcd_clear_rw();</p><p> lcd_clear_rs();</p><p> lcd_set_e();</p><p> asm(”nop”);</p><p&
116、gt; asm(”nop”);</p><p> lcd_clear_e();</p><p><b> }</b></p><p> void LCD_WriteData(unsiqned char Data)</p><p><b> {</b></p><p>
117、; char temp~</p><p> LCD_Busy();</p><p> LCD_DIR_PORT=0xFF;</p><p> temp=LCD_OP_PORT;</p><p> temp=temp&BIT3;</p><p> LCD_OP_PORT=(Data&0xf0)| te
118、mp;</p><p> lcd_clear_rw(); //Set LCD to write</p><p> lcd_set_rs();</p><p> lcd_set_e();</p><p> asm(”nop”);</p><p> asm(”nop”);</p><p&
119、gt; lcd_clear_e();</p><p> LCD_OP_PORT=(Data<<4)|temp;</p><p> lcd_clear_rw();</p><p> lcd_set_rs();</p><p> lcd_set_e();</p><p> asm(”nop”);&l
120、t;/p><p> asm(”nop”);</p><p> lcd_clear_e();</p><p><b> }</b></p><p> ?。?********************************//</p><p> ?。?**初始化液晶***//</p>
121、<p> ?。?********************************//</p><p> void Init_LCD(void)</p><p><b> {</b></p><p> LCD_INIT();</p><p> LCD_WriteControl(LCD_FUNCTIO
122、N_SET);</p><p> LCD_WriteControl(LCD_OFF);</p><p> LCD_WriteControl(LCD_CLEAR);</p><p> LCD_WriteControl(LCD_MODE_SET);</p><p> LCD_WriteControl(LCD_ON);</p>
123、<p> LCD_WrlteControl(LCD_HOME);</p><p> //LCD_WriteControl(0x90);</p><p><b> }</b></p><p> //************************************************//</p><
124、;p> / /***清屏 ***//</p><p> ?。?***********************************************//</p><p> void LCD_Clear(void)</p><p><b> {</b></p><p> LCD_WriteCont
125、rol(0x01);</p><p><b> }</b></p><p> ?。?**********************************************//</p><p> ?。?**移動光標(biāo)到0行0列***//</p><p> ?。?*************************
126、*********************//</p><p> void LCD_Home(void)</p><p><b> {</b></p><p> LCD_WriteControl(0x02); "</p><p><b> }</b></p>&
127、lt;p> ?。?*********************************************//</p><p> //***顯示字符,在當(dāng)前光標(biāo)處***//</p><p> ?。?**********************************************//</p><p> void LCD_DisplayCha
128、racter(char Char)</p><p><b> {</b></p><p> LCD_WriteData(Char);</p><p><b> }</b></p><p> //***********************************************//
129、</p><p> //***在Flash中、在指定的行和列顯示一個(gè)字符串***//</p><p> ?。?**********************************************//</p><p> void LCD_DisplayString_F(char rOW,char column,unsigned char__flash*s
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89c51單片機(jī)的多功能電子萬年歷的設(shè)計(jì)的畢業(yè)設(shè)計(jì)
- 基于at89c51單片機(jī)萬年歷的畢業(yè)設(shè)計(jì)
- 基于at89c51單片機(jī)的萬年歷 畢業(yè)設(shè)計(jì)
- 基于at89c51單片機(jī)萬年歷畢業(yè)設(shè)計(jì)
- 基于at89c51單片機(jī)萬年歷設(shè)計(jì)
- 2017畢業(yè)論文-基于at89c51單片機(jī)萬年歷設(shè)計(jì)
- 基于單片機(jī)的多功能電子萬年歷設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 51基于單片機(jī)的電子萬年歷畢業(yè)設(shè)計(jì)
- 基于at89c5單片機(jī)的多功能電子萬年歷的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的多功能電子萬年歷的設(shè)計(jì)
- 【畢業(yè)設(shè)計(jì)】基于51單片機(jī)的電子萬年歷設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于51單片機(jī)的電子萬年歷的設(shè)計(jì)
- 基于51單片機(jī)的萬年歷畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的電子萬年歷畢業(yè)設(shè)計(jì)論文
- 基于51單片機(jī)的電子萬年歷設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于51單片機(jī)的萬年歷設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于51單片機(jī)的萬年歷設(shè)計(jì)
- 基于51單片機(jī)的電子萬年歷的設(shè)計(jì)
- 基于51單片機(jī)的液晶萬年歷畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的電子萬年歷畢業(yè)設(shè)計(jì)
評論
0/150
提交評論