視頻教程:https://www.bilibili.com/video/BV1bf4y1U7ff
傳感器基本概念
1、按傳感器的物理量分類:可分為位移、溫度、速度、流量、力、氣體成份等傳感器。 2、按傳感器工作原理分類:可分為電阻、電感、光柵、電壓、電容、霍爾、光電、熱電偶等傳感器。 3、按傳感器輸出信號的性質分類:可分為:輸出為開關量“1”和"0”或“開”和“關”的開關型傳感器;輸出為模擬型傳感器;輸出為脈沖或代碼的數字型傳感器。
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
#define uchar unsigned char
#define uint unsigned int
#define SEG P0
sbit SCAN1 = P2^0;
sbit SCAN2 = P2^1;
sbit SCAN3 = P2^2;
sbit SCAN4 = P2^3;
uchar number;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int display=0;//數碼管刷新
void delay_ms(uint j) //1ms
{
uchar i=250;
for(;j>0;j--)
{
while(--i);
i=249;
while(--i);
i=250;
}
}
sbit DQ=P3^7; //數據傳輸線接單片機的相應的引腳
unsigned char tempL=0; //設全局變量
unsigned char tempH=0;
unsigned int sdata; //測量到的溫度的整數部分
unsigned char xiaoshu1; //小數第一位
unsigned char xiaoshu2; //小數第二位
unsigned char xiaoshu; //兩位小數
bit fg=1; //溫度正負標志
uint T_H;
void delay(unsigned char i)
{
for(i;i>0;i--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ先置高
delay(8); //稍延時
DQ=0; //發送復位脈沖
delay(80); //延時(>480us)
DQ=1; //拉高數據線
delay(5); //等待(15~60us)
x=DQ; //用X的值來判斷初始化有沒有成功,18B20存在的話X=0,否則X=1
delay(20);
}
//讀一個字節
ReadOneChar(void) //主機數據線先從高拉至低電平1us以上,再使數據線升為高電平,從而產生讀信號
{
unsigned char i=0; //每個讀周期最短的持續時間為60us,各個讀周期之間必須有1us以上的高電平恢復期
unsigned char dat=0;
for (i=8;i>0;i--) //一個字節有8位
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
//寫一個字節
void WriteOneChar(unsigned char dat)
{
unsigned char i=0; //數據線從高電平拉至低電平,產生寫起始信號。15us之內將所需寫的位送到數據線上,
for(i=8;i>0;i--) //在15~60us之間對數據線進行采樣,如果是高電平就寫1,低寫0發生。
{
DQ=0; //在開始另一個寫周期前必須有1us以上的高電平恢復期。
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
//讀溫度值(低位放tempL;高位放tempH;)
void ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0x44); //啟動溫度轉換
delay(125); //轉換需要一點時間,延時
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳過讀序列號的操作
WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
tempL=ReadOneChar(); //讀出溫度的低位LSB
tempH=ReadOneChar(); //讀出溫度的高位MSB
if(tempH>0x7f) //最高位為1時溫度是負
{
tempL=~tempL; //補碼轉換,取反加一
tempH=~tempH+1;
fg=0; //讀取溫度為負時fg=0
}
sdata = tempL/16+tempH*16; //整數部分
xiaoshu1 = (tempL&0x0f)*10/16; //小數第一位
xiaoshu2 = (tempL&0x0f)*100/16%10; //小數第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小數兩位
/*
if(fg==0)
{
sdata=sdata-15;
xiaoshu1=xiaoshu1-9;
}
*/
}
void main()
{
TMOD |= 0x01; //開啟定時器0 0x10時使用定時器1 0x11時啟動兩個
TH0=0XFC; //給定時器賦初值,定時1ms TH1
TL0=0X18; //TL1
EA=1; //總中斷打開
ET0=1; //定時器0中斷打開 ET1
TR0=1; //定時器0開關打開 TR1
while(1)
{
ReadTemperature();
delay_ms(500);
}
}
void Timer0() interrupt 1 //參考上圖 定時器1時為3
{
static uint i; //定義一個自變形變量
TH0=0XFC; //給定時器賦初值,定時1ms TH1
TL0=0X18; //TL1
i++;
if(i==4)
{
i=0;
SEG = 0XFF;
switch(number)
{
case 0:SCAN4=1;SCAN3=0;SCAN2=0;SCAN1=0;SEG=distab[sdata%10];break;
case 1:SCAN4=0;SCAN3=1;SCAN2=0;SCAN1=0;;SEG=distab[sdata/10];break;
case 2:SCAN4=0;SCAN3=0;SCAN2=1;SCAN1=0;SEG=distab[0];break;
case 3:SCAN4=0;SCAN3=0;SCAN2=0;SCAN1=1;;SEG=distab[0];break;
default:break;
}
number++;
if(number>3)number=0;
}
}
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
傳感器
+關注
關注
2551文章
51099瀏覽量
753570 -
溫度測量
+關注
關注
0文章
199瀏覽量
28249 -
Proteus
+關注
關注
79文章
1692瀏覽量
106579 -
DS18B20
+關注
關注
10文章
779瀏覽量
80859
發布評論請先 登錄
相關推薦
基于DS18B20和LabVIEW的多點溫度測量系統
今天我們一起完成一個比較完整的作品,基于DS18B20和LabVIEW的多點溫度測量系統。我重點介紹實現多點DS18B20溫度驅動模塊的思路
發表于 09-26 10:28
?1774次閱讀
數字溫度傳感器DS18B20的設計及應用
數字溫度傳感器DS18B20的設計及應用
1引言
DS18B20是DALLAS公司生產的一線式數字溫度傳感器,具有3引腳TO-92小體積封裝形式;
發表于 04-02 18:00
?2827次閱讀
智能溫度傳感器DS18B20的原理與應用
DS18B20是DALLAS公司生產的單線數字溫度傳感器,他具有獨特的單線總線接口方式。文章詳細的介紹了單線數字溫度傳感器DS18B20的測量
發表于 10-11 18:19
?49次下載
Verilog實現DS18B20測量溫度以及LCD屏幕的顯示程序和工程文件
本文檔的主要內容詳細介紹的是使用DS18B20和LM595FPGA實現ds18b20測量溫度以及LCD屏幕的顯示工程文件免費下載。
發表于 01-06 08:00
?14次下載
使用proteus實現溫度傳感器DS18B20的仿真資料免費下載
本文檔的主要內容詳細介紹的是使用proteus實現溫度傳感器DS18B20的仿真資料免費下載。
發表于 03-06 17:16
?75次下載
ds18b20的特性_ds18b20溫度傳感器應用
本文首先介紹了ds18b20的特性,其次介紹了DS18B20工作原理,最后介紹了ds18b20溫度傳感器應用。
發表于 04-24 09:10
?1.1w次閱讀
ds18b20溫度傳感器如何使用
Devices的一部分)生產的數字溫度傳感器。它能夠提供9位至12位的溫度測量數據,具有高精度和可編程分辨率。DS18B20的溫度
評論