版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 開放性試驗(yàn)</b></p><p> 課 程 設(shè) 計(jì)</p><p><b> 成績(jī)?cè)u(píng)定表</b></p><p> 設(shè)計(jì)課題 : 基于89C52的數(shù)字溫度傳感器設(shè)計(jì) </p><p> 學(xué)院名稱 : 電氣工程學(xué)
2、院 </p><p> 專業(yè)班級(jí) : </p><p> 小組成員: </p><p> 指導(dǎo)教師 :
3、 </p><p><b> 一 系統(tǒng)概述</b></p><p> 本系統(tǒng)是以89C52單片機(jī)為控制器的數(shù)字溫度采集顯示報(bào)警系統(tǒng),可以實(shí)現(xiàn)對(duì)當(dāng)前溫度溫度的實(shí)時(shí)采集并傳送到12864液晶屏上顯示,并可設(shè)置溫度高低報(bào)警值,其中主要采用的芯片有AT89C52微控制器芯片,DS1302實(shí)時(shí)時(shí)鐘芯片,DS18B20溫度傳感器,1286
4、4液晶顯示芯片。其中溫度傳感器將當(dāng)前的溫度采集并送入微控制器中,再由微控制器將數(shù)據(jù)傳遞給12864液晶顯示。</p><p><b> 二 總體框圖</b></p><p><b> 三 硬件設(shè)計(jì)</b></p><p> 3.1AT89C52簡(jiǎn)介</p><p> AT89C52是一種帶8
5、K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的低電壓,高性能CMOS8位微處理器。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C52是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。</p><p><b> 主要特性:</b></p>&
6、lt;p> ·與MCS-51 兼容 ·4K字節(jié)可編程閃爍存儲(chǔ)器·壽命:1000寫/擦循環(huán)·數(shù)據(jù)保留時(shí)間:10年·全靜態(tài)工作:0Hz-24Hz·三級(jí)程序存儲(chǔ)器鎖定·128*8位內(nèi)部RAM·32可編程I/O線·兩個(gè)16位定時(shí)器/計(jì)數(shù)器·5個(gè)中斷源 ·可編程串行通道·低功耗的閑置和掉電模式
7、183;片內(nèi)振蕩器和時(shí)鐘電路 </p><p> 管腳說明: </p><p> VCC:供電電壓。 GND:接地。</p><p> P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIAS
8、H編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。 P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。</p><p> P2口:P2口為一個(gè)內(nèi)部上拉電阻的
9、8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地
10、址信號(hào)和控制信號(hào)。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:管口管腳 備選功能 P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /I
11、NT1(外部中斷1)P3.4 T0(記時(shí)器0外部輸入)P3.5 T1(記時(shí)器1外部</p><p> P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p> RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。</p><p> 3.2 12864液晶簡(jiǎn)介</p>
12、;<p> 3.2.1液晶顯示模塊概述</p><p> JM12864M-2漢字圖形點(diǎn)陣液晶顯示模塊,可顯示漢字及圖形,內(nèi)置8192個(gè)中文漢字(16X16點(diǎn)陣)、128個(gè)字符(8X16點(diǎn)陣)及64X256點(diǎn)陣顯示RAM(GDRAM)。</p><p> 主要技術(shù)參數(shù)和顯示特性:</p><p> 電源:VDD 3.3V~+5V(內(nèi)置升壓電路,
13、無需負(fù)壓);</p><p> 顯示內(nèi)容:128列× 64行</p><p><b> 顯示顏色:黃綠</b></p><p> 顯示角度:6:00鐘直視</p><p><b> LCD類型:STN</b></p><p> 與MCU接口:8位或4位并行
14、/3位串行</p><p><b> 配置LED背光</b></p><p> 多種軟件功能:光標(biāo)顯示、畫面移位、自定義字符、睡眠模式等</p><p><b> 二、外形尺寸</b></p><p> 外觀尺寸:93×70×12.5mm 視域尺寸:73×39m
15、m</p><p><b> 外形尺寸圖 </b></p><p><b> 外形尺寸</b></p><p> 3.2.2模塊引腳說明</p><p> 128X64HZ 引腳說明</p><p> 邏輯工作電壓(VDD):4.5~5.5V</p>
16、<p> 電源地(GND):0V</p><p> 工作溫度(Ta):-10℃ ~60℃(常溫) / -20℃~70℃(寬溫)</p><p><b> 3.2.3接口時(shí)序</b></p><p> 模塊有并行和串行兩種連接方法(時(shí)序如下):</p><p><b> 8位并行連接時(shí)序圖&l
17、t;/b></p><p><b> MPU寫資料到模塊</b></p><p> MPU從模塊讀出資料</p><p><b> 漢字顯示坐標(biāo)</b></p><p> 3.3數(shù)字溫度傳感器DS1820 </p><p> 一 單線數(shù)字溫度計(jì)DSl820介紹
18、 </p><p> DSl820數(shù)字溫度計(jì)提供9位(二進(jìn)制)溫度讀數(shù)指示器件的溫度信息經(jīng)過單線接口送</p><p> 入DSl820或從DSl820送出因此從主機(jī)CPU到DSl820僅需一條線(和地線)DSl820的電源可以由數(shù)據(jù)線本身提供而不需要外部電源因?yàn)槊恳粋€(gè)DSl820在出廠時(shí)已經(jīng)給定了唯一的序號(hào)因此任意多個(gè)DSl820可以存放在同一條單線總線上這允許在許多不同的地方放置溫
19、度敏感器件DSl820的測(cè)量范圍從-55到+125增量值為0.5可在l s(典型值)內(nèi)把溫度變換成數(shù)字</p><p> 每一個(gè)DSl820包括一個(gè)唯一的64位長(zhǎng)的序號(hào)該序號(hào)值存放在DSl820內(nèi)部的ROM(只讀存貯器)中開始8位是產(chǎn)品類型編碼(DSl820編碼均為10H)接著的48位是每個(gè)器件唯一的序號(hào)最后8位是前面56位的CRC(循環(huán)冗余校驗(yàn))碼DSl820中還有用于貯</p><p&g
20、t; 存測(cè)得的溫度值的兩個(gè)8位存貯器RAM編號(hào)為0號(hào)和1號(hào)1號(hào)存貯器存放溫度值的符號(hào)如果溫度為負(fù)()則1號(hào)存貯器8位全為1否則全為00號(hào)存貯器用于存放溫度值的補(bǔ)碼LSB(最低位)的1表示0.5將存貯器中的二進(jìn)制數(shù)求補(bǔ)再轉(zhuǎn)換成十進(jìn)制數(shù)并除以2就得到被測(cè)溫度值(-550125)DSl820的引腳如圖226l所示每只D51820都可以設(shè)置成兩種供電方式即數(shù)據(jù)總線供電方式和外部供電方式采取數(shù)據(jù)總線供電方式可以節(jié)省一根導(dǎo)線但完成溫度測(cè)量的時(shí)間較
21、長(zhǎng)采取外部供電方式則多用一根導(dǎo)線但測(cè)量速度較快。</p><p><b> (1)初始化</b></p><p> 時(shí)序見圖2.25-2主機(jī)總線to時(shí)刻發(fā)送一復(fù)位脈沖(最短為480us的低電平信號(hào))接著在tl時(shí)刻釋放總線并進(jìn)入接收狀態(tài)DSl820在檢測(cè)到總線的上升沿之后等待15-60us接著DS1820在t2時(shí)刻發(fā)出存在脈沖(低電平持續(xù)60-240 us)如圖中虛
22、線所示 </p><p><b> (2)寫時(shí)間隙</b></p><p> 當(dāng)主機(jī)總線t o時(shí)刻從高拉至低電平時(shí)就產(chǎn)生寫時(shí)間隙見圖2253圖2254從to時(shí)刻開始15us之內(nèi)應(yīng)將所需寫的位送到總線上DSl820在t后15-60us間對(duì)總線采樣若低電平寫入的位是0見圖2253若高電平寫入的位是1見圖2254連續(xù)寫2位間的間隙應(yīng)大于1us </p>
23、<p><b> (3)讀時(shí)間隙</b></p><p> 見圖2255主機(jī)總線to時(shí)刻從高拉至低電平時(shí)總線只須保持低電平l 7ts之后在t1時(shí)刻將總線拉高產(chǎn)生讀時(shí)間隙讀時(shí)間隙在t1時(shí)刻后t 2時(shí)刻前有效t z距to為15捍s也就是說t z時(shí)刻前主機(jī)必須完成讀位并在t o后的60尸s一120 fzs內(nèi)釋放總線</p><p><b> 3.4
24、時(shí)鐘芯片 </b></p><p> DS1302 是DALLAS 公司推出的涓流充電時(shí)鐘芯片內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31 字節(jié)靜態(tài)RAM 通過簡(jiǎn)</p><p> 單的串行接口與單片機(jī)進(jìn)行通信實(shí)時(shí)時(shí)鐘/日歷電路提供秒分時(shí)日日期月年的信息每月的天</p><p> 數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整時(shí)鐘操作可通過AM/PM 指示決定采用24 或12 小時(shí)格
25、式DS1302 與單片機(jī)之</p><p> 間能簡(jiǎn)單地采用同步串行的方式進(jìn)行通信僅需用到三個(gè)口線1 RES 復(fù)位2 I/O 數(shù)據(jù)線3 SCLK</p><p> 串行時(shí)鐘時(shí)鐘/RAM 的讀/寫數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31 個(gè)字節(jié)的字符組方式通信DS1302 工作時(shí)功耗很</p><p> 低保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW</p><p&g
26、t; DS1302 是由DS1202 改進(jìn)而來增加了以下的特性雙電源管腳用于主電源和備份電源供應(yīng)Vcc1 為可</p><p> 編程涓流充電電源附加七個(gè)字節(jié)存儲(chǔ)器它廣泛應(yīng)用于電話傳真便攜式儀器以及電池供電的儀器儀表等</p><p> 產(chǎn)品領(lǐng)域下面將主要的性能指標(biāo)作一綜合</p><p> 1.實(shí)時(shí)時(shí)鐘具有能計(jì)算2100 年之前的秒分時(shí)日日期星期月年的能力
27、還有閏年調(diào)整的能力</p><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> 6.讀/寫時(shí)鐘或RAM 數(shù)據(jù)時(shí)有兩種傳送方
28、式單字節(jié)傳送和多字節(jié)傳送字符組方式</p><p> 7.8 腳DIP 封裝或可選的8 腳SOIC 封裝根據(jù)表面裝配</p><p> 8.簡(jiǎn)單 3 線接口</p><p> 9.與 TTL 兼容Vcc=5V</p><p> 10.可選工業(yè)級(jí)溫度范圍-40 +85</p><p><b> 四 軟
29、件設(shè)計(jì)</b></p><p> 程序流程圖如圖4-1表示</p><p> 圖4-1.程序流程圖</p><p><b> 程序采用模塊化編程</b></p><p> 模塊化編程即把單個(gè)功能的子程序進(jìn)行單獨(dú)建立,并對(duì)其子程序做出自己的頭文件,其函數(shù)在主函數(shù)中調(diào)用即可,且不影響其他模塊。編寫模塊化程
30、序,可閱讀性強(qiáng),可移植性高</p><p> 附錄 程序及系統(tǒng)原理圖</p><p><b> 溫度傳感器子函數(shù)</b></p><p> #include "18b20.h"</p><p> #include "delay.h"</p><p>
31、 void delay(unsigned int i)</p><p><b> {</b></p><p> while(i--);</p><p><b> }</b></p><p> Init_DS18B20(void)</p><p><b>
32、 {</b></p><p> unsigned char x=0;</p><p><b> DQ=1;</b></p><p><b> delay(8);</b></p><p><b> DQ=0;</b></p><p>
33、 delay(80);</p><p><b> DQ=1;</b></p><p> delay(14);</p><p><b> x=DQ;</b></p><p> delay(20);</p><p><b> }</b></p
34、><p> /*********************************/</p><p> ReadOneChar(void)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> unsigned char dat=0;&
35、lt;/p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> DQ=0;</b></p><p><b> dat>>=1;</b></p><p><b> D
36、Q=1;</b></p><p><b> if(DQ)</b></p><p> dat|=0x80;</p><p> delay(4);</p><p><b> }</b></p><p> return(dat);</p>&l
37、t;p><b> }</b></p><p> /*************************************/</p><p> WriteOneChar(unsigned char dat)</p><p><b> {</b></p><p> unsigned
38、char i=0;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> DQ=0;</b></p><p> DQ=dat&0x01;</p><p><b> delay(5)
39、;</b></p><p><b> DQ=1;</b></p><p><b> dat>>=1;</b></p><p><b> }</b></p><p><b> }</b></p><p>
40、; /**********************************/</p><p> ReadTemperature(void)</p><p><b> {</b></p><p> unsigned char a=0;</p><p> unsigned char b=0;</p>
41、<p> unsigned int t=0;</p><p> float tt=0;</p><p> Init_DS18B20();</p><p> WriteOneChar(0xcc);</p><p> WriteOneChar(0x44);</p><p> Init_DS18B20(
42、);</p><p> WriteOneChar(0xcc);</p><p> WriteOneChar(0xbe);</p><p> a=ReadOneChar();</p><p> b=ReadOneChar();</p><p><b> t=b;</b></p>
43、<p><b> t<<=8;</b></p><p><b> t=t|a;</b></p><p> tt=t*0.0625;</p><p> t=tt*10+0.5;</p><p> return(t);</p><p><
44、b> }</b></p><p> /***************************/</p><p> #ifndef __18B20_H__</p><p> #define __18B20_H__</p><p> #include <reg52.h></p><p&g
45、t; sbit DQ=P2^2;</p><p> Init_DS18B20(void);</p><p> ReadOneChar(void);</p><p> WriteOneChar(unsigned char dat);</p><p> ReadTemperature(void);</p><p>
46、; void delay(unsigned int i);</p><p><b> #endif</b></p><p><b> 液晶顯示子函數(shù)</b></p><p> #include "lcd12864.h"</p><p> #include "d
47、elay.h"</p><p> uchar hanzi0[]="時(shí)間: ";</p><p> uchar hanzi1[]="溫度: ";</p><p> uchar hanzi2[]="高報(bào)警: 22.0 ";</p>&l
48、t;p> uchar hanzi3[]="低報(bào)警: 18.0 ";</p><p> void delay_ms(uchar a)</p><p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=a;
49、i>0;i--)</p><p> for(j=6245;j>0;j--);</p><p><b> }</b></p><p> /************************************************/</p><p> /***********************
50、********</p><p> //在12m晶振時(shí)延時(shí)50us</p><p> **********************************/</p><p> void delayus(uchar t)</p><p><b> {</b></p><p><b>
51、; uint i,j;</b></p><p> for(i=t;i>0;i--)</p><p> for(j=19;j>0;j--);</p><p><b> }</b></p><p> /********************************/</p>
52、<p> void write_com(uchar com)</p><p><b> {</b></p><p><b> rs=0;</b></p><p><b> rw=0;</b></p><p><b> e=0;</b>&
53、lt;/p><p> lcd_dat_port=com;</p><p> delayus(1);</p><p><b> e=1;</b></p><p> delayus(10);</p><p><b> e=0;</b></p><p>
54、; delayus(2);</p><p><b> }</b></p><p> /***********************************/</p><p> void write_data(uchar dat)</p><p><b> {</b></p>
55、<p><b> rs=1;</b></p><p><b> rw=0;</b></p><p><b> e=0;</b></p><p> lcd_dat_port=dat;</p><p> delayus(1);</p><p
56、><b> e=1;</b></p><p> delayus(10);</p><p><b> e=0;</b></p><p> delayus(2);</p><p><b> }</b></p><p> /*********
57、***********************/</p><p> void init()</p><p><b> {</b></p><p><b> uchar i;</b></p><p> delay_ms(2);</p><p> write_com(0
58、x30);</p><p> delayus(4);</p><p> write_com(0x30);</p><p> delayus(4);</p><p> write_com(0x0c);</p><p> delayus(4);</p><p> write_com(0x
59、01);</p><p> delayus(240);</p><p> write_com(0x06);</p><p> delayus(10);</p><p> /******************/</p><p> write_com(0x80);</p><p> d
60、elay_ms(1);</p><p> for(i=0;i<9;i++)</p><p><b> {</b></p><p> write_data(hanzi0[i]);</p><p><b> }</b></p><p> write_com(0x9
61、0);</p><p> delay_ms(1);</p><p> for(i=0;i<9;i++)</p><p><b> {</b></p><p> write_data(hanzi1[i]);</p><p><b> }</b></p>
62、;<p> write_com(0x88);</p><p> delay_ms(1);</p><p> for(i=0;i<16;i++)</p><p><b> {</b></p><p> write_data(hanzi2[i]);</p><p><
63、;b> }</b></p><p> write_com(0x98);</p><p> delay_ms(1);</p><p> for(i=0;i<16;i++)</p><p><b> {</b></p><p> write_data(hanzi3[
64、i]);</p><p><b> }</b></p><p> delay_1ms(10);</p><p><b> }</b></p><p> #ifndef __LCD12864_H__</p><p> #define __LCD12864_H__<
65、;/p><p> #include <reg52.h></p><p> #include "delay.h"</p><p> #define lcd_dat_port P0</p><p> sbit rs=P3^5;</p><p> sbit e=P3^4;</p&g
66、t;<p> sbit rw=P3^6;</p><p> void write_com(uchar com);</p><p> void write_data(uchar dat);</p><p> void delay_ms(uchar a);</p><p> void delayus(uchar t);&l
67、t;/p><p> void init();</p><p> void lcd_char_write(uchar x_pos,y_pos,lcd_dat);</p><p><b> #endif</b></p><p><b> 延時(shí)函數(shù)</b></p><p>
68、#include "delay.h"</p><p> void delayshu(void)</p><p><b> {</b></p><p><b> int k;</b></p><p> for(k=0;k<1000;k++);</p>&
69、lt;p><b> }</b></p><p> /**********************/</p><p> void lcd_delay(uint ms)</p><p><b> {</b></p><p><b> uint i;</b></
70、p><p> while(ms--)</p><p><b> {</b></p><p> for(i=0;i<250;i++)</p><p><b> {;}</b></p><p><b> }</b></p><
71、p><b> }</b></p><p> /***************************************/</p><p> /**********************************/</p><p> void delay_1ms(uchar x)</p><p><
72、;b> {</b></p><p> uchar i=0,j=0;</p><p> for(i=0;i<x;i++)</p><p><b> {</b></p><p> for(j=0;j<113;j++)</p><p><b> {;}
73、</b></p><p><b> }</b></p><p><b> }</b></p><p> #ifndef __DELAY_H__</p><p> #define __DELAY_H__</p><p> #include <reg5
74、2.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> void lcd_delay(uchar ms);</p><p> void delayshu(void);</p><p> v
75、oid delay_1ms(uchar x);</p><p><b> #endif</b></p><p><b> 時(shí)鐘函數(shù)</b></p><p> #include "ds1302.h"</p><p> #include "delay.h"
76、</p><p> /******************************************************************** </p><p> 函 數(shù) 名:RTInputByte()</p><p> 功 能:實(shí)時(shí)時(shí)鐘寫入一字節(jié)</p><p> 說 明:往DS1302寫入1Byte數(shù)據(jù)
77、 (內(nèi)部函數(shù))</p><p> 入口參數(shù):d 寫入的數(shù)據(jù) </p><p><b> 返 回 值:無 </b></p><p> 設(shè) 計(jì):zhaojunjie 日 期:2002-03-19</p><p> 修 改: 日 期:
78、 </p><p> ***********************************************************************/</p><p> void RTInputByte(uchar d) </p><p><b> { </b></p><p><b>
79、 uchar i;</b></p><p><b> ACC = d;</b></p><p> for(i=8; i>0; i--)</p><p><b> {</b></p><p> T_IO = ACC0; /*相當(dāng)于匯編中的 RRC */&l
80、t;/p><p> T_CLK = 1;</p><p> T_CLK = 0;</p><p> ACC = ACC >> 1; </p><p><b> } </b></p><p><b> }</b></p><p> /
81、******************************************************************** </p><p> 函 數(shù) 名:RTOutputByte()</p><p> 功 能:實(shí)時(shí)時(shí)鐘讀取一字節(jié)</p><p> 說 明:從DS1302讀取1Byte數(shù)據(jù) (內(nèi)部函數(shù))</p><
82、p><b> 入口參數(shù):無 </b></p><p><b> 返 回 值:ACC</b></p><p> 設(shè) 計(jì):zhaojunjie 日 期:2002-03-19</p><p> 修 改: 日 期: </p&g
83、t;<p> ***********************************************************************/</p><p> uchar RTOutputByte(void) </p><p><b> { </b></p><p><b> uchar i;&
84、lt;/b></p><p> for(i=8; i>0; i--)</p><p><b> {</b></p><p> ACC = ACC >>1; /*相當(dāng)于匯編中的 RRC */</p><p> ACC7 = T_IO;</p><p>
85、 T_CLK = 1;</p><p> T_CLK = 0;</p><p><b> } </b></p><p> return(ACC); </p><p><b> }</b></p><p> /****************************
86、**************************************** </p><p> 函 數(shù) 名:W1302()</p><p> 功 能:往DS1302寫入數(shù)據(jù)</p><p> 說 明:先寫地址,后寫命令/數(shù)據(jù) (內(nèi)部函數(shù))</p><p> 調(diào) 用:RTInputByte() , RTOutpu
87、tByte()</p><p> 入口參數(shù):ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù)</p><p><b> 返 回 值:無</b></p><p> 設(shè) 計(jì):zhaojunjie 日 期:2002-03-19</p><p> 修 改:
88、 日 期: </p><p> ***********************************************************************/</p><p> void W1302(uchar ucAddr, uchar ucDa)</p><p><b> {</b>&
89、lt;/p><p> T_RST = 0;</p><p> T_CLK = 0;</p><p> T_RST = 1;</p><p> RTInputByte(ucAddr); /* 地址,命令 */</p><p> RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/
90、</p><p> T_CLK = 1;</p><p> T_RST = 0;</p><p><b> } </b></p><p> /******************************************************************** </p><p
91、> 函 數(shù) 名:R1302()</p><p> 功 能:讀取DS1302某地址的數(shù)據(jù)</p><p> 說 明:先寫地址,后讀命令/數(shù)據(jù) (內(nèi)部函數(shù))</p><p> 調(diào) 用:RTInputByte() , RTOutputByte()</p><p> 入口參數(shù):ucAddr: DS1302地址<
92、/p><p> 返 回 值:ucData :讀取的數(shù)據(jù)</p><p> 設(shè) 計(jì):zhaojunjie 日 期:2002-03-19</p><p> 修 改: 日 期: </p><p> ********************************
93、***************************************/</p><p> uchar R1302(uchar ucAddr)</p><p><b> {</b></p><p> uchar ucData;</p><p> T_RST = 0;</p><p>
94、; T_CLK = 0;</p><p> T_RST = 1;</p><p> RTInputByte(ucAddr); /* 地址,命令 */</p><p> ucData = RTOutputByte(); /* 讀1Byte數(shù)據(jù) */</p><p> T_CLK = 1;<
95、/p><p> T_RST = 0;</p><p> return(ucData);</p><p><b> }</b></p><p> /******************************************************************** </p><p
96、> 函 數(shù) 名:Set1302()</p><p> 功 能:設(shè)置初始時(shí)間</p><p> 說 明:先寫地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式)</p><p> 調(diào) 用:W1302()</p><p> 入口參數(shù):pClock: 設(shè)置時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年</p>
97、<p> 7Byte (BCD碼)1B 1B 1B 1B 1B 1B 1B</p><p><b> 返 回 值:無</b></p><p> 設(shè) 計(jì):zhaojunjie 日 期:2002-03-19</p><p> 修 改: 日
98、期: </p><p> ***********************************************************************/</p><p> void Set1302(uchar *pClock) </p><p><b> {</b></p><p><b&g
99、t; uchar i;</b></p><p> uchar ucAddr = 0x80; </p><p><b> EA = 0;</b></p><p> W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/</p><p> for(i =3; i&
100、gt;0; i--)</p><p><b> { </b></p><p> W1302(ucAddr,*pClock); /* 秒 分 時(shí) 日 月 星期 年 */ </p><p><b> pClock++;</b></p><p> ucAddr +=2;</p>&
101、lt;p><b> }</b></p><p> W1302(0x8e,0x80); /* 控制命令,WP=1,寫保護(hù)?*/</p><p><b> EA = 1;</b></p><p><b> }</b></p><p> /****
102、**************************************************************** </p><p> 函 數(shù) 名:Get1302()</p><p> 功 能:讀取DS1302當(dāng)前時(shí)間</p><p><b> 說 明:</b></p><p> 調(diào)
103、 用:R1302() </p><p> 入口參數(shù):ucCurtime: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年 </p><p> 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B</p><p><b> 返 回 值:無</b></p><p> 設(shè)
104、 計(jì):zhaojunjie 日 期:2002-03-19</p><p> 修 改: 日 期: </p><p> ***********************************************************************/</p><p> vo
105、id Get1302(uchar ucCurtime[]) </p><p><b> {</b></p><p><b> uchar i;</b></p><p> uchar ucAddr = 0x81;</p><p><b> EA = 0;</b></
106、p><p> for (i=0; i<3; i++)</p><p><b> {</b></p><p> ucCurtime[i] = R1302(ucAddr);/*格式為: 秒 分 時(shí) 日 月 星期 年 */</p><p> ucAddr += 2;</p><p><b
107、> }</b></p><p><b> EA = 1;</b></p><p><b> } </b></p><p> #ifndef __DS1302_H__</p><p> #define __DS1302_H__</p><p>
108、#include <reg52.h> </p><p> #include <intrins.h></p><p> #define nop() _nop_()</p><p> sbit T_CLK = P3^2; /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */</p><p> sbit T_IO = P2
109、^4; /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */</p><p> sbit T_RST = P3^3; /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */</p><p> sbit ACC0 = ACC^0;</p><p> sbit ACC7 = ACC^7;</p><p> void RTInputByte(uchar d);</p&g
110、t;<p> uchar RTOutputByte(void);</p><p> void W1302(uchar ucAddr, uchar ucDa);</p><p> uchar R1302(uchar ucAddr);</p><p> void Set1302(uchar *pClock);</p><p>
111、; void Get1302(uchar ucCurtime[]);</p><p><b> #endif</b></p><p><b> 主函數(shù)</b></p><p> #include "lcd12864.h"</p><p> #include "
112、18b20.h"</p><p> #include "delay.h"</p><p> #include "ds1302.h"</p><p> #include <reg52.h></p><p> uchar xiegang[]={":"};&l
113、t;/p><p> uchar code mun_to_char[] = {"0123456789abcdef"}; /*定義數(shù)字跟ASCII碼的關(guān)系*/</p><p> uchar data time_data_buff[3]={0x00,0x00,0x09};/*格式為: 秒 分 時(shí) 日 月 星期 年 */</p><p> sbit W
114、ELA=P2^7;</p><p> sbit beep=P2^3;</p><p> uchar shuzi[]={"0123456789"};</p><p> uchar dian[]={"."};</p><p> uchar du[]={"c"};</p>
115、;<p> void main()</p><p><b> {</b></p><p><b> uint i=0;</b></p><p><b> P0=0XFF;</b></p><p> delayshu();</p><p
116、><b> WELA=1;</b></p><p> delayshu();</p><p><b> WELA=0;</b></p><p> Set1302(time_data_buff);</p><p><b> init();</b></p>
117、;<p> lcd_delay(10);</p><p><b> while(1)</b></p><p><b> {</b></p><p> Get1302(time_data_buff);</p><p> i=ReadTemperature();</p>
118、;<p> delay_1ms(10);</p><p> if(i>220|i<180)//報(bào)警溫度,要乘以10</p><p><b> {</b></p><p><b> beep=0;</b></p><p> delay_1ms(200);</p
119、><p><b> beep=1;</b></p><p><b> }</b></p><p><b> //以下顯示時(shí)間</b></p><p> write_com(0x83);</p><p> write_data(mun_to_cha
120、r[time_data_buff[2]/0x10]);</p><p> delay_ms(1);</p><p> write_data(mun_to_char[time_data_buff[2]%0x10]);</p><p> delay_ms(1);</p><p> write_data(xiegang[0]);<
121、/p><p> write_data(mun_to_char[time_data_buff[1]/0x10]);</p><p> delay_ms(1);</p><p> write_data(mun_to_char[time_data_buff[1]%0x10]);</p><p> delay_ms(1);</p>
122、<p> write_data(xiegang[0]);</p><p> write_data(mun_to_char[time_data_buff[0]/0x10]);</p><p> delay_ms(1);</p><p> write_data(mun_to_char[time_data_buff[0]%0x10]);</p>
123、;<p> delay_ms(1);</p><p><b> //以下顯示溫度</b></p><p> write_com(0x93);</p><p> delay_ms(1);</p><p> write_data(shuzi[i/100]);</p><p>
124、 delay_1ms(10);</p><p> write_data(shuzi[i%100/10]);</p><p> delay_1ms(10);</p><p> write_data(dian[0]);</p><p> delay_1ms(10);</p><p> write_data(shu
125、zi[i%10]);</p><p> delay_1ms(10);</p><p> write_data(0xa1);//兩行顯示溫度符號(hào)</p><p> write_data(0xe3);//</p><p> write_data(du[0]);</p><p> write_com(0x9e);&
126、lt;/p><p> write_data(0xa1);</p><p> write_data(0xe3);</p><p> write_data(du[0]);</p><p> write_com(0x8e);</p><p> write_data(0xa1);</p><p>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 89c52單片機(jī)課程設(shè)計(jì)
- 基于89c52的液體點(diǎn)滴速度監(jiān)控設(shè)計(jì)課程設(shè)計(jì)
- 基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度傳感器課程設(shè)計(jì)論文
- 基于89c52單片機(jī)的溫度測(cè)量系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于89c52單片機(jī)音樂播放的設(shè)計(jì)
- 傳感器課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 課程設(shè)計(jì)----溫度傳感器
- 溫度傳感器課程設(shè)計(jì)
- 基于89c52的酒精測(cè)試儀設(shè)計(jì)
- 基于89c52的教室燈光節(jié)能控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 基于89c52單片機(jī)的數(shù)字電壓表設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于89c52漢字顯示系統(tǒng)設(shè)計(jì)
- 基于89c52單片機(jī)的智能溫度控制
- 溫度傳感器課程設(shè)計(jì)報(bào)告
- 溫度傳感器課程設(shè)計(jì)報(bào)告
- 傳感器課程設(shè)計(jì)--基于ad590溫度傳感器的溫度系統(tǒng)的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)報(bào)告
- 溫度傳感器課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論