電氣工程及其自動化單片機(jī)課程設(shè)計_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機(jī)課程設(shè)計任務(wù)書</p><p>  課程名稱: 單片機(jī)原理及應(yīng)用 </p><p>  系 : 電氣工程系 </p><p>  專 業(yè): 電氣工程及其自動化 </p><p>  班 級: </

2、p><p>  學(xué) 號: </p><p>  學(xué)生姓名: </p><p>  指導(dǎo)教師: </p><p>  職 稱: 講師 </p><

3、p>  2012 年 1 月 1 日</p><p><b>  目錄</b></p><p><b>  一、摘要3</b></p><p>  二、系統(tǒng)總體方案設(shè)計3</p><p><b>  1、功能要求3</b></p><p> 

4、 2、 技術(shù)可行性……………………………………………………..3</p><p>  3、單片機(jī)的選擇4</p><p>  4、DS1302簡介……………………………………………....……..5</p><p>  三、系統(tǒng)硬件設(shè)計7</p><p><b>  I、電路設(shè)計7</b></p>&

5、lt;p>  II、系統(tǒng)硬件概述7</p><p>  1. 主控制器AT89C517</p><p>  2. 時鐘電路DS13028</p><p>  3. 顯示驅(qū)動74LS1649</p><p>  4. 主要單元電路的設(shè)計………………………………...………9</p><p>  四、系統(tǒng)軟件

6、設(shè)計..11</p><p>  五、總結(jié)……………..….12</p><p>  六、參考文獻(xiàn)……………………………………………………..……12</p><p>  附錄……………………………………………………..………………13</p><p><b>  一·摘要</b></p>&

7、lt;p>  近年來隨著計算機(jī)在社會領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,由于它具有功能強(qiáng),體積小,功耗低,價格便宜,工作可靠,使用方便等特點,因此越來越廣泛地應(yīng)用各個領(lǐng)域. </p><p>  本文的電子鐘系統(tǒng)是以單片機(jī)(AT89C51)為核心,時鐘芯片DS1302、數(shù)碼管顯示驅(qū)動芯片74LS164等元器件組成。具體介紹應(yīng)用protell軟件進(jìn)行單片機(jī)系統(tǒng)的電子鐘設(shè)計與仿真的

8、實現(xiàn)方法。該方法既能準(zhǔn)確驗證所設(shè)計的系統(tǒng)是否滿足技術(shù)要求,又能提高系統(tǒng)設(shè)計的效率和質(zhì)量,降低開發(fā)成本,具有推廣價值。</p><p>  關(guān)鍵詞:單片機(jī); 時鐘芯片 ;數(shù)碼管顯示驅(qū)動芯片 ;電子鐘</p><p>  二·系統(tǒng)總體方案設(shè)計</p><p>  隨著電子技術(shù)的發(fā)展,人類不斷研究,不斷創(chuàng)新紀(jì)錄。萬年歷目前已經(jīng)不再局限于以書本形式出現(xiàn)。以電腦軟件

9、或者電子產(chǎn)品形式出現(xiàn)的萬年歷被稱為電子萬年歷。與傳統(tǒng)書本形式的萬年歷相比,電子萬年歷得到了越來越廣泛的應(yīng)用,采用電子時鐘作為時間顯示已經(jīng)成為一種時尚。目前市場上各式各樣的電子時鐘數(shù)不勝數(shù),但多數(shù)是只針對時間顯示,功能單一不能滿足人們?nèi)粘I钚枨蟆?本文提出了一種基于AT89C51單片機(jī)的萬年歷設(shè)計方案,本方案以AT89C51單片機(jī)作為主控核心,與時鐘芯片DS1302、按鍵、LED顯示等模塊組成硬件系統(tǒng)。在硬件系統(tǒng)中設(shè)有獨立按鍵和

10、LED顯示器,能顯示豐富的信息,根據(jù)使用者的需要可以隨時對時間進(jìn)行校準(zhǔn)、選擇時間等,綜上所述此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。</p><p><b>  1.功能要求</b></p><p>  本電子時鐘能顯示星期、小時、分鐘、秒</p><p><

11、b>  2. 技術(shù)可行性</b></p><p>  隨著國內(nèi)超大規(guī)模集成電路的出現(xiàn),微處理器及其外圍芯片有了迅速的發(fā)展。集成技術(shù)的最新發(fā)展之一是將CPU和外圍芯片,如程序存儲器、數(shù)據(jù)存儲器、并行I/O口、串行I/O口、定時/計數(shù)器、中斷控制器及其他控制部件集成在一個芯片之中,制成單片計算機(jī)(Single-Chip Microcomputer)。而近年來推出的一些高檔單片機(jī)還包括有許多特殊功能單

12、元,如A/D、D/A轉(zhuǎn)換器、調(diào)制解調(diào)器、通信控制器、鎖相環(huán)、DMA、浮點運算單元、PWM控制輸出單元、PWM輸出時的死區(qū)可編程控制功能等。因此,只要外加一些擴(kuò)展電路及必要的通道接口就可以構(gòu)成各種計算機(jī)應(yīng)用系統(tǒng),如工業(yè)流水線控制系統(tǒng)、作為家用電器的主控制器、分布式控制系統(tǒng)的終端節(jié)點或作為其主控制節(jié)點起中繼的作用、數(shù)據(jù)采集系統(tǒng)、自動測試系統(tǒng)等。  單片機(jī)的出現(xiàn),并在各技術(shù)領(lǐng)域中得到如此迅猛的發(fā)展,與單片機(jī)構(gòu)成計算機(jī)應(yīng)用系統(tǒng)所形成的下述特點

13、有關(guān):  1、單片機(jī)構(gòu)成的應(yīng)用系統(tǒng)有較大的可靠性。這些可靠性的獲得除了依靠單片機(jī)芯片本身的高可靠性以及應(yīng)用有最少的聯(lián)接外,還可以方便地采用軟、硬件技術(shù)?! ?、系統(tǒng)擴(kuò)展、系統(tǒng)配置較典型、規(guī)范,容易構(gòu)成各種規(guī)模的</p><p><b>  3. 單片機(jī)的選擇</b></p><p>  采用傳統(tǒng)的AT89C51作為電機(jī)的控制核心。單片機(jī)算術(shù)運算功能強(qiáng),軟件編程靈

14、活、自由度大,可用軟件編程實現(xiàn)各種算法和邏輯控制,并且由于其功耗低、體積小、技術(shù)成熟和成本低等優(yōu)點,使其在各個領(lǐng)域應(yīng)用廣泛。</p><p>  圖2.11 AT89C51單片機(jī) </p><p>  4.DS1302簡介</p><p>  DS1302特性介紹</p><p>  DS1302是美國DALLAS公司推出的一種高性能、低功

15、耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。</p><p>  DS1302引腳介紹</p&

16、gt;<p><b>  各引腳的功能為:</b></p><p>  8 、Vcc1:備用電池端;</p><p>  1、Vcc2:5V電源。當(dāng)Vcc2>Vcc1+0.2V時,由Vcc2向DS1302供電,當(dāng)Vcc2< Vcc1時,由Vcc1向DS1302供電。</p><p>  7、 SCLK:串行時鐘,輸入;

17、  </p><p>  6、I/O:數(shù)據(jù)輸入輸出口;</p><p>  5、CE/RST:復(fù)位腳</p><p>  2 3、X1、X2 是外接晶振腳 (32.768KHZ的晶振)</p><p><b>  4、地(GND)</b></p><p> ?。?)DS1302有關(guān)日

18、歷、時間的寄存器 </p><p>  寄存器的說明如下:1、秒寄存器(81h、80h)的位7定義為時鐘暫停標(biāo)志(CH)。當(dāng)初始上電時該位置為1,</p><p>  時鐘振蕩器停止,DS1302處于低功耗狀態(tài);只有將秒寄存器的該位置改寫為0時,時鐘才能開</p><p>  始運行。2、小時寄存器(85h、84h)的位7用于定義DS1302是運行于12小時模式

19、還是24小時模式。當(dāng)為高時,選擇12小時模式。在12小時模式時,位5是 ,當(dāng)為1時,表示PM。在24小時模式時,位5是第二個10小時位3、控制寄存器(8Fh、8Eh)的位7是寫保護(hù)位(WP),其它7位均置為0。在對任何的時鐘</p><p>  RAM的寫操作之前,WP位必須為0。當(dāng)WP位為1時,寫保護(hù)位防止對任一寄存器的寫操作。</p><p>  也就是說在電路上電的初始態(tài)WP是1,

20、這時是不能改寫上面任何一個時間寄存器的,</p><p>  只有首先將WP改寫為0,才能進(jìn)行其它寄存器的寫操作。 </p><p> ?。?)DS1302控制字介紹</p><p>  控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。</p><p>  位6:如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示

21、存取RAM數(shù)據(jù);</p><p>  位5至位1(A4~A0):指示操作單元的地址;</p><p>  位0(最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作。</p><p><b>  讀數(shù)據(jù):</b></p><p>  讀數(shù)據(jù)時在緊跟8位的控制字指令后的下一個SCLK脈沖的下降沿,讀出DS1302的數(shù)

22、據(jù),</p><p>  讀出的數(shù)據(jù)是從最低位到最高位。</p><p><b>  寫數(shù)據(jù):</b></p><p>  控制字總是從最低位開始輸出。在控制字指令輸入后的下一個SCLK時鐘的上升沿時,</p><p>  數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入也是從最低位(0位)開始。</p><p>

23、;  位0(最低有效位):為1表示進(jìn)行讀操作。 如為0,表示要進(jìn)行寫操作,</p><p>  控制字后 SCLK 下降沿 讀數(shù)據(jù) SCLK上升沿寫數(shù)據(jù)</p><p>  (6)DS1302單字節(jié)讀寫時序介</p><p>  DS1302的數(shù)據(jù)讀寫是通過I/O串行進(jìn)行的。當(dāng)進(jìn)行一次讀寫操作時最少得讀寫兩個字節(jié),第一個字節(jié)是控制字節(jié),就是一個命令,告訴DS1

24、302是讀還是寫操作,是對RAM還是對CLOK寄存器操作,以及操作的址。第二個字節(jié)就是要讀或?qū)懙臄?shù)據(jù)了。我們先看</p><p>  單字節(jié)寫:在進(jìn)行操作之前先得將CE(也可說是RST)置高電平,然后單片機(jī)將控制字的位0放到I/O上,當(dāng)I/O的數(shù)據(jù)穩(wěn)定后,將SCLK置高電平,DS1302檢測到SCLK的上升沿后就將I/O上的數(shù)據(jù)讀取,然后單片機(jī)將SCLK置為低電平,再將控制字的位1放到I/O上,如此反復(fù),將一個字

25、節(jié)控制字的8個位傳給DS1302。接下來就是傳一個字節(jié)的數(shù)據(jù)給DS1302,當(dāng)傳完數(shù)據(jù)后,單片機(jī)將CE置為低電平,操作結(jié)束。</p><p>  單字節(jié)讀操作的一開始寫控制字的過程和上面的單字節(jié)寫操作是一樣,但是單字節(jié)讀操作在寫控制字的最后一個位,SCLK還在高電平時,DS1302就將數(shù)據(jù)放到I/O上,單片機(jī)將SCLK置為低電平后數(shù)據(jù)鎖存,</p><p>  單機(jī)機(jī)就可以讀取I/O上的數(shù)

26、據(jù)。如此反復(fù),將一個字節(jié)的數(shù)據(jù)讀入單片機(jī)。</p><p>  讀與寫操作的不同就在于,寫操作是在SCLK低電平時單片機(jī)將數(shù)據(jù)放到IO上,當(dāng)SCLK上升沿時,DS1302讀取。而讀操作是在SCLK高電平時DS1302放數(shù)據(jù)到IO上,將SCLK置為低電平后,單片機(jī)就可從IO上讀取數(shù)據(jù)。</p><p><b>  三·系統(tǒng)硬件設(shè)計</b></p>

27、<p><b>  1.電路設(shè)計</b></p><p>  圖示為電子萬年歷電路設(shè)計原理圖,系統(tǒng)由主控制器AT89C51、時鐘電路DS1302、顯示驅(qū)動MAX7219電路,顯示電路及鍵掃描電路組成。</p><p><b>  2.系統(tǒng)硬件概述</b></p><p>  (1) 主控制器AT89C51<

28、;/p><p>  ATMEL公司生產(chǎn)的AT89C51單片機(jī)采用高性能的靜態(tài)80C51設(shè)計,并采用先進(jìn)工藝制造,還帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位CMOS微處理芯片,市場應(yīng)用最多。其主要特點如下:</p><p>  8KB Flash ROM,可以擦除1000次以上,數(shù)據(jù)保存10年。</p><p>  256字節(jié)內(nèi)部RAM;</p

29、><p><b>  電源控制模式;</b></p><p><b>  時鐘可停止和恢復(fù);</b></p><p><b>  空閑模式;</b></p><p><b>  掉電模式;</b></p><p><b>  

30、6個中斷源;</b></p><p><b>  4個中斷優(yōu)先級;</b></p><p><b>  4個8位I/O口;</b></p><p>  全雙工增強(qiáng)型TUAR;</p><p>  3個16位定時/計數(shù)器:T0、T1(標(biāo)準(zhǔn)80C51)和增加的T2(捕獲和比較)</p&

31、gt;<p>  全靜態(tài)工作方式:0~24MHZ</p><p>  (2)時鐘電路DS1302</p><p>  DS1302的性能特性:</p><p>  實時時鐘,可對秒、分、時、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行比較;</p><p>  用于高速數(shù)據(jù)暫存的31*8位RAM;</p><p> 

32、 最少引腳的串行I/O;</p><p>  2.5~5.5V電壓工作范圍;</p><p>  2.5V時耗小于300nA;</p><p>  用于時鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;</p><p><b>  簡單的三線接口;</b></p><p>  可選的

33、慢速充電(至Vcc1)的能力。</p><p>  DS1302在任何數(shù)據(jù)傳送時必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被訪問到。在開始8個時鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作時寫入數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。如果在傳送過程中置RST腳為低電平,則會

34、終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc≥2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。</p><p>  DS1302的控制字如表所示。控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時鐘數(shù)據(jù);為1則表示存取RAM數(shù)據(jù)。位5~1(A4~A0)指示操作單元的地址。最低有效位(位0

35、)如果為0,則表示藥進(jìn)行寫操作;為1表示進(jìn)行讀操作。控制字節(jié)總是從最低位開始輸入/輸出。</p><p>  為了提高對32個地址尋址能力(地址/命令位1~5=邏輯1),可以把時鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時鐘或RAM,而位0規(guī)定讀或?qū)憽T跁r鐘/日歷寄存器中的地址9~31或RAM寄存器中的地址31不能存儲數(shù)據(jù)。在多字節(jié)方式下,讀或?qū)憦牡刂?的位0開始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?/p>

36、8個寄存器。但是,當(dāng)以多字節(jié)方式寫RAM時,為了傳送數(shù)據(jù)不必寫所有的31字節(jié),不管是否謝了全部31字節(jié),所寫的每一字節(jié)都將傳送至RAM。</p><p>  DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時間寄存器及其控制字如上表所示,其中奇數(shù)為讀操作,偶數(shù)為寫操作。</p><p>  時鐘暫停:秒寄存器的位7定義位時鐘暫停位。當(dāng)它為

37、1時,DS1302停止振蕩,進(jìn)入低功耗的備份方式,通常在對DS1302進(jìn)行寫操作時(如進(jìn)入時鐘調(diào)整程序),停止振蕩。當(dāng)它為0時,時鐘將開始啟動。</p><p>  AM-PM/12-24小時方式:小時寄存器的位7定義為12或24小時方式選擇位。它為高電平時,選擇12小時方式。在此方式下,位5為第二個10小時位(20~23h)。</p><p>  DS1302的晶振選用32768Hz,電

38、容推薦值為6pF。因為振蕩頻率較低,也可以不接電容,對計時精度影響不大。</p><p> ?。?)顯示驅(qū)動74LS164</p><p>  本設(shè)計采用74LS164作為顯示驅(qū)動芯片。</p><p>  3.主要單元電路的設(shè)計</p><p><b>  (1)顯示電路</b></p><p>

39、;  顯示部分采用普通的共陰數(shù)碼管顯示,采用動態(tài)掃描,以減少硬件</p><p>  路。星期時分秒星期共需要7位數(shù)碼顯示,顯示時采用串行口輸出段碼,用74LS164驅(qū)動數(shù)碼管。</p><p><b>  (2)鍵盤接口</b></p><p>  鍵盤在單片機(jī)系統(tǒng)中是一個很重要的部件。為了輸入數(shù)據(jù)、查詢和控制系統(tǒng)的工作狀態(tài),都要用到鍵盤,鍵

40、盤是人工干預(yù)計算機(jī)的主要手段。</p><p>  鍵盤可分為編碼和非編碼鍵盤兩種。編碼鍵盤采用硬件線線路來實現(xiàn)鍵盤編碼,每按下一個鍵,鍵盤能自動生成按鍵代碼,鍵數(shù)較多,而且還具有去抖動功能。這種鍵盤使用方便,但硬件較復(fù)雜,PC機(jī)所用的鍵盤就屬于這種。非編碼鍵盤僅提供按鍵開關(guān)工作狀態(tài),其他工作由軟件完成,這種鍵盤鍵數(shù)較少,硬件簡單,一般在單片機(jī)應(yīng)用系統(tǒng)中廣泛使用。此處主要介紹該類非編碼鍵盤及其與MCS—51型單片

41、機(jī)的接口。</p><p><b> ?。?)時鐘電路</b></p><p>  DS1302工作方式簡介及數(shù)據(jù)操作原理</p><p>  DS1302可以對星期、時、分、秒進(jìn)行計時, 且具有閏年補(bǔ)償功能, 工作電壓寬達(dá)2.5~5.5V。采用三線接口與CPU進(jìn)行同步通信, 并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302

42、內(nèi)部有一個33x8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是的DS1202升級產(chǎn)品, 與DS1202兼容, 但增加了主電源/后背電源雙電源引腳, 同時提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。</p><p>  DS1302時鐘芯片包括實時時鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過一個簡單的串行接口與微處理器通信。實時時鐘/日歷提供秒、分、時、日、周、月和年等信息。對于小于31天的月和月末的日期自動進(jìn)行調(diào)整

43、,還包括閏年校正的功能。時鐘的運行可以采用24<小>時或帶AM/PM的12小時格式。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多字節(jié)的時鐘信號或RAM數(shù)據(jù)。</p><p>  DS1302有主電源/后備電源雙電源引腳:Vcc1在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電磁備份;Vcc1在雙電池系統(tǒng)中提供主電源。在這種運行方式中,Vcc1里連接到后備電源,以便在沒有主電源的情

44、況下能保存時間信息以及數(shù)據(jù)。DS1302由Vcc1或Vcc2中較打大者供電。當(dāng)Vcc2>(Vcc1+0.2V)時,Vcc2給DS1302供電;當(dāng)Vcc2<Vcc1時,DS1302由Vcc1供電。</p><p><b>  圖DS1302</b></p><p>  DS1302在任何數(shù)據(jù)傳送時必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,

45、數(shù)據(jù)在SCLK的上升沿被訪問到。在開始8個時鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作時寫入數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。如果在傳送過程中置RST腳為低電平,則會終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc≥2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。</p>

46、<p>  DS1302的控制字如圖所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時鐘數(shù)據(jù);為1則表示存取RAM數(shù)據(jù)。位5~1(A4~A0)指示操作單元的地址。最低有效位(位0)如果為0,則表示藥進(jìn)行寫操作;為1表示進(jìn)行讀操作??刂谱止?jié)總是從最低位開始輸入/輸出。</p><p>  為了提高對32個地址尋址能力(地址/命令位1

47、~5=邏輯1),可以把時鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時鐘或RAM,而位0規(guī)定讀或?qū)憽T跁r鐘/日歷寄存器中的地址9~31或RAM寄存器中的地址31不能存儲數(shù)據(jù)。在多字節(jié)方式下,讀或?qū)憦牡刂?的位0開始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?個寄存器。但是,當(dāng)以多字節(jié)方式寫RAM時,為了傳送數(shù)據(jù)不必寫所有的31字節(jié),不管是否謝了全部31字節(jié),所寫的每一字節(jié)都將傳送至RAM。</p><p>

48、  DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時間寄存器及其控制字如下表所示,其中奇數(shù)為讀操作,偶數(shù)為寫操作。</p><p>  表 DS1302控制字</p><p>  時鐘暫停:秒寄存器的位7定義位時鐘暫停位。當(dāng)它為1時,DS1302停止振蕩,進(jìn)入低功耗的備份方式,通常在對DS1302進(jìn)行寫操作時(如進(jìn)入時鐘調(diào)整程序),停

49、止振蕩。當(dāng)它為0時,時鐘將開始啟動。</p><p>  AM-PM/12-24小時方式:小時寄存器的位7定義為12或24小時方式選擇位。它為高電平時,選擇12小時方式。在此方式下,位5為第二個10小時位(20~23h)。</p><p>  DS1302的晶振選用32768Hz,電容推薦值為6pF。因為振蕩頻率較低,也可以不接電容,對計時精度影響不大。</p><p&

50、gt;<b>  四· 系統(tǒng)軟件設(shè)計</b></p><p><b>  1.程序設(shè)計</b></p><p>  電子萬年歷的程序主要包括3個方面的內(nèi)容:一是DS1302從單片機(jī)中讀取數(shù)據(jù)進(jìn)行計數(shù),二是利用按鍵進(jìn)行時間的調(diào)整,三是74LS164從單片機(jī)中讀取數(shù)據(jù)驅(qū)動LED數(shù)碼管顯示時間。</p><p>  A

51、T89C51單片機(jī)主要I/O口的分配,P2.0-P2.2分別接74LS164的DIN,LOAD,CLK三個功能端,P3接查詢式按鍵,P1.0-P1.2分別接DS1302的CLK,IO,RST端。</p><p><b>  2.時間控制流程圖</b></p><p>  DS1302時控流程圖</p><p><b>  五·

52、; 總結(jié)</b></p><p>  這次對數(shù)字鐘的設(shè)計與制作,讓我了解了設(shè)計電路的程序,也讓我了解了關(guān)于數(shù)字鐘的原理與設(shè)計理念。在此次的數(shù)字鐘設(shè)計過程中,更進(jìn)一步地熟悉了芯片的結(jié)構(gòu)及掌握了各芯片的工作原理和其具體的使用方法.</p><p>  在連接單片機(jī)與其他外部電路的實驗中,要求熟悉邏輯電路及其芯片各引腳的功能,那么在電路出錯時便能準(zhǔn)確地找出錯誤所在并及時糾正了.在設(shè)計

53、電路中,對單片機(jī)的編程的進(jìn)一步的熟悉與學(xué)習(xí)讓我明白了許多自己沒有掌握的功能,對單片機(jī)有了更深刻的理解。再就是電路的連接中的一些小的的注意的問題像極性電容器其 “ + ” 與 “ - ” 極不能接錯,例如電容器上的標(biāo)記方向要易看可見。</p><p>  在設(shè)計電路的連接圖中出錯的主要原因都是接線和芯片的接觸不良以及接線的錯誤所引起的。接線的時候一定要細(xì)心,不要接錯,同時也要學(xué)會如何判別芯片的好壞,要是芯片壞了即使

54、接線再正確也出不來結(jié)果。對自己的設(shè)計圖要仔細(xì)考慮,反復(fù)調(diào)試只有這樣我們才能找到自己的不足從不足中學(xué)習(xí)。</p><p>  通過這次數(shù)字鐘的設(shè)計,讓我對各種電路都有了大概的了解,也學(xué)會了常用繪圖軟件的使用。所以說,坐而言不如立而行,對于這些電路還是應(yīng)該自己動手實際操作才會有深刻理解,才會有收獲。</p><p><b>  六· 參考文獻(xiàn)</b></p

55、><p>  [1]林剛勇 馬善農(nóng) 王海濤 電子電路設(shè)計技術(shù)· 北京:國防工業(yè)出版社,2007</p><p>  [2]陳小忠等,單片機(jī)接口技術(shù)實用子程序[M]·北京:人民郵電出版社,2005</p><p>  [3]楊居義主編·單片機(jī)課程設(shè)計指導(dǎo)[M]·北京:清華大學(xué)出版社,2009</p><p>

56、  [4]何立民主編·MCS—51單片機(jī)應(yīng)用系統(tǒng)設(shè)計[M]·北京:北京航天航空大學(xué)出版社,1990</p><p>  [5]朱定華主編·單片機(jī)原理及接口技術(shù)試驗[M]·北京:北京大學(xué)出版社,2002</p><p>  [6]周慈航著·單片機(jī)程序設(shè)計基礎(chǔ)[M]·北京:北京航天航空大學(xué)出版社,2003</p><

57、;p>  [7]張毅剛主編·單片機(jī)原理及應(yīng)用[M]·北京:高等教育出版社,2008</p><p>  [8]李群芳等著·單片機(jī)原理接口及應(yīng)用—嵌入式系統(tǒng)計數(shù)基礎(chǔ)·北京:清華大學(xué)出版</p><p>  附錄 電子時鐘程序</p><p>  #include <reg51.h></p>&

58、lt;p>  #include <intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  uchar count_10ms; //定義10ms計數(shù)器</p><p>  sbitK1

59、 = P3^2;//定義K1鍵</p><p>  sbitK2 = P3^3;//定義K2鍵</p><p>  sbitK3 = P3^4;//定義K3鍵</p><p>  sbitK4 = P3^5;//定義K4鍵</p><p>  sbit BEEP=P3^7;//定義蜂鳴器</p>

60、;<p>  sbit reset = P1^2;</p><p>  sbit sclk = P1^0;</p><p>  sbit io = P1^1;</p><p>  sbit LCD_RS=P2^0; </p><p&g

61、t;  sbit LCD_RW=P2^1 ; </p><p>  sbit LCD_EN=P2^2;</p><p>  bit K1_FLAG=0;//定義按鍵標(biāo)志位,當(dāng)按下K1鍵時,該位置1,K1鍵未按下時,該位為0。</p><p>  uchar code l

62、ine1_data[] = {"---LCD Clcok---"}; //定義第1行顯示的字符</p><p>  uchar code line2_data[] = {"****"}; //定義第2行顯示的字符</p><p>  uchar disp_buf[8] ={0x00}; //定義顯示緩沖區(qū)</p>

63、<p>  uchar time_buf[7] ={0,0,0x12,0,0,0,0};//DS1302時間緩沖區(qū),存放秒、分、時、日、月、星期、年</p><p>  uchar temp [2]={0};//用來存放設(shè)置時的小時、分鐘的中間值</p><p>  /********以下是函數(shù)聲明********/</p><p>  voi

64、d Delay_ms(uint xms);</p><p>  bit lcd_busy(); </p><p>  void lcd_wcmd(uchar cmd); </p><p>  void lcd_wdat(uchar dat) ; </p><p>  void lcd_clr() ;</p>

65、<p>  void lcd_init() ;</p><p>  void write_byte(uchar inbyte);//寫一字節(jié)數(shù)據(jù)函數(shù)聲明</p><p>  uchar read_byte(); //讀一字節(jié)數(shù)據(jù)函數(shù)聲明</p><p>  void write_ds1302(uchar cmd,uchar ind

66、ata);//寫DS1302函數(shù)聲明</p><p>  uchar read_ds1302(uchar addr);//讀DS1302函數(shù)聲明</p><p>  void set_ds1302(uchar addr,uchar *p,uchar n);//設(shè)置DS1302初始時間函數(shù)聲明</p><p>  void get_ds1302(uch

67、ar addr,uchar *p,uchar n);//讀當(dāng)前時間函數(shù)聲明</p><p>  void init_ds1302();//DS1302初始化函數(shù)聲明</p><p>  /********以下是延時函數(shù)********/</p><p>  void Delay_ms(uint xms)</p><p>

68、<b>  {</b></p><p><b>  uint i,j;</b></p><p>  for(i=xms;i>0;i--) //i=xms即延時約xms毫秒</p><p>  for(j=110;j>0;j--);</p><p><b>  }&

69、lt;/b></p><p>  /********以下是LCD忙碌檢查函數(shù)********/</p><p>  bit lcd_busy() </p><p>  {

70、 </p><p>  bit result; </p><p>  LCD_RS = 0;

71、 </p><p>  LCD_RW = 1; </p><p>  LCD_EN = 1; </p><p>  _no

72、p_(); </p><p>  _nop_(); </p><p>  _nop_();

73、 </p><p>  _nop_(); </p><p>  result = (bit)(P0&0x80);

74、 </p><p>  LCD_EN = 0; </p><p>  return result; </p><p>  }

75、 </p><p>  /********以下是寫指令寄存器IR函數(shù)********/</p><p>  void lcd_wcmd(uchar cmd) </p><p>  {

76、 </p><p>  while(lcd_busy()); </p><p>  LCD_RS = 0;

77、 </p><p>  LCD_RW = 0; </p><p>  LCD_EN = 0; </p>

78、<p>  _nop_(); </p><p>  _nop_(); </p><p>  P0 = cmd;

79、 </p><p>  _nop_(); </p><p>  _nop_();

80、 </p><p>  _nop_(); </p><p>  _nop_(); </p>&l

81、t;p>  LCD_EN = 1; </p><p>  _nop_(); </p><p>  _nop_();

82、 </p><p>  _nop_(); </p><p>  _nop_();

83、 </p><p>  LCD_EN = 0; </p><p><b>  } </b></p><p>  /********以下是寫寄存器DR函數(shù)********/</p>&l

84、t;p>  void lcd_wdat(uchar dat) </p><p>  { </p><p>  while(lcd_busy(

85、)); </p><p>  LCD_RS = 1; </p><p>  LCD_RW = 0;

86、 </p><p>  LCD_EN = 0; </p><p>  P0 = dat; </p&

87、gt;<p>  _nop_(); </p><p>  _nop_(); </p><p>  _nop_();

88、 </p><p>  _nop_(); </p><p>  LCD_EN = 1;

89、 </p><p>  _nop_(); </p><p>  _nop_(); </p>

90、;<p>  _nop_(); </p><p>  _nop_(); </p><p>  LCD_EN = 0;

91、 </p><p><b>  } </b></p><p>  /********以下是LCD清屏函數(shù)********/</p><p>  void lcd_clr()

92、 </p><p>  { </p><p>  lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容 </

93、p><p>  Delay_ms(5); </p><p>  } </p><p>  /********以下是LCD初始化函數(shù)********/</p><p>  

94、void lcd_init() </p><p>  { </p><p>  Delay_ms(15);

95、 //等待LCD電源穩(wěn)定 </p><p>  lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數(shù)據(jù) </p><p>  Delay_ms(5);

96、 </p><p>  lcd_wcmd(0x38); </p><p>  Delay_ms(5); </p><p>  

97、lcd_wcmd(0x38); </p><p>  Delay_ms(5); </p><p>  lcd_wcmd(0x0c); //顯示

98、開,關(guān)光標(biāo) </p><p>  Delay_ms(5); </p><p>  lcd_wcmd(0x06); //移動光標(biāo)

99、 </p><p>  Delay_ms(5); </p><p>  lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容 </p><p>  Delay_ms(5)

100、; </p><p><b>  } </b></p><p>  /********以下是寫一字節(jié)數(shù)據(jù)函數(shù)********/</p><p>  void write_byte(uchar inbyte)</p&g

101、t;<p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  sclk=0; //寫時低電平

102、改變數(shù)據(jù)</p><p>  if(inbyte&0x01)</p><p><b>  io=1;</b></p><p><b>  else</b></p><p><b>  io=0; </b></p><p>  sclk=1;

103、 //高電平把數(shù)據(jù)寫入DS1302</p><p><b>  _nop_();</b></p><p>  inbyte=inbyte>>1;</p><p><b>  }</b></p><p><b>  }</b></p>&

104、lt;p>  /********以下是讀一字節(jié)數(shù)據(jù)函數(shù)********/</p><p>  uchar read_byte() </p><p><b>  {</b></p><p>  uchar i,temp=0; </p><p>  io=1; </p>

105、<p>  for(i=0;i<7;i++)</p><p><b>  {</b></p><p><b>  sclk=0;</b></p><p><b>  if(io==1)</b></p><p>  temp=temp|0x80;</p&g

106、t;<p><b>  else</b></p><p>  temp=temp&0x7f;</p><p>  sclk=1; //產(chǎn)生下跳沿</p><p>  temp=temp>>1;</p><p><b>  }</b></

107、p><p>  return (temp);</p><p><b>  }</b></p><p>  /********寫DS1302函數(shù), 往DS1302的某個地址寫入數(shù)據(jù) ********/</p><p>  void write_ds1302(uchar cmd,uchar indata)</p>

108、<p><b>  {</b></p><p><b>  sclk=0;</b></p><p><b>  reset=1;</b></p><p>  write_byte(cmd); </p><p>  write_byte(indata);&

109、lt;/p><p><b>  sclk=0;</b></p><p><b>  reset=0;</b></p><p><b>  }</b></p><p>  /********讀DS1302函數(shù),讀DS1302某地址的的數(shù)據(jù)********/</p>&l

110、t;p>  uchar read_ds1302(uchar addr)</p><p><b>  {</b></p><p>  uchar backdata;</p><p><b>  sclk=0;</b></p><p><b>  reset=1;</b>&l

111、t;/p><p>  write_byte(addr); //先寫地址</p><p>  backdata=read_byte(); //然后讀數(shù)據(jù)</p><p><b>  sclk=0;</b></p><p><b>  reset=0;</b></p>&l

112、t;p>  return (backdata);</p><p><b>  }</b></p><p>  /********設(shè)置初始時間函數(shù)********</p><p>  void set_ds1302(uchar addr,uchar *p,uchar n) </p><p><b>  {&

113、lt;/b></p><p>  write_ds1302(0x8e,0x00); //寫控制字,允許寫操作</p><p>  for(;n>0;n--)</p><p><b>  {</b></p><p>  write_ds1302(addr,*p);</p><

114、;p><b>  p++;</b></p><p>  addr=addr+2;</p><p><b>  }</b></p><p>  write_ds1302(0x8e,0x80); //寫保護(hù),不允許寫</p><p><b>  }</b>&

115、lt;/p><p>  ********讀取當(dāng)前時間函數(shù)********</p><p>  void get_ds1302(uchar addr,uchar *p,uchar n)</p><p><b>  {</b></p><p>  for(;n>0;n--)</p><p><

116、b>  {</b></p><p>  *p=read_ds1302(addr);</p><p><b>  p++;</b></p><p>  addr=addr+2;</p><p><b>  } </b></p><p><b>  }

117、</b></p><p>  ********初始化DS1302函數(shù)********/</p><p>  void init_ds1302()</p><p><b>  {</b></p><p><b>  reset=0;</b></p><p><

118、b>  sclk=0;</b></p><p>  write_ds1302(0x80,0x00); //寫秒寄存器</p><p>  write_ds1302(0x90,0xab); //寫充電器</p><p>  write_ds1302(0x8e,0x80); //寫保護(hù)控制字,禁止寫</p><p><

溫馨提示

  • 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

提交評論