2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  本科畢業(yè)論文(設(shè)計)</p><p>  題 目基于AT89S52單片機(jī)的電子萬年歷設(shè)計</p><p>  基于單片機(jī)的萬年歷的設(shè)計</p><p><b>  摘 要 </b></p><p>  單片機(jī)技術(shù)發(fā)展迅速,由于他的微小、易用、多功能在智能儀器、家用電器、電子通信、工業(yè)控

2、制等方面應(yīng)用廣泛。單片機(jī)是集CPU ,RAM ,ROM ,定時,計數(shù)和多種接口于一體的微控制器,它體積小、成本低、功能強(qiáng),而51系列單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。這次畢業(yè)設(shè)計通過對它的學(xué)習(xí)、應(yīng)用從而達(dá)到學(xué)習(xí)、設(shè)計、開發(fā)軟、硬的能力。</p><p>  電子萬年歷主要采用AT89S52單片機(jī)作為主控核心,由DS1302時鐘芯片提供時鐘、LED動態(tài)掃描顯示屏顯示。AT89S52單片機(jī)功耗小、電壓可選

3、用2.0~6V電壓供電;DS1302時鐘芯片是美國DALLAS公司推出的具有涓細(xì)電流充電功能的低功耗實(shí)時時鐘芯片,它可以對年、月、日、星期、時、分、秒進(jìn)行計時;數(shù)字顯示是采用的LED液晶顯示屏來顯示,可以同時顯示年、月、日、星期、時、分、秒和溫度等信息。</p><p>  關(guān)鍵詞 萬年歷;AT89S52單片機(jī);1602液晶顯示屏;DS1302時鐘芯片.</p><p>  Based

4、on SCM calendar design</p><p><b>  ABSTRACT</b></p><p>  Single chip microcomputer development is rapid, because of his tiny, is easy to use,and multi-function in intelligent instrum

5、ent, home appliances, electronic communication, industry control, wide application. SCM is set for the CPU, RAM, ROM, time, count and a variety of interface in one of the micro controller. Its small size, low cost, the f

6、unction is strong, and 51 series microcontroller is the most typical of single chip microcomputer and the most representative of a kind. The graduation des</p><p>  The electronic calendar mainly USES the AT

7、89S52 SCM as the master its core, and the DS1302 clock chip provide clock, LED dynamic scanning display shows. AT89S52 SCM power consumption is small, voltage can choose 2.0 ~ 6 V voltage power supply; DS1302 clock chip

8、is the United States out Juan DALLAS has fine current charge function of low power consumption real time clock chip, it can be to year, month, day, week, when, minutes and seconds for timing; Digital display is USES LED

9、LCD screen to disp</p><p>  KEY WORDS Calendar;AT89S52 SCM; 1602 LCD; DS1302 clock chip.</p><p><b>  1 緒論</b></p><p>  隨著人們生活水平的提高和生活節(jié)奏的加快,對時間的要求越來越高,精準(zhǔn)數(shù)字計時的消費(fèi)需求也是越來越多,

10、數(shù)字時鐘由于其體積小、價格廉價、功能齊全受到市場的歡迎,而電子萬年歷作為電子類小設(shè)計不僅是市場上的寵兒,也是是單片機(jī)實(shí)驗(yàn)中一個很常用的題目。因?yàn)樗挠泻芎玫拈_放性和可發(fā)揮性,因此對作者的要求比較高,不僅考察了對單片機(jī)的掌握能力更加強(qiáng)調(diào)了對單片機(jī)擴(kuò)展的應(yīng)用。而且在操作的設(shè)計上要力求簡潔,功能上盡量齊全,顯示界面也要出色。數(shù)字顯示的日歷鐘已經(jīng)越來越流行,特別是適合在家庭居室、辦公室、大廳、會議室、車站和廣場等使用,壁掛式LED數(shù)碼管顯示的日

11、歷鐘逐漸受到人們的歡迎。LED數(shù)字顯示的日歷鐘顯示清晰直觀、走時準(zhǔn)確、可以進(jìn)行夜視,并且還可以擴(kuò)展出多種功能。 </p><p>  本文提出了一種基于AT89S52單片機(jī)的萬年歷設(shè)計方案,屏幕采用一個LCD顯示。本方案以AT89S52單片機(jī)作為主控核心,與時鐘芯片DS1302、鬧鐘模塊、按鍵、LCD顯示等模塊組成硬件系統(tǒng)。在硬件系統(tǒng)中設(shè)有3個獨(dú)立按鍵和一個LCD顯示器,能顯示豐富的信息,根據(jù)使用者的需要可以隨時

12、對時間進(jìn)行校準(zhǔn)、選擇時間、溫度顯示、是否為閏年等,綜上所述此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景.</p><p>  2 系統(tǒng)設(shè)計方案及分析</p><p><b>  2.1 設(shè)計要求</b></p><p> ?。?) 具有年、月、日、星期、時、分、秒顯示并能

13、進(jìn)行斷電自動保存等功能;</p><p> ?。?) 能對時間進(jìn)行調(diào)整設(shè)定;</p><p>  2.2 單片機(jī)芯片的選擇方案和論證</p><p><b>  方案一: </b></p><p>  采用89C51芯片作為硬件核心,采用Flash ROM,內(nèi)部具有4KB ROM 存儲空間,能于3V的超低壓工作,而且與M

14、CS-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計中時由于不具備ISP在線編程技術(shù), 當(dāng)在對電路進(jìn)行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,對芯片的多次拔插會對芯片造成一定的損壞[2]。</p><p><b>  方案二:</b></p><p>  采用STC89C52RC,片內(nèi)ROM全都采用Flash ROM;工作電壓為2.0V~3.8V,3.

15、3V~5.5V兩個段,頻率為0~40MHZ,同時也與MCS-51系列單片機(jī)完全該芯片內(nèi)部存儲器為8KB ROM 存儲空間,同樣具有89C51的功能,且具有在線編程可擦除技術(shù),當(dāng)在對電路進(jìn)行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,不需要對芯片多次拔插,所以不會對芯片造成損壞[3]。</p><p>  由以上所得選擇采用STC89S52作為主控制系統(tǒng).</p><p>&

16、lt;b>  2.3電源模塊設(shè)計</b></p><p>  方案一:采用9V干電池經(jīng)LDO穩(wěn)壓成5V電源為系統(tǒng)提供電源,攜帶方便,單電池對環(huán)境帶來的危害大,增加成本。</p><p>  方案二:采用市電經(jīng)變壓器降壓成5V電源,為MCU及外部電路提供電源,能提供較為穩(wěn)定的電壓及足夠的功率,制作簡單,應(yīng)用方便,適宜家庭常用。故本設(shè)計選擇方案二</p><

17、;p>  2.4 顯示模塊選擇方案和論證:</p><p><b>  方案一:</b></p><p>  采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價格適中,但是電路太復(fù)雜,在焊接電路的時候更容易發(fā)生焊接方面的錯誤,如脫焊虛焊等現(xiàn)象,而且做出來的產(chǎn)品較龐大笨重也不美觀,所以也不選擇數(shù)碼管。</p><p><b>  方案二:&

18、lt;/b></p><p>  采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示文字,圖形,顯示多樣,清晰可見.而且體積較小,使用方便,更容易滿足工程上對于電路更加簡潔的要求,讓我們學(xué)習(xí)到更多的關(guān)于液晶顯示器的知識,所以選擇了液晶顯示器,根據(jù)本設(shè)計的數(shù)據(jù)顯示要求選擇LCD1602液晶即可。</p><p>  2.5時鐘芯片的選擇方案和論證:</p><p

19、><b>  方案一:</b></p><p>  直接采用單片機(jī)定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時間誤差較大。所以不采用此方案。</p><p><b>  方案二:</b></p><p>  采用DS1302時鐘芯片實(shí)現(xiàn)時

20、鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計數(shù),而且精度高,工作電壓2.5V~5.5V范圍內(nèi),2.5V時耗電小于300nA.</p><p>  2.6 電路設(shè)計最終方案決定</p><p>  綜上各方案所述,對此次作品的方案選定: 采用AT89S52作為主控制系統(tǒng);LCD1602液晶顯示器作為顯示設(shè)備;DS1302提供時鐘電路,采

21、用市電變?yōu)?V的電源。</p><p>  3系統(tǒng)硬件的設(shè)計與實(shí)現(xiàn)</p><p>  3.1 電路設(shè)計框圖</p><p><b>  圖—1電路設(shè)計圖</b></p><p>  3.2單片機(jī)主控制模塊</p><p>  1、AT89S52的主要性能</p><p>

22、;  AT89S52是美國Atmel公司生產(chǎn)的低電壓、高性能CMOS 8位單片機(jī),片內(nèi)含8KB的可反復(fù)檫寫的程序存儲器和256字節(jié)數(shù)據(jù)存儲器(RAM),器件采用Atmel公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)配置通用8位中央處理器(CPU)和Flash存儲單元,功能強(qiáng)大的AT89S52單片機(jī)可靈活應(yīng)用于各種控制領(lǐng)域。AT89S52單片機(jī)屬于AT89C51單片機(jī)的增強(qiáng)型,與Intel公司的80C52在引腳排

23、列、硬件組成、工作特點(diǎn)和指令系統(tǒng)等方面兼容。單片機(jī)正常工作時,都需要有一個時鐘電路和一個復(fù)位電路。本設(shè)計中選擇了內(nèi)部時鐘方式和按鍵電平復(fù)位電路,來構(gòu)成單片機(jī)的最小電路。復(fù)位是單片機(jī)的初始化操作,單片機(jī)在啟動運(yùn)行時,都需要先復(fù)位,其作用是使CPU和系統(tǒng)中其他部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。因而,復(fù)位是一個很重要的操作方式。但單片機(jī)本身是不能自動進(jìn)行復(fù)位的,必須配合相應(yīng)的外部電路來實(shí)現(xiàn)。其主要工作特性是:</p&g

24、t;<p>  8K字節(jié)可編程flash存儲器; 全雙工UART串行通道</p><p>  八個中斷源 ; 低功耗空閑和掉電模式</p><p>  與MCS—51單片機(jī)兼容 ; 掉電后中斷可喚醒</p><p>  全靜態(tài)操作:0HZ—33HZ ; 看門狗定時器</p><p>

25、;  三級加密程序存儲器 ; 雙數(shù)據(jù)指針</p><p>  32個可編程I/O口線 ; 1000次擦寫周期</p><p>  三個十六位定時器 ; 掉電標(biāo)識符</p><p>  AT89S52引腳,它共有四十個引腳圖片如下:</p><p>  P0 口:P0口是一個8位漏極開路的雙向I/O

26、口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。在flash編程時,P0口也用來接收指令字節(jié);在程序校驗(yàn)時,輸出指令字節(jié)。程序校驗(yàn)時,需要外部上拉電阻。</p><p>  P1 口:P1 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動4 個 TTL

27、 邏輯電平。對P1 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 此外,P1.0和P1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器2 的觸發(fā)輸入(P1.1/T2EX),具體 如下表所示。 在flash編程和校驗(yàn)時,P1口接收低8位地址字節(jié)。</p><p>  P1口的第二功能如下:</

28、p><p>  P1.0 T2(定時器/計數(shù)器T2的外部計數(shù)輸入),時鐘輸出 </p><p>  P1.1 T2EX(定時器/計數(shù)器T2的捕捉/重載觸發(fā)信號和方向控制) </p><p>  P1.5 MOSI(在系統(tǒng)編程用) </p><p>  P1.6 MISO(在系統(tǒng)編程用) </p><p>  P1.7 SC

29、K(在系統(tǒng)編程用) </p><p>  P2 口:P2 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P2 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行MOVX @DPTR),P2 口送出高八位地址。在這種應(yīng)用

30、中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX @RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內(nèi)容。flash編程和校驗(yàn)時,P2口也接收高8位地址字節(jié)和一些控制信號。</p><p>  P3 口:P3 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P3 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部

31、拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。flash編程和校驗(yàn)時,P3口也接收一些控制信號。</p><p>  P3口的二功能如下:</p><p>  P3.0 RXD(串行輸入口)</p><p>  P3.1 TXD(串行輸出口)</p><p>  P3.2

32、INTO(外中斷0)</p><p>  P3.3 INT1(外中斷1)</p><p>  P3.4 TO(定時/計數(shù)器0)</p><p>  P3.5 T1(定時/計數(shù)器1)</p><p>  P3.6 WR(外部數(shù)據(jù)存儲器寫選通)</p><p>  P3.7 RD(外部數(shù)據(jù)存儲器讀選通)</p>

33、<p>  此外,P3口還接收一些用于FLASH閃存編程和程序校驗(yàn)的控制信號。</p><p>  RST——復(fù)位輸入。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機(jī)器周期以上高電平將是單片機(jī)復(fù)位。</p><p>  ALE/PROG——當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖

34、信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。對FLASH存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,通過對特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機(jī)執(zhí)行外部程序時,應(yīng)設(shè)置ALE禁止位無效。</p><p>  PSEN

35、——程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當(dāng)AT89C52由外部程序存儲器取指令(或數(shù)據(jù))時,每個機(jī)器周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,將跳過兩次PSEN信號。</p><p>  EA/VPP——外部訪問允許,欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如</p><p>

36、;  果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器的指令。</p><p>  單片機(jī)的最小系統(tǒng)如下圖所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳為復(fù)位輸入端,接上電容,電阻及開關(guān)后夠上電復(fù)位電路,20引腳

37、為接地端,40引腳為電源端. </p><p><b>  如圖-2所示</b></p><p><b>  圖—2主控制系統(tǒng)</b></p><p>  3.3時鐘電路模塊[5]</p><p>  圖-3示出DS1302的引腳排列,其中Vcc1為電池,Vcc2為主電源。在主電源關(guān)閉的情況下,也能

38、保持時鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段

39、。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電時,在Vcc大于等于2.5V之前,RST必須保持低電平。中有在SCLK 為低電平時,才能將RST置為高電平,I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。</p><p>  圖—3為DS1302引腳鏈接圖</p><p>&l

40、t;b>  3.4時鐘電路原理</b></p><p>  (1) 時鐘芯片DS1302的工作原理:</p><p>  DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如圖4所示。表-1為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對DS1302進(jìn)行讀寫數(shù)據(jù)。對于位6,若

41、對程序進(jìn)行讀/寫時RAM=1,對時間進(jìn)行讀/寫時,CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時,該位為1;該位為0</p><p>  則表示進(jìn)行的是寫操作。控制字節(jié)總是從最低位開始輸入/輸出的?!癈H”是時鐘暫停標(biāo)志位,當(dāng)該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時,時鐘開始運(yùn)行。“WP”</p><p>  是寫保護(hù)位,在任何的對時鐘和

42、RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時,寫保護(hù)位防止對任一寄存器的寫操作[6]。</p><p>  (2) DS1302的控制字節(jié)</p><p>  控制字節(jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)

43、行讀操作,控制字節(jié)總是從最低位開始輸出。 </p><p>  表一,DS1302控制字格式</p><p>  (3) 數(shù)據(jù)輸入輸出(I/O)</p><p>  在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位

44、到高位7[7]</p><p>  4) DS1302的寄存器</p><p>  DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式.</p><p>  此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS13

45、02與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。</p><p><b>  3.5顯示模塊</b></p><p>  顯示模塊是一個十分

46、重要的模塊,它使人們讀時間更加直觀,引腳連接的時候要多進(jìn)行思考,第三個引腳是亮暗調(diào)節(jié)引腳,感覺不進(jìn)行亮度調(diào)節(jié)就不用管這個引腳,直接懸空處理,到最后會發(fā)現(xiàn)整個屏幕都不亮,正確的處理方法應(yīng)該是直接接地,給個低電平。如果準(zhǔn)備進(jìn)行亮度調(diào)節(jié)的話,就可以接一個可調(diào)電阻</p><p>  圖—5液晶顯示與單片機(jī)連接電路</p><p><b>  3.6 按鍵模塊</b><

47、/p><p>  本系統(tǒng)用到了5個按鍵,其中一個用作系統(tǒng)手動復(fù)位,另外4個采用獨(dú)立按鍵,該種接法查詢簡單,程序處理簡單,可節(jié)省CPU資源,按鍵電路如圖3.17所示,4個獨(dú)立按鍵分別與AT89S52的P2.4、P2.5、P2.6、P2.7接口相連。 </p><p>  對以下4個按鍵作簡要說明:S2——SET 鍵,S3——UP鍵,S4——DOWN鍵,S5——OUT/STOP鍵。</p&g

48、t;<p>  SET 鍵:按下SET鍵進(jìn)入時間校準(zhǔn)狀態(tài),按一下進(jìn)入秒調(diào)整,兩下分調(diào)整,依此類推可進(jìn)行各年月日,時分秒以及星期的校準(zhǔn);</p><p>  UP鍵:當(dāng)SET鍵按下時,UP進(jìn)行SET選定項(xiàng)(如:小時)的加操作;</p><p>  DOWN鍵:當(dāng)SET鍵按下時,DOWN進(jìn)行SET選定項(xiàng)(如:小時)的減操作;</p><p>  OUT

49、/STOP鍵:</p><p>  1) 當(dāng)SET鍵按下時,此鍵功能為退出校準(zhǔn)功能;</p><p>  2) 當(dāng)SET鍵未按下時,UP關(guān)閉鬧鐘。</p><p><b>  圖—6按鍵電路</b></p><p>  4系統(tǒng)軟件流程設(shè)計及測試</p><p>  4.1 軟件設(shè)計總流程圖<

50、;/p><p>  圖7 系統(tǒng)軟件設(shè)計總流程圖</p><p><b>  4.2. 測試結(jié)果</b></p><p>  電子萬年歷是多功能數(shù)字型萬年歷,可以看當(dāng)前日期,時間,功能很多,所以對于它的程序也較為復(fù)雜,在編寫程序和調(diào)試時出現(xiàn)了相對較多的問題。所以編寫程序時分塊進(jìn)行,然后再一塊一塊的進(jìn)行組合,最終解決了軟件。</p>&l

51、t;p>  在軟件的調(diào)試過程中主要遇到的問題:</p><p> ?。?)程序編譯時出現(xiàn)函數(shù)未定義錯誤。</p><p>  解決:把相關(guān)子程序在前面定義,或者先聲明然后再在后面定義。</p><p> ?。?)數(shù)據(jù)未在液晶顯示器的預(yù)期位置顯示。</p><p>  原因:液晶顯示器的顯示位從1開始計算了;</p><

52、;p>  解決:應(yīng)該從零開始計算,把原來的定義顯示位置數(shù)字減一。</p><p> ?。?)電子萬年歷的電路系統(tǒng)雖然比較簡單,但對于焊接方面更是不可輕視,電路系統(tǒng)中只要出于一處的錯誤,則會對檢測造成很大的不便。在本電子萬年歷的設(shè)計調(diào)試中遇到了很多的問題?;叵脒@些問題只要認(rèn)真多思考都是可以避免的。</p><p>  板子接好后液晶屏不顯示,有時出現(xiàn)亂碼。</p><

53、;p>  解決:經(jīng)過多次檢查后發(fā)現(xiàn)單片機(jī)EA引腳沒有接高電平,引線接好即可。</p><p><b>  4.3測試結(jié)果分析</b></p><p> ?。?).在測試中遇到發(fā)光二極管、LCD液晶顯示器不顯示時,首先使用試測儀對電路進(jìn)行測試,觀察是否存在漏焊,虛焊,或者元件損壞</p><p> ?。?)LCD液晶顯示器顯示不正常,觀察電

54、路是否存在短路現(xiàn)象。查看燒寫的程序是否正確無誤,對程序進(jìn)行認(rèn)真修改。</p><p> ?。?)經(jīng)過48小時連續(xù)工作與電腦時間相比本設(shè)計慢了1.0秒,經(jīng)分析由DS1302晶振準(zhǔn)確度和電阻電容誤差引起。本設(shè)計在24小時之內(nèi)誤差0.5秒滿足設(shè)計要求及精度。</p><p><b>  4.4結(jié)論</b></p><p>  經(jīng)過多次的反復(fù)測試與分析

55、,可以對電路的原理及功能進(jìn)行掌握,提高了設(shè)計能力與及對電路的分析能力.同時在軟件的編程方面得到更大的提高,對編程能力得到加強(qiáng).對所學(xué)的知識得到很大的提高與鞏固.</p><p><b>  5總結(jié) </b></p><p>  論文首先對本設(shè)計作了簡要描述,隨后提出了不同的設(shè)計方案,經(jīng)過論證最后確定該設(shè)計采用電源模塊、時鐘模塊、顯示模塊、鍵盤接口模塊、溫度測量模塊和鬧

56、鐘模塊共六個模塊組成,接著分別從硬件系統(tǒng)和軟件系統(tǒng)兩方面對基于單片機(jī)的電子萬年歷設(shè)計作了詳細(xì)論述,另外還簡要介紹了一下系統(tǒng)的調(diào)試。</p><p>  在整個設(shè)計過程中,硬件方面主要設(shè)計了AT89S52單片機(jī)的最小系統(tǒng)、DS1302接口電路、DS18B20接口電路、鬧鐘及LCD顯示;軟件方面借助各個渠道的資料,主要設(shè)計了陽歷數(shù)據(jù)讀取程序、陽歷轉(zhuǎn)陰歷程序、溫度采集程序、鬧鈴程序以及LCD顯示程序;系統(tǒng)的調(diào)試主要是通

57、過一塊AT89S52開發(fā)板,再借助于Keil、STC以及少許自己搭建的外圍電路實(shí)現(xiàn)的;再此過程中,分步調(diào)試時顯示出了陽歷的日期及時間,還有實(shí)時溫度,集中調(diào)試時沒有達(dá)到預(yù)期效果。但在此過程中培養(yǎng)了自己的動手能力。</p><p>  此萬年歷具有讀顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。</p><p><b>  致 謝

58、</b></p><p>  經(jīng)過了四年的努力,我終于完成了學(xué)業(yè),并順利完成了學(xué)士畢業(yè)論文,在這期間得到了諸多老師的指導(dǎo)與幫助,還有許多親人朋友的關(guān)心與支持,在這里一并表示衷心的感謝!</p><p>  首先,感謝陳軍老師,在我寫畢業(yè)論文期間對我耐心的指導(dǎo),感謝學(xué)校實(shí)驗(yàn)室器材的配備,使我在完成理論的基礎(chǔ)上使實(shí)物得以實(shí)現(xiàn),另外,還要感謝圖書館電子資源管理室,它在我查閱資料方面也

59、給我提供了許多幫助!</p><p>  感謝所有關(guān)心過我的人,謹(jǐn)以我的努力作為回報!</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 李廣弟,單片機(jī)基礎(chǔ)[M],北京航空航天大學(xué)出版社,1994</p><p>  [2] 胡健.單片機(jī)原理及接口技術(shù)[J].北京:機(jī)械工業(yè)出版社,2005<

60、/p><p>  [3] 王法能.單片機(jī)原理及應(yīng)用[J].北京:科學(xué)出版社,2004</p><p>  [4] 蔡美琴,張為民,等.MCS-51系列單片機(jī)系統(tǒng)及其應(yīng)用設(shè)計[M].北京:高等教育出版社,2002</p><p>  [5] 謝自美.電子線路設(shè)計·實(shí)驗(yàn)·測試(第二版)[M].武漢:華中科技大學(xué)出版社,2006</p>&l

61、t;p>  [6] 閻石.數(shù)字電子技術(shù)基礎(chǔ)(第五版)[J].北京.高等教育出版社,2006</p><p>  [7] 鄭學(xué)堅(jiān);周斌.微型計算機(jī)原理及應(yīng)用[M].北京:清華大學(xué)出版社,2001</p><p>  [8] 譚浩強(qiáng).C程設(shè)計[J].北京.清華大學(xué)出版社,2007</p><p>  附錄1 系統(tǒng)總原理圖 </p><p>

62、  附錄2:系統(tǒng)程序清單</p><p>  #include <reg5.h></p><p>  #include "intrins.h"</p><p>  #define uint unsigned char</p><p>  #define uint unsigned int</p>

63、<p>  uchar xingqi,nian,yue,ri,xiaoshi,fen,miao;</p><p>  uchar nianh,nianl,yueh,yuel,rih,ril,xiaoshih,xiaoshil,fenh,fenl,miaoh,miaol;</p><p>  uchar dd=2;sbit clk=p1^0;</p><p>

64、;  sbit dat=p1^1;sbit rst=p1^2;</p><p>  sbitA0=ACC^0;sbitA1=ACC^1;</p><p>  sbitA2=ACC^2;sbitA3=ACC^3; </p><p>  sbitA4=ACC^4;sbitA5=ACC^5; </p><p>  sbitA6=ACC^6;sbit

65、A7=ACC^7;</p><p>  sbit p30=p3^0; </p><p>  sbit p31=p3^1; </p><p>  sbit p32=p3^2;</p><p>  sbit p33=p3^3; </p><p>  sbit p34=p3^4; </p><p> 

66、 sbit p35=p3^5; </p><p>  sbit p36=p3^6; </p><p>  sbit p37=p3^7;</p><p>  sbit date=p2^0;</p><p>  sbit load=p2^1;sbit clkk=p2^2;</p><p>  uchar bdata bit

67、msb;</p><p>  sbit m7=bitmsb^7;</p><p>  uchar x,y,c;</p><p>  bit flag=0;</p><p>  bit flagh=1;</p><p>  uchar code tab[]={0xff, //任意數(shù)</p>

68、<p>  0x06,/*1*/ //共陰數(shù)碼管</p><p>  0x5B,/*2*/</p><p>  0x4F,/*3*/</p><p>  0x66,/*4*/</p><p>  0x6D,/*5*/</p><p>  0x7D,/*6*/</p><p>  

69、0x07,/*7*/</p><p>  uchar code tab2[]={0x7e,ox30,ox6d,ox7,ox33,</p><p>  ox5b,ox5f,ox70,ox7f,ox7b}; </p><p>  //max7219,0~9的字庫</p><p>  uchar code tab1[]={ox00,ox01,ox

70、02,ox03,ox04,ox05,ox06,ox07,</p><p>  ox08,ox09,ox010,ox11,ox12,ox13,ox14,ox15,ox16,ox17,ox18,ox19,ox20,ox21,ox22,ox23,ox24,ox25,ox26,ox27,ox28,ox29,ox30,ox31,ox32,ox33,ox34,ox35,ox36,ox37,ox38,ox39,ox40,ox4

71、1,ox42,ox43,ox44,ox45,ox46,ox47,ox48,ox49,ox50,ox51,ox52,ox53,ox54,ox55,ox56,ox57,ox58,ox59,ox60};</p><p>  void send(void)</p><p>  {uchar count;</p><p><b>  bitmsb=x;</b&

72、gt;</p><p>  for(count=0;count<8;count++)</p><p><b>  { if(m7)</b></p><p><b>  {clkk=0;</b></p><p><b>  date=1;</b></p>&l

73、t;p><b>  -nop-();</b></p><p><b>  clkk=1;</b></p><p><b>  }</b></p><p>  else { clkk=0;</p><p><b>  date=0;</b><

74、;/p><p><b>  nop-(); </b></p><p><b>  clkk=1;</b></p><p><b>  }</b></p><p>  bitmsb<<=1;</p><p><b>  }</b&g

75、t;</p><p><b>  }</b></p><p>  void wr(void)</p><p><b>  {</b></p><p><b>  load=0;</b></p><p><b>  send();</b&g

76、t;</p><p><b>  x=y;</b></p><p><b>  send();</b></p><p><b>  lend=1;</b></p><p><b>  }</b></p><p>  void rea

77、dy(void)</p><p><b>  {</b></p><p>  x=oxfb; //設(shè)置掃描限制</p><p><b>  y=ox07;</b></p><p><b>  wr();</b></p><p>  

78、x=oxf9; //譯碼模式</p><p><b>  y=ox00;</b></p><p><b>  wr();</b></p><p>  x=oxfa; //亮度調(diào)節(jié)</p><p><b>  y=oxoc;</b>&

79、lt;/p><p><b>  wr();</b></p><p>  x=oxfc; //關(guān)斷模式</p><p><b>  y=ox01;</b></p><p><b>  wr();</b></p><p><b>

80、;  }</b></p><p>  void InputByte(uchar dd) //寫一個字節(jié)到1302中</p><p><b>  {uchar i;</b></p><p><b>  ACC=dd;</b></p><p>  for(i=8;i>0;i--)&

81、lt;/p><p><b>  { </b></p><p><b>  dat=A0;</b></p><p><b>  clk=1;</b></p><p><b>  clk=0;</b></p><p>  ACC=ACC&g

82、t;>=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void OutputByte(void) //從DS1302中讀出i個數(shù)據(jù)</p><p><b>  {</b></p><p

83、><b>  uchar i;</b></p><p><b>  dat=1;</b></p><p>  for(i=8;i>0;i--)</p><p>  {ACC=ACC>>1;</p><p><b>  A7=dat;</b></p&

84、gt;<p><b>  clk=1;</b></p><p><b>  clk=0;</b></p><p><b>  }</b></p><p><b>  dd=ACC;</b></p><p><b>  }</b

85、></p><p>  void Write(uchar addr,uchar num)</p><p><b>  {rst=0;</b></p><p><b>  clk=0;</b></p><p><b>  rst=1;</b></p><

86、p>  InputByte(addr); //寫地址</p><p>  InputByte(num); //寫數(shù)據(jù)</p><p><b>  clk=1;</b></p><p><b>  rst=0;</b></p><p><b>  { rst=0

87、;</b></p><p><b>  clk=0;</b></p><p><b>  rst=1;</b></p><p>  InputByte();</p><p><b>  clk=1;</b></p><p><b>

88、  rst=0;</b></p><p><b>  }</b></p><p>  //初始化設(shè)置時間,2008年5月27號,23時58分00秒</p><p>  void main(void)</p><p>  { uchar i;</p><p>  uint xt=

89、0;</p><p>  uchar fen1,fen2,fen3,fen4;</p><p><b>  p3=oxff;</b></p><p>  Disable WP(); //非寫保護(hù)</p><p>  WriteSec(ox00);

90、 //秒</p><p>  WriteMin(ox58); //分</p><p>  WriteHr(ox23); //時</p><p>  WriteDay(ox27);

91、//日</p><p>  WriteMn(ox05); //月</p><p>  WriteYs(ox08); //年</p><p>  WriteWe(ox02); //星期</p>

92、<p><b>  //7219設(shè)置</b></p><p><b>  ready();</b></p><p>  for(i=0;i<222;i++);</p><p>  for(i=0;i<222;i++);</p><p><b>  while(1)&

93、lt;/b></p><p>  { Read(ox8b); //讀星期數(shù)據(jù)</p><p>  xingqi =dd;</p><p>  Read(ox8d); //讀年數(shù)據(jù)</p><p><b>  fen 1=dd;</b></p>

94、<p>  fen 2=fen1&oxof;</p><p>  fen3=fen1&oxfo;</p><p><b>  fen3>>=4;</b></p><p>  nian=fen3*10+fen2;</p><p>  nianh=nian/10;</p>

95、<p>  nianl=nian%10;</p><p>  Read(ox89); //讀月數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p>  fen3=fen1&oxfo;<

96、/p><p><b>  fen3>>4;</b></p><p>  yue=fen3*10+fen2;</p><p>  yueh=yue/10;</p><p>  yuel=yue%10;</p><p>  Read(ox87); //讀日數(shù)據(jù)<

97、;/p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p><b>  fen3>>=4;</b></p><p>  ri=fen3*10+fen2;</p><p>  rih=ri/10;&l

98、t;/p><p>  ril=ri%10;</p><p>  Read(ox85); //讀小時數(shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p>  fen3=fen1&oxf

99、o;</p><p><b>  fen3>>=4;</b></p><p>  xiaoshi=fen3*10+fen2;</p><p>  xiaoshih=xiaoshi/10;</p><p>  xiaoshil=xiaoshi%10;</p><p>  Read(ox8

100、3); //讀分?jǐn)?shù)據(jù)</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p>  fen3=fen1&oxfo;</p><p><b>  fen3>>4;</b><

101、;/p><p>  fen=fen3*10+fen2;</p><p>  fenh=fen/10;</p><p>  fenl=fen%10;</p><p>  Read(ox81); //讀秒數(shù)據(jù)</p><p><b>  fen1=dd;</b></p&g

102、t;<p>  miaoh=miao/10;</p><p>  miaol=miao%10;</p><p><b>  xingqi++;</b></p><p><b>  if(flag)</b></p><p>  { Read(ox89); //讀月數(shù)據(jù)

103、</p><p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p>  fen3=fen1&oxf0;</p><p><b>  fen3>>4;</b></p><p>  yue=fen

104、3*10+fen2;</p><p><b>  yue++;</b></p><p>  if(yue>=13)</p><p><b>  yue=1;</b></p><p>  WriteMn(tab1[yue]);</p><p>  while(p32==0

105、);</p><p><b>  }</b></p><p>  if(p33==0) //日</p><p><b>  if(flag)</b></p><p>  {Read(ox87); //讀日數(shù)據(jù)</p>

106、;<p><b>  fen1=dd;</b></p><p>  fen2=fen1&oxof;</p><p>  fen3=fen1&oxf0;</p><p><b>  fen3>>=4;</b></p><p>  ri=fen3*10+fen2

107、;</p><p><b>  ri++;</b></p><p>  if(ri>=32)</p><p><b>  ri=1;</b></p><p>  WriteDay(tab1[ri]);//ri</p><p>  while(p33==0) ;</

108、p><p><b>  }</b></p><p>  if(p34==0) //小時</p><p><b>  if(flag)</b></p><p>  {Read(ox85); //讀小時數(shù)據(jù)</p><p><

109、b>  fen1=dd;</b></p><p>  fen2=fen1&oxf0;</p><p>  fen3=fen1&oxf0;</p><p><b>  fen3>>=4;</b></p><p>  WriteHr(tab1[xiaoshi]);</p&g

110、t;<p>  while(p34==0);</p><p><b>  }</b></p><p>  if(p35==0) //分</p><p><b>  if(flag)</b></p><p>  {Read(ox83);

111、 //讀分?jǐn)?shù)據(jù)</p><p><b>  fen1=dd;</b></p><p><b>  }</b></p><p>  if(p37==0) //調(diào)整標(biāo)志</p><p>  { flag=~f

112、lag;</p><p><b>  if(flag)</b></p><p>  WriteSec(ox80);</p><p><b>  else</b></p><p>  WriteSec(ox800);</p><p>  while(p37==0);</p

113、><p><b>  }</b></p><p>  if(p36==0) //調(diào)整標(biāo)志</p><p>  {flagh=~flagh;</p><p>  while(p36==0);</p><p><b>  }</b>

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論