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

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論