版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬(wàn)年歷課程設(shè)計(jì)--萬(wàn)年歷電子時(shí)鐘
- 多功能數(shù)字萬(wàn)年歷課程設(shè)計(jì)
- 多功能電子萬(wàn)年歷課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--多功能數(shù)字萬(wàn)年歷
- 數(shù)字萬(wàn)年歷課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--多功能萬(wàn)年歷
- 數(shù)字萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告--電子萬(wàn)年歷
- 電子萬(wàn)年歷課程設(shè)計(jì) (2)
- proteus課程設(shè)計(jì)--電子萬(wàn)年歷
- 電子萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 單片機(jī)萬(wàn)年歷課程設(shè)計(jì)--基于1602液晶顯示的電子時(shí)鐘萬(wàn)年歷
- c語(yǔ)音電子萬(wàn)年歷課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論