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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、鐘加調節進行時鐘減調節仿真成功。6 實物程序/*-按鍵接P10,P11,P12?三個18B20接P37口段選接P0口位選接P2口1鍵位功能選擇,2鍵為時間增加,3鍵為時間減少1鍵按第一下為設置小時,按第二下為設置分鐘,按第三下為設置秒,第四下返回溫度顯示-*/#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;/分別對應相應的數碼管點亮,即位碼uint temp,kt,fc;/18b20數據變量,按鍵鍵值,功能序號1對小時操作2對分操作3對秒操作uchar feige0,feige1,

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

9、oid WriteOneChar(unsigned char dat);/寫18b20數據void delay(unsigned int i);/延時void scankey(void);/獲取按鍵值void function(void);/功能選著/*/*主函數*/*/main()unsigned char TempH,TempL;TMOD|=0 x01;/定時器設置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)/顯示當前溫度temp=ReadTemperature();TempH=temp4;TempL=temp&0 x0F;TempL=TempL*6/10;/小數近似處?str1=doflyTempH/100; /百位溫度s

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

12、TL0=0 xf0;num+;if (num=220)/50num=0;feige0=1;/標志位有效second+;/秒增加if(second=60)second=0;minute+;/分增加if(minute=60)minute=0;hours+;/小時增加if(hours=24)hours=0;count+;/數碼管顯示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;/*/*延時函數*/*/void delay(unsigned int i)/延時函數while(i-);/*/*初始化*/*/void Init_DS18B20(void)unsigned char x=0;DQ = 1;/DQ復位delay(8);/稍做延時DQ = 0;/單片機將DQ拉低delay(80); /精確延時 大于 480usDQ = 1;/拉高總線delay(10);x=DQ;/稍做延時

14、后 如果x=0則初始化成功 x=1則初始化失敗delay(5);/*/*讀一個字節*/*/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);/*/*寫一個字節*/*/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); / 啟動溫度轉換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 結論與心得這次課程綜合設計,在編程和仿真方面花了很久時間。一開始,按照時序圖將讀寫函數寫好后,會顯示秒部分,并準時走,但液晶屏不穩 定,有一些亂碼和光標亂閃。經檢查發現有些發生地址重疊的沖突,寫按鍵部分程序是發 現調節好后在最后刷新屏幕時調節好的時間沒有讀取到,不斷調節程序, 然后仿真,最終發現時沒有將調節好的時間讀取到寄存器中。 加上溫度傳感器部分后發 現在調節時間時出現亂碼和不穩定現象, 光標亂跳的現象。經過不斷檢查,發現在按鍵調節時軟件讀取溫度值的標志位是允許的, 也就是說它在調節時間時又在動態顯示周圍 環境中的溫度值,這樣會導致光標不穩定的現

溫馨提示

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

最新文檔

評論

0/150

提交評論