DSB單片機(jī)多路溫度傳感器_第1頁
DSB單片機(jī)多路溫度傳感器_第2頁
DSB單片機(jī)多路溫度傳感器_第3頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、51單片機(jī)C程序:MM I feTelJ-皚血FT F£TPiin?fi PJJflT: pjjiit FiriTt-PJATl FJXMT PJ TfH言皿IIidEllt 處比#in clude<reg51.h>#in clude< intrin s.h>#defi ne uchar un sig ned charsbit RS=P3A5;定義 LCD 端口sbit RW=P3A6;sbit E=P3A7;sbit DQ=P3A4;定義單總線端口uchar LCD_3, LCD_2, LCD_1, LCD_0;uchar ds18b20_romA8=0x8

2、e,0x00,0x00,0x00,0xb8,0xc5,0x30,0x28;四個(gè) DS18B20的64位ROM 地址uchar ds18b20_romB8=0x52,0x00,0x00,0x00,0xb8,0xc5,0x34,0x28;uchar ds18b20_romC8=0x65,0x00,0x00,0x00,0xb8,0xc5,0x35,0x28;uchar ds18b20_romD8=0x3c,0x00,0x00,0x00,0xb8,0xc5,0x36,0x28;uchar code LCDData ="0123456789"uchar first_line16=&q

3、uot;A:000.0 B:000.0"/LCD 第一行顯示緩存數(shù)組uchar second_line16="C:000.0 D:000.0"/LCD 第二行顯示緩存數(shù)組/*/延時(shí)程序/*void delay (un sig ned int N)un sig ned int i;for(i=0;i<N;i+);/*/LCD1602 測(cè)忙/*void check_busy(void)while(1)P1=0xff;E=0;_nop_();RS=0;_nop_();_nop_();RW=1;_nop_();_nop_();E=1;_nop_();_nop_();

4、_nop_();_nop_();if(P1&0x80)=0)break;E=0;/*/LCD1602 寫命令*void write_command(uchar tempdata) E=0;_nop_();_nop_();RS=0;_nop_();_nop_();RW=0;P1=tempdata;_nop_();_nop_();E=1;_nop_();_nop_();E=0;_nop_(); check_busy();/* /LCD1602 寫數(shù)據(jù)/* void write_data(uchar tempdata) E=0;_nop_();_nop_();RS=1;_nop_();_no

5、p_();RW=0;P1=tempdata;_nop_();_nop_();E=1;_nop_();_nop_();E=0;_nop_(); check_busy();/* /初始化 LCD1602/* void init_lcd1602()/清除屏幕/功能設(shè)定( 8 位,2行,5*7 點(diǎn)陣式)顯示器ON,光標(biāo)OFF,閃爍OFF/延時(shí) 500uswrite_command(0x01);write_command(0x38);write_command(0x0c);write_command(0x06);/ 地址加 1 /* /初始化 ds18b20 /* bit resetpulse(void

6、)DQ=0; delay(40);DQ=1;delay(4);return(DQ);void ds18b20_init(void)while(1)if(!resetpulse()DQ=1;delay(40);break;elseresetpulse();/*/讀 ds18b20 一位/*uchar read_bit(void)DQ=0;_nop_();_nop_();DQ=1;delay(2);return(DQ);/*/讀 ds18b20 一個(gè)字節(jié)/*uchar read_byte(void)uchar i,m,receive_data;m=1;receive_data=0;for(i=0;

7、i<8;i+)if(read_bit()receive_data=receive_data+(m<<i);/延時(shí) 60us/讀取 P1.0 的狀態(tài)/收到 ds18b20 的應(yīng)答信號(hào)/延時(shí) 240us/否則再發(fā)復(fù)位信號(hào)delay(7); return(receive_data);/*/向 ds18b20 寫一位*void write_bit(uchar bitval)DQ=0;if(bitval=1)DQ=1;delay(5);DQ=1;/*/向 DS18B20 寫一個(gè)字節(jié)命令/* void write_byte(uchar val) uchar i,temp; for(i=0

8、;i<8;i+) temp=val>>i; temp=temp&0x01; write_bit(temp); delay(5);/* /64 位的 ROM 序列號(hào)匹配*bit match_rom(uchar *rom) uchar i; ds18b20_init(); write_byte(0x55); for(i=8;i>0;i-) write_byte(*(rom+i-1); return 1;*/從 ds18b20 中讀出 64 位序列號(hào) /* /*uchar * read_rom(void)uchar rom8,i;ds18b20_init();writ

9、e_byte(0x33);for(i=8;i>0;i-)romi-1=read_byte();return &rom0;*/*/ 將 64 位序列號(hào)顯示在 LCD 上顯示出來/*/*void print_char(uchar a)if(a>=0&&a<=9)write_data(a+0x30);else if(a>=0x0a &&a<= 0x0f) write_data(a+0x37);*/*/溫度轉(zhuǎn)換,將從 ds18b20 中讀出來的溫度值 /轉(zhuǎn)化成十進(jìn)制的溫度值 ,并存放顯示緩存 /* void convert_T(uc

10、har temp_data_h,uchar temp_data_l) uchar temp;/如果溫度寄存器里的高位為 1,/則溫度為負(fù)/負(fù)溫度將補(bǔ)碼轉(zhuǎn)成二進(jìn)制 ,/取反再加 1if(temp_data_h&0xf0)=0xf0) temp_data_l=temp_data_l; if(temp_data_l=0xff)temp_data_l=temp_data_l+0x01; temp_data_h=temp_data_h; temp_data_h=temp_data_h+0x01;elsetemp_data_l=temp_data_l+0x01; temp_data_h=temp_

11、data_h;/查表得負(fù)溫度溫度十位/查表得負(fù)溫度個(gè)位LCD_0=dot_tabtemp_data_l&0x0f;/查表得小數(shù)位的值 temp=(temp_data_l&0xf0)>>4)|(temp_data_h&0x0f)<<4);LCD_3='-'/顯示 "-" 號(hào)LCD_2=LCDData(temp%100)/10;LCD_1=LCDData(temp%100)%10;else/溫度為正LCD_0=dot_tabtemp_data_l&0x0f;/查表得小數(shù)位的值temp=(temp_data_

12、l&0xf0)>>4)|(temp_data_h&0x0f)<<4);LCD_3=LCDDatatemp/100;LCD_2=LCDData(temp%100)/10;LCD_1=LCDData(temp%100)%10;/查表得溫度百位/查表得溫度十位/查表得溫度個(gè)位void display(void) uchar i;write_command(0x80);for(i=0;i<16;i+)write_data(first_linei); write_command(0xc0); for(i=0;i<16;i+)write_data(sec

13、ond_linei);void main(void)uchar temp_data_l,temp_data_h;/*uchar *ds18b20_rom;*/ init_lcd1602();/*while(1)uchar i;ds18b20_rom=read_rom(); write_command(0x80); for(i=0;i<8;i+)ds18b20_romAi=*ds18b20_rom;ds18b20_rom+;/讀序列號(hào)/顯示序列號(hào)/啟動(dòng)溫度轉(zhuǎn)換/匹配第一路/讀溫度/溫度低 8 位/溫度高 8 位/溫度轉(zhuǎn)換后的各位/分別存入顯示緩存數(shù)組中/匹配第二路/讀溫度/溫度低 8 位/

14、溫度高 8 位/溫度轉(zhuǎn)換后的各位/分別存入顯示緩存數(shù)組中/匹配第三路/讀溫度/溫度低 8 位/溫度高 8 位/溫度轉(zhuǎn)換后的各位/分別存入顯示緩存數(shù)組中/匹配第四路/讀溫度write_command(0x80); for(i=0;i<8;i+) print_char(ds18b20_romAi/16); print_char(ds18b20_romAi%16);*/while(1)ds18b20_init(); write_byte(0xcc);write_byte(0x44); delay(700); match_rom(ds18b20_romA);write_byte(0xbe); t

15、emp_data_l= read_byte(); temp_data_h = read_byte(); convert_T(temp_data_h,temp_data_l); first_line2=LCD_3; first_line3=LCD_2; first_line4=LCD_1; first_line6=LCD_0; match_rom(ds18b20_romB);write_byte(0xbe); temp_data_l= read_byte(); temp_data_h = read_byte(); convert_T(temp_data_h,temp_data_l); first

16、_line10=LCD_3; first_line11=LCD_2; first_line12=LCD_1; first_line14=LCD_0;display(); match_rom(ds18b20_romC);write_byte(0xbe); temp_data_l= read_byte(); temp_data_h = read_byte(); convert_T(temp_data_h,temp_data_l); second_line2=LCD_3; second_line3=LCD_2; second_line4=LCD_1; second_line6=LCD_0; match_rom

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論