單片機控制的溫度傳感器C語言程序_第1頁
單片機控制的溫度傳感器C語言程序_第2頁
單片機控制的溫度傳感器C語言程序_第3頁
單片機控制的溫度傳感器C語言程序_第4頁
單片機控制的溫度傳感器C語言程序_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、#include <at89x52.h>#define DO P3_7 #define SEG P0 /數碼管自左至右依次為1234位#define MS2L 0x18 /1ms的延時參數#define MS2H 0xfc#define uchar unsigned char#define uint unsigned intuchar code comm4 = 0x01,0x02,0x04,0x08;uchar code seg10 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar code seg_add_dici

2、mal10 = 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; uchar code seg_dicimal2 =0xc0, 0x92;uchar k = 0;uchar temp_l = 0;uchar temp_h = 0;uchar tempsign = 0;uchar hundreds = 0;uchar tens = 0;uchar ones = 0;uchar low_four = 0;/*延時以ms為單位的t時間*/void Delay(uint t) uint i; while(t-) for(i=0; i<125;

3、i+) /*us級延時,延時時間約42*i*/void Delayus(uchar i) while(-i); /*產生復位脈沖,等待應答信號*/void Resetpaulse() DO = 0; /拉低約600us Delayus(150); Delayus(150); DO = 1;/產生上升沿,延時約1560us Delayus(30); while(DO); /等待應答信號 /*讀取數據一位*/bit Readbit() uint i = 0; bit b = 0; DO = 0; /產生讀時隙 i+; /維持低電平至少1us DO = 1; /1us以上后拉高 Delayus(2)

4、; /延時8us,DO下降沿15內ds18b20輸出的數據才有效 b = DO; /讀取數據 Delayus(40); /每個讀時隙至少持續(xù)60us return(b); /*讀取一個字節(jié)*/uchar Readbyte() uchar byte_read = 0; uchar i, j; for(i=0; i<8; i+) j = Readbit(); byte_read = (j<<i) | byte_read; /低位讀起 return(byte_read); /*寫一個字節(jié)*/void Writebyte(uchar byte_to_write) uchar i =

5、0; uchar j = 0; bit write_bit = 0; for(j=0; j<8; j+) write_bit = (byte_to_write & 0x01); if(write_bit = 1) /寫1 DO = 0; /產生寫時隙 Delayus(3); /延時15us DO = 1; /寫1 Delayus(40); /延時,寫時隙不得低于60us else DO = 0; /產生寫時隙 Delayus(50); /延時,保持低約60us120us DO = 1; i+; byte_to_write = byte_to_write >> 1; /

6、*配置ds18b20,9位分辨率 */void Configurate() EA = 0; Resetpaulse(); /發(fā)出復位脈沖,每次操作都從復位開始 Delay(1); Writebyte(0xcc); /skip room命令 Writebyte(0x4e); Writebyte(0x7f); Writebyte(0x80); Writebyte(0x1f); EA = 1;/*啟動溫度轉換*/void StartConvert() Resetpaulse(); / 發(fā)出復位脈沖,每次操作都從復位開始 Delay(1); EA = 0; Writebyte(0xcc); /skip

7、 room命令 Writebyte(0x44); /啟動溫度轉換命令 EA = 1;/*讀取溫度值*/void ReadTempreture() EA = 0; Resetpaulse(); / 發(fā)出復位脈沖,每次操作都從復位開始 Delay(1); Writebyte(0xcc); /skip room命令 Writebyte(0xbe); /讀取暫存器命令 temp_l = Readbyte(); /存儲溫度低字節(jié)值 (整數部分低四位和小數部分) temp_h= Readbyte(); /存儲溫度高字節(jié)值 (其中高五位為符號位) EA = 1;/*數據轉換*/void DigitalCon

8、vert() uchar total = 0; tempsign = (temp_h >> 7) & 0x01; /得出符號位 if(tempsign = 0) /正數的處理方法 total = (temp_h << 4)&0xf0) | (temp_l >> 4)&0x0f); /取整數位 low_four = (temp_l>>3) & 0x01; /取小數位,9位分辨率,低字節(jié)第3位為小數位,只有0、1兩種取值 hundreds = total / 100; /計算百、十、個位 tens = (total%1

9、00)/10; ones = (total%100)%10; else /負數處理 求負數補碼規(guī)則是,按位取反,得到反碼,加1即得補碼(符號位不變) tempsign = 1; total = (temp_l >> 4) & 0x0f); /取整數部分低4位 total |= (temp_h << 4) & 0xf0); /整數部分高三位和符號位 low_four = (temp_l >> 3) & 0x01; /取小數位 if(low_four = 0) /這里total位uchar型變量,所以根據最低位來確定整數取補規(guī)則 tota

10、l = total + 1; /最低位為0的時候,取反加1后有進位,所以這里total要取反加1 else total = total;/最低位為1的時候,取反加1沒有進位,所以total直接取反即可 tens = (total%100)/10; ones = (total%100)%10; /*中斷處理*/void Display()interrupt 1 EA = 0; TL0 = MS2L; TH0 = MS2H; DigitalConvert(); /數據轉換 if(tempsign = 0)/正數 if(k = 0) if(hundreds = 0) /高位0消隱 P1 = 0; e

11、lse P1 = commk; SEG = seghundreds; else if(k = 1) if(tens = 0 && hundreds = 0) /高位0消隱 P1 = 0; else P1 = commk; SEG = segtens; else if(k = 2)/顯示個位,因為個位有小數點,所以又定義了一個數組分開來顯示 P1 = commk; SEG = seg_add_dicimalones; /要加上小數點else /顯示小數,0或5 P1 = commk; SEG = seg_dicimallow_four; else if(tempsign = 1) /負數 if(k = 0)/顯示符號位 P1 = commk; SEG = 0xbf; else if(k = 1) if(tens = 0) P1 = 0; else P1 = commk; SEG = segtens; else if(k = 2)/顯示個位,因為各位有小數點,所以分開來顯示 P1 = commk; SEG = seg_add_dicimalones; /要加上小數點 else /顯示小數,0或5 P1 = commk; SEG = seg_dicimallow_four; k+; if(k = 4) k = 0

溫馨提示

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

評論

0/150

提交評論