基于單片機(jī)的時(shí)鐘設(shè)計(jì)方案吳懷志_第1頁
基于單片機(jī)的時(shí)鐘設(shè)計(jì)方案吳懷志_第2頁
基于單片機(jī)的時(shí)鐘設(shè)計(jì)方案吳懷志_第3頁
基于單片機(jī)的時(shí)鐘設(shè)計(jì)方案吳懷志_第4頁
基于單片機(jī)的時(shí)鐘設(shè)計(jì)方案吳懷志_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

YanChengInstituteofTechnologyYanChengInstituteofTechnology課程設(shè)計(jì)說明書課程名稱單片機(jī)應(yīng)用設(shè)計(jì)設(shè)計(jì)題目基于單片機(jī)的時(shí)鐘設(shè)計(jì)專業(yè)M自動(dòng)化101學(xué)生姓名吳懷志班級(jí)101學(xué)號(hào)1061417108完成日期201312/1/——2013/12/12鹽城工學(xué)院電氣學(xué)院鹽城工學(xué)院電氣學(xué)院課程設(shè)計(jì)任務(wù)書姓名:吳懷志院(系):電氣工程學(xué)院專業(yè):M自動(dòng)化101班號(hào):101任務(wù)起至日期2013年12月01日至201312年月12日課程設(shè)計(jì)題目:《基于單片機(jī)的時(shí)鐘設(shè)計(jì)》已知技術(shù)參數(shù)和設(shè)計(jì)要求:(1)AT89C51單片機(jī)(2)DS1302定時(shí)器(3)DS1232看門狗(4)LCD1602液晶顯示(5)電池供電(6)Altium軟件預(yù)期設(shè)計(jì)效果:設(shè)計(jì)一個(gè)基于單片機(jī)的電子時(shí)鐘,要求能夠?qū)崿F(xiàn)時(shí)、分、秒.工作計(jì)劃安排:2013年12月1日-2日:收集和課程設(shè)計(jì)有關(guān)的資料,熟悉課題任務(wù)何要求2013年12月3日-4日:總體方案設(shè)計(jì)2013年12月5日—8日:硬件電路設(shè)計(jì)2013年12月9日—11日:軟件設(shè)計(jì)2013年12月12日:整理書寫設(shè)計(jì)說明書2013年12月13日:答辯同組設(shè)計(jì)者及分工:獨(dú)立完成!!!!!!成績?cè)u(píng)定:_____(dá)____(dá)__(dá)__指導(dǎo)教師簽字:______(dá)年月日摘要本文介紹了基于AT89C51單片機(jī)的多功能電子萬年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計(jì)方法。系統(tǒng)以AT89C51單片機(jī)為控制器,以串行時(shí)鐘日歷芯片DS1302記錄日歷和時(shí)間,它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能。萬年歷采用直觀的數(shù)字顯示,可以在LED上同時(shí)顯示年、月、日、周日、時(shí)、分、秒,還具有時(shí)間校準(zhǔn)等功能。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),具有廣闊的市場(chǎng)前景。

關(guān)鍵字AT89C51;電子萬年歷;

DS1302目錄1電子鐘的工作原里....。...。。。...。。.。。...。....。..。.....。.。...。...。。..。。..。..。。..。。...。。。...。。。..。..。。..。...。.。..。....。。..。。.。.。.。。....。12系統(tǒng)硬件設(shè)計(jì)及電路元件...。。..。.....。...。.。.....。。...。。......。.....。.。.。.........。。。...。.....。.。.。。。.....。.。。。。。...。...........1AT89C51芯片。。。....。。............。....。。.。..。..。。..。.。.....。。。。。..。。。.。。........。.....。...。...。..。.。.。。。...。.。。...。.。...。.。.2DS1302芯片...。。.。...。。。.。.....。。..。。。.....。......。。。。..。......。。..。..。。。..。..。。.。。..。......。...。..。..。.。....。.。。.。...。.....3LCD1602?液晶顯示.。。....。..。.。.。.。.。...。..。.。..。。.。.....。..。。。。。.。...。....。..。..。。.。.。。...。。.。。..。..........。......。。.。....3系統(tǒng)軟件電路設(shè)計(jì)。。....。。....。..。.....。。......。.......。...。。.。。..。...。.。.。...。.。。..。..。..。.。。.........。。。.。.。.。。。....。.。........。..。.1系統(tǒng)流程圖及源代碼設(shè)計(jì)....。.。.。。....。.。。.。..。。...。.。。。...。.。..。。。..。..。..。。。........。.......。。。..。..。....。..。..。。....。1主程序流程圖設(shè)計(jì)...。。.。.。。..。。。。。......。.。。......。..。..。。.。...。.。..。。.。。。。。.。。。。。.....。.。。...。.。.....3子程序源代碼設(shè)計(jì)。.。.。...。.....。。..。....。.....。..。....。。.。。。...。。...。。.。.。.....。。.....。....。。。。....。.3設(shè)計(jì)原理圖.。.......。......。。.。。.。....。..。。。.....。。.。。。。...。.。...。。.。...。.....。..。.。....。.....。..........。.4心得體會(huì)。.。.。.....。.。.。.。。.。......。。。。。。.....。....。.。。......。.。。.....。.。..。.。...。....。..。......。...。..。。。.......。....。..。..。.。.。......。5參考文件.。。......。.。.。...。..。.....。。.。。...。..。.。..。.。。.。..。......。....。.....。。。...。....。..。。.....。.。...。.......。。。。.。.....。。。。。.。..。。6附件....。...。。...。。...。...。。..。..。。。..。...。。.。......。。..。.。.。..。.....。。。。。..。...。。.。。.。.。。..。。..。..。。。.....。。..。.。..。..。..。。............1程序代碼.。......。....。.。。.。......。...........。..。。。。.。。。......。。。.。.。。.。.....。。.。。。.。..。..。.。。。。.。....。.。。...。.。。。。。.。。。.....。....2程序原理圖。。....。。......。.。。.。...。。。.。.。.。..。....。。...。......。。。。.。............。.。。。..。.。.......。.。。...........。.......。。。......第1章電子時(shí)鐘的工作原理本次設(shè)計(jì)時(shí)鐘電路,使用了AT89C51單片機(jī)芯片控制電路,單片機(jī)控制電路簡單且省去了很多復(fù)雜的線路,使得電路簡明易懂,用C語言程序來控制整個(gè)時(shí)鐘的顯示,使得編程變得更容易,這樣通過五個(gè)模塊:芯片、顯示屏、看門狗、電源、時(shí)鐘即可滿足設(shè)計(jì)要求第1章電子時(shí)鐘的工作原理本次設(shè)計(jì)時(shí)鐘電路,使用了AT89C51單片機(jī)芯片控制電路,單片機(jī)控制電路簡單且省去了很多復(fù)雜的線路,使得電路簡明易懂,用C語言程序來控制整個(gè)時(shí)鐘的顯示,使得編程變得更容易,這樣通過五個(gè)模塊:芯片、顯示屏、看門狗、電源、時(shí)鐘即可滿足設(shè)計(jì)要求。此設(shè)計(jì)原理圖框圖如圖1-1所示,此電路包括以下五個(gè)部分:單片機(jī)、時(shí)鐘電路、看門狗、液晶屏、電源模塊、時(shí)鐘振蕩電路.AT89C51主控模塊AT89C51主控模塊DS1232時(shí)鐘電路時(shí)鐘振蕩模塊DS1302看門狗LCD1602顯示模塊電源模塊圖1—1主電路設(shè)計(jì)框圖本設(shè)計(jì)采用C語言程序設(shè)計(jì),使單片機(jī)控制數(shù)碼管顯示年、月、日、時(shí)、分、秒,當(dāng)秒計(jì)數(shù)滿60時(shí)就向分進(jìn)位,分計(jì)數(shù)器計(jì)滿60后向時(shí)計(jì)數(shù)器進(jìn)位,小時(shí)計(jì)數(shù)器按“23翻0”規(guī)律計(jì)數(shù).時(shí)、分、秒的計(jì)數(shù)結(jié)果經(jīng)過數(shù)據(jù)處理可直接送顯示器顯示。當(dāng)計(jì)時(shí)發(fā)生誤差的時(shí)候可以用校時(shí)電路進(jìn)行校正。設(shè)計(jì)采用的是時(shí)、分、秒顯示,單片機(jī)對(duì)數(shù)據(jù)進(jìn)行處理同時(shí)在LCD上顯示。第2章系統(tǒng)硬件電路設(shè)計(jì)及元件2.1AT89C51芯片AT89C51是美國ATMEL公司生產(chǎn)的8位FlashROM單片機(jī)。其最突出的優(yōu)點(diǎn)是片內(nèi)ROM為FlashROM,可擦寫1000次以上,應(yīng)用并不復(fù)雜的通用ROM寫入器就能方便的擦寫,讀取也很方便,價(jià)格低廉,具有片程序ROM二級(jí)保密系統(tǒng)。因此可靈活應(yīng)用于各種控制領(lǐng)域。AT89C51包含以下一些功能部件:(1)一個(gè)8位CPU;(2)一個(gè)片內(nèi)振蕩器和時(shí)鐘電路;(3)4KBFlashROM;(4)128B內(nèi)RAM;(5)可尋址64KB的外ROM和外RAM控制電路;(6)兩個(gè)16位定時(shí)/計(jì)數(shù)器;(7)21個(gè)特殊功能寄存器;(8)4個(gè)8位并行I/O口;(9)一個(gè)可編程全雙工串行口;(10)5個(gè)中斷源,可設(shè)置成2個(gè)優(yōu)先級(jí)。AT89C51單片機(jī)一般采用雙列直插DIP封裝,共40個(gè)引腳,圖2-1為其引腳排列圖。40個(gè)引腳大致可分為4類:電源、時(shí)鐘、控制各I/O引腳。圖2—1AT89C51引腳圖2.1.1電源電池供電2.1.2時(shí)鐘XTAL1、XTAL2—-晶體振蕩電路反相輸入端和輸出端。2。1.3控制線控制線共有4根,其中3根是復(fù)用線.所謂復(fù)用線是指具有兩種功能,正常使用時(shí)是一種功能,在某種條件下是另一種功能。源.2.2DS1302芯片DS1302是美國DALLAS公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘日歷芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小于31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能.工作電壓寬達(dá)2.5~5。5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。有主電源和備份電源雙引腳,而且備份電源可由大容量電容(>1F)來替代。需要強(qiáng)調(diào)的是,DS1302需要使用32。768KHz的晶振。DS1302包含以下一些功能部件:(1)實(shí)時(shí)時(shí)鐘,可對(duì)秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù);(2)用于高速數(shù)據(jù)暫存的31×8位RAM;(3)最少引腳的串行I/O;(4)2。5~5.5V電壓工作范圍;(5)2.5V時(shí)耗電小于300nA;(6)用于時(shí)鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;(7)簡單的3線接口;(8)可選的慢速充電(至VCC1)的能力。2。2.1DS1302數(shù)據(jù)操作原理DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被輸入。無論是讀周期還是寫周期,開始8位指定40個(gè)寄存器中哪個(gè)被訪問到。在開始8個(gè)時(shí)鐘周期,把命令字節(jié)裝入移位寄存器之后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫操作時(shí)寫入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8加8,在多字節(jié)方式下為8加字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù).DS1302的內(nèi)部結(jié)構(gòu)圖如圖2-2所示。圖2-2DS1302內(nèi)部結(jié)構(gòu)圖2。2.2DS1302的引腳圖及功能DS1302的引腳圖如圖2-3所示。圖2-3DS1302引腳圖DS1302各引腳功能:SCLK:串行時(shí)鐘,輸入,控制數(shù)據(jù)的輸入與輸出;I/O:三線接口時(shí)的雙向數(shù)據(jù)線;CE:輸入信號(hào),在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個(gè)功能:第一,CE開始控制字訪問移位寄存器的控制邏輯;其次CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒?。引腳功能如表2-2所示:表2-2DS1302引腳功能說明引腳號(hào)名稱功能1VCC1備份電源輸入2X132.768KHz晶振輸入3X232.768KHz晶振輸出4GND地5RST控制移位寄存器/復(fù)位6I/O數(shù)據(jù)輸入/輸出7SCLK串行時(shí)鐘8VCC2主電源輸入2。2.3DS1302的寄存器1、DS1302有關(guān)日歷、時(shí)間的寄存器共有12個(gè),其中有7個(gè)寄存器(讀時(shí)81h~8Dh,寫時(shí)80h~8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如表2—3所示:表2-3DS1302的日歷、時(shí)鐘寄存器及其控制字寄存器名命令字取值范圍各位內(nèi)容寫操作讀操作76543210秒寄存器80H81H00--59CH10SECSEC分寄存器82H83H00--59010MINMIN時(shí)寄存器84H85H01-12或00-2312/24010HRHR日寄存器86H87H01-28,29,30,310010DATEDATE月寄存器88H89H01-—1200010MMONTH周寄存器8AH8BH01--0700000DAY年寄存器8CH8DH00—-9910YEARYEAR控制8EH8FH-WP0000000秒寄存器(81h、80h)的位7定義為時(shí)鐘暫停標(biāo)志(CH)。當(dāng)該位置為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位置為0時(shí),時(shí)鐘開始運(yùn)行。小時(shí)寄存器(85h、84h)的位7用于定義DS1302是運(yùn)行于12小時(shí)模式還是24小時(shí)模式.當(dāng)為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式時(shí),位5是,當(dāng)為1時(shí),表示PM。在24小時(shí)模式時(shí),位5是第二個(gè)10小時(shí)位??刂萍拇嫫鳎?Fh、8Eh)的位7是寫保護(hù)位(WP),其它7位均置為0。在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP位必須為0。當(dāng)WP位為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作.2、DS1302的工作模式寄存器所謂突發(fā)模式是指一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。突發(fā)模式寄存器如表2-4所示:表2-4突發(fā)模式寄存器工作模式寄存器讀寄存器寫寄存器時(shí)鐘突發(fā)模式CLOCKBURSTBFHBEHRAM突發(fā)模式RAMBURSTFFHFEH3、DS1302還有涓流充電寄存器等。2。2。4DS1302的控制字DS1302的控制字如下表所示:表2—5控制字(即地址及命令字節(jié))765432101RAMA4A3A2A1A0RD控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6:如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1(A4~A0):指示操作單元的地址;位0(最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作.控制字總是從最低位開始輸出。在控制字指令輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個(gè)SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。2。2.5DS1302時(shí)序CE輸入驅(qū)動(dòng)高啟動(dòng)所有的數(shù)據(jù)傳輸。CE輸入有兩個(gè)功能.首先,CE打開控制邏輯,允許訪問的移位寄存器的地址/命令序列。其次,CE提供了一個(gè)終止單字節(jié)或多字節(jié)數(shù)據(jù)傳輸方法.一個(gè)時(shí)鐘周期是由一個(gè)下降沿之后的上升沿序列。對(duì)于數(shù)據(jù)傳輸而言,數(shù)據(jù)必須在有效的時(shí)鐘的上升沿輸入,在時(shí)鐘的下降沿輸出。如果CE為低,所有的I/O引腳變?yōu)楦咦杩範(fàn)顟B(tài),數(shù)據(jù)傳輸終止。對(duì)于數(shù)據(jù)輸入:開始的8個(gè)SCLK周期,輸入寫命令字節(jié),數(shù)據(jù)字節(jié)在后8?jìng)€(gè)SCLK周期的上升沿輸入。數(shù)據(jù)輸入位0開始。對(duì)于數(shù)據(jù)輸出:開始的8個(gè)SCLK周期,輸入一個(gè)讀命令字節(jié),數(shù)據(jù)字節(jié)在后8個(gè)SCLK周期的下降沿輸出。注意,第一個(gè)數(shù)據(jù)字節(jié)的第一個(gè)下降沿發(fā)生后,命令字的最后一位被寫入,命令字節(jié)的最后一位被寫入.當(dāng)CE仍為高時(shí)。如果還有額外的SCLK周期,DS1302將重新發(fā)送數(shù)據(jù)字節(jié),這使DS1302具有連續(xù)突發(fā)讀取的能力.2.3LCD1602液晶顯示LCD1602是一種用5x7點(diǎn)陣圖形來顯示字符的液晶顯示器模塊,它顯示的容量為2行16個(gè)字共32個(gè)字符.它由若干個(gè)5×7或者5×11點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符.模塊采用數(shù)字式接口,能夠方便地與單片機(jī)等控制類芯片進(jìn)行通信。由于其具有體積小、重量輕、顯示質(zhì)量高、功耗低等諸多優(yōu)點(diǎn)而被廣泛用于智能化儀器儀表的顯示器件。2.3.1LCD1602引腳及功能LCD1602的引腳如圖2-7所示:圖2-7LCD1602引腳圖LCD1602引腳功能表如下表2-7所示:表2—7LCD1602引腳功能表編號(hào)符號(hào)引腳說明編號(hào)符號(hào)引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號(hào)14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極LCD1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符圖有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。

LCD1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2-8所示:表2—8LCD1602控制命令表指令RSR/WD8D7D6D5D4D3D2D1清顯示0000000001光標(biāo)返回000000001*置輸入模式00000001I/DS顯示開/關(guān)控制0000001DCB光標(biāo)或字符移位000001S/CR/L**置功能00001DLNF**置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址(ADD)讀忙標(biāo)志或地址01BF計(jì)數(shù)器地址(AC)寫數(shù)到CGRAMD或DRAM10要寫的數(shù)從CGRAMD或DRAM讀數(shù)11讀出的數(shù)據(jù)它的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的(說明:1為高電平,0為低電平)。指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置.指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。指令3:光標(biāo)和顯示模式設(shè)置I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移。S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示。C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo)。B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標(biāo)或顯示移位S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)。指令6:功能設(shè)置命令DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線。N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示。F:低電平時(shí)顯示5X7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符(有些模塊是DL:高電平時(shí)為8位總線,低電平時(shí)為4位總線)。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀出忙信號(hào)和光標(biāo)地址.BF為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙,模塊就能接收相應(yīng)的命令或者數(shù)據(jù)。指令10:寫數(shù)據(jù).指令11:讀數(shù)據(jù)。液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志位是不是為低電平,是低電平則表示不忙,否則此指令失效.要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。表2—9為LCD1602的內(nèi)部顯示地址。表2—9LCD1602的內(nèi)部顯示地址123·····141516第一行80H81H82H·····8DH8EH8FH第二行0C0H0C1H0C2H·····0CDH0CEH0CFH系統(tǒng)軟件電路設(shè)計(jì)3.1系統(tǒng)流程圖及源代碼設(shè)計(jì)3。1.1主程序流程圖設(shè)計(jì)液晶屏通信引腳定義液晶屏通信引腳定義DS1302通信引腳定義數(shù)據(jù)設(shè)定引腳定義開始引腳定義地址定義程序開始初始化液晶屏讀取DS1302程序數(shù)據(jù)分離送顯示緩存日歷顯示子程序數(shù)據(jù)存儲(chǔ)地址顯示數(shù)據(jù)緩沖地址初始化液晶屏幕顯示初始畫面清液晶屏幕顯示空白讀DS1302程序分離數(shù)據(jù)子程序?qū)懼噶畹揭壕磷x數(shù)據(jù)到液晶屏圖3—1主程序流程圖圖3—1主程序流程圖YYYYYYYNNNNNNNNY3.1。2子程序流程圖設(shè)計(jì)YYYYYYYNNNNNNNNYDS1302定時(shí)器中斷子程序流程圖開始開始給定時(shí)器再次賦值判斷是否計(jì)滿18次秒加1,判斷是否等于60分加1,秒置0,判斷分是否等于60時(shí)加1,分置0,判斷時(shí)是否等于24日加1,時(shí)置0,判斷該年是否為閏年判斷日是否到月底月加1,日置1,判斷月是否等于12年加1,月置1,判斷年是否為100執(zhí)行年、月、日、時(shí)、分、秒的顯示結(jié)束圖3—2DS1302中斷流程圖程序主要實(shí)現(xiàn)對(duì)DS1302寫保護(hù)、充電,對(duì)年、月、日、時(shí)、分、秒等寄存器的讀寫操作。在讀寫操作子程序中都執(zhí)行了關(guān)中斷指令,因?yàn)樵诖型ㄐ艜r(shí)對(duì)時(shí)序要求比較高,而且在此是用I/O口軟件模擬串行時(shí)鐘脈沖,所以在通信過程中最好保證傳輸?shù)倪B續(xù)性,不要允許中斷,如圖3-2所示。LCD1602流程圖程序主要實(shí)現(xiàn)對(duì)信息的顯示,包括年、月、日、時(shí)、分、秒等信息,在這里要注意它的讀寫控制指令。其流程圖如圖3—3所示。開始RW和E都置零開始RW和E都置零設(shè)置點(diǎn)陣8位數(shù)據(jù)接口,兩行顯示開顯示,不顯示光標(biāo)地址指針加一,畫面不一定刷新,全部清零給地址,從第一行開始寫顯示第一行數(shù)據(jù)給第二行地址,顯示第二行數(shù)據(jù)結(jié)束圖3—3LCD1602初始化流程圖3.1。3子程序源代碼設(shè)計(jì)詳見附錄一3.1.3設(shè)計(jì)原理圖詳見附錄二四心得體會(huì)

通過這次對(duì)《基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)》的設(shè)計(jì)與制作過程,加強(qiáng)了我們動(dòng)手、思考和解決問題的能力。

在設(shè)計(jì)過程中我們利用Altium軟件進(jìn)行原理圖及PCB圖的繪制,最后再利仿真軟件進(jìn)行檢查,看程序是否能顯示其功能。在設(shè)計(jì)過程中讓我進(jìn)一步深刻的學(xué)習(xí)各種軟件的利用以及各種軟件給我們帶來的便利。

該數(shù)字鐘通過單片機(jī)AT89C51做CPU進(jìn)行總的控制,基于時(shí)鐘芯片DS1302產(chǎn)生時(shí)間,利用LCD1602進(jìn)行液晶顯示的一個(gè)簡易的數(shù)字鐘。LCD1602能夠?qū)δ?、月、日、周、日、時(shí)、分、秒進(jìn)行計(jì)時(shí)及顯示。通過設(shè)計(jì)后能夠熟練的掌握時(shí)鐘芯片DS1302、LCD1602、AT89C51的的各個(gè)引腳及功能,并能夠掌握和運(yùn)用這幾個(gè)芯片。

通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。

這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多專業(yè)知識(shí)問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時(shí),在老師的身上我們學(xué)也到很多實(shí)用的知識(shí),在次我們表示感謝!同時(shí),對(duì)給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝五參考文獻(xiàn)

[1]張義和.例說51單片機(jī)[M].北京:人民郵電出版社,2010年

[2]

閻石編著

數(shù)字電子技術(shù)基礎(chǔ)

(第五版)

北京高等教育出版社]

2006.1~550

[3]

蔡明文

馮先成主編

單片機(jī)課程設(shè)計(jì)

華中科技大學(xué)出版社

2007。3

[4]陳明螢

編著

8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材

清華大學(xué)出版社

2004

[5]

康華光

編著

模擬電子技術(shù)基礎(chǔ)(第五版)

高等教育出版社

2006

[6

]黃智偉

編著

全國大學(xué)生電子設(shè)計(jì)競(jìng)賽電路(第一版)航空航天大學(xué)出版社

2006.36[7]李可為。數(shù)字鐘電路及應(yīng)用[M].電子工業(yè)出版社,1996.[8]夏繼強(qiáng),沈德金.單片機(jī)實(shí)驗(yàn)與實(shí)踐教程(二)[M]北航出版社,2001.[9]張紅潤,藍(lán)清華。單片機(jī)應(yīng)用技術(shù)教程[M]清華大學(xué)出版社,1997.。[10]周立功。單片機(jī)實(shí)驗(yàn)與實(shí)踐[M]北京航空航天大學(xué)出版社,2004.[11]李朝青.單片機(jī)原理及接口技術(shù)[M].北京航空航天大學(xué)出版社,1994。附錄一/*****************************************************程序名稱:基于單片機(jī)和時(shí)鐘芯片DS1302的電子時(shí)鐘程序功能:時(shí)鐘芯片采用DS1302???顯示采用液晶屏LCD1602***************************************************/#include〈reg51。h>//包含單片機(jī)寄存器的頭文件#include<intrins.h>//包含_nop_()函數(shù)定義的頭文件#defineucharunsignedchar#defineuintunsignedint/***********************************************************************以下是DS1302芯片的操作程序************************************************************************/ucharcodedigit[10]={”0123456789"};//定義字符數(shù)組顯示數(shù)字sbitDATA=P1^1;//位定義1302芯片的接口,數(shù)據(jù)輸出端定義在P1。1引腳sbitRST=P1^2;//位定義1302芯片的接口,復(fù)位端口定義在P1.1引腳sbitSCLK=P1^0;//位定義1302芯片的接口,時(shí)鐘輸出端口定義在P1.1引腳/*****************************************************函數(shù)功能:延時(shí)若干微秒入口參數(shù):n***************************************************/voiddelaynus(ucharn){uchari;for(i=0;i<n;i++);}/*****************************************************函數(shù)功能:向1302寫一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):x***************************************************/voidWrite1302(uchardat){uchari;SCLK=0;? //拉低SCLK,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備delaynus(2); ?//稍微等待,使硬件做好準(zhǔn)備for(i=0;i<8;i++) //連續(xù)寫8個(gè)二進(jìn)制位數(shù)據(jù){?DATA=dat&0x01;?//取出dat(yī)的第0位數(shù)據(jù)寫入1302 delaynus(2);//稍微等待,使硬件做好準(zhǔn)備??SCLK=1;//上升沿寫入數(shù)據(jù) ?delaynus(2);?//稍微等待,使硬件做好準(zhǔn)備? SCLK=0;?//重新拉低SCLK,形成脈沖??dat>>=1; //將dat(yī)的各數(shù)據(jù)位右移1位,準(zhǔn)備寫入下一個(gè)數(shù)據(jù)位 }?}/*****************************************************函數(shù)功能:根據(jù)命令字,向1302寫一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):Cmd,儲(chǔ)存命令字;dat,儲(chǔ)存待寫的數(shù)據(jù)***************************************************/voidWriteSet1302(ucharCmd,uchardat){RST=0;//禁止數(shù)據(jù)傳遞SCLK=0;//確保寫數(shù)居前SCLK被拉低?RST=1;//啟動(dòng)數(shù)據(jù)傳輸?delaynus(2);//稍微等待,使硬件做好準(zhǔn)備 Write1302(Cmd);//寫入命令字?Write1302(dat);//寫數(shù)據(jù)?SCLK=1;//將時(shí)鐘電平置于已知狀態(tài)?RST=0;//禁止數(shù)據(jù)傳遞}/*****************************************************函數(shù)功能:從1302讀一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):x***************************************************/ucharRead1302(void){ uchari,dat; delaynus(2);//稍微等待,使硬件做好準(zhǔn)備?for(i=0;i〈8;i++)//連續(xù)讀8?jìng)€(gè)二進(jìn)制位數(shù)據(jù)?{??dat>>=1;//將dat(yī)的各數(shù)據(jù)位右移1位,因?yàn)橄茸x出的是字節(jié)的最低位??if(DATA==1)//如果讀出的數(shù)據(jù)是1??dat|=0x80;//將1取出,寫在dat的最高位? SCLK=1;//將SCLK置于高電平,為下降沿讀出??delaynus(2);//稍微等待 ?SCLK=0;//拉低SCLK,形成脈沖下降沿 ?delaynus(2);//稍微等待?}? returndat;//將讀出的數(shù)據(jù)返回}/*****************************************************函數(shù)功能:根據(jù)命令字,從1302讀取一個(gè)字節(jié)數(shù)據(jù)入口參數(shù):Cmd***************************************************/ucharReadSet1302(ucharCmd){uchardat;RST=0;//拉低RSTSCLK=0;//確保寫數(shù)居前SCLK被拉低RST=1;//啟動(dòng)數(shù)據(jù)傳輸Write1302(Cmd);//寫入命令字dat(yī)=Read1302();//讀出數(shù)據(jù)SCLK=1;//將時(shí)鐘電平置于已知狀態(tài)RST=0;//禁止數(shù)據(jù)傳遞returndat;//將讀出的數(shù)據(jù)返回}/*****************************************************函數(shù)功能:1302進(jìn)行初始化設(shè)置***************************************************/voidInit_DS1302(void){?WriteSet1302(0x8E,0x00);//根據(jù)寫狀態(tài)寄存器命令字,寫入不保護(hù)指令WriteSet1302(0x80,((0/10)<<4|(0%10)));//根據(jù)寫秒寄存器命令字,寫入秒的初始值????? ????//'/'除法運(yùn)算,取整;’%’取模運(yùn)算,取余 ? ??? ????//數(shù)據(jù)前四位為十位,后四位為個(gè)位,詳見寄存器表?WriteSet1302(0x82,((0/10)〈<4|(0%10)));//根據(jù)寫分寄存器命令字,寫入分的初始值?WriteSet1302(0x84,((12/10)〈<4|(12%10)));//根據(jù)寫小時(shí)寄存器命令字,寫入小時(shí)的初始值?WriteSet1302(0x86,((01/10)<〈4|(01%10)));//根據(jù)寫日寄存器命令字,寫入日的初始值?WriteSet1302(0x88,((06/10)〈〈4|(06%10)));//根據(jù)寫月寄存器命令字,寫入月的初始值 WriteSet1302(0x8c,((10/10)<<4|(10%10)));//根據(jù)寫小時(shí)寄存器命令字,寫入小時(shí)的初始值}/*******************************************************************************以下是對(duì)液晶模塊的操作程序*******************************************************************************/sbitRS=P2^0;//寄存器選擇位,將RS位定義為P2.0引腳sbitRW=P2^1;//讀寫選擇位,將RW位定義為P2。1引腳sbitE=P2^2;//使能信號(hào)位,將E位定義為P2.2引腳sbitBF=P0^7;//忙碌標(biāo)志位,,將BF位定義為P0.7引腳/*****************************************************函數(shù)功能:延時(shí)1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以認(rèn)為是1毫秒***************************************************/voiddelay1ms(){unsignedchari,j;??for(i=0;i<10;i++)?for(j=0;j〈33;j++) ;? }/*****************************************************函數(shù)功能:延時(shí)若干毫秒入口參數(shù):n***************************************************/voiddelaynms(unsignedcharn){unsignedchari; for(i=0;i<n;i++) delay1ms();}/*****************************************************函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌;result=0,不忙***************************************************/bitBusyTest(void){bitresult;?RS=0;//根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài)RW=1;E=1;//E=1,才允許讀寫_nop_();//空操作_nop_();_nop_();_nop_();//空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 result=BF;//將忙碌標(biāo)志電平賦給resultE=0;//將E恢復(fù)低電平returnresult;}/*****************************************************函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊入口參數(shù):dictate***************************************************/voidWriteInstruction(uchardictate){while(BusyTest()==1);//如果忙就等待?RS=0;//根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí),可以寫入指令?RW=0;?E=0;//E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖,//就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"?_nop_();?_nop_();//空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間?P0=dictate;//將數(shù)據(jù)送入P0口,即寫入指令或地址?_nop_();?_nop_();?_nop_();?_nop_();//空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=1;//E置高電平?_nop_(); _nop_();?_nop_();?_nop_();//空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間?E=0;//當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令}/*****************************************************函數(shù)功能:指定字符顯示的實(shí)際地址入口參數(shù):x***************************************************/voidWriteAddress(ucharx){WriteInstruction(x|0x80);//顯示位置的確定方法規(guī)定為"80H+地址碼x"}/*****************************************************函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊入口參數(shù):y(為字符常量)***************************************************/voidWriteData(uchary){while(BusyTest()==1); RS=1;//RS為高電平,RW為低電平時(shí),可以寫入數(shù)據(jù)?RW=0;?E=0;//E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖,//就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"?P0=y;//將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊?_nop_(); _nop_();?_nop_();_nop_();//空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間?E=1;//E置高電平 _nop_(); _nop_();?_nop_();?_nop_();//空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間?E=0;//當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令}/*****************************************************函數(shù)功能:對(duì)LCD的顯示模式進(jìn)行初始化設(shè)置***************************************************/voidLcdInitiate(void){delaynms(15);//延時(shí)15ms,首次寫指令時(shí)應(yīng)給LCD一段較長的反應(yīng)時(shí)間WriteInstruction(0x38);//顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口?delaynms(5);//延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間WriteInstruction(0x38);?delaynms(5);//延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間 WriteInstruction(0x38);//連續(xù)三次,確保初始化成功?delaynms(5);//延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間?WriteInstruction(0x0c);//顯示模式設(shè)置:顯示開,無光標(biāo),光標(biāo)不閃爍 delaynms(5);//延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間 WriteInstruction(0x06);//顯示模式設(shè)置:光標(biāo)右移,字符不移?delaynms(5);//延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間?WriteInstruction(0x01);//清屏幕指令,將以前的顯示內(nèi)容清除?delaynms(5);//延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間}/**************************************************************以下是1302數(shù)據(jù)的顯示程序**************************************************************//*****************************************************函數(shù)功能:顯示秒入口參數(shù):x***************************************************/voidDisplaySecond(ucharx){uchari,j;??//j,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位 i=x/10; ? //取十位?j=x%10; ?? //取個(gè)位?WriteAddress(0x49);?//寫顯示地址,將在第2行第7列開始顯示?WriteData(digit[i]);//將百位數(shù)字的字符常量寫入LCD?WriteDat(yī)a(digit[j]);//將十位數(shù)字的字符常量寫入LCD?delaynms(50);?//延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間}/*****************************************************函數(shù)功能:顯示分鐘入口參數(shù):x***************************************************/voidDisplayMinute(ucharx){?uchari,j;? ?//j,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位?i=x/10; ??? //取十位 j=x%10;?????//取個(gè)位 WriteAddress(0x46); //寫顯示地址,將在第2行第7列開始顯示?WriteData(digit[i]);?//將百位數(shù)字的字符常量寫入LCD?WriteData(digit[j]); //將十位數(shù)字的字符常量寫入LCD delaynms(50);?//延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間}/*****************************************************函數(shù)功能:顯示小時(shí)入口參數(shù):x***************************************************/voidDisplayHour(unsignedcharx){?uchari,j;???//j,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位?i=x/10; ? ??//取十位 j=x%10;???? //取個(gè)位?WriteAddress(0x43);?//寫顯示地址,將在第2行第7列開始顯示 WriteData(digit[i]);//將百位數(shù)字的字符常量寫入LCD?WriteDat(yī)a(digit[j]);//將十位數(shù)字的字符常量寫入LCD delaynms(50); //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間}/*****************************************************函數(shù)功能:顯示日入口參數(shù):x***************************************************/voidDisplayDay(ucharx){ uchari,j;??//j,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位?i=x/10;??? //取十位 j=x%10;??? //取個(gè)位?WriteAddress(0x0c);//寫顯示地址,將在第2行第7列開始顯示?WriteData(digit[i]);//將百位數(shù)字的字符常量寫入LCD?WriteData(digit[j]);//將十位數(shù)字的字符常量寫入LCD?delaynms(50);//延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間}/*****************************************************函數(shù)功能:顯示月入口參數(shù):x***************************************************/voidDisplayMonth(ucharx){ uchari,j;???//j,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位?i=x/10;?? ??//取十位?j=x%10;?????//取個(gè)位?WriteAddress(0x09);?//寫顯示地址,將在第2行第7列開始顯示?WriteData(digit[i]);//將百位數(shù)字的字符常量寫入LCD?WriteData(digit[j]);//將十位數(shù)字的字符常量寫入LCD?delaynms(50);//延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間}/*****************************************************函數(shù)功能:顯示年入口參數(shù):x***************************************************/voidDisplayYear(ucharx){?uchari,j;???//j,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位?i=x/10; ??? //取十位?j=x%10;?????//取個(gè)位?WriteAddress(0x06);//寫顯示地址,將在第2行第7列

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論