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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于DS1302多功能</p><p><b>  數(shù)字時(shí)鐘--萬(wàn)年歷</b></p><p><b>  實(shí)驗(yàn)報(bào)告</b></p><p>  實(shí)驗(yàn)名稱: 基于DS1302多功能數(shù)字鐘 </p><p>  試驗(yàn)日期:  2014年 01 月 05 日

2、 </p><p>  專 業(yè): 電子信息工程 </p><p>  姓 名:   </p><p>  班 級(jí): </p><p>  學(xué) 號(hào): <

3、;/p><p><b>  設(shè)計(jì)理念:</b></p><p>  電子萬(wàn)年歷是一個(gè)應(yīng)用非常廣泛的實(shí)用日常計(jì)時(shí)工具,帶有顯示溫度,顯示世紀(jì),年,月,日,星期,時(shí),分,秒和按鍵可調(diào)時(shí)間及其按鍵設(shè)置鬧鐘的功能,同時(shí)具有月末自動(dòng)更新,閏年補(bǔ)償功能,整點(diǎn)報(bào)時(shí)等多種功能。環(huán)境溫度檢測(cè)系統(tǒng)在日常生活和工業(yè)應(yīng)用非常廣泛,能實(shí)時(shí)采集周圍的溫度信息進(jìn)行顯示。</p><

4、p>  此系統(tǒng)是基于STC89C52單片機(jī)設(shè)計(jì)的,包含液晶顯示模塊,DS1302實(shí)時(shí)時(shí)鐘模塊,DS18B20溫度采集模塊,鍵盤(pán)掃描模塊,蜂鳴器報(bào)警模塊。STC89C52作為控制核心,具有功耗低,功能強(qiáng)等特點(diǎn),電壓可選3到5V電源供電。顯示模塊采用1602液晶動(dòng)態(tài)顯示,相對(duì)數(shù)碼管而言經(jīng)濟(jì)實(shí)用,占用空間小,對(duì)于顯示數(shù)字、字母最為合適,而且與單片機(jī)連線簡(jiǎn)單,占用IO口相對(duì)較少。實(shí)時(shí)時(shí)鐘芯片DS1302是一款經(jīng)濟(jì)實(shí)惠功能強(qiáng)大的較新型產(chǎn)品,

5、該器件提供RTC/日歷,可外加器件實(shí)現(xiàn)定時(shí)鬧鐘等功能,如果檢測(cè)到主電源故障,該器件可自動(dòng)切換到備用電源供電,可以保證在斷電情況下精準(zhǔn)走時(shí),計(jì)時(shí)。溫度檢測(cè)顯示模塊采用數(shù)字式溫度傳感器DS18B20,該芯片具有精度高,測(cè)量范圍廣等優(yōu)點(diǎn),易與單片機(jī)連接,模塊電路組成簡(jiǎn)單并同時(shí)具有溫度報(bào)警功能。</p><p>  關(guān)鍵詞:STC89C52,DS1302,DS18B20,1602液晶顯示,電子萬(wàn)年歷,采集設(shè)備周圍環(huán)境溫度

6、、整點(diǎn)報(bào)時(shí),鬧鐘時(shí)分通過(guò)按鍵設(shè)置,時(shí)、分、秒、年、月、日、星期通過(guò)按鍵進(jìn)行調(diào)節(jié)校準(zhǔn)……</p><p><b>  設(shè)計(jì)思路:</b></p><p>  核心控制體:STC89C52單片機(jī)</p><p>  實(shí)時(shí)時(shí)鐘芯片:DS1302</p><p>  數(shù)字式溫度傳感器:DS18B20</p><

7、;p>  總共設(shè)有四個(gè)按鍵,為節(jié)約資源考慮,每個(gè)按鍵都有多種功能。四個(gè)按鍵分別標(biāo)號(hào)為key1,key2,key3,key4。第一次按下key2,key3,key4都沒(méi)有反應(yīng),首先按下key1鍵可選擇指針位置,key2鍵為加鍵,key3為減鍵,key4鍵為鬧鐘設(shè)置清零鍵。操作簡(jiǎn)單,按鍵靈活。整點(diǎn)報(bào)時(shí)功能,可以按下key4鍵終止報(bào)警。</p><p><b>  系統(tǒng)設(shè)計(jì)框圖:</b>&l

8、t;/p><p><b>  系統(tǒng)硬件需求介紹:</b></p><p>  STC89C52單片機(jī)一片,DS1302實(shí)時(shí)時(shí)鐘芯片一個(gè),DS18B20數(shù)字式溫度傳感器一個(gè),+5V無(wú)源蜂鳴器一個(gè),12MHZ、32KHZ晶振各一個(gè),多個(gè)按鍵和開(kāi)關(guān),常用電容電阻,連接線,三極管,二極管若干,滑動(dòng)變阻器一個(gè),+3V紐扣電池一個(gè)。</p><p><b

9、>  實(shí)施方案:</b></p><p>  1、單片機(jī)核心控制模塊:</p><p>  核心控制器件選用STC89C52單片機(jī)。STC89C52單片機(jī)為40管腳雙列直插芯片,它是一種高性能,低功耗的8位CMOS微處理器芯片,市場(chǎng)應(yīng)用最多。而且價(jià)格便宜,控制方便,便于應(yīng)用有4個(gè)I/O口分別為P1,P2,P3,P4。其中每一個(gè)管腳都能做獨(dú)立的輸入輸出管腳,它的第9腳位復(fù)位

10、管腳,接上電容和上拉電阻再帶個(gè)開(kāi)關(guān)構(gòu)成復(fù)位電路。18,19管腳接外部晶振和兩個(gè)微調(diào)電容構(gòu)成外部晶振電路。單片機(jī),復(fù)位電路,晶振,5V電源構(gòu)成單片機(jī)最小系統(tǒng)。其中與AT89C52單片機(jī)管腳連接如下圖:</p><p>  2、實(shí)時(shí)時(shí)鐘電路模塊:</p><p>  DS1302引腳排列:如下圖</p><p><b>  引腳說(shuō)明:</b><

11、;/p><p>  1)1腳,Vcc2:后備電源,此設(shè)計(jì)中接+3V紐扣電池;8腳,VCC1:主電源,接+5V。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。</p><p>  2)X1、X2即2腳3腳:振蕩源,外接32.76

12、8kHz晶振。</p><p>  3)4腳END,接地端。</p><p>  4)5腳RST:復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為

13、低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。</p><p>  5)I/O為串行數(shù)據(jù)輸入輸出端(雙向)。</p><p>  6)SCLK為時(shí)鐘輸入端。</p><p>  **特別注意:5,6,7腳在硬件電路實(shí)現(xiàn)中,必須接上拉電阻,接+5V.

14、</p><p>  3、DS18B20 工作模塊:     DS18B20 的溫度檢測(cè)與數(shù)字?jǐn)?shù)據(jù)輸出全集成于一個(gè)芯片之上,從而抗干擾力更強(qiáng)。其一個(gè)工作周期可分為兩個(gè)部分,即溫度檢測(cè)和數(shù)據(jù)處理。</p><p>  DS18B20 的主要特征: 全數(shù)字溫度轉(zhuǎn)換及輸出。 </p><p>  先進(jìn)的單總線數(shù)據(jù)通信。

15、 最高 12 位分辨率,精度可達(dá)土 0.5攝氏度。 </p><p>  12 位分辨率時(shí)的最大工作周期為 750 毫秒。 可選擇寄生工作方式。   檢測(cè)溫度范圍為–55°C ~+125°C (–67°F ~+257°F)   內(nèi)置 EEPROM,限溫報(bào)警功能。   64 位光刻 ROM,內(nèi)置產(chǎn)品序列號(hào),方便多機(jī)掛接。

16、 多樣封裝形式,適應(yīng)不同硬件系統(tǒng)。 </p><p><b>  4、液晶顯示模塊:</b></p><p>  1602字符型液晶顯示模塊是一種專門(mén)用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,本設(shè)計(jì)采用16列*2行的字符型LCD1602帶背光的液晶顯示屏。</p><p><b>  引腳接口說(shuō)明:</b>&l

17、t;/p><p>  第1腳:VSS為地電源。</p><p>  第2腳:VDD接5V正電源。</p><p>  第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。</p><p>  第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)

18、選擇指令寄存器。</p><p>  第5腳:R/W為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。</p><p>  第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。</p><p>  第7~

19、14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p>  第15腳:背光源正極。</p><p>  第16腳:背光源負(fù)極。</p><p><b>  5、蜂鳴器電路模塊</b></p><p>  本實(shí)驗(yàn)設(shè)計(jì)中蜂鳴器用CS8050三極管驅(qū)動(dòng),蜂鳴器用5V的無(wú)源蜂鳴器,并接一個(gè)發(fā)光二極管作為指示燈,同時(shí)在負(fù)極串接一個(gè)限

20、流電阻,數(shù)據(jù)端口接P3^7.</p><p>  Proteus仿真原理總框圖:</p><p><b>  硬件電路實(shí)現(xiàn):</b></p><p><b>  源程序:</b></p><p>  Shuzizhong.c</p><p>  #include <re

21、g51.h></p><p>  #include"ds18b20.h"</p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p><p>  uchar shi,fen,miao,ringshi,ringfen,n

22、ian,yue,ri,week,temp,count,m;</p><p>  sbit rs=P2^2;</p><p>  sbit rw=P2^3;</p><p>  sbit en=P2^4;</p><p>  sbit key1=P3^4; //設(shè)置鍵</p><p>  sbit key2=P3^5;

23、 //加鍵</p><p>  sbit key3=P3^6;</p><p>  sbit key4=P3^7;</p><p>  sbit IO=P1^1;// DS1302數(shù)據(jù)線</p><p>  sbit SCLK=P1^2;//DS1302時(shí)鐘線</p><p>  sbit RST=P1^0;

24、//DS1302復(fù)位線</p><p>  sbit beep=P1^4;</p><p>  sbit ACC0=ACC^0;</p><p>  sbit ACC7=ACC^7;</p><p>  uchar codetable[]="20 - - ";</p><p>  uchar

25、 codetable1[]=" : : ";</p><p>  uchar codetone[]={212,212,190,212,159,169,212,212,190,212,142,159,</p><p>  212,212,106,126,159,169,190,119,119,126,159,142,159,0};</p><p

26、>  uchar codelon[]={9,3,12,12,12,24,9,3,12,12,12,24,</p><p>  9,3,12,12,12,12,12,9,3,12,12,12,24,0}; </p><p>  void delay(uint z)</p><p>  {uint x,y;</p><p>  for(x=

27、z;x>0;x--)</p><p>  for(y=120;y>0;y--);</p><p><b>  }</b></p><p>  void yinyue()</p><p><b>  {</b></p><p>  uint i,j,k=0,l;&l

28、t;/p><p>  {for(l=0;l<26;l++)</p><p><b>  {</b></p><p>  for(i=0;i<codelon[k]*20;i++)</p><p>  { if(key4==0){beep=0;break;}</p><p>  beep=~b

29、eep;</p><p>  for(j=0;j<codetone[k]/3;j++);</p><p><b>  }</b></p><p>  delay(10);</p><p><b>  k++;}}} </b></p><p>  void write_L

30、CD_com(uchar com)</p><p><b>  {rs=0;</b></p><p><b>  rw=0;</b></p><p><b>  P0=com;</b></p><p><b>  delay(5);</b></p&g

31、t;<p><b>  en=1;</b></p><p><b>  delay(5);</b></p><p><b>  en=0;</b></p><p><b>  }</b></p><p>  void write_LCD_da

32、(uchar data1)</p><p><b>  {rs=1;</b></p><p><b>  rw=0;</b></p><p><b>  P0=data1;</b></p><p><b>  delay(5);</b></p>

33、<p><b>  en=1;</b></p><p><b>  delay(5);</b></p><p><b>  en=0;</b></p><p><b>  }</b></p><p>  void Init_LCD()<

34、/p><p>  {uchar num;</p><p>  write_LCD_com(0x38); delay(1);</p><p>  write_LCD_com(0x01); delay(1);</p><p>  write_LCD_com(0x06); delay(1);</p><p>  write_LC

35、D_com(0x0c); delay(1);</p><p>  write_LCD_com(0x80);</p><p>  for(num=0;num<10;num++)</p><p>  {write_LCD_da(codetable[num]);</p><p>  delay(1);}</p><p>

36、;  write_LCD_com(0x80+0x40);</p><p>  for(num=0;num<8;num++)</p><p>  {write_LCD_da(codetable1[num]);</p><p>  delay(1);}}</p><p>  void write_LCDsfm(uchar add,uchar

37、 date)</p><p>  {uchar ge,shi;</p><p>  shi=date/10;</p><p>  ge=date%10;</p><p>  write_LCD_com(0x80+0x40+add);</p><p>  write_LCD_da(0x30+shi);</p>

38、<p>  write_LCD_da(0x30+ge); }</p><p>  void write_LCDnyr(uchar add,uchar date)</p><p>  {uchar ge,shi;</p><p>  shi=date/10;</p><p>  ge=date%10;</p><

39、;p>  write_LCD_com(0x80+add);</p><p>  write_LCD_da(0x30+shi);</p><p>  write_LCD_da(0x30+ge);</p><p><b>  }</b></p><p>  void write_LCDweek(uchar week)&

40、lt;/p><p>  { write_LCD_com(0x80+0x0b);</p><p>  switch(week)</p><p>  { case 1:write_LCD_da('M'); </p><p>  write_LCD_da('O'); </p><p>  writ

41、e_LCD_da('N');</p><p><b>  break;</b></p><p>  case 2:write_LCD_da('T'); </p><p>  write_LCD_da('U'); </p><p>  write_LCD_da('E&

42、#39;); </p><p><b>  break;</b></p><p>  case 3:write_LCD_da('W');</p><p>  write_LCD_da('E'); </p><p>  write_LCD_da('D'); </p>

43、;<p><b>  break;</b></p><p>  case 4:write_LCD_da('T'); </p><p>  write_LCD_da('H'); </p><p>  write_LCD_da('U'); </p><p><

44、;b>  break;</b></p><p>  case 5:write_LCD_da('F'); </p><p>  write_LCD_da('R'); </p><p>  write_LCD_da('I'); </p><p><b>  break;&

45、lt;/b></p><p>  case 6:write_LCD_da('S'); </p><p>  write_LCD_da('T'); </p><p>  write_LCD_da('A'); </p><p><b>  break;</b></p

46、><p>  case 7:write_LCD_da('S');</p><p>  write_LCD_da('U'); </p><p>  write_LCD_da('N'); </p><p><b>  break;}}</b></p><p>

47、;  void write_LCD_Temperature(uchar add,uchar date)</p><p>  {uchar ge,shi;</p><p>  shi=date/10;</p><p>  ge=date%10;</p><p>  write_LCD_com(0x80+0x40+add);</p>

48、<p>  write_LCD_da(0x30+shi);</p><p>  write_LCD_da(0x30+ge);</p><p>  write_LCD_da(0xdf);</p><p>  write_LCD_da(0x43);</p><p><b>  }</b></p>&

49、lt;p>  void DS1302_write_byte(uchar a)</p><p>  { uchar i;</p><p><b>  ACC=a;</b></p><p><b>  RST=1;</b></p><p>  for(i=8;i>0;i--)</p&g

50、t;<p>  { IO=ACC0;</p><p><b>  SCLK=0;</b></p><p><b>  SCLK=1;</b></p><p>  ACC=ACC>>1;</p><p><b>  }}</b></p>

51、<p>  uchar DS1302_read_byte()</p><p><b>  {uchar j;</b></p><p><b>  RST=1;</b></p><p>  for(j=8;j>0;j--)</p><p>  { ACC7=IO;</p&g

52、t;<p><b>  SCLK=1;</b></p><p><b>  SCLK=0;</b></p><p>  ACC=ACC>>1;</p><p><b>  }</b></p><p>  return(ACC);</p>

53、<p><b>  }</b></p><p>  void DS1302_write_date(uchar addr,uchar dat)//寫(xiě)數(shù)據(jù)</p><p><b>  {RST=0;</b></p><p><b>  SCLK=0;</b></p><p&g

54、t;<b>  RST=1;</b></p><p>  DS1302_write_byte(addr);</p><p>  DS1302_write_byte(dat);</p><p><b>  SCLK=1;</b></p><p><b>  RST=0;</b>&

55、lt;/p><p><b>  }</b></p><p>  uchar DS1302_read_date(uchar addr)</p><p>  {uchar dat1,b;</p><p><b>  RST=0;</b></p><p><b>  SCLK

56、=0;</b></p><p><b>  RST=1;</b></p><p>  DS1302_write_byte(addr);</p><p>  dat1=DS1302_read_byte();</p><p><b>  SCLK=1;</b></p><

57、p><b>  RST=0;</b></p><p>  b=dat1/16*10+dat1%16;</p><p>  return(b);</p><p><b>  }</b></p><p>  void DS1302_Init()</p><p><b&

58、gt;  {SCLK=0;</b></p><p><b>  RST=0;</b></p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x8e,0x80); </p><p><b>  }</b>&

59、lt;/p><p>  void keyscan()</p><p><b>  { </b></p><p>  if(key1==0)</p><p><b>  {</b></p><p>  if(key1==0)</p><p><b&g

60、t;  {</b></p><p>  while(!key1);</p><p><b>  count++;</b></p><p>  if(count==11) count=1;</p><p>  switch(count)</p><p>  { case 1:TR0=0

61、;</p><p>  write_LCD_com(0x80+0x40+0x0f);</p><p>  write_LCD_da('M');</p><p>  m=miao/10*16+miao%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>

62、  DS1302_write_date(0x80,0x80|m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p><b>  break;</b></p><p>  case 2:write_LCD_com(0x80+0x40+0x0f);</p><p>  writ

63、e_LCD_da('F');</p><p><b>  break;</b></p><p>  case 3:write_LCD_com(0x80+0x40+0x0f); </p><p>  write_LCD_da('S');</p><p><b>  bre

64、ak;</b></p><p>  case 4:write_LCD_com(0x80+0x40+0x0f); </p><p>  write_LCD_da('W');</p><p><b>  break;</b></p><p>  case 5:write_LCD_com(

65、0x80+0x40+0x0f); </p><p>  write_LCD_da('R');</p><p><b>  break;</b></p><p>  case 6:write_LCD_com(0x80+0x40+0x0f);</p><p>  write_LCD_da(

66、'Y');</p><p><b>  break;</b></p><p>  case 7:write_LCD_com(0x80+0x40+0x0f); </p><p>  write_LCD_da('N');</p><p><b>  break; </b&

67、gt;</p><p>  case 8:write_LCD_com(0x80+0x40+0x0e); </p><p>  write_LCD_da('R'); delay(3);</p><p>  write_LCD_com(0x80+0x40+0x0f);</p><p>  write_LCD_da('

68、F'); delay(3);</p><p>  write_LCD_com(0x80+0x40+0x04);</p><p>  break; </p><p>  case 9:write_LCD_com(0x80+0x40+0x0e); </p><p>  write_LCD_da('R'); del

69、ay(3);</p><p>  write_LCD_com(0x80+0x40+0x0f); </p><p>  write_LCD_da('S'); delay(3);</p><p>  write_LCD_com(0x80+0x40+0x01);</p><p><b>  break;</b>

70、;</p><p>  case 10:write_LCD_com(0x80+0x40+0x0e);</p><p>  write_LCD_da('\0'); delay(3);</p><p>  write_LCD_com(0x80+0x40+0x0f);</p><p>  write_LCD_da('\0&#

71、39;); delay(3);</p><p><b>  delay(3);</b></p><p>  write_LCD_com(0x0c);</p><p><b>  TR0=1;</b></p><p>  m=(miao)/10*16+(miao)%10;</p><

72、;p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x80,0x00|m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p><b>  break;</b></p><p>  }}}if(

73、count!=0)</p><p><b>  {</b></p><p>  if(key2==0)</p><p>  {delay(10);</p><p>  if(key2==0)</p><p>  {while(!key2);</p><p>  switch

74、 (count)</p><p>  {case 1:miao++;</p><p>  if(miao==60)</p><p><b>  miao=0;</b></p><p>  write_LCDsfm(0x06,miao);</p><p>  m=miao/10*16+miao%10

75、;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x80,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  write_LCD_com(0x80+0x40+0x07);</p>&

76、lt;p><b>  break;</b></p><p>  case 2:fen++;</p><p>  if(fen==60)</p><p><b>  fen=0;</b></p><p>  write_LCDsfm(0x03,fen);</p><p>

77、  m=fen/10*16+fen%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x82,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  write_LCD_com(0x80+0x40

78、+0x04);</p><p><b>  break;</b></p><p>  case 3:shi++;</p><p>  if(shi==24)</p><p><b>  shi=0;</b></p><p>  write_LCDsfm(0x00,shi);&

79、lt;/p><p>  m=shi/10*16+shi%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x84,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  wri

80、te_LCD_com(0x80+0x40+0x01);</p><p><b>  break;</b></p><p>  case 4:week++;</p><p>  if(week==8)</p><p><b>  week=0;</b></p><p>  wr

81、ite_LCDweek(week);</p><p>  m=week/10*16+week%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x8a,m);</p><p>  DS1302_write_date(0x8e,0x80);</

82、p><p>  write_LCD_com(0x80+0x0d);</p><p><b>  break;</b></p><p>  case 5:ri++;</p><p>  if(ri==32)</p><p><b>  ri=0;</b></p>&l

83、t;p>  write_LCDnyr(0x08,ri);</p><p>  m=ri/10*16+ri%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x86,m);</p><p>  DS1302_write_date(0x8e,0x

84、80);</p><p>  write_LCD_com(0x80+0x09);</p><p><b>  break;</b></p><p>  case 6:yue++;</p><p>  if(yue==13)</p><p><b>  yue=1;</b>&l

85、t;/p><p>  write_LCDnyr(0x05,yue);</p><p>  m=yue/10*16+yue%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x88,m);</p><p>  DS1302_wri

86、te_date(0x8e,0x80);</p><p>  write_LCD_com(0x80+0x06);</p><p><b>  break;</b></p><p>  case 7:nian++;</p><p>  if(nian==51)</p><p><b>  n

87、ian=0;</b></p><p>  write_LCDnyr(0x02,nian);</p><p>  m=nian/10*16+nian%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x8c,m);</p>

88、<p>  DS1302_write_date(0x8e,0x80);</p><p>  write_LCD_com(0x80+0x03);</p><p><b>  break;</b></p><p>  case 8:ringfen++;</p><p>  if(ringfen==60)</p

89、><p>  ringfen=0;</p><p>  write_LCDsfm(0x03,ringfen);</p><p>  write_LCD_com(0x80+0x40+0x04);</p><p><b>  break;</b></p><p>  case 9:ringshi++;&l

90、t;/p><p>  if(ringshi==24)</p><p>  ringshi=0;</p><p>  write_LCDsfm(0x00,ringshi);</p><p>  write_LCD_com(0x80+0x40+0x01);</p><p>  break;}}}</p><

91、;p>  if(key3==0)</p><p>  {delay(10);</p><p>  if(key3==0)</p><p>  {while(!key3);</p><p>  switch (count)</p><p>  {case 1:miao--;</p><p>

92、  if(miao==-1)</p><p><b>  miao=59;</b></p><p>  write_LCDsfm(0x06,miao);</p><p>  m=miao/10*16+miao%10;</p><p>  DS1302_write_date(0x8e,0x00);</p>&

93、lt;p>  DS1302_write_date(0x80,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  write_LCD_com(0x80+0x40+0x07);</p><p><b>  break;</b></p><p>  case 2:f

94、en--;</p><p>  if(fen==-1)</p><p><b>  fen=59;</b></p><p>  write_LCDsfm(0x03,fen);</p><p>  m=fen/10*16+fen%10;</p><p>  DS1302_write_date(0x8

95、e,0x00);</p><p>  DS1302_write_date(0x82,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  write_LCD_com(0x80+0x40+0x04);</p><p><b>  break;</b></p>

96、<p>  case 3:shi--;</p><p>  if(shi==-1)</p><p><b>  shi=23;</b></p><p>  write_LCDsfm(0x00,shi);</p><p>  m=shi/10*16+shi%10;</p><p>  

97、DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x84,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  write_LCD_com(0x80+0x40+0x01);</p><p><b>  break

98、;</b></p><p>  case 4:week--;</p><p>  if(week==0)</p><p><b>  week=7;</b></p><p>  write_LCDweek(week);</p><p>  m=week/10*16+week%10;&l

99、t;/p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x8a,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  write_LCD_com(0x80+0x0d);</p><p>

100、<b>  break;</b></p><p>  case 5:ri--;</p><p><b>  if(ri==0)</b></p><p><b>  ri=31;</b></p><p>  write_LCDnyr(0x08,ri);</p>&l

101、t;p>  m=ri/10*16+ri%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x86,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  write_LCD_com(0x80

102、+0x09);</p><p><b>  break;</b></p><p>  case 6:yue--;</p><p>  if(yue==0)</p><p><b>  yue=12;</b></p><p>  write_LCDnyr(0x05,yue);&

103、lt;/p><p>  m=yue/10*16+yue%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x88,m);</p><p>  DS1302_write_date(0x8e,0x80);</p><p>  wri

104、te_LCD_com(0x80+0x06);</p><p><b>  break;</b></p><p>  case 7:nian--;</p><p>  if(nian==-1)</p><p><b>  nian=50;</b></p><p>  write

105、_LCDnyr(0x02,nian);</p><p>  m=nian/10*16+nian%10;</p><p>  DS1302_write_date(0x8e,0x00);</p><p>  DS1302_write_date(0x8c,m);</p><p>  DS1302_write_date(0x8e,0x80);<

106、/p><p>  write_LCD_com(0x80+0x03);</p><p><b>  break;</b></p><p>  case 8:ringfen--;</p><p>  if(ringfen==-1)</p><p>  ringfen=59;</p><

107、p>  write_LCDsfm(0x03,ringfen);</p><p>  write_LCD_com(0x80+0x40+0x04);</p><p><b>  break;</b></p><p>  case 9:ringshi--;</p><p>  if(ringshi==-1)</p&

108、gt;<p>  ringshi=23;</p><p>  write_LCDsfm(0x00,ringshi);</p><p>  write_LCD_com(0x80+0x40+0x01);</p><p>  break;}}}}}</p><p>  void set_dingshiqi()</p>&

109、lt;p>  {TMOD=0x01;</p><p>  TH0=64536/256;</p><p>  TL0=64536%256;</p><p><b>  EA=1;</b></p><p><b>  ET0=1;</b></p><p><b>

110、  TR0=1;</b></p><p><b>  } </b></p><p>  void gettime()</p><p>  { beep=0;</p><p>  temp=Read_Temperature();</p><p>  miao=DS1302_read_d

111、ate(0x81);</p><p>  fen=DS1302_read_date(0x83);</p><p>  shi=DS1302_read_date(0x85);</p><p>  week=DS1302_read_date(0x8b);</p><p>  ri=DS1302_read_date(0x87);</p>

112、<p>  yue=DS1302_read_date(0x89);</p><p>  nian=DS1302_read_date(0x8d);</p><p>  write_LCDsfm(0x00,shi);</p><p>  write_LCDsfm(0x03,fen);</p><p>  write_LCDsfm(0

113、x06,miao);</p><p>  if(miao==0&&fen==0&&shi>8&&shi<21)</p><p>  {yinyue();</p><p><b>  }</b></p><p>  if(fen==ringfen&a

114、mp;&shi==ringshi)</p><p>  {yinyue();if(key4==0){ringshi=0;ringfen=0;}</p><p><b>  }</b></p><p>  write_LCDweek(week);</p><p>  write_LCDnyr(0x08,ri);&l

115、t;/p><p>  write_LCDnyr(0x05,yue);</p><p>  write_LCDnyr(0x02,nian);</p><p>  write_LCD_Temperature(0x09,temp);</p><p><b>  }</b></p><p>  void ma

116、in()</p><p>  { Init_LCD();</p><p>  DS1302_Init();</p><p>  set_dingshiqi();</p><p><b>  while(1)</b></p><p>  { keyscan();}</p><p&

117、gt;<b>  }</b></p><p>  void timer0() interrupt 1 </p><p>  { TH0=64536/256;</p><p>  TL0=64536%256;</p><p>  gettime();</p><p>  keyscan( );}&l

118、t;/p><p><b>  Ds18b20.h</b></p><p>  sbit DQ=P1^7;</p><p>  //unsigned char wendu; </p><p>  //unsigned char tempbuf[3];</p><p>  void delay0(un

119、signed char z)</p><p>  { while(z--); }</p><p>  void init_ds18b20()</p><p><b>  {</b></p><p>  unsigned char x=0;</p><p>  DQ=1; //DQ復(fù)位

120、</p><p>  delay0(8);</p><p>  DQ=0; //單片機(jī)將DQ拉低</p><p>  delay0(80); //延時(shí)480us~960us</p><p>  DQ=1; //拉高總線</p><p>  delay0(14); //等待15us~6

121、0u。</p><p><b>  x=DQ;</b></p><p>  delay0(80); //低電平至少要持續(xù)60~240us</p><p><b>  }</b></p><p>  void write_onechar(unsigned char dat)</p>

122、<p><b>  {</b></p><p>  unsigned char i=0;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  DQ=0;</b></p><

123、p>  DQ=dat&0x01;</p><p>  delay0(15);</p><p><b>  DQ=1;</b></p><p>  dat=dat>>=1;</p><p><b>  }</b></p><p>  delay0(5)

124、;</p><p><b>  }</b></p><p>  unsigned char read_onechar()</p><p><b>  {</b></p><p>  unsigned char i=0;unsigned char dat=0;</p><p>

125、  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>  DQ=1;</b></

126、p><p>  if(DQ) dat|=0x80;</p><p>  delay0(20);</p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  unsigne

127、d char Read_Temperature()</p><p><b>  {</b></p><p>  unsigned char a,b;</p><p>  unsigned char temp_value;</p><p>  init_ds18b20();</p><p>  wr

128、ite_onechar(0xCC); //跳過(guò)讀序列號(hào)的操作</p><p>  write_onechar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換</p><p>  init_ds18b20();</p><p>  write_onechar(0xCC); //跳過(guò)讀序列號(hào)的操作</p><p>  write_onechar(0xBE);

129、//讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度</p><p>  a=read_onechar();</p><p>  b=read_onechar();</p><p><b>  b=b<<4;</b></p><p><b>  a=a>>4;</b>&l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論