版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 萬年歷的設(shè)計(jì)與制作</b></p><p> 學(xué) 院_____自動(dòng)化及其電氣工程______</p><p> 專業(yè)班級(jí)_____自動(dòng)化091______________</p><p> 小組成員_____ __</p><p> 指導(dǎo)老師__
2、___ __________________</p><p> 2011年12月10日</p><p><b> 目錄</b></p><p> 摘要……………………………………………………………………………………3</p><p> 第一章:引言…………………………………………………………………………4<
3、;/p><p> 1.1、設(shè)計(jì)目的與意義…………………………………………………4</p><p> 1.2、芯片選擇…………………………………………………………4</p><p> ?。河布枋觥?</p><p> 2.1、時(shí)鐘芯片DS1302…………………………………………………………7
4、</p><p> 2.2、溫度傳感器DS18B20…………………………………………………… 9</p><p> 2.3、液晶12864…………………………………………………………………12</p><p> 2.4、單片機(jī)STC89C52…………………………………………………………14</p><p> :硬件結(jié)構(gòu)圖分析……………
5、………………………………………………16</p><p> 3.1、單片機(jī)………………………………………………………………………16</p><p> 3.2、單片機(jī)復(fù)位電路……………………………………………………………16</p><p> 3.3、電路振蕩部分………………………………………………………………17</p><p>
6、3.4、按鍵…………………………………………………………………………17</p><p> 3.5、鬧鐘部分……………………………………………………………………17</p><p> 3.6、溫度傳感器接口電路………………………………………………………18</p><p> 3.7、時(shí)鐘電路……………………………………………………………………18</p&
7、gt;<p> 3.8、液晶12864…………………………………………………………………18</p><p> 3.9、程序下載接口………………………………………………………………19</p><p> 3.10、電源接口電路………………………………………………………………19</p><p> 結(jié)束語………………………………………………………
8、………………………… 20</p><p> 致謝………………………………………………………………………………………20</p><p> 附1:電路原理圖………………………………………………………………………21</p><p> 附2:電路PCB圖………………………………………………………………………21</p><p> 附3:
9、實(shí)物圖演示………………………………………………………………………22</p><p> 附4:程序代碼…………………………………………………………………………29</p><p> 摘要: 隨著科技的快速發(fā)展,時(shí)間的流逝,至從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。美國DALLAS公司推出的具有涓細(xì)電流充電能的低功耗實(shí)時(shí)時(shí)鐘電路DS1302。它可以對(duì)年、月、日、周日、時(shí)、
10、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差小。對(duì)于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、周日、時(shí)、分、秒和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。溫度的測(cè)量用DALLAS公司的DS18B20芯片。</p><p> 電路采用STC89C52單片機(jī)作為核心,輔助于必要地外圍電路,用C語言編寫程序,并進(jìn)行模塊化編程設(shè)計(jì)萬年歷,讀取并寫指令到DS1302、DS18B20
11、芯片中,并將讀出的結(jié)果顯示在LCD12864中,具有功能穩(wěn)定,精度高地特點(diǎn)。</p><p> 關(guān)鍵詞:?jiǎn)纹瑱C(jī),STC89C52,;DS1302;DS18B20,;LCD12864</p><p><b> 第一章 引言</b></p><p> 1.1設(shè)計(jì)目的與意義</p><p> 隨著電子技術(shù)的高速發(fā)展,對(duì)
12、電子方面人才的要求越來越高,不僅要求其具備相關(guān)的專業(yè)理論知識(shí),還要求其具有較強(qiáng)的設(shè)計(jì)、制作等實(shí)踐動(dòng)手能力.本次課程設(shè)計(jì)正是給我們提供了一個(gè)很好的鍛煉機(jī)會(huì),增強(qiáng)對(duì)專業(yè)的興趣,提高對(duì)專業(yè)的認(rèn)識(shí)。</p><p><b> 1.2、芯片選擇</b></p><p> 1.2.1、時(shí)鐘芯片選擇</p><p> 方案一:不使用芯片,采用單片機(jī)的定
13、時(shí)計(jì)數(shù)器</p><p> 這種方法原理是利用單片機(jī)芯片的定時(shí)器來產(chǎn)生固定的時(shí)間,模擬時(shí)鐘的時(shí), 分,秒。如:利用AT80C52芯片,定時(shí)器用工作方式1,每50ms產(chǎn)生一個(gè)中斷,循環(huán)20次,即1s周期。每一個(gè)周期加1,那么1min為60個(gè)周期,1h就是60*60=3600個(gè)周期,一天就是3600*24=86400個(gè)周期。</p><p> 此方法優(yōu)點(diǎn)是可以省去一些外圍的芯片,但這種方法
14、只能適用于一些要求不是十分精確,不做長期保留的場(chǎng)合。</p><p> 方案二:并行接口時(shí)鐘芯片 DS12887</p><p> 特點(diǎn):采用單片機(jī)應(yīng)用系統(tǒng)并行總線(三總線)擴(kuò)展的接口電路,采用這種接口電路具有操作速度快,編程方便的優(yōu)點(diǎn)。</p><p> 但是對(duì)于80C52單片機(jī)來說,低位地址線要通過鎖存器輸出,還要地址譯碼器,而且并行口芯片的體積相對(duì)較大,
15、DS12887管腳圖如圖1示。</p><p> 圖1 DS12887管腳</p><p> 方案三:串行接口時(shí)鐘芯片DS1302</p><p><b> 芯片主特性:</b></p><p> ?。?)實(shí)時(shí)時(shí)鐘具有能計(jì)算2100 年之前的秒分時(shí)日日期星期月年的能力,還有閏年調(diào)整的能力</p>&l
16、t;p> ? (2)31 8 位暫存數(shù)據(jù)存儲(chǔ)RAM</p><p> ?(3)串行 I/O 口方式使得管腳數(shù)量最少</p><p> ?(4)寬范圍工作電壓2.0 5.5V</p><p> ?(5)工作電流 2.0V 時(shí),小于300nA</p><p> ?(5)讀/寫時(shí)鐘或RAM 數(shù)據(jù)時(shí)有兩種傳送方式單字節(jié)傳送和多字節(jié)傳送
17、字符組方式</p><p> ?(6)8 腳DIP 封裝或可選的8 腳SOIC 封裝根據(jù)表面裝配</p><p> ?(7)簡(jiǎn)單 3 線接口</p><p> ?(8)與 TTL 兼容Vcc=5V</p><p> ?(9)可選工業(yè)級(jí)溫度范圍-40 +85</p><p> 優(yōu)點(diǎn):串行接口的日歷時(shí)鐘芯片,使用
18、簡(jiǎn)單,接口容易,與微型計(jì)算機(jī)連線較少等特點(diǎn),在單片機(jī)系統(tǒng)尤其是手持式信息設(shè)備中己得到了廣泛的應(yīng)用。</p><p> 所以,最終選擇串行時(shí)鐘芯片DS1302,DS1302的管腳圖如圖2所示。</p><p> 圖2 DS1302管腳圖</p><p> 1.2.2、鍵盤選擇</p><p><b> 方案一:矩陣式鍵盤<
19、;/b></p><p> 矩陣式鍵盤電路圖如圖3所示。</p><p><b> 圖3 矩陣式鍵盤</b></p><p> 行列式鍵盤的原理就是每一行線與每一列線的交叉地方不相通,而是接上一個(gè)按鍵,通過按鍵來接通。</p><p> 特點(diǎn): 以省出不少的I/O 口資源,程序編寫相對(duì)復(fù)雜點(diǎn),適用于鍵數(shù)比較
20、多的情況。</p><p> 方案二: 獨(dú)立式鍵盤</p><p> 獨(dú)立式鍵盤電路圖如圖4所示。</p><p><b> 圖4 獨(dú)立式鍵盤</b></p><p> 獨(dú)立式鍵盤是指各個(gè)按鍵相互獨(dú)立地連接到各自的單片機(jī)的I/O 口,I/O口只需要做輸入口就能讀到所有的按鍵。</p><p&g
21、t; 特點(diǎn): 電路簡(jiǎn)單,程序容易寫,適用于按鍵數(shù)較少的情況。</p><p> 所以我們選擇獨(dú)立式鍵盤。</p><p> 1.2.3顯示模塊選擇</p><p> 方案一:LED數(shù)碼管顯示</p><p> 數(shù)碼管顯示比較常用的是采用CD4511和74LS138實(shí)現(xiàn)數(shù)碼轉(zhuǎn)換,數(shù)碼顯示分動(dòng)態(tài)顯示和靜態(tài)顯示,靜態(tài)顯示具有鎖存功能,可以
22、使數(shù)據(jù)顯示得很清楚,但浪費(fèi)了一些資源。目前單片機(jī)數(shù)碼管普通采用動(dòng)態(tài)顯示。編程簡(jiǎn)單,但只能顯示數(shù)字,不能顯示中文。</p><p> 方案二:LCD1602</p><p> 能夠顯示英文和數(shù)字。 1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)。</p><p> 方案
23、三:LCD12864</p><p> 作為一種輸出方式,液晶顯示最大的特點(diǎn)就是能夠?qū)崿F(xiàn)友好的人機(jī)界面,它己經(jīng)廣泛應(yīng)用于現(xiàn)代工業(yè)控制和智能化儀器儀表等領(lǐng)域,它己經(jīng)成為單片機(jī)就用開發(fā)領(lǐng)域典型模塊之一。能夠方便的顯示文字和數(shù)字。</p><p> 所以最終選擇LCD12864。</p><p><b> 第二章、硬件描述</b></p&
24、gt;<p> 2.1、時(shí)鐘芯片DS1302</p><p> 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。采用雙電源供電
25、(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。DS1302的外部引腳分配如圖1所示及內(nèi)部結(jié)構(gòu)如圖2所示。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄,因此廣泛應(yīng)用于測(cè)量系統(tǒng)中。</p><p> 圖1 DS1302的外部引腳分配</p><p> 圖2 DS1302的內(nèi)部結(jié)構(gòu)&l
26、t;/p><p><b> 各引腳的功能為:</b></p><p> Vcc1:主電源;Vcc2:備份電源。當(dāng)Vcc2>Vcc1+0.2V時(shí),由Vcc2向DS1302供電,當(dāng)Vcc2< Vcc1時(shí),由Vcc1向DS1302供電。</p><p> SCLK:串行時(shí)鐘,輸入,控制數(shù)據(jù)的輸入與輸出; </p><
27、p> I/O:三線接口時(shí)的雙向數(shù)據(jù)線;</p><p> CE:輸入信號(hào),在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個(gè)功能:第一,CE開始控制字訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?lt;/p><p> DS1302有下列幾組寄存器:</p><p> ① DS1302有關(guān)日歷、時(shí)間的寄存器共有12個(gè),其中有7個(gè)寄存器(讀
28、時(shí)81h~8Dh,寫時(shí)80h~8Ch),存放的數(shù)據(jù)格式為BCD碼形式,如圖3所示。</p><p> 圖 3 DS1302有關(guān)日歷、時(shí)間的寄存器</p><p> 小時(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í)位。</
29、p><p> 秒寄存器(81h、80h)的位7定義為時(shí)鐘暫停標(biāo)志(CH)。當(dāng)該位置為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位置為0時(shí),時(shí)鐘開始運(yùn)行。</p><p> 控制寄存器(8Fh、8Eh)的位7是寫保護(hù)位(WP),其它7位均置為0。在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP位必須為0。當(dāng)WP位為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。</p><p
30、> ?、贒S1302有關(guān)RAM的地址</p><p> DS1302中附加31字節(jié)靜態(tài)RAM的地址如圖4所示。</p><p><b> 圖4</b></p><p> ?、?DS1302的工作模式寄存器</p><p> 所謂突發(fā)模式是指一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。突發(fā)模式寄存器如圖5所示。&l
31、t;/p><p><b> 圖5</b></p><p> ④此外,DS1302還有充電寄存器等。</p><p><b> 2 讀寫時(shí)序說明</b></p><p> DS1302是SPI總線驅(qū)動(dòng)方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。</p><p&
32、gt; 要想與DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如圖6。</p><p> 圖6 控制字(即地址及命令字節(jié))</p><p> 控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。</p><p> 位6:如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);</p>
33、<p> 位5至位1(A4~A0):指示操作單元的地址;</p><p> 位0(最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作。</p><p> 控制字總是從最低位開始輸出。在控制字指令輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個(gè)SCLK脈沖的下降沿,讀出DS1302的
34、數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時(shí)序如圖7 。</p><p> 圖7 數(shù)據(jù)讀寫時(shí)序</p><p> 具體操作見驅(qū)動(dòng)程序。</p><p><b> 3 電路原理圖:</b></p><p> 電路原理圖如圖8,DS1302與單片機(jī)的連接也僅需要3條線:CE引腳、SCLK串行時(shí)鐘引腳、I/O串行
35、數(shù)據(jù)引腳,Vcc2為備用電源,外接32.768kHz晶振,為芯片提供計(jì)時(shí)脈沖。</p><p><b> 圖8</b></p><p> 2.2、溫度傳感器DS18B20</p><p> 由DALLAS半導(dǎo)體公司生產(chǎn)的DS18B20型單線智能溫度傳感器,屬于新一代適配微處理器的智能溫度傳感器,可廣泛用于工業(yè)、民用、軍事等領(lǐng)域的溫度測(cè)量及
36、控制儀器、測(cè)控系統(tǒng)和大型設(shè)備中。它具有體積小,接口方便,傳輸距離遠(yuǎn)等特點(diǎn)。 </p><p> 1、DS18B20性能特點(diǎn) DS18B20的性能特點(diǎn):①采用單總線專用技術(shù),既可通過串行口線,也可通過其它I/O口線與微機(jī)接口,無須經(jīng)過其它變換電路,直接輸出被測(cè)溫度值(9位二進(jìn)制數(shù),含符號(hào)位),②測(cè)溫范圍為-55℃-+125℃,測(cè)量分辨率為0.0625℃,③內(nèi)含64位經(jīng)過激光修正的只讀存儲(chǔ)器ROM,④適配各種單
37、片機(jī)或系統(tǒng)機(jī),⑤用戶可分別設(shè)定各路溫度的上、下限,⑥內(nèi)含寄生電源。 2、DS18B20內(nèi)部結(jié)構(gòu) DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM,溫度傳感器,非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL,高速暫存器。DS18B20的管腳排列如圖9所示。 64位光刻ROM是出廠前被光刻好的,它可以看作是該DS18B20的地址序列號(hào)。不同的器件地址序列號(hào)不同。 </p><p> 圖9
38、;DS18B20引腳分布圖 </p><p> DS18B20高速暫存器共9個(gè)存存單元,如表所示: </p><p> 以12位轉(zhuǎn)化為例說明溫度高低字節(jié)存放形式及計(jì)算:12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)高低兩個(gè)8位的RAM中,二進(jìn)制中的前面5位是符號(hào)位。如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5
39、位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625才能得到實(shí)際溫度。 </p><p> 1、DS18B20控制方法 </p><p> 在硬件上,DS18B20與單片機(jī)的連接有兩種方法,一種是Vcc接外部電源,GND接地,I/O與單片機(jī)的I/O線相連;另一種是用寄生電源供電,此時(shí)UDD、GND接地,I/O接單片機(jī)I/O。無論是內(nèi)部寄生電源還是外部供電,I/O口線要接5KΩ左右的上拉電阻
40、。 </p><p> DS18B20有六條控制命令,如表所示: </p><p> CPU對(duì)DS18B20的訪問流程是:先對(duì)DS18B20初始化,再進(jìn)行ROM操作命令,最后才能對(duì)存儲(chǔ)器操作,數(shù)據(jù)操作。DS18B20每一步操作都要遵循嚴(yán)格的工作時(shí)序和通信協(xié)議。如主機(jī)控制DS18B20完成溫度轉(zhuǎn)換這一過程,根據(jù)DS18B20的通訊協(xié)議,須經(jīng)三個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行
41、復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。</p><p> 2.3、液晶LCD12864</p><p> ST7920提供了用于繪圖的GDRAM(graph display RAM)。共 64×32 個(gè)字節(jié)的空間(由擴(kuò)充指令設(shè)定繪圖 RAM 地址),最多可以控
42、制 256×64點(diǎn)陣的二維繪圖緩沖空間。在它的Datasheet給出了GDRAM的坐標(biāo)地址對(duì)照表: </p><p> 用坐標(biāo)表示,就是這樣: </p><p> 2.4、單片機(jī)STC89C52</p><p> STC89C52RC單片機(jī)是宏晶科技推出的新一代高速/低功耗/超強(qiáng)抗干擾的單片機(jī),指令代碼完全兼容傳統(tǒng)8051單片機(jī),12時(shí)鐘/
43、機(jī)器周期和6時(shí)鐘/機(jī)器周期可以任意選擇。</p><p><b> 主要特性如下:</b></p><p> 增強(qiáng)型8051單片機(jī),6時(shí)鐘/機(jī)器周期和12時(shí)鐘/機(jī)器周期可以任意選擇,指令代碼完全兼容傳統(tǒng)8051.</p><p> 工作電壓:5.5V~3.3V(5V單片機(jī))/3.8V~2.0V(3V單片機(jī))</p><
44、p> 工作頻率范圍:0~40MHz,相當(dāng)于普通8051的0~80MHz,實(shí)際工作頻率可達(dá)48MHz</p><p> 用戶應(yīng)用程序空間為8K字節(jié)</p><p> 片上集成512字節(jié)RAM</p><p> 通用I/O口(32個(gè)),復(fù)位后為:P1/P2/P3/P4是準(zhǔn)雙向口/弱上拉,P0口是漏極開路輸出,作為總線擴(kuò)展用時(shí),不用加上拉電阻,作為I/O口用
45、時(shí),需加上拉電阻。</p><p> ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程序,數(shù)秒即可完成一片</p><p> 具有EEPROM功能</p><p><b> 具有看門狗功能</b></p><p> 共3
46、個(gè)16位定時(shí)器/計(jì)數(shù)器。即定時(shí)器T0、T1、T2</p><p> 外部中斷4路,下降沿中斷或低電平觸發(fā)電路,Power Down模式可由外部中斷低電平觸發(fā)中斷方式喚醒</p><p> 通用異步串行口(UART),還可用定時(shí)器軟件實(shí)現(xiàn)多個(gè)UART</p><p> 工作溫度范圍:-40~+85℃(工業(yè)級(jí))/0~75℃(商業(yè)級(jí))</p><
47、p><b> PDIP封裝</b></p><p> STC89C52RC單片機(jī)的工作模式</p><p> 掉電模式:典型功耗<0.1μA,可由外部中斷喚醒,中斷返回后,繼續(xù)執(zhí)行原程序</p><p> 空閑模式:典型功耗2mA</p><p> 正常工作模式:典型功耗4Ma~7mA</p&
48、gt;<p> 掉電模式可由外部中斷喚醒,適用于水表、氣表等電池供電系統(tǒng)及便攜設(shè)備</p><p> STC89C52RC引腳圖</p><p> 第三章、硬件結(jié)構(gòu)圖分析</p><p><b> 3.1、單片機(jī)部分</b></p><p> 單片機(jī)IO引腳接線如上圖所示P1.0,P1.1,P1.
49、2,P1.3,P3.2,P3.3接地是6個(gè)輕觸開關(guān),</p><p> P1.6,P1.7,P3.5是時(shí)鐘芯片DS1302與單片機(jī)的接腳。XAT1,XAT2接時(shí)鐘晶振,P3.0-RXD,P3.1-TXD用于程序下載,串口通信。P2.1接蜂鳴器,用于控制鬧鐘。P2.4,P2.5,P2.6,P2.7分別是LCD12864的串并口選擇線,數(shù)據(jù)/命令選擇線,讀/寫選擇線,使能線,控制LCD12864的信號(hào),P0口是并行
50、口數(shù)據(jù)輸入輸出線。</p><p> 3.2、單片機(jī)復(fù)位電路</p><p> 此功能是按鍵復(fù)位,平時(shí)處于低電平,電路不復(fù)位,按鍵按下,電路復(fù)位信號(hào)有效,單片機(jī)復(fù)位。</p><p> 3.3、電路晶振部分</p><p> ATX1,ATX2接單片機(jī)的18,19號(hào)引腳。晶振大小位12M,為保證晶振快速,穩(wěn)定起振,接兩個(gè)22~33pf
51、的電容。</p><p><b> 3.4、按鍵部分</b></p><p> 按鍵S2~S7按鍵功能分別是:P1.0子功能調(diào)節(jié)選項(xiàng),P1.1數(shù)據(jù)加加,P1.2數(shù)據(jù)減減,P1.3確定設(shè)置,P3.2功能選擇,P3.3進(jìn)入功能。</p><p><b> 3.5、鬧鐘部分</b></p><p>
52、 單片機(jī)的P2.1引腳高低電平觸發(fā)PNP三極管關(guān)斷開通,從而控制蜂鳴器的名叫與否。</p><p> 3.6、溫度傳感器DS18B20接口電路</p><p> P4的3腳接VCC,1腳接GND,2腳是信號(hào)線,連接在單片機(jī)P2.3腳,讀取單片機(jī)命令或傳送數(shù)據(jù)給單片機(jī)。2腳接了個(gè)上拉電阻,增大單片機(jī)灌電流。</p><p> 3.7、時(shí)鐘電路DS1302接法&
53、lt;/p><p> VCC2接5V電源,VCC1則是后背電源,用于特殊情況下,掉電時(shí)后背電源工作,保存數(shù)據(jù)。X1,X2接一個(gè)值為32768的晶振,準(zhǔn)確提供時(shí)鐘。第5、6、7腳分別接RES復(fù)位信號(hào),I/O輸入輸出信號(hào),時(shí)鐘脈沖信號(hào),三線配合著讀寫數(shù)據(jù)指令。</p><p> 3.8液晶12864(帶中文字庫)</p><p> RS、R/W、EN分別是LCD128
54、64的串并口選擇線,數(shù)據(jù)/命令選擇線,讀/寫選擇線,使能線,配合8跟并行數(shù)據(jù)線,與單片機(jī)通信,執(zhí)行單片機(jī)指令,顯示相應(yīng)的點(diǎn)、字、圖等。電位器RW用于調(diào)節(jié)對(duì)比度。</p><p><b> 3.9程序下載接口</b></p><p> RXD,TXD用于下載程序、串口通信用。PC機(jī)通過MAX232將232電平轉(zhuǎn)換為TTL電平,把程序下載如單片機(jī)中。</p>
55、;<p> 3.10、電源接口電路</p><p> 由于本電路圖直接接的是5V電壓,是器件正常電壓,所以沒有設(shè)計(jì)穩(wěn)壓部分,如果涉及到穩(wěn)壓部分,可以接芯片7805,穩(wěn)壓值位5V,如果需要3、3V電壓,則需要TPS75733芯片。本電路電源由Power排陣接入。設(shè)有一個(gè)電源開關(guān),并有電源信號(hào)燈,檢測(cè)是否上電。</p><p><b> 結(jié)束語</b>
56、</p><p> 通過對(duì)單片機(jī)的研究于設(shè)計(jì),完成了在LCD12864上顯示時(shí)鐘,,時(shí)鐘界面切換,溫度,設(shè)置鬧鐘,設(shè)置時(shí)間,設(shè)置圖片,自檢功能等。在這段課程設(shè)計(jì)期間,學(xué)習(xí)到了很多。本功能程序采用模塊化編程,加速了完成的時(shí)間,代碼量有7K左右,可以燒入STC89C52,并且顯示穩(wěn)定。代碼寫好后,就開始畫板子,先畫原理圖,在畫PCB圖。在附錄中會(huì)給出圖。</p><p> Main函數(shù)中用
57、了許多嵌套,所以可能不容易看懂,不過都作了說明。我現(xiàn)在一直在學(xué)ucOS,如果用ucOS來寫這個(gè)程序也許架構(gòu)會(huì)清晰許多。但本人能力所限,有些功能并不完善,以后還需修改。</p><p><b> 致謝</b></p><p> 感謝我小組的成員,他們給了我許多支持與幫助,還要感謝xx老師提供了許多技術(shù)支持,他豐富的教學(xué)及實(shí)際操作經(jīng)驗(yàn)、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,以及和藹的態(tài)度,
58、使得我投入了大量時(shí)間在實(shí)驗(yàn)室中,做了許多實(shí)驗(yàn)。而這,對(duì)我的幫助和影響是非常巨大的。正是因?yàn)橛辛诉@些鍛煉的機(jī)會(huì),我才能非常順利地完成我的課程設(shè)計(jì)。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 周興華編著. 手把手教你學(xué)單片機(jī)C程序設(shè)計(jì).北京:北京航空航天大學(xué)出版社,2007</p><p> [2] 侯玉寶編著.
59、基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真. 北京:電子工業(yè)出版社,2008</p><p> [3] 張義和編著. 例說51單片機(jī)(C語言). 北京:人民郵電出版社. 2008</p><p><b> 附1:電路原理圖</b></p><p><b> 附2:電路PCB圖</b></p><
60、p><b> 附3:實(shí)物圖演示</b></p><p><b> 附4:程序代碼</b></p><p> GLOBLE.H程序:</p><p> #ifndef __GLOBLE_H__</p><p> #define __GLOBLE_H__ </p>&l
61、t;p> #include <reg52.h></p><p> #define uchar unsigned char </p><p> #define uint unsigned int </p><p><b> #endif</b></p><p> DS1302.H程序:</
62、p><p> #ifndef __DS1302_H__</p><p> #define __DS1302_H__</p><p> #include "globle.h"</p><p> void DS1302_write_byte(uchar dat);</p><p> uchar D
63、S1302_read_byte(void);</p><p> void DS1302_write_data(uchar add,uchar dat);</p><p> uchar DS1302_read_data(uchar add);</p><p> extern void DS1302_init();</p><p> ex
64、tern void DS1302_process();</p><p><b> #endif</b></p><p> DS1302.C程序</p><p> #include "DS1302.h"</p><p> #include "delay.h"</p>
65、;<p> sbit SCLK=P1^6;</p><p> sbit IO=P3^5;</p><p> sbit RST=P1^7;</p><p> uchar DS1302_sec,DS1302_min,DS1302_hour,DS1302_mon,DS1302_day,DS1302_year,DS1302_week;</p>
66、;<p> extern uchar DS1302_sec1,DS1302_sec2;</p><p> extern uchar DS1302_min1,DS1302_min2;</p><p> extern uchar DS1302_hour1,DS1302_hour2;</p><p> extern uchar DS1302_mon1
67、,DS1302_mon2;</p><p> extern uchar DS1302_day1,DS1302_day2;</p><p> extern uchar DS1302_year1,DS1302_year2;</p><p> extern uchar DS1302_week1,DS1302_week2; </p><p>
68、 void DS1302_write_byte(uchar dat) //寫字節(jié)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> SCLK=0; //拉低SCLK,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備</p><p> delay
69、_1us(2); </p><p> for(i=0;i<8;i++) //連續(xù)寫8個(gè)二進(jìn)制位數(shù)據(jù)</p><p><b> {</b></p><p> IO=dat&0x01; //取出dat的第0位數(shù)據(jù)寫入1302,低位在前,高位在后</p><p> delay_1us(2);</p&
70、gt;<p> SCLK=1; //上升沿寫入數(shù)據(jù)</p><p> delay_1us(2);</p><p> SCLK=0; //重新拉低SCLK,形成脈沖</p><p> dat>>=1; //將dat的各個(gè)數(shù)據(jù)右移1位,準(zhǔn)備寫入下一個(gè)數(shù)據(jù)</p><p><b> }<
71、;/b></p><p><b> }</b></p><p> uchar DS1302_read_byte(void) //讀字節(jié)</p><p><b> {</b></p><p> uchar i,dat;</p><p> delay_1u
72、s(2);</p><p> for(i=0;i<8;i++) //連續(xù)讀8個(gè)二進(jìn)制位數(shù)據(jù)</p><p><b> {</b></p><p> dat>>=1; //將dat的各個(gè)數(shù)據(jù)右移1,因?yàn)橄茸x出的是字節(jié)的最低位</p><p> if(IO==1) //如果讀出的數(shù)據(jù)是1&
73、lt;/p><p> dat|=0x80; //將1取出,寫在dat的最高位</p><p> SCLK=1; //為下降沿讀出</p><p> delay_1us(2); </p><p> SCLK=0; //形成脈沖下降沿</p><p> delay_1us(2);</p>
74、<p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> void DS1302_write_data(uchar add,uchar dat) //寫數(shù)據(jù)</p><p><b> {&l
75、t;/b></p><p><b> RST=0;</b></p><p><b> SCLK=0;</b></p><p><b> RST=1;</b></p><p> DS1302_write_byte(add);</p><p>
76、 DS1302_write_byte(dat);</p><p><b> SCLK=1;</b></p><p><b> RST=0;</b></p><p><b> }</b></p><p> uchar DS1302_read_data(uchar add
77、) //讀數(shù)據(jù)</p><p><b> {</b></p><p> uchar add1;</p><p><b> RST=0;</b></p><p><b> SCLK=0;</b></p><p><b> RS
78、T=1;</b></p><p> DS1302_write_byte(add);</p><p> add1=DS1302_read_byte();</p><p><b> SCLK=1;</b></p><p><b> RST=0;</b></p><
79、p> return(add1);</p><p><b> }</b></p><p> void DS1302_init()</p><p><b> {</b></p><p> DS1302_write_data(0x8e,0x00);//關(guān)閉寫保護(hù)</p>&l
80、t;p> DS1302_write_data(0x90,0xaa);//定義充電</p><p> DS1302_write_data(0x80,0x55);//秒</p><p> DS1302_write_data(0x82,0x59);//分</p><p> DS1302_write_data(0x84,0x23);//時(shí)</p>
81、<p> DS1302_write_data(0x86,0x09);//日</p><p> DS1302_write_data(0x88,0x12);//月</p><p> DS1302_write_data(0x8a,0x05);//星期</p><p> DS1302_write_data(0x8c,0x11);//年</p>
82、<p> DS1302_write_data(0x8e,0x80);//打開寫保護(hù) </p><p><b> }</b></p><p> void DS1302_process()</p><p><b> {</b></p><p> DS1302_sec=DS130
83、2_read_data(0x81);//從秒寄存器讀數(shù)據(jù)</p><p> DS1302_sec1=DS1302_sec&0x0f;//秒的各位</p><p> DS1302_sec2=DS1302_sec>>4;//秒的十位</p><p> DS1302_min=DS1302_read_data(0x83);//從分寄存器讀數(shù)據(jù)
84、</p><p> DS1302_min1=DS1302_min&0x0f;//分的各位</p><p> DS1302_min2=DS1302_min>>4;//分的十位</p><p> DS1302_hour=DS1302_read_data(0x85);//從小時(shí)寄存器讀數(shù)據(jù)</p><p> DS1
85、302_hour1=DS1302_hour&0x0f;//小時(shí)的各位</p><p> DS1302_hour2=DS1302_hour>>4;//小時(shí)的十位</p><p> DS1302_day=DS1302_read_data(0x87);//從日寄存器讀數(shù)據(jù)</p><p> DS1302_day1=DS1302_day&am
86、p;0x0f;//日的各位</p><p> DS1302_day2=DS1302_day>>4;//日的十位</p><p> DS1302_mon=DS1302_read_data(0x89);//從月寄存器讀數(shù)據(jù)</p><p> DS1302_mon1=DS1302_mon&0x0f;//月的各位</p>&l
87、t;p> DS1302_mon2=DS1302_mon>>4;//月的十位</p><p> DS1302_week=DS1302_read_data(0x8b);//從星期寄存器讀數(shù)據(jù)</p><p> DS1302_week1=DS1302_week&0x0f;//星期</p><p> DS1302_year=DS130
88、2_read_data(0x8d);//從年寄存器讀數(shù)據(jù)</p><p> DS1302_year1=DS1302_year&0x0f;//年的各位</p><p> DS1302_year2=DS1302_year>>4;//年的十位</p><p><b> }</b></p><p>
89、; DS18B20.H程序</p><p> #ifndef __DS18B20_H__</p><p> #define __DS18B20_h__</p><p> extern uchar temph,templ,flag;</p><p> void write_byte(uchar date);</p>&l
90、t;p> uchar read_byte();</p><p> void init_ds18b20();</p><p> extern void read_temp();</p><p><b> #endif</b></p><p> DS18B20.C程序</p><p>
91、 #include "globle.h"</p><p> #include "delay.h"</p><p> #include "ds18b20.h"</p><p> uchar temph,templ,flag;</p><p> sbit dq=P2^3;<
92、;/p><p> void write_byte(uchar date)//寫數(shù)據(jù)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<8;i++)</p><p><b>
93、{</b></p><p><b> dq=0;</b></p><p> dq=date&0x01;</p><p> delay_1us(5);</p><p><b> dq=1;</b></p><p><b> date>
94、;>=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> uchar read_byte()//讀數(shù)據(jù)</p><p><b> {</b></p><p> uch
95、ar i,value=0;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> dq=0;</b></p><p> value>>=1;</p><p><b> dq=1
96、;</b></p><p> if(dq==1)value|=0x80;</p><p> delay_1us(4);</p><p><b> }</b></p><p> return value; //返回?cái)?shù)值</p><p><b> }</b&g
97、t;</p><p> void init_ds18b20() //ds18b20初始化(復(fù)位)</p><p><b> {</b></p><p><b> uchar n;</b></p><p><b> dq=1;</b></p><p
98、> delay_1us(8);</p><p><b> dq=0;</b></p><p> delay_1us(80);</p><p><b> dq=1;</b></p><p> delay_1us(4);</p><p><b> n=
99、dq;</b></p><p> delay_1us(20);</p><p><b> }</b></p><p> extern void read_temp()</p><p><b> {</b></p><p> uchar a=0,b=0;&
100、lt;/p><p> init_ds18b20();</p><p> write_byte(0xcc);//跳過ROM</p><p> write_byte(0x44);//啟動(dòng)溫度測(cè)量</p><p> delay_1us(300); //給足夠時(shí)間處理數(shù)據(jù)</p><p> init_ds18b20(
101、);</p><p> write_byte(0xcc); //跳過ROM</p><p> write_byte(0xbe); //讀溫度</p><p> delay_1us(100);</p><p> a=read_byte();//讀低8位</p><p> b=read_byte();//讀高
102、8位</p><p> flag=(b&0x80)>>7;</p><p> temph=b<<4;</p><p> temph+=((a&0xf0)>>4);//小數(shù)點(diǎn)前的數(shù)據(jù)</p><p> templ=0.625*(a&0x0f); //小數(shù)點(diǎn)后的數(shù)據(jù)&l
103、t;/p><p><b> }</b></p><p><b> DELAY.H程序</b></p><p> #ifndef __DELAY_H__</p><p> #define __DELAY_H__</p><p> extern void delay_1us
104、(uint t);</p><p><b> #endif</b></p><p><b> DELAY.C程序</b></p><p> #include "globle.h"</p><p> #include "delay.h"</p>
105、;<p> extern void delay_1us(uint t)</p><p><b> {</b></p><p> while(t--);</p><p><b> }</b></p><p> LCD12864.H程序</p><p>
106、 #ifndef __LCD12864_H__</p><p> #define __LCD12864_H__</p><p> #include <reg52.h></p><p> void LCD12864_write_com(uchar com);//寫指令</p><p> uchar LCD12864_rea
107、d_data(); //讀數(shù)據(jù)</p><p> void LCD12864_write_data(uchar dat); //寫數(shù)據(jù)</p><p> void LCD12864_init();//初始化</p><p> void LCD12864_disp_str(uchar code *s); // 可以寫數(shù)組 table[]="——4行
108、X8=32個(gè)漢子——"形似的字符</p><p> void LCD12864_halfclr_scan(uchar color); //上下半屏雙行一起掃,color=1,反白掃</p><p> void LCD12864_fullclr_scan(uchar color); //單行掃,從第一行掃到最后一行,color=1,反白掃</p><p
109、> void LCD12864_disp_pic(uchar *s); //整屏顯示圖片,字模由取模工具取得</p><p> void LCD12864_disp_word(uchar addx,uchar addy,uchar color,uchar *s);//坐標(biāo)說明:addx:0-7,addy:0-63,color=1,反白顯示</p><p> void LC
110、D12864_anyfb(uchar addx0,uchar addx1,uchar addy0,uchar addy1,uchar color); //任意反白,坐標(biāo) X:0-7,Y:0-63</p><p> void LCD12864_disp_word1(uchar addx,uchar addy,uchar color,uchar *s);//坐標(biāo)說明:addx:0-7,addy:0-63,32*3
111、2點(diǎn)陣字</p><p> void LCD12864_disp_word2(uchar addx,uchar addy,uchar color,uchar *s);//坐標(biāo)說明:addx:0-7,addy:0-63,16*32點(diǎn)陣字</p><p><b> #endif</b></p><p> LCD12864.C程序</p
112、><p> #include "globle.h"</p><p> #include "lcd12864.h"</p><p> #include "delay.h"</p><p> sbit rs=P2^5;</p><p> sbit rw=P2
113、^6;</p><p> sbit en=P2^7;</p><p> sbit psb=P2^4;</p><p> void LCD12864_write_com(uchar com)//寫指令</p><p><b> {</b></p><p> rs=0;//指令&
114、lt;/p><p> rw=0;//寫</p><p><b> en=0;</b></p><p> delay_1us(12);</p><p><b> P0=com;</b></p><p> en=1;//下降沿有效</p>
115、<p> delay_1us(12);</p><p><b> en=0;</b></p><p><b> }</b></p><p> void LCD12864_write_data(uchar dat) //寫數(shù)據(jù)</p><p><b> {</b&g
116、t;</p><p> rs=1; //數(shù)據(jù)</p><p> rw=0; //寫</p><p><b> en=0;</b></p><p><b> P0=dat;</b></p><p> delay_1us(12);</p&g
117、t;<p> en=1; //下降沿有效</p><p> delay_1us(12);</p><p><b> en=0;</b></p><p><b> }</b></p><p> void LCD12864_init()//初始化</p>
118、<p><b> {</b></p><p> delay_1us(20);</p><p> LCD12864_write_com(0x30); //功能設(shè)定,不擴(kuò)充指令集動(dòng)作,實(shí)現(xiàn)基本指令集動(dòng)作</p><p> delay_1us(20);</p><p> LCD12864_write_c
119、om(0x30);</p><p> delay_1us(20);</p><p> LCD12864_write_com(0x0c);//開整體顯示,開游標(biāo)顯示,開游標(biāo)位子</p><p> delay_1us(20);</p><p> LCD12864_write_com(0x01);//清除顯示</p><
120、p> delay_1us(20);</p><p> LCD12864_write_com(0x06);//進(jìn)入點(diǎn)設(shè)置,基本上寫0x06</p><p> delay_1us(20); </p><p><b> }</b></p><p> void LCD12864_disp_str(uchar co
121、de *s) // 可以寫數(shù)組 table[]="——4行X8=32個(gè)漢子——"形似的字符</p><p><b> {</b></p><p><b> uchar i;</b></p><p> LCD12864_write_com(0x30);</p><p> L
122、CD12864_write_com(0x80);</p><p> for(i=0;i<16;i++)</p><p><b> {</b></p><p> LCD12864_write_data(*s++);</p><p><b> }</b></p><p&
123、gt; LCD12864_write_com(0x90);</p><p> for(i=0;i<16;i++)</p><p><b> {</b></p><p> LCD12864_write_data(*s++);</p><p><b> }</b></p>
124、<p> LCD12864_write_com(0x88);</p><p> for(i=0;i<16;i++)</p><p><b> {</b></p><p> LCD12864_write_data(*s++);</p><p><b> }</b></p
125、><p> LCD12864_write_com(0x98);</p><p> for(i=0;i<16;i++)</p><p><b> {</b></p><p> LCD12864_write_data(*s++);</p><p><b> }</b>
126、;</p><p><b> }</b></p><p> void LCD12864_halfclr_scan(uchar color) //上下半屏雙行一起掃,color=1,反白掃</p><p><b> {</b></p><p> uchar x,y,temp;</p&
127、gt;<p> if(color%2==0) temp=0x00; </p><p> else temp=0xff;</p><p> LCD12864_write_com(0x36);</p><p> for(y=0;y<32;y++)</p><p><b> {<
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)--萬年歷電子時(shí)鐘
- java萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)報(bào)告
- 數(shù)字萬年歷課程設(shè)計(jì)
- java課程設(shè)計(jì)--萬年歷
- 萬年歷課程設(shè)計(jì)論文
- 課程設(shè)計(jì)-萬年歷系統(tǒng)
- 萬年歷課程設(shè)計(jì)報(bào)告
- 數(shù)碼萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì).doc
- java課程設(shè)計(jì)--萬年歷設(shè)計(jì)
- dsp課程設(shè)計(jì)-萬年歷設(shè)計(jì)
- 電子萬年歷設(shè)計(jì)與制作
評(píng)論
0/150
提交評(píng)論