
DS18B20是一種很常用的數字溫度傳感器,溫度檢測范圍是-55~+125度,手冊 說明在-10~+85度范圍內檢測誤差為±0.5度,作者在自己的產品中隨機抽樣驗證 了幾只傳感器,在-25度誤差0.1度,+25度與+50度誤差小于0.1度,可見這種傳感 器實際精度是很高的,傳感器引腳如圖19-1所示,工作電壓范圍是3.0~5.5V,通 常使用+5V,電源接反或接錯一般是不會損壞傳感器的,對于單只DS18B20的使用,我們按圖19-2連接即可。


電路和介紹詳見:http://www.zg4o1577.cn/bbs/dpj-47286-1.html(在這貼附件中可下載完整的源碼壓縮包)
主程序如下(部分預覽):
- /****************《51單片機輕松入門-基于STC15W4K系列》配套例程 *************
- ★★★★★★★★★★★★★★★★★★★★★★★★
- 《51單片機輕松入門-基于STC15W4K系列》 一書已經由北航出版社正式出版發行。
- 作者親手創作的與教材配套的51雙核實驗板(2個MCU)對程序下載、調試、仿真方便,不需要外部
- 仿真器與編程器,這種設計方式徹底解決了系統中多個最高優先級誰也不能讓誰的中斷競爭問題。
- QQ群:STC51-STM32(3) :515624099 或 STC51-STM32(2):99794374。
- 驗證信息:STC15單片機
- 郵箱:xgliyouquan@126.com
- ★★★★★★★★★★★★★★★★★★★★★★★★*/
- //單只DS18B20的溫度檢測,測溫范圍-55 —— +125度,1602液晶顯示。
- #include "STC15W4K.H"
- #include <stdio.h> // sprintf函數需用
- #include "DS18b20.h"
- #include "myfun.h"
- #include "LCD1602.h"
- bit flag; // flag=0表示正溫,flag=1表示負溫。
- unsigned char str[10]; // 最長字符10字節,比如:-123.4567/0
-
- //****************溫度數據處理函數************************/
- void gettemp() // 讀取溫度值
- {
- int temp; // 存放18B20中讀出的2字節原始數據
- float Temperature; // 存放最終溫度值
- temp=DS18B20_ReadTemperature(); // 從18B20中讀取2字節原始溫度值
- Temperature=temp*0.0625;
- sprintf(str,"%0.6f",Temperature); // 保留6位小數
- }
- void port_mode() // 端口模式
- {
- P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
- P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
- }
- void main()
- {
- unsigned char xPos,yPos;
- unsigned char *s="Now temp is:";
- port_mode(); // 所有IO口設為準雙向弱上拉方式。
- xPos=0; // xPos表示水平右移字符數(0-15)
- yPos=0; // yPos表示垂直下移字符數(0-1)
- delay100ms(); // 等待LCD1602上電時內部復位
- LCD1602_Init();
- WriteString(xPos,yPos,s); // X坐標、Y坐標、字符串,屏幕左上角為坐標原點
- DS18B20_SetResolution(3); // 設置DS18B20的分辨率為12位(默認值,新器件可以不作任何設置)
- while(1)
- {
- gettemp();
- WriteString(0,1,str);
- SetCur(NoCur); // 有顯示無光標
- }
- }
復制代碼
mufun.c文件:
- #include "myfun.h"
- #include "string.h"
- /****************《51單片機輕松入門-基于STC15W4K系列》配套例程 *************
- ★★★★★★★★★★★★★★★★★★★★★★★★
- 《51單片機輕松入門-基于STC15W4K系列》 一書已經由北航出版社正式出版發行。
- 作者親手創作的與教材配套的51雙核實驗板(2個MCU)對程序下載、調試、仿真方便,不需要外部
- 仿真器與編程器,這種設計方式徹底解決了系統中多個最高優先級誰也不能讓誰的中斷競爭問題。
- QQ群:STC51-STM32(3) :515624099 或 STC51-STM32(2):99794374。
- 驗證信息:STC15單片機
- 郵箱:xgliyouquan@126.com
- ★★★★★★★★★★★★★★★★★★★★★★★★*/
- void delay2us(void) // 22.118400MHz
- {
- unsigned char i,j,k;
- for(i=1;i>0;i--) // 注意后面沒分號
- for(j=1;j>0;j--) // 注意后面沒分號
- for(k=5;k>0;k--);
- }
- void delay4us(void) // 22.118400MHz
- {
- unsigned char i,j,k;
- for(i=1;i>0;i--) // 注意后面沒分號
- for(j=1;j>0;j--) // 注意后面沒分號
- for(k=16;k>0;k--);
- }
- void delay60us(void) // 22.118400MHz
- {
- unsigned char i,j,k;
- for(i=1;i>0;i--) // 注意后面沒分號
- for(j=5;j>0;j--) // 注意后面沒分號
- for(k=64;k>0;k--);
- }
- void delay75us(void) // 22.118400MHz
- {
- unsigned char i,j,k;
- for(i=1;i>0;i--) // 注意后面沒分號
- for(j=2;j>0;j--) // 注意后面沒分號
- for(k=204;k>0;k--);
- }
- void delay500us(void) // 22.118400MHz
- {
- unsigned char i,j,k;
- for(i=1;i>0;i--) // 注意后面沒分號
- for(j=11;j>0;j--) // 注意后面沒分號
- for(k=249;k>0;k--);
- }
- void delay720us(void) // 22.118400MHz
- {
- unsigned char i,j,k;
- for(i=1;i>0;i--) // 注意后面沒分號
- for(j=16;j>0;j--) // 注意后面沒分號
- for(k=247;k>0;k--);
- }
- void delay100ms(void) // 22.1184MHz
- {
- unsigned char i,j,k;
- for(i=19;i>0;i--) // 注意后面沒分號
- for(j=223;j>0;j--) // 注意后面沒分號
- for(k=129;k>0;k--);
- }
- void delay760ms(void)
- {
- unsigned char i,j,k;
- for(i=65;i>0;i--) // 注意后面沒分號
- for(j=252;j>0;j--) // 注意后面沒分號
- for(k=255;k>0;k--);
- }
復制代碼
|