資源簡介
ds18b20.zip

代碼片段和文件信息
???#include?
???//通過DS18B20測試當前環(huán)境溫度?并通過數碼管顯示當前溫度值
???sbit?wela?=?P2^1;??//數碼管位選
???sbit?dula?=?P2^0;??//數碼管段選
???sbit?ds?=?P2^2;
???//0-F數碼管的編碼(共陰極)
????unsigned?char?code?table[]={0x3f0x060x5b0x4f0x66
???????0x6d0x7d0x070x7f0x6f0x630x390x770x7c0x390x5e0x790x71};
???//0-9數碼管的編碼(共陰極)?帶小數點
???unsigned?char?code?tableWidthDot[]={0xbf?0x86?0xdb?0xcf?0xe6?0xed?0xfd?
??????0x87?0xff?0xef};
??
??//延時函數?例i=10則大概延時10ms.
??void?delay(unsigned?char?i)
???{
??????unsigned?char?j?k;
??????for(j?=?i;?j?>?0;?j--)
???????{
??????????for(k?=?125;?k?>?0;?k--);
??????}
??}
??
??//初始化DS18B20
??//讓DS18B20一段相對長時間低電平?然后一段相對非常短時間高電平?即可啟動
??void?dsInit()
???{
??????//一定要使用unsigned?int型?一個i++指令的時間?作為與DS18B20通信的小時間間隔
??????//以下都是一樣使用unsigned?int型
??????unsigned?int?i;??
??????ds?=?0;
??????i?=?103;
??????while(i>0)?i--;
??????ds?=?1;
??????i?=?4;
??????while(i>0)?i--;
??}
??
??//向DS18B20讀取一位數據
??//讀一位?讓DS18B20一小周期低電平?然后兩小周期高電平?
??//之后DS18B20則會輸出持續(xù)一段時間的一位數據
??bit?readBit()
???{
??????unsigned?int?i;
??????bit?b;
??????ds?=?0;
??????i++;
??????ds?=?1;?
??????i++;?i++;
??????b?=?ds;
??????i?=?8;?
??????while(i>0)?i--;
??????return?b;
??}
??
??//讀取一字節(jié)數據?通過調用readBit()來實現
??unsigned?char?readByte()
???{
??????unsigned?int?i;
??????unsigned?char?j?dat;
??????dat?=?0;
??????for(i=0;?i<8;?i++)
???????{
??????????j?=?readBit();
??????????//最先讀出的是最低位數據
??????????dat?=?(j?<7)?|?(dat?>>?1);
??????}
??????return?dat;
??}
??
??//向DS18B20寫入一字節(jié)數據
??void?writeByte(unsigned?char?dat)
???{
??????unsigned?int?i;
??????unsigned?char?j;
??????bit?b;
??????for(j?=?0;?j?8;?j++)
???????{
??????????b?=?dat?&?0x01;
??????????dat?>>=?1;
??????????//寫“1“?讓低電平持續(xù)2個小延時?高電平持續(xù)8個小延時
??????????if(b)???
???????????{
??????????????ds?=?0;
??????????????i++;?i++;
??????????????ds?=?1;
??????????????i?=?8;?while(i>0)?i--;
??????????}
??????????else??//寫“0“?讓低電平持續(xù)8個小延時?高電平持續(xù)2個小延時
???????????{
??????????????ds?=?0;
??????????????i?=?8;?while(i>0)?i--;
??????????????ds?=?1;
??????????????i++;?i++;
??????????}
??????}
??}
??
??//向DS18B20發(fā)送溫度轉換命令
??void?sendChangeCmd()
??{
?????dsInit();????//初始化DS18B20
?????delay(1);????//延時1ms
?????writeByte(0xcc);?//寫入跳過序列號命令字
?????writeByte(0x44);?//寫入溫度轉換命令字
?}
?
?//向DS18B20發(fā)送讀取數據命令
?void?sendReadCmd()
??{
?????dsInit();
?????delay(1);
?????writeByte(0xcc);?//寫入跳過序列號命令字
?????writeByte(0xbe);?//寫入讀取數據令字
?}
?
?//獲取當前溫度值
?unsigned?int?getTmpValue()
??{
?????unsigned?int?value;?//存放溫度數值
?????float?t;
?????unsigned?char?low?high;
?????sendReadCmd();
?????//連續(xù)讀取兩個字節(jié)數據
?????low?=?readByte();?
?????high?=?readByte();
?????//將高低兩個字節(jié)合成一個整形變量
?????value?=?high;
?????value?<<=?8;
?????value?|=?low;
?????//DS18B20的精確度為0.0625度?即讀回數據的最低位代表0.0625度
?????t?=?value?*?0.0625;
?????//將它放大10倍?使顯示時可顯示小數點后一位?并對小數點后第二2進行4舍5入
?????//如t=11.0625?進行計數后?得到value?=?111?即11.1?度
?????value?=?t?*?10?+?0.5;
?????retu
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-11-15?15:38??ds18b20\
?????文件??????123853??2015-04-07?17:19??ds18b20\DS18B20?(0-99).DSN
?????文件????????1054??2015-04-08?09:29??ds18b20\DS18B20?(0-99).PWI
?????文件??????123854??2015-04-07?17:17??ds18b20\Last?Loaded?DS18B20?(0-99).DBK
?????文件????????6376??2009-05-07?14:37??ds18b20\STARTUP.A51
?????文件???????14048??2015-04-08?16:41??ds18b20\STARTUP.LST
?????文件?????????749??2015-04-08?16:41??ds18b20\STARTUP.OBJ
?????目錄???????????0??2016-11-16?08:41??ds18b20\仿真\
?????文件??????124959??2016-09-29?16:13??ds18b20\仿真\DS18B20?(-55~125).DSN
?????文件????????1340??2016-10-28?10:16??ds18b20\仿真\DS18B20?(-55~125).PWI
?????文件??????124950??2016-09-29?16:05??ds18b20\仿真\Last?Loaded?DS18B20?(-55~125).DBK
?????文件????????6376??2009-05-07?14:37??ds18b20\仿真\STARTUP.A51
?????文件???????14048??2016-09-29?16:27??ds18b20\仿真\STARTUP.LST
?????文件?????????749??2016-09-29?16:27??ds18b20\仿真\STARTUP.OBJ
?????目錄???????????0??2016-11-16?08:41??ds18b20\仿真\溫度顯示lcd1602\
?????文件??????123878??2016-09-28?14:46??ds18b20\仿真\溫度顯示lcd1602\Last?Loaded?溫度顯示LCD1602.DBK
?????文件???????13096??2016-09-29?11:45??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602
?????文件????????4809??2016-09-29?11:45??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.c
?????文件??????123995??2016-09-28?15:13??ds18b20\仿真\溫度顯示lcd1602\溫度顯示LCD1602.DSN
?????文件????????4336??2016-09-29?11:45??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.hex
?????文件??????????47??2016-09-29?11:45??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.lnp
?????文件???????10435??2016-09-29?11:45??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.LST
?????文件???????17385??2016-09-29?11:45??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.M51
?????文件???????14923??2016-09-29?11:45??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.OBJ
?????文件?????????178??2016-11-15?15:25??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.plg
?????文件????????1340??2016-11-15?15:27??ds18b20\仿真\溫度顯示lcd1602\溫度顯示LCD1602.PWI
?????文件???????55255??2016-11-16?08:41??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.uvopt
?????文件???????13268??2016-09-28?16:34??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602.uvproj
?????文件???????55257??2016-09-29?15:43??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602_uvopt.bak
?????文件???????????0??2016-09-28?15:03??ds18b20\仿真\溫度顯示lcd1602\溫度顯示lcd1602_uvproj.bak
?????文件???????13309??2016-09-29?16:27??ds18b20\仿真\溫控-55~125
............此處省略43個文件信息
評論
共有 條評論