電子電工課程設計(多功能數(shù)字時鐘--萬年歷)_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、 </p><p>  專 業(yè): 電子信息工程 </p><p>  姓 名:   </p><p>  班 級: </p><p>  學 號: <

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

20、流電阻,數(shù)據(jù)端口接P3^7.</p><p>  Proteus仿真原理總框圖:</p><p><b>  硬件電路實現(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; //設置鍵</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時鐘線</p><p>  sbit RST=P1^0;

24、//DS1302復位線</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)//寫數(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復位

120、</p><p>  delay0(8);</p><p>  DQ=0; //單片機將DQ拉低</p><p>  delay0(80); //延時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); //跳過讀序列號的操作</p><p>  write_onechar(0x44); // 啟動溫度轉(zhuǎn)換</p><p>  init_ds18b20();</p><p>  write_onechar(0xCC); //跳過讀序列號的操作</p><p>  write_onechar(0xBE);

129、//讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論