單片機元件學習

DS18B20溫度傳感器

51(stc8h8k64u)

簡介

ds18B20是使用單總線的元器件

代碼

/*---------------------------------------------------------------------	*/
/* ------------------------ For STC8H MCU -----------------------------	*/
/* --- Web:			www.STCAI.com -----------------------------------------	*/
/* --- BBS:			www.STCAIMCU.com  -------------------------------------	*/
/* --- Email:		liulixun@zcst.edu.cn ----------------------------------	*/
/*		如果要在程序中使用此代碼,請在程序中注明使用了LiuLixun的資料及程序		*/
/*---------------------------------------------------------------------	*/
#include	"DS18B20.h"
//========================================================================
// 描述: DS18B20初始化.
// 參數: none.
// 返回: none.
//========================================================================
void ds18b20_init()
{DS18B20_DQ_MODE;//雙向IO口
}//========================================================================
// 描述: DS18B20特定延時函數.
// 參數: none.
// 返回: none.
//========================================================================
#if 1
void ds18b20_delay_us(uint8 us)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}while(--us);
}
#endif
//========================================================================
// 描述: DS18B20總線復位.
// 參數: none.
// 返回: none.
//========================================================================
#if 1
uint8 ds18b20_reset()
{uint8 ds18b20_retry;ds18b20_retry = 0;while (1){ds18b20_retry++;if(ds18b20_retry >= 10)return 1;DS18B20_DQ = 1; DS18B20_DQ = 0;                     //送出低電平復位信號ds18b20_delay_us(240);      //延時至少480usds18b20_delay_us(240);DS18B20_DQ = 1;                     //釋放數據線ds18b20_delay_us(60);       //等待60usif(!DS18B20_DQ)                    //檢測存在脈沖{ds18b20_delay_us(240);      //等待設備釋放數據線ds18b20_delay_us(180);return 0;}ds18b20_delay_us(240);      //等待設備釋放數據線ds18b20_delay_us(180);}
}
#endif
//========================================================================
// 描述: 從DS18B20讀1字節數據.
// 參數: none.
// 返回: 1字節數據.
//========================================================================
#if 1
uint8 ds18b20_read_byte()
{uint8 i;uint8 dat = 0;for (i=0; i<8; i++)             //8位計數器{dat >>= 1;DS18B20_DQ = 0;                     //開始時間片ds18b20_delay_us(1);                //延時等待DS18B20_DQ = 1;                     //準備接收ds18b20_delay_us(1);                //接收延時if (DS18B20_DQ) dat |= 0x80;        //讀取數據ds18b20_delay_us(60);               //等待時間片結束}return dat;
}
#endif
//========================================================================
// 描述: 向DS18B20寫1字節數據.
// 參數: 1字節數據.
// 返回: none.
//========================================================================
#if 1
void ds18b20_write_byte(uint8 dat)
{char i;for (i=0; i<8; i++)             //8位計數器{DS18B20_DQ = 0;                     //開始時間片ds18b20_delay_us(1);                //延時等待dat >>= 1;                  //送出數據DS18B20_DQ = CY;ds18b20_delay_us(60);               //等待時間片結束DS18B20_DQ = 1;                     //恢復數據線ds18b20_delay_us(1);                //恢復延時}
}
#endif
//========================================================================
// 描述: 讀取溫度.
// 參數: none.
// 返回: 溫度值.
//========================================================================
#if 1
float ds18b20_read_temperature()
{uint16 TempH, TempL, Temperature;uint16 ds18b20_retry;ds18b20_retry = 0;if(ds18b20_reset())      //設備復位{return 255; //返回錯誤代碼}   ds18b20_write_byte(0xCC);        //跳過ROM命令ds18b20_write_byte(0x44);        //開始轉換命令Delay(750);/*下面注釋的代碼就要全部刪除*///    while (!DS18B20_DQ && ds18b20_retry++ < 400)                    //等待轉換完成
//    {
//		Delay(1);
//    }
//    if(ds18b20_retry >= 400)
//    {
//        return 255;  //返回錯誤代碼
//    }if(ds18b20_reset())      //設備復位{return 255; //返回錯誤代碼}  ds18b20_write_byte(0xCC);        //跳過ROM命令ds18b20_write_byte(0xBE);        //讀暫存存儲器命令TempL = ds18b20_read_byte();     //讀溫度低字節TempH = ds18b20_read_byte();     //讀溫度高字節if(TempH & 0xf8)    //如果為負數{// MinusFlag = 1;  //設置負數標志Temperature = (TempH<<8) | TempL;Temperature = ~Temperature+1;return (float)Temperature*-0.625/10.0;}else{//MinusFlag = 0;  //清除負數標志Temperature = (TempH<<8) | TempL; return (float)Temperature*0.625/10.0;	//0.0625 * 10,保留1位小數點}
}
#endif
/*---------------------------------------------------------------------	*/
/* ------------------------ For STC8H MCU -----------------------------	*/
/* --- Web:			www.STCAI.com -----------------------------------------	*/
/* --- BBS:			www.STCAIMCU.com  -------------------------------------	*/
/* --- Email:		liulixun@zcst.edu.cn ----------------------------------	*/
/*		如果要在程序中使用此代碼,請在程序中注明使用了LiuLixun的資料及程序		*/
/*---------------------------------------------------------------------	*/#ifndef __DS18B20_H
#define __DS18B20_H#include "STC8H.h"
#include "Type_def.h"
#include "Delay.h"
//#include 	<intrins.h>#ifndef DS18B20_DQ
#define DS18B20_DQ P24 //DS18B20的數據口
#endif#ifndef DS18B20_DQ_MODE
#define DS18B20_DQ_MODE {P2M1 &= ~0x10;P2M0 |= 0x10;} // P2.4推挽輸出模式
#endifvoid ds18b20_init();                //DS18B20初始化
float ds18b20_read_temperature();   //讀取溫度#endif

注意點

1:傳感器的數據輸出口需要注意更改

2:DQ口需要設置為推挽輸出模式

3:還有一點就是關于轉換溫度后的延時,確保溫度能夠正確的轉換;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920879.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920879.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920879.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring事務管理策略對比與性能優化實踐指南

Spring事務管理策略對比與性能優化實踐指南 問題背景介紹 在現代企業級應用中&#xff0c;事務管理是保障數據一致性與安全性的核心機制。Spring作為主流的Java企業級開發框架&#xff0c;提供了多種事務管理方案&#xff0c;包括編程式事務、聲明式事務以及與第三方分布式事務…

C++“類吸血鬼幸存者”游戲制作的要點學習

古之學者必有師&#xff0c;對于技術的提升&#xff0c;只靠自己的摸索雖然能得到深刻的經驗&#xff0c;但往往沒有較高的效率。筆者這些天學習了BV1eM4m1S74K“提瓦特幸存者”的C開發&#xff0c;也是實現了該類型游戲的開發。今天&#xff0c;就通過經驗總結&#xff0c;親手…

Python OpenCV圖像處理與深度學習:Python OpenCV圖像分割入門

圖像分割&#xff1a;從基礎到實踐 學習目標 通過本課程&#xff0c;學員們將了解圖像分割的基本概念&#xff0c;掌握使用OpenCV實現圖像分割的方法&#xff0c;包括基于閾值的分割和基于區域的分割技術。同時&#xff0c;學員將能夠獨立完成簡單的圖像分割任務&#xff0c;并…

MQ使用場景分析

異步解耦?系統間通過消息隊列通信&#xff0c;降低耦合度&#xff08;如訂單系統與庫存系統&#xff09;典型場景&#xff1a;電商下單后異步通知物流系統?流量削峰?應對突發流量&#xff0c;將請求暫存到消息隊列逐步處理典型場景&#xff1a;秒殺活動時緩沖高并發請求?數…

人工智能學習:NLP文本處理的基本方法

一、分詞 1、分詞介紹 概念 分詞就是將連續的字序列按照一定的規范重新組合成詞序列的過程。在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符。分詞過程就是找到這樣分界符的過程…

Vue3 中 Proxy 在組件封裝中的妙用

目錄 Vue3 中 Proxy 在組件封裝中的妙用&#xff1a;讓組件交互更優雅 組件封裝中的常見痛點 Proxy 是什么&#xff1f; Proxy 在組件封裝中的應用 基礎組件結構 使用 Proxy 實現方法透傳 代碼解析 父組件中的使用方式 Proxy 的其他應用場景 1. 權限控制 2. 方法調用…

DevExpress WinForms中文教程:Data Grid - 過濾編輯器

DevExpress WinForms擁有180組件和UI庫&#xff0c;能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序&#xff0c;無論是Office風格的界面&#xff0c;還是分析處理大批量的業務數據&#xff0c;它都能輕松勝…

華為云CCE

華為云CCE&#xff1a;重構云原生應用的全棧引擎 一、云原生時代的"操作系統" 在數字經濟浪潮中&#xff0c;容器化和微服務架構已成為企業數字化轉型的標配。華為云容器引擎&#xff08;CCE&#xff09;作為云原生領域的"操作系統"&#xff0c;通過深度…

STM32——Uinx時間戳+BKP+RTC實時時鐘

目錄 一、Uinx時間戳 1.1Uinx簡介 1.2UTC/GMT 1.3時間戳轉換 1.3.1主要數據類型 1.3.2主要函數 1.3.3C語言時間戳轉換示例 1.3.4時間格式化說明符 1.3.5注意事項 二、BKP 2.1BKP簡介 2.2BKP基本結構 三、RTC 3.1RTC簡介 3.2RTC框圖 3.3RTC基本結構 3.4RTC硬件…

Java設計模式是什么?核心設計原則有哪些?

文章目錄什么是設計模式&#xff1f;為什么使用設計模式&#xff1f;設計模式的核心設計原則是什么&#xff1f;1. 開閉原則&#xff08;Open-Closed Principle, OCP&#xff09;2. 里氏替換原則&#xff08;Liskov Substitution Principle, LSP&#xff09;3. 依賴倒置原則&am…

網絡層和數據鏈路層

目錄 1.網絡層 2.數據鏈路層 1.網絡層 我們知道&#xff0c;我們的消息為了從A端發送到B端&#xff0c;達成遠距離傳輸&#xff0c;我們為此設計了很多協議層&#xff0c;分別是應用層&#xff0c;傳輸層&#xff0c;網絡層&#xff0c;數據鏈路層&#xff0c;網卡&#xff0c…

Redis 的字典:像智能文件柜一樣高效的哈希表實現

目錄 一、從傳統查找的痛點到哈希表的優勢? 二、哈希表的核心結構&#xff1a;文件柜的構成? 2.1、 dictht 結構體&#xff1a;文件柜本體? 2.2、dictEntry 結構體&#xff1a;帶鏈條的文件夾? 2.2.1、 哈希沖突的解決&#xff1a;抽屜里的鏈條? 2.3、字典的高層封裝…

FAST API部署和使用

第一部分&#xff1a;FastAPI 的使用&#xff08;開發環境&#xff09; 1. 安裝 首先&#xff0c;你需要安裝 FastAPI 和一個 ASGI 服務器&#xff0c;最常用的是 Uvicorn。 pip install "fastapi[standard]"這個命令會安裝 FastAPI 以及所有推薦的依賴&#xff0c;包…

【JavaWeb】之HTML(對HTML細節的一些總結)

大家天天開心&#xff01; 文章目錄 前言一、HTML的簡介二、HTML運行方式三、html 的標簽/元素-說明四、表單注意事項總結 前言 首先我們在把Java基礎學習完之后&#xff0c;我們就要進行網站方面的開發了&#xff0c;我們要了解網頁的組成&#xff0c;而網頁的組成有HTML,CSS,…

互聯網醫院品牌IP的用戶體驗和生態構建

一、患者體驗與信任構建互聯網醫院品牌IP的價值核心在于獲得患者的深度信任&#xff0c;而卓越的用戶體驗是實現這一目標的關鍵路徑。在醫療服務同質化嚴重的當下&#xff0c;患者體驗已成為醫療機構差異化競爭的重要維度。研究表明&#xff0c;良好的用戶體驗能夠提高用戶滿意…

【Node.js教程】Express框架入門:從搭建到動態渲染商品列表

前言 Visual Studio Code(簡稱VSCode)是微軟開發的一款免費開源跨平臺代碼編輯器,憑借其免費、開源、跨平臺的特性,以及豐富的插件生態和美觀的界面,成為前端開發者的首選工具。 本文將帶你從零開始學習Express框架,包括搭建項目、配置路由、使用中間件以及實現動態渲染…

眾擎機器人開源代碼解讀

一&#xff0c;綜述 EngineAI ROS 包&#xff1a; 高層開發模式&#xff1a;用戶可通過發布身體速度指令&#xff0c;直接調用 EngineAI 機器人的行走控制器。底層開發模式&#xff1a;用戶可通過發布關節指令&#xff0c;自主開發專屬的控制器。 ROS2 package&#xff1a;全…

Windows系統安裝Git詳細教程

文章目錄步驟 1&#xff1a;下載 Git 安裝包步驟 2&#xff1a;運行安裝程序步驟 3&#xff1a;選擇安裝路徑步驟 4&#xff1a;選擇組件步驟 5&#xff1a;選擇默認編輯器步驟 6&#xff1a;選擇路徑環境變量步驟 7&#xff1a;選擇 HTTPS 協議的傳輸方式步驟 8&#xff1a;配…

leetcode 3446. 按對角線進行矩陣排序 中等

給你一個大小為 n x n 的整數方陣 grid。返回一個經過如下調整的矩陣&#xff1a;左下角三角形&#xff08;包括中間對角線&#xff09;的對角線按 非遞增順序 排序。右上角三角形 的對角線按 非遞減順序 排序。示例 1&#xff1a;輸入&#xff1a; grid [[1,7,3],[9,8,2],[4,…

攜程旅行 web 驗證碼 分析

聲明 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向分析 部分python代碼 result cp…