(1) DS18B20讀取轉錄溫度程序設計 voidtempchang(void) //獲取并轉換 { dsreset(); delay(1); tpye(0xcc); //讀寫并讀rom指令 tpye(0x44); //寫溫度轉換指令 } uint gt_temp() //讀取寄存器存儲數據 { uchar a,b; dsreset(); delay(1); tpye(0xcc); tpye(0xbe); //uint 給外面一個溫度數值 a=tpread(); //低八位 b=tpread(); //低八位 temp=256*b+a; f_temp=temp*0.0625; //分辨率0.0625,溫度在寄存器為12位 temp=f_temp*10+0.5; //將f_temp乘以10 return temp; //整型 } (2) 數碼管顯示程序設計 ucharflag1,flag2,flag3,flag4,numm,q,b,s,g; //共陰數碼管 ucharcode number[]= { 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,}; ucharcode number1[]={0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef}; (3) 按鍵電路電路設計 void keyscan() { if(s1==0) {P2=0xff; delay(5); if(s1==0) { numm++; if(numm==1) //第一種情況 { flag=1; } if(numm==2) //第一種情況 { flag=2; } if(numm==3) //第一種情況 { numm=0; flag=0; } while(!s1); } } if(numm==1) //提高或降低下限 { flag=1; if(s2==0) { delay(5); if(s2==0) { l+=10; if(l==1000) l=200; } while(!s2); } if(s3==0) { delay(5); if(s3==0) { l-=10; if(l==0) l=200; } while(!s3); } } if(numm==2) //提高或降低上限 { flag=2; if(s2==0) { delay(5); if(s2==0) { h+=10; if(h==1000) h=200; } while(!s2); } if(s3==0) { delay(5); if(s3==0) { h-=10; if(h==0) h=300; } while(!s3); } } } (4) 報警程序設計 void main() { init(); while(1) { tempchang(); if(temp>h) //高于設定值上限,則報警 { high(); } if(temp<l) //低于設定值下限,則報警 { low(); } } } (5) DS18B20讀取字節函數設計 voiddsreset(void) //復位,初始化測溫函數 { uint i; ds=0; i=140; //延時512μs while(i>0) i--; ds=1; //等待復位,若收到低電平則復位成功 i=4; //讀取完之后等待48us再接著讀取下一個數 while(i>0) i--; //消耗時間 } bittpreadbit(void) //讀一位數據 { uint i; bit dat; ds=0;i++; //總線拉低1μs ds=1;i++;i++; //釋放總線,延時 dat=ds; i=8; while(i>0)i--; return(dat); } uchartpread(void) //讀一字節數據 { uint i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tpreadbit(); dat=(j<<7)|(dat>>1); } return(dat); // 復位函數 }
|