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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機DS18B20多路溫度采集顯示 Proteus仿真程序

查看數: 6259 | 評論數: 19 | 收藏 13
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2021-10-15 23:27

正文摘要:

本帖最后由 Lxy18 于 2021-10-31 23:51 編輯 認真學習了DS18B20的手冊,發現DS18B20單總線實現多路采集,需要讀取ROM指令,通過ROM指令讀取指定的DS18B20溫度。操作相當麻煩,參考了CSDN的例子,最后還是沒搞出來 ...

回復

ID:1110110 發表于 2024-2-25 10:59
可以分享一下全套源碼嗎?
ID:73422 發表于 2024-2-18 20:58
可以并行一次性讀取8個DS18B20里的數據放入8個單元的數組里,然后對這些數據進行處理就可以了。這個方法程序簡單,不需要多余的電路,也不用讀ID,就是要占用8個IO口。
ID:383215 發表于 2024-1-26 18:35
Lxy18 發表于 2024-1-26 11:25
前面已經說明,最開始匹配rom的程序沒做出來,所以才選擇這個方案,雖然增加了io口,增加了一個芯片,但 ...

如果僅僅是交作品混學分,就沒有討論的意義了,就算是交作品混學分,用匹配ROM或者8個I/O口讀出8個18B20的溫度,你的老師為你負責的話,得到的學分更高才對,最關鍵可以提高自己的編程水平。
ID:856329 發表于 2024-1-26 11:25
kmsj 發表于 2024-1-25 17:47
單片機的應用思路,就是要用好單片機的內部資源包括程序讓外圍電路越簡單越好,樓主增加74HC4051讓單片機編 ...

前面已經說明,最開始匹配rom的程序沒做出來,所以才選擇這個方案,雖然增加了io口,增加了一個芯片,但是可以實現功能,而且相對于匹配rom替換DS18B20不需要重新讀取rom,不需要修改程序。各有優缺點。工程角度肯定考慮成本,但是這僅僅是學習交流使用,交作品用的。
ID:1110110 發表于 2024-1-25 20:15
請教一下關于lcd1602的代碼怎樣編寫
ID:383215 發表于 2024-1-25 17:47
單片機的應用思路,就是要用好單片機的內部資源包括程序讓外圍電路越簡單越好,樓主增加74HC4051讓單片機編程變的簡單的思路完全背離了單片機應用的基本思路,肯定是不可取的。雖然74HC4051只是幾毛錢,但是,增加了74HC4051電路就復雜了,增加74HC4051讀寫8個18B20,依然用掉單片機的4個I/O口,相當于用4個I/O口換取8個18B20的讀寫,還增加了一片74HC4051,一點也不劃算。單片機讀取8個18B20溫度的正確編程思路只有兩個,一個是用8個I/O口連接8個18B20,編程思路是同時對8個18B20做初始化和跳過ROM指令的操作,然后把8個18B20的溫度讀出來,另一個是8個18B20的8個單總線接單片機的一個I/O口,用匹配ROM的方法把每一個18B20的溫度讀出來,無論是8個I/O口接8個18B20還是8個18B20的8個單總線接單片機的一個I/O口,都可以用細化到步的編程方法,提高單片機的CPU應用率,頂多是讀取溫度的時間慢一點而已(最多慢零點零幾秒到零點幾秒),溫度是一個漸變的過程,讀取溫度的時間慢一點對絕大多數的溫度控制毫無影響。個人意見,僅供參考。

評分

參與人數 2黑幣 +25 收起 理由
liang1981 + 5 正確思路
admin + 20 回帖助人的獎勵!

查看全部評分

ID:1110110 發表于 2024-1-25 15:34
太感謝了,DIY小玩意就做關于這個的方向,只不過是需要將讀取的八路溫度數據傳輸到labview上位機進行檢測,作者是否對labview上位機有研究?
ID:1016228 發表于 2022-4-6 21:21
lkc8210 發表于 2022-1-20 14:29
對~
但IO口的讀寫不能直接P00 = 1 或 if(P00)
要參考arduino的寫法
  1. #include "reg52.h"

  2. void digitalWrite(char PinNum, bit Command){
  3.         if(Command){
  4.                 P1 |= 0x01 << PinNum;
  5.         }else{
  6.                 P1 &= ~(0x01 << PinNum);
  7.         }
  8. }

  9. bit digitalRead(char PinNum){
  10.         if(P1 & (0x01<<PinNum))
  11.                 return 1;
  12.         else
  13.                 return 0;
  14. }

  15. //單總線延時函數
  16. void Delay_OneWire(unsigned int t){
  17.   while(t--);
  18. }

  19. //通過單總線向DS18B20寫一個字節
  20. void Write_DS18B20(unsigned char N,unsigned char dat){
  21.   unsigned char i;
  22.   for(i=0;i<8;i++){
  23.     digitalWrite(N,0);
  24.     digitalWrite(N,dat&0x01);
  25.     Delay_OneWire(5);
  26.     digitalWrite(N,1);
  27.     dat >>= 1;
  28.   }
  29.   Delay_OneWire(5);
  30. }

  31. //從DS18B20讀取一個字節
  32. unsigned char Read_DS18B20(unsigned char N){
  33.   unsigned char i;
  34.   unsigned char dat;

  35.   for(i=0;i<8;i++){
  36.     digitalWrite(N,0);
  37.     dat >>= 1;
  38.     digitalWrite(N,1);
  39.     if(digitalRead(N)){
  40.       dat |= 0x80;
  41.     }            
  42.     Delay_OneWire(5);
  43.   }
  44.   return dat;
  45. }

  46. //DS18B20設備初始化
  47. bit init_ds18b20(unsigned char N){
  48.   bit initflag = 0;
  49.          
  50.   digitalWrite(N,1);
  51.   Delay_OneWire(12);
  52.   digitalWrite(N,0);
  53.   Delay_OneWire(80);
  54.   digitalWrite(N,1);
  55.   Delay_OneWire(10);
  56.   initflag = digitalRead(N);
  57.   Delay_OneWire(5);
  58.   
  59.   return initflag;
  60. }

  61. unsigned int rd_temperature(unsigned char N){
  62.   unsigned char low, high;

  63.   init_ds18b20(N);                               // 初始化
  64.   Write_DS18B20(N,0xCC);                          // 跳過ROM
  65.   Write_DS18B20(N,0x44);                          // 啟動溫度轉換

  66.   init_ds18b20(N);
  67.   Write_DS18B20(N,0xCC);
  68.   Write_DS18B20(N,0xBE);                          // 讀取寄存器
  69.   low = Read_DS18B20(N);                         // 低字節
  70.   high = Read_DS18B20(N);                        // 高字節

  71.   return (high<<8)+low;
  72. }
復制代碼
就這個代碼,rd_temperature函數讀數據
ID:1016228 發表于 2022-4-6 21:19
lkc8210 發表于 2022-1-20 14:29
對~
但IO口的讀寫不能直接P00 = 1 或 if(P00)
要參考arduino的寫法

哦,就是把所有的P0^n=i;換成digitalWrite(n,i)。P0^n換成digitalRead(n),是嗎?
我這樣做了,可是出錯了呀,數據讀不出來
ID:1016228 發表于 2022-4-6 20:47
lkc8210 發表于 2022-1-20 14:29
對~
但IO口的讀寫不能直接P00 = 1 或 if(P00)
要參考arduino的寫法

這兩個函數什么意思啊,能吧根據參數選擇IO口寫具體點嗎,單片機,求求大佬解惑了
ID:856329 發表于 2022-3-14 08:50
lkc8210 發表于 2022-1-20 14:29
對~
但IO口的讀寫不能直接P00 = 1 或 if(P00)
要參考arduino的寫法

原來如此,學到了學到了。
ID:161164 發表于 2022-1-20 14:29
Lxy18 發表于 2022-1-20 11:45
按你所說,用8個IO口接8個18B20,溫度讀取函數設置通道選擇參數(IO口不能作為參數輸入),那在函數中如何 ...

對~
但IO口的讀寫不能直接P00 = 1 或 if(P00)
要參考arduino的寫法
  1. void digitalWrite(char PinNum, bit Command){
  2.         if(Command){
  3.                 P0 |= 0x01 << PinNum;
  4.         }else{
  5.                 P0 &= ~(0x01 << PinNum);
  6.         }
  7. }
  8. bit digitalRead(char PinNum){
  9.         if(P0 & (0x01<<PinNum))
  10.                 return 1;
  11.         else
  12.                 return 0;
  13. }
復制代碼
ID:856329 發表于 2022-1-20 11:45
vscos 發表于 2021-12-13 07:38
不是程序多,是那個程序要改成多端口的,你是從網上抄來的吧!網上那個只能用一個端口,你要是只改函數名, ...

按你所說,用8個IO口接8個18B20,溫度讀取函數設置通道選擇參數(IO口不能作為參數輸入),那在函數中如何根據輸入的通道切換操作的IO口?
ID:856329 發表于 2022-1-20 11:40
vscos 發表于 2021-12-13 07:38
不是程序多,是那個程序要改成多端口的,你是從網上抄來的吧!網上那個只能用一個端口,你要是只改函數名, ...

程序原創的!!io作為函數參數,就不可能實現,我也想過這樣,F在單總線ROM方式已經搞出來了。
ID:654797 發表于 2021-12-13 07:38
不是程序多,是那個程序要改成多端口的,你是從網上抄來的吧!網上那個只能用一個端口,你要是只改函數名,就想用肯定多了,你要將程序的函數都改成有參數的,調用時通過參數確定用那個端口,這樣可以減少代碼量
ID:654797 發表于 2021-12-13 07:27
Lxy18 發表于 2021-10-31 23:33
發現被人拿到咸魚賣了,30元一個

這都有人買呀
ID:744809 發表于 2021-11-3 15:07
可以直接把八路都接到一根引腳的,然后用ID的方式去讀不同芯片的溫度
ID:856329 發表于 2021-10-31 23:33
發現被人拿到咸魚賣了,30元一個
ID:795427 發表于 2021-10-31 20:18
采用74HC4051思路方法不錯。學習學習!

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品亚洲 | 欧美黄色片 | 爱爱爱av | 成年男女免费视频网站 | 欧美 日韩 亚洲91麻豆精品 | av不卡一区 | 亚洲精品一区二区三区中文字幕 | 91精品国产一区 | 男人久久天堂 | 国产伦精品一区二区 | 亚洲性在线 | 欧美日韩国产精品激情在线播放 | 一区二区三区日 | 国产电影一区二区三区爱妃记 | 麻豆精品一区二区三区在线观看 | 久久丁香 | 国产亚洲网站 | 日韩欧美三级 | 国产精品美女久久久久久久网站 | 这里只有精品99re | 久久久免费电影 | 免费a级毛片在线播放 | 欧美精品一区二区三区一线天视频 | 欧美一级www片免费观看 | 亚洲免费一区 | 丁香综合 | 在线免费观看日本视频 | 国产婷婷| 国产精品一区在线观看 | 国产精品久久久99 | 国产精品久久久久久久久久免费看 | 精品无码久久久久久久动漫 | 夜夜夜操| 在线伊人 | 91久久精品国产免费一区 | 日本午夜免费福利视频 | 老司机67194精品线观看 | 国产91久久久久久久免费 | 欧美一级免费观看 | 一区二区av在线 | 91精品久久 |