基于51單片機(jī)溫度與時鐘檢測的設(shè)計與實現(xiàn)_第1頁
基于51單片機(jī)溫度與時鐘檢測的設(shè)計與實現(xiàn)_第2頁
基于51單片機(jī)溫度與時鐘檢測的設(shè)計與實現(xiàn)_第3頁
基于51單片機(jī)溫度與時鐘檢測的設(shè)計與實現(xiàn)_第4頁
基于51單片機(jī)溫度與時鐘檢測的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

目錄

1產(chǎn)品功能分析.....................................................1

2設(shè)計方案遴選.....................................................1

2.1單片機(jī)的選擇...............................................1

2.2顯示方案的選擇.............................................1

2.3時鐘模塊的選擇.............................................1

2.4溫度傳感器的選擇...........................................1

2.5系統(tǒng)框圖設(shè)計...............................................1

3產(chǎn)品硬件設(shè)計.....................................................2

3.1系統(tǒng)原理圖及工作原理........................................2

3.2STC89C52單片機(jī)核心電路設(shè)計................................2

3.3按鍵控制電路設(shè)計..........................................4

3.4時鐘電路...................................................5

3.5測溫電路...................................................5

3.6LCD1602液晶顯示模塊電路...................................6

4產(chǎn)品軟件設(shè)計......................................................7

4.1主程序流程圖................................................7

4.2LCD1602液晶顯示程序設(shè)計....................................7

4.3產(chǎn)品程序清單...............................................8

5產(chǎn)品使用說明......................................................8

5.1產(chǎn)品裝配圖................................................8

5.2硬件調(diào)試...................................................9

5.3產(chǎn)品使用說明.............................................10

6產(chǎn)品設(shè)計技術(shù)標(biāo)準(zhǔn)..............................................10

參考資料..........................................................11

附錄..............................................................12

附錄1元器件清單..............................................12

I

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

附錄2電路原理圖..............................................12

附錄3PCB設(shè)計圖.............................................14

附錄4產(chǎn)品實物圖.............................................14

附錄5主程序代碼.............................................15

II

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

基于51單片機(jī)溫度與時鐘檢測的設(shè)計與實現(xiàn)

1產(chǎn)品功能分析

從古至今,人們的日常生活和工作方式都離不開對時間的把控和對溫度

的了解。隨著科技的發(fā)展,電子溫度時鐘逐漸的成為了人們的日常計時工具。

本電子時鐘在硬件上面采用了STC89C52單片機(jī)作為核心主導(dǎo),由DS1302時鐘

芯片作為時間信號,DS18B20傳感器接收溫度值,1602液晶顯示溫度時間。

2設(shè)計方案遴選

2.1單片機(jī)的選擇

采取了單片機(jī)作為系統(tǒng)控制器。因為具有可穩(wěn)當(dāng)強(qiáng)、性價比高、電壓低、

功耗底等優(yōu)點得到了迅速發(fā)展和推廣,單片機(jī)算術(shù)功能強(qiáng)大,自由度大,軟件

編程靈活,可以使用軟件編程功能實現(xiàn)各種邏輯功能,并且其功耗低,體積小

等優(yōu)點。

2.2顯示方案的選擇

方案一:采用LED數(shù)碼管動態(tài)掃描,價格雖適中,其顯示數(shù)字也合適,并

且和單片機(jī)相互連接時占用的接口線少,但因為其需要借助74LS164移位寄存

器進(jìn)行移位,在電路調(diào)試時會有許多的阻礙,所以不采用其作為顯示。

方案二:采用LCD液晶顯示屏,因為其顯示功能強(qiáng)大,也可以顯示許多文

字和圖形。顯示豐富、清晰明了,對使用電子時鐘來說,采用1602的液晶屏

就行,價格也還算實惠,所以采用LCD1602液晶顯示屏作為顯示模塊是最佳的

選擇。

2.3時鐘模塊的選擇

采用DS1302時鐘芯片來使時鐘實現(xiàn),DS1302是一種高性能、低功耗的實

時時鐘電路,它能讓時、分、秒進(jìn)行計時,工作時的電壓為2.5V~5.5V。采用

了三線接口和CPU同步進(jìn)行通信,并且可以一次傳送多個字節(jié)的時鐘信號。

DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。其增加了主電

源/后背電源雙電源引腳,同時提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。

其主要的特點是采用串行數(shù)據(jù)傳輸,可以為掉電保護(hù)電源提供可編程的充電功

能,并且可以關(guān)閉充電功能。因此,本設(shè)計中采用DS1302提供時鐘

1

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

2.4溫度傳感器的選擇

采用數(shù)字單片智能溫度傳感器,數(shù)字溫度傳感器包含A/D轉(zhuǎn)換器、溫度傳

感器、信號處理器、存儲器(或寄存器)和接口電路等模塊。DS18B20是美國

DALLAS公司生產(chǎn)的一線式數(shù)字溫度傳感器,它的溫度測量范圍在-55℃~

125℃之間,測溫分辨率可以到達(dá)0.0625℃,被測溫度用符號擴(kuò)展的16位數(shù)字量

方式并以串行形式輸出,其工作電源既能采用寄生電源方式產(chǎn)生,也可遠(yuǎn)端引

入。多個DS18B20還可以將數(shù)據(jù)線并聯(lián)到CPU的同一根數(shù)據(jù)線上,CPU只需一

個IO口就能與多個DS18B20進(jìn)行通信,占用CPU的端口較少,并且制作簡

單,外接電路簡單

2.5系統(tǒng)框圖設(shè)計

產(chǎn)品設(shè)計系統(tǒng)框圖如下圖1所示:

按鍵控制電路

單片機(jī)

時鐘電路最小系

1602液晶顯

統(tǒng)

示電路

測溫電路

圖1系統(tǒng)框圖

3產(chǎn)品硬件設(shè)計

3.1系統(tǒng)原理圖及工作原理

整個系統(tǒng)使用了STC89C52單片機(jī)作為核心器件,配合多個器件,構(gòu)成單

片機(jī)的最小系統(tǒng)。其它模塊圍繞著單片機(jī)最小系統(tǒng)展開。

其中包括,顯示設(shè)備使用1602液晶,可以同時顯示時、分、秒和溫度值

等基本信息;時鐘模塊采用DS1302芯片,初始化之后,就會開始運行計算時

間,單片機(jī)只需進(jìn)行時間信息的讀取即可;溫度傳感器使用DS18B20,溫度值

可以精確到小數(shù)后一位。

本設(shè)計還設(shè)置了3個按鈕作為可操作輸入設(shè)備,可以對當(dāng)前設(shè)置時間進(jìn)行

2

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

修改設(shè)置;最后是供電采用常用的USB5V進(jìn)行供電

圖2電路原理圖

3.2STC89C52單片機(jī)核心電路設(shè)計

STC89C52單片機(jī)可以兼容MCS51系統(tǒng),有著8K可反復(fù)擦寫(>1000次)

FlashROM,有32個雙向I/O口,256x8bit內(nèi)部RAM,3個16位可編程定時/

計數(shù)器中斷,其時鐘頻率為0-24MHZ,有兩個串行中斷兩個外部中斷源一個有

八個中斷源,兩個可讀寫中口線,三級的加密位,有著低功耗空閑和掉電模

式,軟件有設(shè)置睡眠和喚醒的功能。并且STC89C52有PDIP、PQFP/TQFP及

PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。

STC89C52的最小系統(tǒng)如圖3所示,整個最小系統(tǒng)由晶振電路部分、復(fù)位電

路部分和電源電路等三個部分組成。

ST89C52單片機(jī)引腳圖如下圖3所示:

3

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

圖3STC89C52單片機(jī)引腳圖

STC89C52單片機(jī)原理圖實物圖如下圖4所示:

圖4STC89C52單片機(jī)實物圖

ST89C52單片機(jī)原理圖個引腳功能如下所示:

端口引腳第二功能注釋

P3.0RXD串行口數(shù)據(jù)接收端

P3.1TXD串行口數(shù)據(jù)發(fā)送端

P3.2/INT0外中斷請求0

P3.3/INT1外中斷請求1

P3.4T0定時/計數(shù)器0外部計數(shù)信號輸入

P3.5T1定時/計數(shù)器1外部計數(shù)信號輸入

P3.6/WR外部RAM寫選通信號輸出

P3.7/RD外部RAM讀選通信號輸出

4

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

圖5STC89C52單片機(jī)原理圖

3.3按鍵控制電路設(shè)計

本電路總共設(shè)計了三個按鈕都采用了獨立鍵盤的方式

時間鍵:按住可以依次選擇所要調(diào)試的時分秒。

加鍵:按一下就可以讓時間鍵所選中的時分秒加一個時間點。

減鍵:按一下就可以讓時間鍵所選中的時分秒減一個時間點。

按鍵的連接圖如下圖6所示

圖6按鍵原理圖

5

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

3.4時鐘電路

時鐘模塊的電路原理圖如下圖7所示,1,4腳都分別接電路的VCC和GND

上,這2個是芯片工作的電源輸入腳。第8腳接了一個紐扣電池當(dāng)做時鐘芯片

的后備電池,可以保證斷電后時鐘繼續(xù)行走。第2腳和第3腳接了一個

32.768K的晶振給芯片提供時鐘脈沖,最后,第5、6、7依次連接到單片機(jī)的

IO口,進(jìn)行數(shù)據(jù)的傳輸.

圖7時鐘電路原理圖

3.5測溫電路

測溫電路原理圖如下圖8所示,其電路可以與DS1822程序兼容,他的每

個設(shè)備內(nèi)部ROM上面都燒錄了一個專屬的64位序列號,不需要外圍的元器

件,可供的電壓范圍在3.0-5.5伏之間。

圖8測溫電路原理圖

3.6LCD1602液晶顯示模塊電路

液晶顯示器其體積小、重量輕、功耗低的特色。由于其功耗低、顯示信息

6

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

量大、無輻射、使用時間長,已被廣泛應(yīng)用,本系統(tǒng)顯示采用了液晶模塊1602

可以顯示2行16個字符,能十分方便的顯示一些常用的符號、英文字母或者

阿拉伯?dāng)?shù)字。通過自定義還可以顯示一些十分簡單的漢字。

LCD1602引腳功能表如圖所示:

編號符號引腳說明

1VSS電源地極

2VDD電源正極

3VL液晶顯示偏壓

4RS數(shù)據(jù)/命令選擇

5R/W讀/寫選擇

6E使能信號

7D0-D7數(shù)據(jù)

8BLA背光源正極

9BLK背光源負(fù)極

圖9液晶顯示器電路原理圖

圖10液晶顯示器實物圖

7

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

4產(chǎn)品軟件設(shè)計

本產(chǎn)品采用了C語言和KEILC51的編程環(huán)境,運用了相對簡單的模塊化

設(shè)計,形成了整體的程序。

4.1主程序流程圖

開始

液晶初始化

時鐘芯片初始化

讀取時間信息

顯示時間信息

讀取溫度值

顯示溫度值

設(shè)置按鍵是

按下?

否進(jìn)入時鐘設(shè)置

結(jié)束

圖11程序流程圖

8

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

4.2LCD1602液晶顯示程序設(shè)計

開始

定位行列坐標(biāo)

顯示一個字符

否數(shù)據(jù)顯

示完?

結(jié)束

圖12液晶顯示流程圖

液晶顯示在一開始顯示之前,必須要先確定一個位置,這個代表在其中哪

個方位顯示,好比在第二行第五列這個位置。只要完成這個坐標(biāo)定位后就可以

顯示其中的內(nèi)容。要注意它在顯示的時候是一個定位一個定位的完成的。每當(dāng)

顯示一個字符串或者一個數(shù)字的時候,只需要在最開始的時候完成好一個定

位,在這之后地每一個字符串或者數(shù)字都會跳轉(zhuǎn)到后面一個位置,不需要對其

每一個字符取定位。

4.3產(chǎn)品程序清單

初始化

完成產(chǎn)品軟件

顯示程序

主程序流程圖設(shè)計始

main.c

時鐘程序

溫度傳感器程序

圖13程序清單

9

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

通過相應(yīng)的軟件對所需要的產(chǎn)品進(jìn)行程序編寫,編寫完成后對其進(jìn)行相

應(yīng)的編譯測試,如編譯失敗,則進(jìn)行相應(yīng)修改,編譯成功則通過相應(yīng)軟件燒錄

到ST89C52單片機(jī)芯片內(nèi)。

圖14編譯成功圖

5產(chǎn)品使用說明

5.1產(chǎn)品裝配圖

本產(chǎn)品STC89C52單片機(jī)、溫度傳感器、時鐘芯片、液晶等器件組成。

裝配圖如下:

10

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

1602液晶顯示

排阻ST89C52

溫度傳感器

30pF電容12M晶振

電阻獨石電容

時鐘芯片

紐扣電池

晶振

加鍵

電源開關(guān)減鍵

設(shè)置時間按

圖15裝配圖

5.2硬件調(diào)試

在組裝前所以的元器件都應(yīng)該測試一遍,以確保所用元器件全都合格。

分立元件時應(yīng)仔細(xì)辨明器件的正反向,標(biāo)志應(yīng)該放置在比較容易看到的地

方以方便檢查和調(diào)試。

上電檢測產(chǎn)品是否正常運轉(zhuǎn)。

11

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

將所寫的程序燒錄單片機(jī)中。

程序燒錄成功的界面圖如下:

圖16程序燒錄成功圖

5.3產(chǎn)品使用說明

1接通電源,然后按下開關(guān)鍵,溫度傳感器和時鐘模塊自動檢測溫度和

顯示時間。

2首次接通電源需要手動去調(diào)試時間,溫度不需要。

3當(dāng)調(diào)試好后其顯示屏?xí)凑罩車沫h(huán)境溫度和所設(shè)置的時間準(zhǔn)確播

報。

6產(chǎn)品設(shè)計技術(shù)標(biāo)準(zhǔn)

[1]J-STD-001E電氣與電子組件的焊接要求

[2]IPC-A-610D(中文版),IPC-A-610E電子組件的可接受性要求

12

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

[3]IPC-7711/21電子組件和電路板的返工&返修

[4]GB/T11457-2006信息技術(shù)軟件工程術(shù)語;

[5]GB/T8566-2007信息技術(shù)軟件生存周期過程標(biāo)準(zhǔn);

[6]GB/T8567-2006計算機(jī)軟件文檔編制規(guī)范。

13

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

參考資料

[1]鄭郁正.單片機(jī)原理及應(yīng)用.成都:四川大學(xué)出版社,2003.9.

[2]王懷平,王仁波,胡開明.Proteus仿真設(shè)計基于單片機(jī)AT89C51的電子萬年歷[J].科技廣場,2008,

10:197-198.

[3]潘永雄,沙河.電子線路CAD實用教程(第三版).西安:西安電子科技大學(xué)出版社,2007.7

(2009.8重?。?

[4]譚浩強(qiáng).C程序設(shè)計(第三版).北京:清華大學(xué)出版社,2005(2007重?。?

14

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

附錄

附錄1元器件清單

基于51單片機(jī)溫度檢測與時鐘的設(shè)計與實現(xiàn)20移動互聯(lián)1班楊文斌

序號元件標(biāo)號元件名稱規(guī)格數(shù)量

1BT1電池1

2C1電解電容10uF1

3C2,C3獨石電容30pF2

4J1po1

K1,K2,

5開關(guān)3

K3

6LCD1液晶16021

7R1電阻1031

8R3電阻1031

9R4電位器10K1

10R5電阻4.7K1

11SW1開關(guān)1

12U1單片機(jī)STC89C521

13U2時鐘芯片1

14U3溫度傳感器DS18B201

15X1晶振12M1

16X2晶振32.768K1

15

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

附錄2電路原理圖

16

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

附錄3PCB設(shè)計圖

17

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

附錄4產(chǎn)品實物圖

18

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

附錄5主程序代碼

基于51單片機(jī)溫度檢測與時鐘的設(shè)計與實現(xiàn)

//移動互聯(lián)應(yīng)用技術(shù)1班楊文斌

#include<reg52.h>

#include<intrins.h>

#defineucharunsignedchar//以后unsignedchar就可以用uchar代

#defineuintunsignedint//以后unsignedint就可以用uint代替

sbitLcdRs_P=P2^7;//1602液晶的RS管腳

sbitLcdRw_P=P2^6;//1602液晶的RW管腳

sbitLcdEn_P=P2^5;//1602液晶的EN管腳

sbitRST_P=P1^3;//時鐘芯片DS1302的RST管腳

sbitSDA_P=P1^2;//時鐘芯片DS1302的SDA管腳

sbitSCK_P=P1^1;//時鐘芯片DS1302的SCK管腳

sbitKeySet_P=P3^2;//設(shè)置時間按鍵

sbitKeyDown_P=P3^3;//減按鍵

sbitKeyUp_P=P3^4;//加按鍵

sbitDQ=P2^0;//DS18B20傳感器的引腳定義

ucharTimeBuff[3]={18,30,50};//時間數(shù)組

//TimeBuff[0]代表小時,范圍00-23

//TimeBuff[1]代表分鐘,范圍00-59

//TimeBuff[2]代表秒鐘,范圍00-59

/*********************************************************/

//毫秒級的延時函數(shù),time是要延時的毫秒數(shù)

/*********************************************************/

voidDelayMs(uinttime)

{

uinti,j;

for(i=0;i<time;i++)

for(j=0;j<112;j++);

}

/*********************************************************/

//延時15微秒

/*********************************************************/

19

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

voidDelay15us(void)

{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

/*********************************************************/

//復(fù)位DS18B20(初始化)

/*********************************************************/

voidDS18B20_ReSet(void)

{

uchari;

DQ=0;

i=240;

while(--i);

DQ=1;

i=30;

while(--i);

while(~DQ);

i=4;

while(--i);

}

/*********************************************************/

//向DS18B20寫入一個字節(jié)

/*********************************************************/

voidDS18B20_WriteByte(uchardat)

{

ucharj;

20

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

ucharbtmp;

for(j=0;j<8;j++)

{

btmp=0x01;

btmp=btmp<<j;

btmp=btmp&dat;

if(btmp>0)//寫1

{

DQ=0;

Delay15us();

DQ=1;

Delay15us();

Delay15us();

Delay15us();

Delay15us();

}

else//寫0

{

DQ=0;

Delay15us();

Delay15us();

Delay15us();

Delay15us();

DQ=1;

Delay15us();

}

}

}

/*********************************************************/

//讀取溫度值

/*********************************************************/

intDS18B20_ReadTemp(void)

{

ucharj;

intb,temp=0;

DS18B20_ReSet();//產(chǎn)生復(fù)位脈

DS18B20_WriteByte(0xcc);//忽略ROM指令

DS18B20_WriteByte(0x44);//啟動溫度轉(zhuǎn)換指令

21

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

DS18B20_ReSet();//產(chǎn)生復(fù)位脈

DS18B20_WriteByte(0xcc);//忽略ROM指令

DS18B20_WriteByte(0xbe);//讀取溫度指令

for(j=0;j<16;j++)//讀取溫度數(shù)量

{

DQ=0;

_nop_();

_nop_();

DQ=1;

Delay15us();

b=DQ;

Delay15us();

Delay15us();

Delay15us();

b=b<<j;

temp=temp|b;

}

temp=temp*0.0625*10;//合成溫度值并放大10倍

return(temp);//返回檢測到的溫度值

}

/*********************************************************/

//1602液晶寫命令函數(shù),cmd就是要寫入的命令

/*********************************************************/

voidLcdWriteCmd(ucharcmd)

{

LcdRs_P=0;

LcdRw_P=0;

LcdEn_P=0;

P0=cmd;

DelayMs(2);

LcdEn_P=1;

DelayMs(2);

LcdEn_P=0;

}

/*********************************************************/

//1602液晶寫數(shù)據(jù)函數(shù),dat就是要寫入的數(shù)據(jù)

/*********************************************************/

22

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

voidLcdWriteData(uchardat)

{

LcdRs_P=1;

LcdRw_P=0;

LcdEn_P=0;

P0=dat;

DelayMs(2);

LcdEn_P=1;

DelayMs(2);

LcdEn_P=0;

}

/*********************************************************/

//1602液晶初始化函數(shù)

/*********************************************************/

voidLcdInit()

{

LcdWriteCmd(0x38);//16*2顯示,5*7點陣,8位數(shù)據(jù)口

LcdWriteCmd(0x0C);//開顯示,不顯示光標(biāo)

LcdWriteCmd(0x06);//地址加1,當(dāng)寫入數(shù)據(jù)后光標(biāo)右移

LcdWriteCmd(0x01);//清屏

}

/*********************************************************/

//液晶光標(biāo)定位函數(shù)

/*********************************************************/

voidLcdGotoXY(ucharline,ucharcolumn)

{

//第一行

if(line==0)

LcdWriteCmd(0x80+column);

//第二行

if(line==1)

LcdWriteCmd(0x80+0x40+column);

}

/*********************************************************/

//液晶輸出字符串函數(shù)

/*********************************************************/

voidLcdPrintStr(uchar*str)

{

while(*str!='\0')

23

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

LcdWriteData(*str++);

}

/*********************************************************/

//液晶顯示內(nèi)容的初始化

/*********************************************************/

voidLcdShowInit()

{

LcdGotoXY(0,0);

LcdPrintStr("T=C");

LcdGotoXY(1,0);

LcdPrintStr("::")

LcdGotoXY(0,10);//溫度單位攝氏度上面的圓圈符號

LcdWriteData(0xdf);

}

/*********************************************************/

//液晶輸出數(shù)字

/*********************************************************/

voidLcdPrintNum(ucharnum)

{

LcdWriteData(num/10+48);//十位

LcdWriteData(num%10+48);//個位

}

/*********************************************************/

//刷新時間顯示

/*********************************************************/

voidFlashTime()

{

LcdGotoXY(1,4);//小時

LcdPrintNum(TimeBuff[0]);

LcdGotoXY(1,7);//分鐘

LcdPrintNum(TimeBuff[1]);

LcdGotoXY(1,10);//秒鐘

LcdPrintNum(TimeBuff[2]);

}

/*********************************************************/

//溫度值的顯示

/*********************************************************/

24

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

voidLcdPrintTemp(inttemp)

{

if(temp<0)

{

LcdWriteData('-');//顯示負(fù)號

temp=0-temp;//負(fù)數(shù)轉(zhuǎn)為正數(shù)

}

else

{

LcdWriteData(temp/1000+0x30);//顯示百位

}

LcdWriteData(temp%1000/100+0x30);//顯示十位

LcdWriteData(temp%100/10+0x30);//顯示個位

LcdWriteData('.');//顯示小數(shù)點

LcdWriteData(temp%10+0x30);//顯示小數(shù)后一位小數(shù)

}

/*********************************************************/

//初始化DS1302

/*********************************************************/

voidDS1302_Init(void)

{

RST_P=0;//RST腳置低

SCK_P=0;//SCK腳置低

SDA_P=0;//SDA腳置低

}

/*********************************************************/

//從DS1302讀出一字節(jié)數(shù)據(jù)

/*********************************************************/

ucharDS1302_Read_Byte(ucharaddr)

{

uchari;

uchartemp;

RST_P=1;

/*寫入目標(biāo)地址:addr*/

for(i=0;i<8;i++)

{

if(addr&0x01)

SDA_P=1;

else

25

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

SDA_P=0;

SCK_P=1;

_nop_();

SCK_P=0;

_nop_();

addr=addr>>1;

}

/*讀出該地址的數(shù)據(jù)*/

for(i=0;i<8;i++)

{

temp=temp>>1;

if(SDA_P)

temp|=0x80;

else

temp&=0x7F;

SCK_P=1;

_nop_();

SCK_P=0;

_nop_();

}

RST_P=0;

returntemp;

}

/*********************************************************/

//向DS1302寫入一字節(jié)數(shù)據(jù)

/*********************************************************/

voidDS1302_Write_Byte(ucharaddr,uchardat)

{

uchari;

RST_P=1;

/*寫入目標(biāo)地址:addr*/

for(i=0;i<8;i++)

{

26

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

if(addr&0x01)

SDA_P=1;

else

SDA_P=0;

SCK_P=1;

_nop_();

SCK_P=0;

_nop_();

addr=addr>>1;

}

/*寫入數(shù)據(jù):dat*/

for(i=0;i<8;i++)

{

if(dat&0x01)

SDA_P=1;

else

SDA_P=0;

SCK_P=1;

_nop_();

SCK_P=0;

_nop_();

dat=dat>>1;

}

RST_P=0;

}

/*********************************************************/

//向DS1302寫入時間數(shù)據(jù)

/*********************************************************/

voidDS1302_Write_Time()

{

uchari;

uchartemp1;

uchartemp2;

for(i=0;i<3;i++)//十進(jìn)制轉(zhuǎn)BCD碼

{

temp1=(TimeBuff[i]/10)<<4;

27

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

temp2=TimeBuff[i]%10;

TimeBuff[i]=temp1+temp2;

}

DS1302_Write_Byte(0x8E,0x00);//關(guān)閉寫保護(hù)

DS1302_Write_Byte(0x80,0x80);//暫停時鐘

DS1302_Write_Byte(0x84,TimeBuff[0]);//時

DS1302_Write_Byte(0x82,TimeBuff[1]);//分

DS1302_Write_Byte(0x80,TimeBuff[2]);//秒

DS1302_Write_Byte(0x80,TimeBuff[2]&0x7F);//運行時鐘

DS1302_Write_Byte(0x8E,0x80);//打開寫保護(hù)

}

/*********************************************************/

//從DS1302讀出時間數(shù)據(jù)

/*********************************************************/

voidDS1302_Read_Time()

{

uchari;

TimeBuff[0]=DS1302_Read_Byte(0x85);//時

TimeBuff[1]=DS1302_Read_Byte(0x83);//分

TimeBuff[2]=(DS1302_Read_Byte(0x81))&0x7F;//秒

for(i=0;i<3;i++)//BCD轉(zhuǎn)十進(jìn)制

{

TimeBuff[i]=(TimeBuff[i]/16)*10+TimeBuff[i]%16;

}

}

/*********************************************************/

//按鍵掃描(設(shè)置時間)

/*********************************************************/

voidKeyScanf()

{

if(KeySet_P==0)

{

LcdWriteCmd(0x0f);//啟動光標(biāo)閃爍

LcdGotoXY(1,5);//定位光標(biāo)到小時閃爍

DelayMs(10);//延時等待,消除按鍵按下的抖動

28

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計

while(!KeySet_P);//等待按鍵釋放

DelayMs(10);//延時等待,消除按鍵松開的抖動

/*調(diào)整小時*/

while(1)

if(KeyDown_P==0)//如果減按鍵被下去

{

if(TimeBuff[0]>0)//判斷小時是否大于0

TimeBuff[0]--;//是的話就減去1

LcdGotoXY(1,4);//光標(biāo)定位到小時的位置

LcdPrintNum(TimeBuff[0]);//刷新顯示改變后的小時

LcdGotoXY(1,5);//定位光標(biāo)到小時閃爍

{

if(TimeBuff[0]<23)//判斷小時是否小于23

TimeBuff[0]++;//是的話就加

溫馨提示

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

評論

0/150

提交評論