ds18b20詳解及程序_第1頁(yè)
ds18b20詳解及程序_第2頁(yè)
ds18b20詳解及程序_第3頁(yè)
ds18b20詳解及程序_第4頁(yè)
ds18b20詳解及程序_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、最近都在學(xué)習(xí)和寫單片機(jī)的程序 , 今天有空又模仿 DS18B20 溫度測(cè)量顯示實(shí)驗(yàn) 寫了一個(gè)與 DS18B20 基于單總線通信的程序 .DS18B20 數(shù)字溫度傳感器 ( 參考 : 智能溫度傳感器 DS18B20 的原理與應(yīng)用 ) 是 DALLAS 公司生產(chǎn)的 1 Wire ,即單總線器件,具有線路簡(jiǎn)單,體積小的特點(diǎn)。因此用它來(lái)組成一個(gè)測(cè)溫系統(tǒng), 具有線路簡(jiǎn)單, 在一根通信線, 可以掛很多這樣的數(shù)字溫度計(jì)。 DS18B20 產(chǎn)品的特點(diǎn) :( 1 )、只要求一個(gè) I/O 口即可實(shí)現(xiàn)通信。( 2 )、在 DS18B20 中的每個(gè)器件上都有獨(dú)一無(wú)二的序列號(hào)。( 3 )、實(shí)際應(yīng)用中不需要外部任何元器件

2、即可實(shí)現(xiàn)測(cè)溫。(4 )、測(cè)量溫度范圍在55到 125 之間 ;在-10 +85范圍內(nèi)誤差為5 ;( 5 )、數(shù)字溫度計(jì)的分辨率用戶可以從 9 位到 12 位選擇。將 12 位的溫度值轉(zhuǎn)換為數(shù)字量所需時(shí)間不超過(guò) 750ms;( 6 )、內(nèi)部有溫度上、下限告警設(shè)置。DS18B20引腳分布圖DS18B20詳細(xì)引腳功能描述 :1、GND地信號(hào);2、DQ 數(shù)據(jù)輸入出引腳。開漏單總線接口引腳。當(dāng)被用在寄生電源下,此引腳可以向器件提供電源;漏極開路 , 常太下高電平 . 通常要求外接一個(gè)約 5k 的上拉電阻 .3、VDD可選擇的 VDD 引腳。電壓范圍 :35.5V;當(dāng)工作于寄生電源時(shí),此引腳必須接地。DS

3、18B20存儲(chǔ)器結(jié)構(gòu)圖暫存儲(chǔ)器的頭兩個(gè)字節(jié)為測(cè)得溫度信息的低位和高位字節(jié);.第 3, 4字節(jié)是 TH 和 TL 的易失性拷貝, 在每次電復(fù)位時(shí)都會(huì)被刷新;第 5 字節(jié)是配置寄存器的易失性拷貝, 同樣在電復(fù)位時(shí)被刷新 ;第 9 字節(jié)是前面 8 個(gè)字節(jié)的 CRC 檢驗(yàn)值 .配置寄存器的命令內(nèi)容如下:0R1R011111MSBLSBR0 和 R1 是溫度值分辨率位, 按下表進(jìn)行配置 . 默認(rèn)出廠設(shè)置是 R1R0 = 11,即 12位 .溫度值分辨率配置表R1R0分辨率最大轉(zhuǎn)換時(shí)間 (ms)009bit93.75(tconv/8)0110bit183.50(tconv/4)1011bit375(tco

4、nv/2)1112bit750 (tconv)4 種分辨率對(duì)應(yīng)的溫度分辨率為 0.5 , 0.25 , 0.125 , 0.0625 ( 即最低一位代表的溫度值 )12 位分辨率時(shí)的兩個(gè)溫度字節(jié)的具體格式如下:低字節(jié) :232221202-12-22-32-4高字節(jié) :S S S S S262524其中高字節(jié)前5 位都是符號(hào)位S,若分辨率低于12位時(shí) , 相應(yīng)地使最低為0, 如 :當(dāng)分辨率為 10 位時(shí) , 低字節(jié)為 :232221202-12-20 0, 高字節(jié)不變 .一些溫度與轉(zhuǎn)換后輸出的數(shù)字參照如下:溫度換成 16 進(jìn)數(shù)字輸出制+125 0000011107D0H11010000+85

5、000001010550H01010000.+25.0625000000010191H10010001+10.1250000000000A2H10100010+0.5 000000000008H000010000 000000000000H00000000-0.5 11111111FFF8H11111000-10.12511111111FFE5H01011110-25.062511111110FF6FH01101111-55 11111100FC90H10010000由上表可看出 , 當(dāng)輸出是負(fù)溫度時(shí) ,使用補(bǔ)碼表示 ,方便計(jì)算機(jī)運(yùn)算 ( 若是用 C 語(yǔ)言 , 直接將結(jié)果賦值給一個(gè)int 變量

6、即可 ).DS18B20的使用方法 :由于 DS18B20采用的是 1 Wire總線協(xié)議 方式,即在一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而對(duì)單片機(jī)來(lái)說(shuō),我們必須采用軟件的方法來(lái)模擬單總線的協(xié)議時(shí)序來(lái)完成對(duì) DS18B20芯片的訪問(wèn)。由于 DS18B20是在一根 I/O線上讀寫數(shù)據(jù), 因此, 對(duì)讀寫的數(shù)據(jù)位 有著嚴(yán)格的時(shí)序要求 。DS18B20有嚴(yán)格的通信協(xié)議來(lái)保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號(hào)的時(shí)序:初始化時(shí)序 ( dsInit()實(shí)現(xiàn) ) 、讀時(shí)序 (readByte()、寫時(shí)序 (writeByte()。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的

7、傳輸都是從主機(jī)主動(dòng)啟動(dòng)寫時(shí)序開始, 如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后, 主機(jī)需啟動(dòng)讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。DS18B20與單片機(jī)連接電路圖:.利用軟件模擬DS18B20的單線協(xié)議和命令: 主機(jī)操作DS18B20必須遵循下面的順序1. 初始化單線總線上的所有操作都是從初始化開始的. 過(guò)程如下 :1) 請(qǐng)求 : 主機(jī)通過(guò) 拉低 單線 480us 以上 , 產(chǎn)生復(fù)位脈沖 , 然后釋放該線 , 進(jìn)入 Rx 接收模式. 主機(jī)釋放總線時(shí) , 會(huì)產(chǎn)生一個(gè) 上升沿脈沖 .DQ : 1 - 0(480us+) - 12) 響應(yīng) : DS18B20檢測(cè)到該上升沿后, 延時(shí) 15

8、60us, 通過(guò)拉低總線60240us來(lái)產(chǎn)生應(yīng)答脈沖 .DQ: 1(1560us) - 0(60240us)3) 接收響應(yīng) : 主機(jī)接收到從機(jī)的應(yīng)答脈沖后 , 說(shuō)明有單線器件在線 . 至此 , 初始化完成 . DQ: 02. ROM 操作命令當(dāng)主機(jī)檢測(cè)到應(yīng)答脈沖, 便可發(fā)起ROM 操作命令 . 共有 5 類 ROM 操作命令 , 如下表命令類型命令功能.字節(jié)Read Rom讀ROM33HMatch Rom匹配 ROM55HSkip Rom跳過(guò) ROMCCHSearch Rom搜索 ROMF0HAlarm SearchECH告警搜索3. 內(nèi)存操作命令讀取激光 ROM 中的 64 位, 只能用于總

9、線上單個(gè) DS18B20 器件情況 , 多掛時(shí)會(huì)發(fā)生據(jù)沖突此命令后跟64 位 ROM 序列號(hào) ,尋址多掛總線上的對(duì)應(yīng)DS18B20.只有序列號(hào)完全匹的 DS18B20 才能響應(yīng)后面的內(nèi)存操作命令 ,其他不匹配的將等待復(fù)位脈沖 . 可用于單或多掛兩種情況 .可無(wú)須提供64 位 ROM 序列號(hào)即可運(yùn)行內(nèi)存操作命令, 只能用于單掛 .通過(guò)一個(gè)排除法過(guò)程, 識(shí)別出總線上所有器件的ROM 序列號(hào)命令流程與Search Rom相同 , 但 DS18B20只有最近的一次溫度測(cè)量時(shí)滿足了告警發(fā)條件的 , 才會(huì)響應(yīng)此命令.在成功執(zhí)行 ROM 操作命令后 , 才可使用內(nèi)存操作命令. 共有 6 種內(nèi)存操作命令 :命

10、令類型命令功能字節(jié)Write寫暫存器中地址2 地址 4 的 3 個(gè)字節(jié) (TH,TL 和配置寄存器 ) 在發(fā)起復(fù)位脈沖之前,3Scratchpad4EH字節(jié)都必須要寫 .寫暫存器Read讀取暫存器內(nèi)容 , 從字節(jié) 0 一直到字節(jié) 8, 共 9 個(gè)字節(jié) , 主機(jī)可隨時(shí)發(fā)起復(fù)位脈沖, 停ScratchpadBEH此操作 , 通常我們只需讀前 5 個(gè)字節(jié) .讀暫存器Copy將暫存器中的內(nèi)容復(fù)制進(jìn)EERAM,以便將溫度告警觸發(fā)字節(jié)存入非易失內(nèi)存. 如果Scratchpad48H那么只要器件還在進(jìn)行復(fù)制都會(huì)輸出0, 復(fù)制完成后輸出1復(fù)制暫存器命令后主機(jī)產(chǎn)生讀時(shí)隙 ,Convert T開始溫度轉(zhuǎn)換操作.

11、若在此命令后主機(jī)產(chǎn)生時(shí)隙 , 那么只要器件還在進(jìn)行溫度轉(zhuǎn)換就溫度轉(zhuǎn)換44H輸出 0, 轉(zhuǎn)換完成后輸出 1.Recall E2將存儲(chǔ)在 EERAM 中的溫度告警觸發(fā)值和配置寄存器值重新拷貝到暫存器中, 此操作重調(diào) E2 暫存器B8HDS18B20 加電時(shí)自動(dòng)產(chǎn)生 .Read Power主機(jī)發(fā)起此命令后每個(gè)讀數(shù)時(shí)隙內(nèi),DS18B20 會(huì)發(fā)信號(hào)通知它的供電方式:0 寄生電源SupplyB4H1 外部供電 .讀供電方式4. 數(shù)據(jù)處理DS18B20要求有嚴(yán)格的時(shí)序來(lái)保證數(shù)據(jù)的完整性. 在單線 DQ 上 , 有復(fù)位脈沖 , 應(yīng)答脈沖 ,.寫 0, 寫 1, 讀 0, 讀 1 這 6 種信號(hào)類型 . 除了應(yīng)

12、答脈沖外 , 其它都由主機(jī)產(chǎn)生 . 數(shù)據(jù)位的讀和寫是通過(guò)讀、寫時(shí)隙實(shí)現(xiàn)的 .1) 寫時(shí)隙 : 當(dāng)主機(jī)將數(shù)據(jù)線從高電平拉至低電平時(shí), 產(chǎn)生寫時(shí)隙 . 所有寫時(shí)隙都必須在60us以上 , 各寫時(shí)隙間必須保證1us 的恢復(fù)時(shí)間 .寫 1 : 主機(jī)將數(shù)據(jù)線 DQ 先拉低 , 然后釋放 15us 后 , 將數(shù)據(jù)線 DQ 拉高 ;寫 0 : 主機(jī)將 DQ 拉低并至少保持 60us 以上 .2) 讀時(shí)隙 : 當(dāng)主機(jī)將數(shù)據(jù)線 DQ 從高電平拉至低電平時(shí) , 產(chǎn)生讀時(shí)隙 . 所有讀時(shí)隙最短必須持續(xù) 60us, 各讀時(shí)隙間必須保證 1us 的恢復(fù)時(shí)間 .讀: 主機(jī)將 DQ 拉低至少 1us,. 此時(shí)主機(jī)馬上將 D

13、Q 拉高 , 然后就可以延時(shí) 15us 后, 讀取 DQ 即可 .源代碼 : ( 測(cè)量范圍 : 0 99 度 )DS18B201#include 2/ 通過(guò) DS18B20測(cè)試當(dāng)前環(huán)境溫度, 并通過(guò)數(shù)碼管顯示當(dāng)前溫度值3sbit wela = P27;/ 數(shù)碼管位選4sbit dula = P26;/ 數(shù)碼管段選5 sbit ds = P22;6 /0-F 數(shù)碼管的編碼 ( 共陰極 )7unsignedcharcode table=0x3f,0x06,0x5b,0x4f,0x66,8 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;

14、9 /0-9 數(shù)碼管的編碼 ( 共陰極 ), 帶小數(shù)點(diǎn)10unsignedcharcode tableWidthDot=0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd,11 0x87, 0xff, 0xef;1213 / 延時(shí)函數(shù) , 例 i=10, 則大概延時(shí) 10ms.14void delay(unsignedchar i)1516unsignedcharj, k;17 for (j = i; j 0; j-)18 19for (k = 125; k 0; k-);20 21 2223 / 初始化 DS18B2024/ 讓 DS18B20一段相對(duì)長(zhǎng)時(shí)間低電

15、平, 然后一段相對(duì)非常短時(shí)間高電平, 即可啟動(dòng)25 void dsInit()26 27/ 一定要使用 unsigned int型,一個(gè) i+指令的時(shí)間 , 作為與 DS18B20通信的小時(shí)間間隔28/ 以下都是一樣使用 unsigned int型.29unsignedint i;30 ds = 0;31 i = 103;32 while (i0) i-;33 ds = 1;34 i = 4;35 while (i0) i-;36 3738/ 向 DS18B20讀取一位數(shù)據(jù)39/ 讀一位 , 讓 DS18B20一小周期低電平, 然后兩小周期高電平,40 / 之后 DS18B20 則會(huì)輸出持續(xù)一

16、段時(shí)間的一位數(shù)據(jù)41 bit readBit()42 43unsignedint i;44 bit b;45 ds = 0;46 i+;47 ds = 1;48 i+; i+;49 b = ds;50 i = 8;51 while (i0) i-;52 return b;53 5455 / 讀取一字節(jié)數(shù)據(jù) , 通過(guò)調(diào)用 readBit() 來(lái)實(shí)現(xiàn)56 unsigned char readByte()57 58unsignedint i;59unsignedchar j, dat;60 dat = 0;61 for (i=0; i8; i+)62 63 j = readBit();64/ 最先讀

17、出的是最低位數(shù)據(jù)65 dat = (j 1);66 67 return dat;68 6970/ 向 DS18B20寫入一字節(jié)數(shù)據(jù)71void writeByte(unsignedchar dat)72.73unsignedint i;74unsignedchar j;75 bit b;76 for (j = 0; j = 1;80/ 寫 1,讓低電平持續(xù)2 個(gè)小延時(shí) , 高電平持續(xù) 8 個(gè)小延時(shí)81if (b)8283ds = 0;84i+; i+;85ds = 1;86i = 8;while (i0) i-;8788else / 寫 0, 讓低電平持續(xù)8 個(gè)小延時(shí) , 高電平持續(xù) 2 個(gè)小

18、延時(shí)8990ds = 0;91i = 8;while (i0) i-;92ds = 1;93i+; i+;94 95 96 9798 / 向 DS18B20 發(fā)送溫度轉(zhuǎn)換命令99 void sendChangeCmd()100101dsInit();/ 初始化 DS18B20102delay(1);/ 延時(shí) 1ms103writeByte(0xcc);/ 寫入跳過(guò)序列號(hào)命令字104writeByte(0x44);/ 寫入溫度轉(zhuǎn)換命令字105 106107 / 向 DS18B20 發(fā)送讀取數(shù)據(jù)命令108 void sendReadCmd()109 110 dsInit();111 delay(1

19、);112writeByte(0xcc);/ 寫入跳過(guò)序列號(hào)命令字113writeByte(0xbe);/ 寫入讀取數(shù)據(jù)令字114115116 / 獲取當(dāng)前溫度值.117 unsigned int getTmpValue()118 119unsignedint value; / 存放溫度數(shù)值120float t;121unsignedchar low, high;122 sendReadCmd();123 / 連續(xù)讀取兩個(gè)字節(jié)數(shù)據(jù)124 low = readByte();125 high = readByte();126 / 將高低兩個(gè)字節(jié)合成一個(gè)整形變量127 value = high;12

20、8 value = 8;129 value |= low;130/DS18B20的精確度為 0.0625度 , 即讀回?cái)?shù)據(jù)的最低位代表0.0625度131t = value * 0.0625;132/ 將它放大 10倍 , 使顯示時(shí)可顯示小數(shù)點(diǎn)后一位, 并對(duì)小數(shù)點(diǎn)后第二 2進(jìn)行 4 舍 5 入133/ 如 t=11.0625,進(jìn)行計(jì)數(shù)后 ,得到 value = 111,即 11.1度134 value = t * 10 + 0.5;135 return value;136 137138 / 顯示當(dāng)前溫度值 , 精確到小數(shù)點(diǎn)后一位139voiddisplay(unsignedint v)140

21、141 unsignedchar count;142unsignedchardatas = 0, 0, 0;143 datas0 = v / 100;144 datas1 = v % 100 / 10;145 datas2 = v % 10;146 for (count = 0; count 3; count+)147 148/ 片選149wela = 0;150P0 = (0xfe (8 - count);/ 選擇第 (count + 1)個(gè)數(shù)碼管151 wela = 1;/ 打開鎖存 , 給它一個(gè)下降沿量152 wela = 0;153/ 段選154dula = 0;155if (coun

22、t != 1)156157P0 = tabledatascount;/ 顯示數(shù)字158159else.160161P0 = tableWidthDotdatascount;/ 顯示帶小數(shù)點(diǎn)數(shù)字162 163 dula = 1;/ 打開鎖存 , 給它一個(gè)下降沿量164 dula = 0;165delay(5);/ 延時(shí) 5ms,即亮 5ms166167 / 清除段先 , 讓數(shù)碼管滅 , 去除對(duì)下一位的影響 , 去掉高位對(duì)低位重影168 / 若想知道影響效果如何 , 可自行去掉此段代碼169 / 因?yàn)閿?shù)碼管是共陰極的 , 所有滅的代碼為 : 00H170 dula = 0;171P0 = 0x00

23、;/ 顯示數(shù)字172 dula = 1;/ 打開鎖存 , 給它一個(gè)下降沿量173 dula = 0;174 175 176177 void main()178 179 unsignedchar i;180unsignedintvalue;181 while (1)182 183/ 啟動(dòng)溫度轉(zhuǎn)換184 sendChangeCmd();185 value = getTmpValue();186/ 顯示 3 次187for (i = 0; i 3; i+)188189display(value);190 191 192 顯示效果 :.流程圖 :改進(jìn)代碼 : 擴(kuò)大測(cè)量范圍 , 使可測(cè)量范圍為 : -5

24、5 度 +125 度 , 嚴(yán)格按照上面的流程進(jìn)行軟件設(shè)計(jì)3.15 1:34修正 display()函數(shù)中的下一位顯示對(duì)上一位的影響改進(jìn)代碼1 #include 2 #include3#include / 要用到取絕對(duì)值函數(shù) abs()4/ 通過(guò) DS18B20測(cè)試當(dāng)前環(huán)境溫度 , 并通過(guò)數(shù)碼管顯示當(dāng)前溫度值, 目前顯示范圍: -55 +125度.5sbit wela = P27;/ 數(shù)碼管位選6sbit dula = P26;/ 數(shù)碼管段選7 sbit ds = P22;8 int tempValue;910 /0-F 數(shù)碼管的編碼 ( 共陰極 )11unsignedcharcode tabl

25、e=0x3f,0x06,0x5b,0x4f,0x66,12 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;13 /0-9 數(shù)碼管的編碼 ( 共陰極 ), 帶小數(shù)點(diǎn)14unsignedchar code tableWidthDot=0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd,150x87, 0xff, 0xef;1617/ 延時(shí)函數(shù) ,對(duì)于 11.0592MHz時(shí)鐘 ,例 i=10,則大概延時(shí) 10ms.18void delay(unsignedint i)1920unsignedint j;2

26、1 while (i-)22 23for (j = 0; j 0) i-;36ds = 1;/ 產(chǎn)生一個(gè)上升沿, 進(jìn)入等待應(yīng)答狀態(tài)37 i = 4;38 while (i0) i-;39 4041 void dsWait()42 43unsignedinti;44while (ds);45while (ds);/ 檢測(cè)到應(yīng)答脈沖46 i = 4;47 while (i 0) i-;.48 4950 / 向 DS18B20 讀取一位數(shù)據(jù)51/ 讀一位 , 讓 DS18B20一小周期低電平, 然后兩小周期高電平,52 / 之后 DS18B20 則會(huì)輸出持續(xù)一段時(shí)間的一位數(shù)據(jù)53 bit readB

27、it()54 55unsignedint i;56 bit b;57 ds = 0;58i+;/ 延時(shí)約 8us, 符合協(xié)議要求至少保持1us59ds = 1;60i+; i+;/ 延時(shí)約 16us, 符合協(xié)議要求的至少延時(shí)15us 以上61 b = ds;62 i = 8;63while (i0) i-;/ 延時(shí)約 64us,符合讀時(shí)隙不低于60us要求64 return b;65 6667 / 讀取一字節(jié)數(shù)據(jù) , 通過(guò)調(diào)用 readBit() 來(lái)實(shí)現(xiàn)68 unsigned char readByte()69 70unsignedint i;71unsignedchar j, dat;72

28、dat = 0;73 for (i=0; i8; i+)74 75 j = readBit();76/ 最先讀出的是最低位數(shù)據(jù)77 dat = (j 1);78 79 return dat;80 8182/ 向 DS18B20寫入一字節(jié)數(shù)據(jù)83void writeByte(unsignedchar dat)8485unsignedint i;86unsignedchar j;87 bit b;88 for (j = 0; j = 1;.92/ 寫 1,將 DQ 拉低 15us后 , 在 15us60us內(nèi)將 DQ 拉高 , 即完成寫 193if (b)9495ds = 0;96i+; i+;/

29、 拉低約 16us,符號(hào)要求 1560us內(nèi)97ds = 1;98i = 8;while (i0) i-;/延時(shí)約 64us,符合寫時(shí)隙不低于 60us要求99100else / 寫0, 將 DQ 拉低 60us120us101102ds = 0;103i = 8;while (i0) i-;/拉低約 64us,符號(hào)要求104ds = 1;105i+; i+;/ 整個(gè)寫0 時(shí)隙過(guò)程已經(jīng)超過(guò)60us,這里就不用像寫1 那樣 , 再延時(shí) 64us 了106 107 108 109110 / 向 DS18B20 發(fā)送溫度轉(zhuǎn)換命令111 void sendChangeCmd()112 113dsIni

30、t();/ 初始化 DS18B20,無(wú)論什么命令 , 首先都要發(fā)起初始化114dsWait();/ 等待 DS18B20應(yīng)答115delay(1);/ 延時(shí) 1ms, 因?yàn)?DS18B20會(huì)拉低 DQ 60240us作為應(yīng)答信號(hào)116writeByte(0xcc);/ 寫入跳過(guò)序列號(hào)命令字Skip Rom117writeByte(0x44);/ 寫入溫度轉(zhuǎn)換命令字Convert T118 119120 / 向 DS18B20 發(fā)送讀取數(shù)據(jù)命令121 void sendReadCmd()122 123 dsInit();124 dsWait();125 delay(1);126writeByte

31、(0xcc);/ 寫入跳過(guò)序列號(hào)命令字 Skip Rom127writeByte(0xbe);/ 寫入讀取數(shù)據(jù)令字 Read Scratchpad128 129130 / 獲取當(dāng)前溫度值131 int getTmpValue()132 133unsignedinttmpvalue;134int value;/存放溫度數(shù)值.135float t;136unsignedchar low, high;137 sendReadCmd();138 / 連續(xù)讀取兩個(gè)字節(jié)數(shù)據(jù)139 low = readByte();140 high = readByte();141 / 將高低兩個(gè)字節(jié)合成一個(gè)整形變量142

32、 / 計(jì)算機(jī)中對(duì)于負(fù)數(shù)是利用補(bǔ)碼來(lái)表示的143/若是負(fù)值 , 讀取出來(lái)的數(shù)值是用補(bǔ)碼表示的, 可直接賦值給int型的 value144 tmpvalue = high;145 tmpvalue 0 ? 0.5 : -0.5);/ 大于 0 加 0.5,小于0 減 0.5155 return value;156 157158unsigned char const timeCount = 3;/ 動(dòng)態(tài)掃描的時(shí)間間隔159 / 顯示當(dāng)前溫度值 , 精確到小數(shù)點(diǎn)后一位160 / 若先位選再段選 , 由于 IO 口默認(rèn)輸出高電平 , 所以當(dāng)先位選會(huì)使數(shù)碼管出現(xiàn)亂碼161 void display( int v)162 163 unsignedchar count;164unsignedchar datas = 0, 0, 0, 0, 0;165unsignedint tmp = abs(v);166 datas0 = tmp / 10000;167 datas1 = tmp % 10000 / 1000;168 datas2 = tmp % 1000 / 100;16

溫馨提示

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