久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 19051|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

最全面DS18B20中文資料

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:290321 發(fā)表于 2018-3-11 11:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
DS18B20
14.1概念 .
這一章 是關(guān)于 DS18B20 實(shí)時(shí)溫 度傳感器。 相信有學(xué)過(guò) c51 單片機(jī) 的朋友都對(duì) 他不陌生
吧。我恰恰也學(xué)習(xí)過(guò),不過(guò)當(dāng)初并沒(méi)有掌握好。學(xué)習(xí)板搭配的 DS18B20,一般上給人的
感覺(jué)有點(diǎn) 像三極管,其實(shí) DS18B20 的內(nèi)部結(jié) 構(gòu)與原理也挺猥 瑣的,但是我們使 用也是
為了實(shí)現(xiàn)溫度傳感的功能而已,基本上不會(huì)介紹過(guò)度深入。



14.2DS18B20介紹


DS18B20 有三只引腳,VCC,DQ ,和 VDD。




而 HJ-2G 板子上,采用了外部供電的鏈接方式,而總線必須鏈接上拉電阻。這一目的告 訴我們,一線總線在空置狀態(tài)時(shí),都是一直處于高電平。





DS18B20 的 內(nèi) 部 有 64 位 的ROM 單元,和 9 字節(jié)的暫存器單 元 。 64 位 ROM 包 含 了 ,DS18B20 唯一的序列號(hào)(唯一的名字)。



以上是內(nèi)部 9 個(gè)字節(jié)的暫存單元(包括 EEPROM)。
字節(jié) 0~1 是轉(zhuǎn)換好的溫度。
字節(jié) 2~3 是用戶用來(lái)設(shè)置最高報(bào)警和最低報(bào)警值。這個(gè)可以用軟件來(lái)實(shí)現(xiàn)。
字節(jié) 4 是用來(lái)配置轉(zhuǎn)換精度,9~12 位。
字節(jié) 5~8 就不用看了。


14.3字節(jié) 0~1:轉(zhuǎn)換好的溫度



DS18B20 的溫度操作是使用 16 位,也就是說(shuō)分辨率是 0.0625。BIT15~BIT11 是符號(hào)位,
為了就是表示轉(zhuǎn)換的值是正數(shù)還是負(fù)數(shù)。看看數(shù)據(jù)手冊(cè)給出的例子吧。







要求出正數(shù)的十進(jìn)制值,必須將讀取到的 LSB 字節(jié),MSB 字節(jié)進(jìn)行整合處理,然后乘 以 0.0625 即可。



Eg:假設(shè)從,字節(jié) 0 讀取到 0xD0 賦值于 Temp1,而字節(jié) 1 讀取到 0x07 賦值于 Temp2, 然后求出十進(jìn)制值。



unsigned int Temp1,Temp2,Temperature;


Temp1=0xD0;               // 低八位
Temp2=0x07;               // 高八位


Temperature = ((Temp2<<8 ) | Temp1 ) * 0.0625;
// 又或者
Temperature = (Temp1 + Temp2 *256) * 0.0625;              //Temperature=125


在這里我們遇見了一個(gè)問(wèn)題,就是如何求出負(fù)數(shù)的值呢?很遺憾的,單片機(jī)不像人腦那 樣會(huì)心算,我們必須判斷 BIT11~15 是否是 1,然后人為置一負(fù)數(shù)標(biāo)志。



Eg. 假設(shè)從,字節(jié) 0 讀取到 0x90 賦值于 Temp1,而字節(jié) 1 讀取到 0xFC 賦值于 Temp2, 然后求出該值是不是負(fù)數(shù),和轉(zhuǎn)換成十進(jìn)制值。


  1. unsigned int Temp1,Temp2,Temperature;
  2. unsigned char Minus_Flag=0;


  3. Temp1=0x90;               // 低八位
  4. Temp2=0xFC;               // 高八位


  5. //Temperature = (Temp1 + Temp2 *256) * 0.0625;              //Temperature=64656
  6. // 很明顯不是我們想要的答案
  7. if(Temp2&0xFC)              // 判斷符號(hào)位是否為 1
  8. {
  9. Minus_Flag=1;              // 負(fù)數(shù)標(biāo)志置一
  10. Temperature = ((Temp2<<8 ) | Temp1 )              // 高八位第八位進(jìn)行整合
  11. Temperature= ((~Temperature)+1);               // 求反,補(bǔ)一
  12. Temperature*= 0.0625;              // 求出十進(jìn)制
  13. }              //Temperature=55;
  14. else
  15. {
  16. Minus_Flag=0;
  17. Temperature = ((Temp2<<8 ) | Temp1 ) * 0.0625;
  18. }
復(fù)制代碼




那個(gè)人為的負(fù)數(shù)標(biāo)志,是真的很有用處的。這個(gè)要看你你自己的想象力了,如何去利用它。




繼續(xù)繼續(xù),以上我們是求出沒(méi)有小數(shù)點(diǎn)的正數(shù)。如果我要求出小數(shù)點(diǎn)的值的話,那么我 應(yīng)該這樣做。



Eg:假設(shè)從,字節(jié) 0 讀取到 0xA2 賦值于 Temp1,而字節(jié) 1 讀取到 0x00 賦值于 Temp2, 然后求出十進(jìn)制值,要求連同小數(shù)點(diǎn)也求出。

  1. unsigned int Temp1,Temp2,Temperature;


  2. Temp1=0x90;               // 低八位
  3. Temp2=0xFC;               // 高八位

  4. // 實(shí)際值為 10.125
  5. //Temperature = ((Temp2<<8 ) | Temp1 ) * 0.0625;              //10,無(wú)小數(shù)點(diǎn)
  6. Temperature = ((Temp2<<8 ) | Temp1 ) * (0.0625 * 10) ;       //101 ,一位小數(shù)點(diǎn)
  7. //Temperature = ((Temp2<<8 ) | Temp1 ) * (0.0625 * 100) ;   //1012,二位小數(shù)點(diǎn)
復(fù)制代碼


如以上的例題,我們可以 先將 0.0625 乘以 10,然后再乘以整合后的 Temperature 變量 , 就可以求出后面 一個(gè)小數(shù)點(diǎn)的值(求出更多的小數(shù) 點(diǎn),方法都是以此類推 )。得出的結(jié) 果是 101,然后再利用簡(jiǎn)單的算法,求出每一位的值。



unsinged char Ten,One,Dot1


Ten=Temperature/100;                  //1
One=Temperature%100/10;          //0
Dot1=%10;                                //1


求出負(fù)數(shù)的思路也一樣,只不過(guò)多出人為置一負(fù)數(shù)標(biāo)志,求反補(bǔ)一的動(dòng)作而已。自己發(fā) 揮想象力吧。




14.4字節(jié) 2~3THTL配置
TH 與 TL 就是所 謂的溫度最 高界限,和 溫度最低界 限的配置。 其實(shí)這些可 以使用軟件
來(lái)試驗(yàn),所以就無(wú)視了。



14.5字節(jié) 4:配置寄存器




BIT7 出廠的時(shí)候就已經(jīng)設(shè)置為 0,用戶不建議去更改。而 R1 與 R0 位組合了四個(gè)不同 的轉(zhuǎn)換精度, 00 為 9 位轉(zhuǎn)換精度而轉(zhuǎn)換時(shí)間是 93.75ms,01 為 10 位轉(zhuǎn)換精度而轉(zhuǎn)換 時(shí) 間是 187.5ms,10 為 11 位轉(zhuǎn)換精度而轉(zhuǎn)換時(shí)間是 375ms,11 為 12 位轉(zhuǎn)換精度而轉(zhuǎn)換時(shí) 間是 750ms(默認(rèn))。該寄存器還是留默認(rèn)的好,畢竟轉(zhuǎn)換精度表示了轉(zhuǎn)換的質(zhì)量。





14.6字節(jié) 5~78:保留位,CRC
無(wú)視,無(wú)視吧。



14.7單片機(jī)訪問(wèn) DS18B20
DS18B20 一 般 都是 充 當(dāng) 從 機(jī)的 角 色 , 而單 片 機(jī) 就 是主 機(jī) 。 單 片機(jī) 通 過(guò) 一 線總 線 訪 問(wèn)
DS18B20 的話,需要經(jīng)過(guò)以下幾個(gè)步驟:

1.DS18B20 復(fù)位。
2.執(zhí)行 ROM 指令。
3.執(zhí)行 DS18B20 功能指令(RAM 指令)。


補(bǔ)充一下 。一般上我們都 是使用單點(diǎn),也就 是說(shuō)單線總線上 僅有一個(gè) DS18B20 存在而 已。所以 我們無(wú)需刻意讀 取 ROM里邊的序 列號(hào)來(lái),然后匹 配 那個(gè) DS18B20?而是更 直接的,跳過(guò) ROM 指令,然后直接執(zhí)行 DS18B20 功能指令。


DS18B20 復(fù)位,在某種意義上就是一次訪問(wèn) DS18B20 的開始,或者可說(shuō)成是開始信號(hào)。


ROM 指令,也就是訪問(wèn),搜索,匹配,DS18B20 個(gè)別的 64 位序列號(hào)的動(dòng)作。在單點(diǎn)情 況下,可以直接跳過(guò) ROM 指令。而跳過(guò) ROM 指令的字節(jié)是 0xCC。



DS18B20 功能指令有很多種,我就不一一的介紹了 ,數(shù)據(jù)手冊(cè)里有更詳細(xì)的介紹。這里 僅列出比較常用的幾個(gè) DS18B20功能指令。


0x44:開始轉(zhuǎn)換溫度。轉(zhuǎn)換好的溫度會(huì)儲(chǔ)存到暫存器字節(jié) 0 和 1。
0xEE :讀暫存指令。讀暫存指令,會(huì)從暫存器 0 到 9,一個(gè)一個(gè)字節(jié)讀取,如果要停止
的話,必須寫下 DS18B20 復(fù)位。



14.8DS18B20復(fù)位



DS18B20 的復(fù)位時(shí)序如下:
1.單片機(jī)拉低總線 480us~950us, 然后釋放總線(拉高電平)。
2.這時(shí) DS18B20 會(huì)拉低信號(hào),大約 60~240us 表示應(yīng)答。
3.DS18B20 拉低電平的 60~240us 之間,單片機(jī)讀取總線的電平,如果是低電平,那么表示復(fù)位成功。
4.DS18B20 拉低電平 60~240us 之后,會(huì)釋放總線。




C 語(yǔ)言代碼:


//DS1302 復(fù)位 函數(shù)
void DS1302_Res et()

{

DDRA|=BIT(DQ);              //DQ 為輸 出狀態(tài) PORTA&=~BIT(DQ);               //輸出 低電平Delay_1us (500);              //延遲 500 微妙 PORTA|=BIT(DQ);              //示范 總線 Delay_1us(60);              //延遲 60 微妙 DDRA&=~BIT(DQ);               //DQ 位輸 出狀態(tài)

while(PINA&BIT (DQ));               //等待 從機(jī) DS18B20 應(yīng)答 (低電 平有效 )
while(!(PINA&BIT(DQ)));              //等待 從機(jī) DS18B20 釋放 總線
}



14.9DS18B20讀寫邏輯 01







DS18B20 寫邏 輯 0 的步 驟如下 :
1.單片 機(jī)拉低 電平大 約 10~15us ,。
2.單片 機(jī)持續(xù) 拉低電 平大約 20~45us 的時(shí) 間。
3.釋放 總線
DS18B20 寫邏 輯 1 的步 驟如下 :
1.單片 機(jī)拉低 電平大 約 10~15us ,。
2.單片 機(jī)拉高 電平大 約 20~45us 的時(shí) 間。
3.釋放 總線


DS18B20 讀邏 輯 0 的步 驟如下 :
1.在讀 取的時(shí) 候單片 機(jī)拉低 電平大 約 1us
2.單片 機(jī)釋放 總線, 然后讀 取總線 電平。
3.這時(shí) 候 DS18B20 會(huì)拉 低電平 。
4.讀取 電平過(guò) 后,延 遲大約 40~45 微妙
DS18B20 讀邏 輯 1 的步 驟如下 :
1.在讀 取的時(shí) 候單片 機(jī)拉低 電平大 約 1us
2.單片 機(jī)釋放 總線, 然后讀 取總線 電平。
3.這時(shí) 候 DS18B20 會(huì)拉 高電平 。
4.讀取 電平過(guò) 后,延 遲大約 40~ 45 微妙




如果要讀或者寫 一個(gè)字節(jié),就要重復(fù)以上的步驟八 次。如以下的 C 代碼,使用 for 循環(huán),和數(shù)據(jù)變 量的左移和或運(yùn)算,實(shí)現(xiàn)一個(gè)字節(jié)讀與寫。

  1. //DS18B20 寫字 節(jié)函數(shù)
  2. void DS1302_Write(uns igned char Data)

  3. {
  4. unsigned char i;
  5. DDRA|=BIT(DQ);              //DQ 為輸 出
  6. for(i=0;i<8;i++)

  7. {
  8. PORTA&=~BIT(DQ);               //拉低 總線
  9. Delay_1us (10);              //延遲 10 微妙 (最大 15 微妙 )


  10. if(Data&0x01) PORTA|=BIT(DQ);

  11. els e PORTA&=~BIT(DQ);
  12. Delay_1us (40);              //延遲 40 微妙 (最大 45 微妙 )


  13. PORTA|=BIT(DQ);              //釋放 總線
  14. Delay_1us (1);              //稍微 延遲
  15. Data>>=1;

  16. }
  17. }


  18. //DS18B20 讀字 節(jié)函數(shù)
  19. unsigned char DS1302_Read()

  20. {
  21. unsigned char i,Temp;


  22. for(i=0;i<8;i++)

  23. {
  24. Temp>>=1;               //數(shù)據(jù) 右移


  25. DDRA|=BIT(DQ);              //DQ 為輸 出狀態(tài)
  26. PORTA&=~BIT(DQ);               //拉低 總線, 啟動(dòng)輸 入 PORTA|=BIT(DQ);              //釋放 總線 DDRA&=~BIT(DQ);              //DQ 為輸 入狀態(tài)


  27. if(PINA&BIT(DQ)) Temp|=0x80;
  28. Delay_1us (45);              //延遲 45 微妙 (最大 45 微妙 )
  29. }

  30. return Temp;
  31. }
復(fù)制代碼



就是這么建檔而已 ,不過(guò)這里有一個(gè)注意點(diǎn),就是 Delay_1us(); 函數(shù)延遲的時(shí)間, 必須模擬非常準(zhǔn)
確,因?yàn)閱尉總線對(duì)時(shí)序的要求敏感點(diǎn)。




14.10簡(jiǎn)單歸納 實(shí)驗(yàn)開始之前,簡(jiǎn)單的歸納一些重點(diǎn)。單線總線高電平為閑置狀態(tài)。單片機(jī)訪問(wèn) DS18B20 必須遵守, DS18B20 復(fù)位-->執(zhí)行 ROM 指令-->執(zhí)行 DS18B20 功能指令。而在單點(diǎn)上, 可以直接跳過(guò) ROM 指令。DS18B20 的轉(zhuǎn)換精度默認(rèn)為 12 位,而分辨率是 0.0625。


DS18B20 溫度讀取函數(shù)參考步驟:

DS18B20 開始轉(zhuǎn)換:
1.DS18B20 復(fù)位。
2.寫入跳過(guò) ROM 的字節(jié)命令,0xCC。
3.寫入開始轉(zhuǎn)換的功能命令,0x44。
4.延遲大約 750~900 毫秒

DS18B20 讀暫存數(shù)據(jù):
1.DS18B20 復(fù)位。
2.寫入跳過(guò) ROM 的字節(jié)命令,0xCC。
3.寫入讀暫存的功能命令,0xee。
4.讀入第 0 個(gè)字節(jié) LS Byte,轉(zhuǎn)換結(jié)果的低八位。
5.讀入第 1 個(gè)字節(jié) MS Byte,轉(zhuǎn)換結(jié)果的高八位。
6.DS18B20 復(fù)位,表示讀取暫存結(jié)束。

數(shù)據(jù)求出十進(jìn)制:
1.整合 LS Byte 和 MS Byte 的數(shù)據(jù)
2.判斷是否為正負(fù)數(shù)(可選)
3.求得十進(jìn)制值。正數(shù)乘以 0.0625,一位小數(shù)點(diǎn)乘以 0.625,二位小數(shù)點(diǎn)乘以 6.25。
4.十進(jìn)制的“個(gè)位”求出。



14.11實(shí)驗(yàn):利用 DS18B20實(shí)現(xiàn)單點(diǎn)溫度測(cè)量,結(jié)果輸出在數(shù)碼管。



DS18B20 接口               ATMega 16 對(duì)應(yīng)引腳


實(shí)驗(yàn)的要求是以 DS18B20 默認(rèn)的配置,亦即 12 位的轉(zhuǎn)換精度。然而輸出的結(jié)果為兩個(gè) 小數(shù)點(diǎn) xx.xx。HJ-2G 板子上設(shè)計(jì)得DS18B20 的接口和典型,沒(méi)有什么特別需要注意的。 而 DS18B20 DQ 引腳對(duì)應(yīng)的鏈接是 PA5。



源碼:
  1. ===================================================================
  2. //1400-DS18B20.c
  3. //簡(jiǎn)單 的驅(qū)動(dòng) 程式
  4. //akuei2 08-01-10


  5. #include "iom16v.h"

  6. #include "macros .h"

  7. #include "LED7.h"


  8. #define DQ PA5


  9. //微妙 級(jí)延遲 函數(shù)
  10. void Delay_1us (unsigned int x)

  11. {

  12. unsigned int i;
  13. x=x*5/4;

  14. for( i=0;i<x;i++);

  15. }


  16. //DS1302 復(fù)位 函數(shù)
  17. void DS1302_Res et()

  18. {

  19. DDRA|=BIT(DQ);              //DQ 為輸 出狀態(tài) PORTA&=~BIT(DQ);               //輸出 低電平 Delay_1us(500);              //延遲 500 微妙 PORTA|=BIT(DQ);              //示范 總線 Delay_1us (60);              //延遲60 微妙 DDRA&=~BIT(DQ);               //DQ 位輸 出狀態(tài)
  20. while(PINA&BIT (DQ));               //等待 從機(jī) DS18B20 應(yīng)答 (低電 平有效 )
  21. while(!(PINA&BIT(DQ)));              //等待 從機(jī) DS18B20 釋放 總線
  22. }


  23. //DS1302 寫字 節(jié)函數(shù)
  24. void DS1302_Write(uns igned char Data)

  25. {
  26. unsigned char i;
  27. DDRA|=BIT(DQ);              //DQ 為輸 出
  28. for(i=0;i<8;i++)

  29. {
  30. PORTA&=~BIT(DQ);               //拉低 總線
  31. Delay_1us (10);              //延遲 10 微妙 (最大 15 微妙 )


  32. if(Data&0x01) PORTA|=BIT(DQ);

  33. els e PORTA&=~BIT(DQ);
  34. Delay_1us (40);              //延遲 40 微妙 (最大 45 微妙 )


  35. PORTA|=BIT(DQ);              //釋放 總線
  36. Delay_1us (1);              //稍微 延遲
  37. Data>>=1;

  38. }

  39. }


  40. //DS1302 讀字 節(jié)函數(shù)
  41. unsigned char DS1302_Read()

  42. {

  43. unsigned char i,Temp;


  44. for(i=0;i<8;i++)

  45. {
  46. Temp>>=1;               //數(shù)據(jù) 右移


  47. DDRA|=BIT(DQ);              //DQ 為輸 出狀態(tài)
  48. PORTA&=~BIT(DQ);               //拉低 總線, 啟動(dòng)輸 入 PORTA|=BIT(DQ);              //釋放 總線 DDRA&=~BIT(DQ);               //DQ為輸 入狀態(tài)


  49. if(PINA&BIT(DQ)) Temp|=0x80;
  50. Delay_1us (45);              //延遲 45 微妙 (最大 45 微妙 )
  51. }


  52. return Temp;
  53. }


  54. //讀溫 度函數(shù)
  55. unsigned int Read_Temperature()

  56. {
  57. unsigned int Temp1,Temp2;


  58. DS1302_Res et();               //DS1302 復(fù)位
  59. DS1302_Write(0xCC);              //跳過(guò) ROM DS1302_Write(0x44);              //溫度 轉(zhuǎn)換


  60. DS1302_Res et();               //DS1302 復(fù)位
  61. DS1302_Write(0xCC);              //跳過(guò) ROM DS1302_Write(0xbe);              //讀取 RAM


  62. Temp1=DS1302_Read();               //讀低 八位, LS Byte, RAM0
  63. Temp2=DS1302_Read();               //讀高 八位, MS Byte, RAM1
  64. DS1302_Res et();               //DS1302 復(fù)位 ,表示 讀取結(jié) 束


  65. return (((Temp2<<8)|Temp1)*6.25); //0.0625=xx, 0.625=xx.x, 6.25=xx.xx




  66. }


  67. void main()

  68. {

  69. unsigned int Temp;
  70. LED7_Init();              //初始 化數(shù)碼 管引腳
  71. while(1)

  72. {
  73. Temp=Read_Temperature();               //調(diào)用 讀取溫 度函數(shù) Number_Show(Temp);               //顯示 溫度Delay_1us (100);              //稍微 延遲
  74. }


  75. }



  76. LED7.h 的頭文件
  77. ===================================================================
  78. //LED7.H
  79. // 數(shù)碼管顯示


  80. // 數(shù)組聲明并定義在存儲(chǔ)數(shù)據(jù)區(qū) code
  81. //0~9


  82. #pragma data:code
  83. unsigned              char              const
  84. Number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,}; unsigned char const Number_Dot[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00};


  85. // 延遲函數(shù)
  86. void Delay(unsigned long x)
  87. {
  88. while(x--);
  89. }


  90. // 數(shù)碼管顯示函數(shù)
  91. void Number_Show(unsigned int Num)
  92. {

  93. unsigned char Ten,One,Dot1,Dot2; Ten=Num/1000;                             // 取十位 One=Num%1000/100;                             // 取個(gè)位Dot1=Num%100/10;              // 取點(diǎn)數(shù)位 Dot2=Num%10;              // 取點(diǎn)數(shù)位


  94. // 顯示十位

  95. PORTB=Number[Ten]; // 送模碼 PORTA|=BIT(PA3);              //PA3 高電平PORTA&=~BIT(PA3);                            //PA3 低電平
  96. PORTB=~BIT(0);              //送位選
  97. PORTA|=BIT(PA4);              //PA3 高電平
  98. PORTA&=~BIT(PA4);              //PA3 低電平
  99. Delay(600);              // 稍微延遲


  100. // 顯示個(gè)位
  101. PORTB=Number_Dot[One];              // 送模碼
  102. PORTA|=BIT(PA3);              //PA3 高電平
  103. PORTA&=~BIT(PA3);              //PA3 低電平


  104. PORTB=~BIT(1);              //送位選
  105. PORTA|=BIT(PA4);              //PA3 高電平
  106. PORTA&=~BIT(PA4);              //PA3 低電平
  107. Delay(600);              // 稍微延遲


  108. // 顯示點(diǎn)數(shù)位 1
  109. PORTB=Number[Dot1];              //送模碼
  110. PORTA|=BIT(PA3);              //PA3 高電平
  111. PORTA&=~BIT(PA3);              //PA3 低電平


  112. PORTB=~BIT(2);              //送位選
  113. PORTA|=BIT(PA4);              //PA3 高電平
  114. PORTA&=~BIT(PA4);              //PA3 低電平
  115. Delay(600);              // 稍微延遲


  116. // 顯示點(diǎn)數(shù)位 2
  117. PORTB=Number[Dot2];              //送模碼
  118. PORTA|=BIT(PA3);              //PA3 高電平
  119. PORTA&=~BIT(PA3);              //PA3 低電平


  120. PORTB=~BIT(3);              //送位選
  121. PORTA|=BIT(PA4);              //PA3 高電平
  122. PORTA&=~BIT(PA4);              //PA3 低電平
  123. Delay(600);              // 稍微延遲


  124. // 顯示`
  125. PORTB=0x63;              // 送模碼
  126. PORTA|=BIT(PA3);              //PA3 高電平
  127. PORTA&=~BIT(PA3);              //PA3 低電平


  128. PORTB=~BIT(4);              //送位選
  129. PORTA|=BIT(PA4);              //PA3 高電平






  130.         

  131. PORTA&=~BIT(PA4);Delay(600);
  132.         
  133. //PA3 低電平
  134. // 稍微延遲
  135. // 顯示 C
  136.         

  137. PORTB=0x39;PORTA|=BIT(PA3);PORTA&=~BIT(PA3);
  138.         
  139. // 送模碼
  140. //PA3 高電平
  141. //PA3 低電平

  142. PORTB=~BIT(5);
  143.         
  144. //送位選

  145. PORTA|=BIT(PA4);PORTA&=~BIT(PA4);Delay(1000);
  146.         
  147. //PA3 高電平
  148. //PA3 低電平
  149. // 稍微延遲

  150. }
  151.         
  152.         

  153. //IO 初始化函數(shù)
  154. void LED7_Init()
  155. {
  156. DDRA|=BIT(PA3);              //PA3 狀態(tài)為輸出
  157. DDRA|=BIT(PA4);              //PA4 狀態(tài)為輸出
  158. DDRB|=0xff;              //PB 狀態(tài)為輸出
  159. }
復(fù)制代碼



以上的程式只有一個(gè)注意點(diǎn)就是 :DS18B20 的轉(zhuǎn)啟動(dòng)換頻率不要超過(guò) 750ms。其他的沒(méi) 有什么需要特別注意了。




14.12一個(gè)多點(diǎn)測(cè)溫的假想




以上是多點(diǎn)測(cè)溫的一個(gè)假想,就是利用 GND 作于片選的角色。該方法有一個(gè)好處就是可以省去猥瑣
的 ROM 指令,但是最為代價(jià)需要犧牲 IO 口,而且還控制好每一個(gè) DS18B20 的執(zhí)行次序。

DS18B20中文資料--最全版.doc

50 KB, 下載次數(shù): 61, 下載積分: 黑幣 -5

z

最全面DS18B20中文資料.pdf

340.54 KB, 下載次數(shù): 124, 下載積分: 黑幣 -5

z

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:259979 發(fā)表于 2018-3-11 21:35 來(lái)自觸屏版 | 只看該作者
謝謝分享。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:296540 發(fā)表于 2018-3-28 15:07 | 只看該作者
謝謝謝謝
回復(fù)

使用道具 舉報(bào)

地板
ID:412309 發(fā)表于 2018-10-19 15:39 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:118535 發(fā)表于 2018-10-31 21:42 | 只看該作者
感謝LZ的無(wú)私分享~~
回復(fù)

使用道具 舉報(bào)

6#
ID:434779 發(fā)表于 2018-11-29 15:51 | 只看該作者
學(xué)習(xí)AVR不錯(cuò)的教材!
回復(fù)

使用道具 舉報(bào)

7#
ID:26864 發(fā)表于 2018-12-3 13:34 | 只看該作者
感謝樓主分享,好新鮮的日期
回復(fù)

使用道具 舉報(bào)

8#
ID:155151 發(fā)表于 2019-5-17 21:33 | 只看該作者
不錯(cuò),感謝分享
回復(fù)

使用道具 舉報(bào)

9#
ID:480627 發(fā)表于 2020-1-26 18:31 | 只看該作者
WORD里面怎么圖片都沒(méi)了哦。。。
回復(fù)

使用道具 舉報(bào)

10#
ID:627832 發(fā)表于 2020-3-16 22:34 | 只看該作者
word里沒(méi)有圖片啊
回復(fù)

使用道具 舉報(bào)

11#
ID:701939 發(fā)表于 2020-3-23 17:34 | 只看該作者
感謝,非常感謝樓主的熱心
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人91在线 | 欧美网址在线观看 | 成人在线一区二区三区 | 一区二区在线视频 | 亚洲a视频 | 国产美女视频黄a视频免费 国产精品福利视频 | 精品九九九 | 午夜影院在线 | 成人免费视频网站在线看 | 青青久久 | 精品视频在线播放 | 亚洲色图婷婷 | 黄色片网站国产 | 精品日韩一区二区 | 韩国久久精品 | 精品视频一区二区 | 久久亚洲一区 | 精品欧美乱码久久久久久1区2区 | av黄色在线 | 国产精品伦一区二区三级视频 | av天天干 | 久久精品色视频 | 国产91黄色 | 男女羞羞视频在线看 | 中文字幕成人在线 | 日韩一区和二区 | 看真人视频一级毛片 | 一区二区三区久久久 | 91爱啪啪| 久久国产精品免费视频 | 久久久免费精品 | 一区二区三区四区国产精品 | 国产综合久久久久久鬼色 | 黑人精品 | 男插女下体视频 | 一区二区三区四区在线视频 | 91精品一区二区三区久久久久 | 亚洲综合视频 | 国产成人午夜高潮毛片 | 欧美精品久久久久 | 国产成人免费视频网站视频社区 |