多路溫度采集系統(tǒng)_第1頁
多路溫度采集系統(tǒng)_第2頁
多路溫度采集系統(tǒng)_第3頁
多路溫度采集系統(tǒng)_第4頁
多路溫度采集系統(tǒng)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 小型多路溫控采集系統(tǒng)設(shè)計(jì) 一 系統(tǒng)說明本系統(tǒng)采用51單片機(jī)作為控制器,控制溫度采集及顯示。溫度傳感器選用DS18B20,其單總線的通信方式可以減少系統(tǒng)的線路連接。DS18B20支持多點(diǎn)組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫。DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路。內(nèi)溫范圍55125,在-10+85時精度為±0.5可編程的分辨率為912位,對應(yīng)的可分辨溫度分別為0.5、0.25、0.125和0.0625,可實(shí)現(xiàn)高精度測溫。同時本系統(tǒng)選用LCD1602作為顯示器件,能夠同時顯示16x02即32個字符(

2、16列2行)。其顯示清晰,并可以顯示阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,滿足了系統(tǒng)要求。二系統(tǒng)電路圖三、程序流程圖四、程序解讀注:程序分兩部分。可以先用程序二讀出各個器件的序列號,再將序列號填入程序一的SN48數(shù)組中,若要加入更多的器件可以擴(kuò)大數(shù)組,并在程序中增加讀顯的循環(huán)次數(shù)。1.程序一:已知各個器件序列號讀取溫度 #include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar TMP4; /讀取后的4個溫度值uchar SN48=0x28,0x44,0x30,0xc5,0x

3、b8,0x00,0x00,0x12,0x28,0x15,0x30,0xc5,0xb8,0x00,0x00,0x0b,0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e,0x28,0x05,0x30,0xc5,0xb8,0x00,0x00,0x50;/4個器件的序列號,先讀出單個序列號后填上才可以讀取溫度uint f4; /結(jié)果是否為負(fù)溫,“0”為正溫,“1”為負(fù)溫。 sbit DQ=P37;/ds18b20與單片機(jī)連接口sbit RS=P30;sbit RW=P31;sbit EN=P32;unsigned char code str0="temperat

4、ure:U "unsigned char code str5=" "uchar data disdata5;uint tvalue;/溫度值uchar tflag4;/溫度正負(fù)標(biāo)志/*LCD1602程序*/void delay1ms(unsigned int ms)/延時1毫秒(不夠精確的)unsigned int i,j; for(i=0;i<ms;i+) for(j=0;j<100;j+);void wr_com(unsigned char com)/寫指令/ delay1ms(1); RS=0; RW=0; EN=0; P2=com; delay

5、1ms(1); EN=1; delay1ms(1); EN=0;void wr_dat(unsigned char dat)/寫數(shù)據(jù)/ delay1ms(1); RS=1; RW=0; EN=0; P2=dat; delay1ms(1); EN=1; delay1ms(1); EN=0;void lcd_init()/初始化設(shè)置/delay1ms(15);wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);dela

6、y1ms(5);void display(unsigned char *p)/顯示/while(*p!='0')wr_dat(*p);p+;delay1ms(1);init_play()/初始化顯示 lcd_init(); wr_com(0x80);display(str0);wr_com(0xc0);display(str5); /*DS18B20程序*/void delay_18B20(unsigned int i)/延時1微秒 while(i-);void ds1820rst()/*ds1820復(fù)位*/ unsigned char x=0;DQ = 1; /DQ復(fù)位del

7、ay_18B20(4); /延時DQ = 0; /DQ拉低delay_18B20(100); /精確延時大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd()/*讀數(shù)據(jù)*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /給脈沖信號 dat>>=1; DQ = 1; /給脈沖信號 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*寫數(shù)據(jù)*/unsi

8、gned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; /*發(fā)送ds1820 開始轉(zhuǎn)換/*/tmstart (void) / /ds1820rst(); /復(fù)位 /delay1ms(1); /延時 /ds1820wr (0xcc); /跳過序列號命令,對所有器件有效 /ds1820wr (0x44); /發(fā)轉(zhuǎn)換命令 44H, / /*/read_temp()/*讀取溫度值并轉(zhuǎn)換*/ /uchar i,j; /uchar a,b; /fo

9、r(j=0;j<4;j+) / /ds1820rst(); /復(fù)位 /delay1ms(1); /延時 /ds1820wr(0x55); /發(fā)送ROM匹配命令 /for(i=0;i<8;i+) / /ds1820wr(SNji); /發(fā)送64位序列號 / /ds1820wr(0xbe);/*讀取溫度*/ a = ds1820rd (); /連續(xù)讀取兩位溫度 /b = ds1820rd (); /tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0xf800) tflagj=0; else tvalue=tvalue+1;

10、tflagj=1; fj=tvalue*(0.625);/溫度值擴(kuò)大10倍,精確到1位小數(shù)/return(f4);/*/void ds1820disp()/溫度值顯示 uchar flagdat,i; for(i=0;i<4;i+) tvalue=fi ; disdata0=tvalue/1000+0x30;/百位數(shù) disdata1=tvalue%1000/100+0x30;/十位數(shù) disdata2=tvalue%100/10+0x30;/個位數(shù) disdata3=tvalue%10/1+0x30;/小數(shù)位 if(tflagi=0) flagdat=0x20;/正溫度不顯示符號 el

11、se flagdat=0x2d;/負(fù)溫度顯示負(fù)號:- if(disdata0=0x30) disdata0=0x20;/如果百位為0,不顯示 if(disdata1=0x30) disdata1=0x20;/如果百位為0,十位為0也不顯示 if(i=0)wr_com(0x8d); /第一個傳感器在LCD第一行第14字符顯示“1”wr_dat('1');if(i=1)wr_com(0x8d);/第二個傳感器在LCD第一行第14字符顯示“2”wr_dat('2');if(i=2)wr_com(0x8d); /第三個傳感器在LCD第一行第14字符顯示“3”wr_dat

12、('3');if(i=3)wr_com(0x8d); /第四個傳感器在LCD第一行第14字符顯示“4”wr_dat('4'); wr_com(0xc0); /在LCD第二行第1個字符顯示溫度正負(fù)號 wr_dat(flagdat); /顯示符號位 wr_com(0xc1); /在LCD第二行第2個字符顯示百位溫度值 wr_dat(disdata0);/顯示百位 wr_com(0xc2); /在LCD第二行第3個字符顯示十位溫度值 wr_dat(disdata1);/顯示十位 wr_com(0xc3); /在LCD第二行第4個字符顯示個位溫度值 wr_dat(dis

13、data2);/顯示個位 wr_com(0xc4); /在LCD第二行第5個字符顯示小數(shù)點(diǎn) wr_dat(0x2e); /顯示小數(shù)點(diǎn) wr_com(0xc5); /在LCD第二行第6個字符顯示小數(shù)位溫度值 wr_dat(disdata3);/顯示小數(shù)位delay1ms(1500); /*主程序*/void main() init_play();/初始化顯示 while(1) tmstart();/開始轉(zhuǎn)換 read_temp();/讀取溫度 ds1820disp();/顯示/2.程序二:讀取DS18B20序列號程序注:讀ROM時,只能有一個器件與單片機(jī)通信??梢灾饌€相連來讀出其ROM#incl

14、ude<reg51.h>#define uchar unsigned char#define uint unsigned intuint sn8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10;sbit DQ=P37;/ds18b20與單片機(jī)連接口sbit RS=P30;sbit RW=P31;sbit EN=P32;void delay1ms(unsigned int ms)/延時1毫秒(不夠精確的)unsigned int i,j; for(i=0;i<ms;i+) for(j=0;j<100;j+);void delay_18B20

15、(unsigned int i)/延時1微秒 while(i-);void ds1820rst()/*ds1820復(fù)位*/ unsigned char x=0;DQ = 1; /DQ復(fù)位delay_18B20(4); /延時DQ = 0; /DQ拉低delay_18B20(100); /精確延時大于480usDQ = 1; /拉高delay_18B20(40); uchar ds1820rd()/*讀數(shù)據(jù)*/ unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; /給脈沖信號 dat>>=1; DQ = 1; /給脈沖信號 if(DQ) dat|=0x80; delay_18B20(10); return(dat);void ds1820wr(uchar wdata)/*寫數(shù)據(jù)*/unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; /讀取器件序列號子程序/rom(void)ds1820rst(

溫馨提示

  • 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

提交評論