基于單片機(jī)的測溫時鐘設(shè)計_第1頁
基于單片機(jī)的測溫時鐘設(shè)計_第2頁
基于單片機(jī)的測溫時鐘設(shè)計_第3頁
基于單片機(jī)的測溫時鐘設(shè)計_第4頁
基于單片機(jī)的測溫時鐘設(shè)計_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、專業(yè)課程綜合設(shè)計專業(yè)課程綜合設(shè)計題題目目基于基于 AT89S52、DS18B20 的測溫和時鐘設(shè)計的測溫和時鐘設(shè)計學(xué)生姓名學(xué)號學(xué)院專業(yè)指導(dǎo)教師二一二年六月一日二一二年六月一日基于 AT89S52、DS18B20 的測溫和時鐘設(shè)計摘要摘要:基于單片機(jī)的溫度檢測與時鐘系統(tǒng)。溫度檢測系統(tǒng)也是在日常生活和工業(yè)應(yīng)用非常廣泛的工具, 能實時采集周圍的溫度信息進(jìn)行顯示, 此系統(tǒng)是基于 AT89S52 單片機(jī)設(shè)計的, 包含數(shù)碼管顯示模塊, DS18B20溫度采集模塊,鍵盤輸入模塊。AT89S52 作為控制核心,具有功耗低,功能強等特點, 電壓可選 3 到 5V電源供電。 顯示模塊采用數(shù)碼管顯示, 對于顯示數(shù)字

2、最為合適,而且與單片機(jī)連線簡單,占用 I/O 口相對較少。溫度檢測模塊采用數(shù)字式溫度傳感器 DS18B20,該芯片具有精度高,測量范圍廣等優(yōu)點,易與單片機(jī)連接,模塊電路組成簡單。關(guān)鍵詞:關(guān)鍵詞:ST89S52;DS18B20;溫度檢測;時鐘1 設(shè)計要求1) 實時溫度檢測并顯示。2) 時鐘能夠顯示時,分,秒,并具有可調(diào)節(jié)性。2 系統(tǒng)方案選擇與論證AT89S52 單片機(jī)作為核心控制體,該單片機(jī)具有高可靠,超低價,低功耗,無法解密等優(yōu)點。該單片機(jī)屬于雙列直插式封裝的 PDI40 口管腳。具有 4 個輸入輸出端口, 分別 為 PORT0,PROT1,PROT2,PROT3, 其中 P0 口是一組 8

3、位漏極開路型雙向 IO口,校驗時,要 求接上拉電阻。其他三個內(nèi)部有 30K 的電阻,所以不用再外接電阻。此單片機(jī)具有 6 個中 斷, 其中包括三個定時器中斷, 二個外部中斷, 一個串口中斷,為全雙工通信口。內(nèi)部有 靜態(tài)非易失 EEPROM 和看門狗。 片內(nèi)含 8Kbbytes 的可反復(fù)檫寫的只讀程序存儲器 (PEROM) 和 256bytes 的隨機(jī)存取數(shù)據(jù)存儲器(RAM) ,功能強大,適合許多較為復(fù)雜的控制應(yīng)用場 合。相比較其他芯片來說比較適合學(xué)生試驗所用,故采用此單片機(jī)作為核心控制芯片。DS18B20 是數(shù)字式溫度傳感器,采用單總線通信協(xié)議。DS18B20 具有體積小,硬件開 銷低,抗干擾

4、能力強,精度高附加功能強,封裝形式多樣等特點。適合各種狹小空間內(nèi)設(shè) 備的數(shù)字測溫和控制。同時單線可掛接多個元件,因為每個元件都有唯一的一個 64 位光 刻 ROM 編碼,家族碼為 28H,可以多個也可單個操作。電壓測量范圍是 3.0V 到 5.5V。內(nèi) 部含有 EEPROM,其報警上、下限溫度值和設(shè)定的分辨率倍數(shù)在芯片掉電的情況不丟失。 并且內(nèi)部帶有 AD 轉(zhuǎn)換電路,技術(shù)較為成熟,所以采用此芯片最為合適。 通過對單片機(jī)的編程來控制 DS18B20 芯片的讀 寫操作來獲取相應(yīng)的信息,通過對定時器 T0 的編程可以實現(xiàn)時鐘的形成,再通過對數(shù)碼管的編程控制將獲取到的信息通過一系列轉(zhuǎn)換從而全部顯示到數(shù)

5、碼管顯示上。 最后達(dá)到有溫度采集和時鐘顯示等功能。3 設(shè)計方案核心控制體:AT89S52 單片機(jī) ;數(shù)字式溫度傳感器:DS18B20 。總共設(shè)有三個按鍵,為節(jié)約資源考慮,每個按鍵都有多種功能。每個按鍵分別標(biāo)號 為 A,B,C,.第一次按下 B,C都沒有反應(yīng), 首先按下 A 鍵可選擇指針位置,B、C 鍵為加減鍵,可以調(diào)節(jié)數(shù)字時間大小。操作簡單,按鍵靈活。4 硬件需求AT89S52 單片機(jī)一片,DS18B20 數(shù)字式溫度傳感器一個,+5V 12MHZ 晶振一個,多個按鍵和開關(guān),常用電容電阻,連接線,三極管,二極管若干,兩個四位共陰數(shù)碼管等。5 設(shè)計原理框圖及其仿真進(jìn)行溫度測量仿真時間調(diào)節(jié)仿真進(jìn)行時

6、鐘加調(diào)節(jié)進(jìn)行時鐘減調(diào)節(jié)仿真成功。6 實物程序/*-按鍵接P10,P11,P12?三個18B20接P37口段選接P0口位選接P2口1鍵位功能選擇,2鍵為時間增加,3鍵為時間減少1鍵按第一下為設(shè)置小時,按第二下為設(shè)置分鐘,按第三下為設(shè)置秒,第四下返回溫度顯示-*/#include/包含頭文件, 一般情況不需要改動, 頭文件包含特殊功能寄存器的定義#include#include#define uchar unsigned char#define uintunsigned int;/*/*定義端口*/*/sbit DQ=P37;/ds18b20 端口sbit key1=P10;/按鍵1sbit ke

7、y2=P11;/按鍵2sbit key3=P12;/按鍵3/*/*全局變量*/*/unsigned char const dofly=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/顯示段碼值01234567unsigned char codeseg=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/分別對應(yīng)相應(yīng)的數(shù)碼管點亮,即位碼uint temp,kt,fc;/18b20數(shù)據(jù)變量,按鍵鍵值,功能序號1對小時操作2對分操作3對秒操作uchar feige0,feige1,

8、count,num,hours=12,minute=52,second=30;/feige0溫度顯示標(biāo)志?/feige1溫度顯示標(biāo)志/count數(shù)碼管顯示順序的變量/num定時器計數(shù)變量/hours,minute,second,初始時間設(shè)置為12時51分30秒ucharstr8;/顯示的內(nèi)容的數(shù)據(jù)/*/*函數(shù)聲明*/*/void delay1(uchar MS);/延時unsigned int ReadTemperature(void);/讀溫度void Init_DS18B20(void);/18b20初始化unsigned char ReadOneChar(void);/讀18b20數(shù)據(jù)v

9、oid WriteOneChar(unsigned char dat);/寫18b20數(shù)據(jù)void delay(unsigned int i);/延時void scankey(void);/獲取按鍵值void function(void);/功能選著/*/*主函數(shù)*/*/main()unsigned char TempH,TempL;TMOD|=0 x01;/定時器設(shè)置TH0=0 xef;TL0=0 xf0;IE=0 x82;TR0=1;/P0=0 x0;/P2=0 x0;count=0;P1=0 xff;while(1)function();/功能選著scankey();/獲取按鍵鍵值if(

10、feige1=1)/顯示時間str0=doflyhours/10;/小時顯示str1=doflyhours%10;str2=0 xbf;str3=doflyminute/10;/分顯示str4=doflyminute%10;str5=0 xbf;str6=doflysecond/10;/秒顯示str7=doflysecond%10;if(feige0=1)&(feige1=0)/顯示當(dāng)前溫度temp=ReadTemperature();TempH=temp4;TempL=temp&0 x0F;TempL=TempL*6/10;/小數(shù)近似處?str1=doflyTempH/100; /百位溫度s

11、tr2=dofly(TempH%100)/10; /十位溫度str3=dofly(TempH%100)%10&0 x7f; /個位溫度,帶小數(shù)點str4=doflyTempL;str5=0 xff;str6=0 xc6;/顯示C符號str7=0 xff;if(temp&0 x8000)str0=0 xbf;/負(fù)號標(biāo)志temp=temp;/ 取反加1temp +=1;elsestr0=0 xff;feige0=0;/while/*/*定時器中斷*/*/void tim(void) interrupt 1 using 1/中斷,用于數(shù)碼管掃描和溫度檢測間隔TH0=0 xef;/定時器重裝值20ms

12、TL0=0 xf0;num+;if (num=220)/50num=0;feige0=1;/標(biāo)志位有效second+;/秒增加if(second=60)second=0;minute+;/分增加if(minute=60)minute=0;hours+;/小時增加if(hours=24)hours=0;count+;/數(shù)碼管顯示8位if(count=1)P0=seg0;/位選P2=str0;/段選if(count=2)P0=seg1;P2=str1;if(count=3)P0=seg2;P2=str2;if(count=4)P0=seg3;P2=str3;if(count=5)P0=seg4;P

13、2=str4;if(count=6)P0=seg5;P2=str5;if(count=7)P0=seg6;P2=str6;if(count=8)P0=seg7;P2=str7;count=0;/*/*延時函數(shù)*/*/void delay(unsigned int i)/延時函數(shù)while(i-);/*/*初始化*/*/void Init_DS18B20(void)unsigned char x=0;DQ = 1;/DQ復(fù)位delay(8);/稍做延時DQ = 0;/單片機(jī)將DQ拉低delay(80); /精確延時 大于 480usDQ = 1;/拉高總線delay(10);x=DQ;/稍做延時

14、后 如果x=0則初始化成功 x=1則初始化失敗delay(5);/*/*讀一個字節(jié)*/*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; / 給脈沖信號dat=1;DQ = 1; / 給脈沖信號if(DQ)dat|=0 x80;delay(5);return(dat);/*/*寫一個字節(jié)*/*/void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ =

15、 dat&0 x01;delay(5);DQ = 1;dat=1;delay(5);/*/*讀取溫度*/*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0 xCC); / 跳過讀序號列號的操作WriteOneChar(0 x44); / 啟動溫度轉(zhuǎn)換delay(200);Init_DS18B20();WriteOneChar(0 xCC); /跳過讀序號列號的操作WriteOneChar(0 xBE); /讀取溫

16、度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=ReadOneChar();/低位b=ReadOneChar();/高位b=4)fc=0;feige1=0;kt=0;break;/功能選著1小時2分3秒case 2:if(fc=1)hours+;/加時間if(fc=2)minute+;if(fc=3)second+;if(hours=24)hours=0;if(minute=60)minute=0;if(second=60)second=0;kt=0;break;case 3:if(fc=1)hours-;/減時間if(fc=2)minute-;if(fc=3)second-;if(hour

17、s=0)hours=24;if(minute=0)minute=60;if(second=0)second=60;kt=0;break;void scankey(void)if(!key1)delay(1000);if(!key1)kt=1;while(!key1);if(!key2)delay(1000);if(!key2)kt=2;while(!key2);if(!key3)delay(1000);if(!key3)kt=3;while(!key3);9 結(jié)論與心得這次課程綜合設(shè)計,在編程和仿真方面花了很久時間。一開始,按照時序圖將讀寫函數(shù)寫好后,會顯示秒部分,并準(zhǔn)時走,但液晶屏不穩(wěn) 定,有一些亂碼和光標(biāo)亂閃。經(jīng)檢查發(fā)現(xiàn)有些發(fā)生地址重疊的沖突,寫按鍵部分程序是發(fā) 現(xiàn)調(diào)節(jié)好后在最后刷新屏幕時調(diào)節(jié)好的時間沒有讀取到,不斷調(diào)節(jié)程序, 然后仿真,最終發(fā)現(xiàn)時沒有將調(diào)節(jié)好的時間讀取到寄存器中。 加上溫度傳感器部分后發(fā) 現(xiàn)在調(diào)節(jié)時間時出現(xiàn)亂碼和不穩(wěn)定現(xiàn)象, 光標(biāo)亂跳的現(xiàn)象。經(jīng)過不斷檢查,發(fā)現(xiàn)在按鍵調(diào)節(jié)時軟件讀取溫度值的標(biāo)志位是允許的, 也就是說它在調(diào)節(jié)時間時又在動態(tài)顯示周圍 環(huán)境中的溫度值,這樣會導(dǎo)致光標(biāo)不穩(wěn)定的現(xiàn)

溫馨提示

  • 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

提交評論