串行擴展應用
利用 DS18B20 和 LED 數(shù)碼管實現(xiàn)單總線溫度測量系統(tǒng)。DS18B20的測量范圍是-5℃~128℃。由于只接有兩個 LED數(shù)碼管,所以顯示的數(shù)值只能在 00~~99 之間。
(1)硬件圖
(2)軟件設計
#include
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit smg1=out^4;
sbit smg2=out^5;
sbit DQ=P3^7;
void delay5(uchar);
void init_ds18b20(void);
uchar readbyte(void);
void writebyte(uchar);
uchar retemp(void);
void main(){
uchar i,temp;
delay5(1000);
while(1){
temp=retemp();
for(i=0;i<10;i++){
out=(temp/10)&0x0f;
smg1=0;
smg2=1;
delay5(1000);
out=(temp%10)&0x0f;
smg1=1;
smg2=0;
delay5(1000);
}
}
}
void delay5(uchar n){
do{
nop();
nop();
nop();
n–;
}while(n);
}
void init_ds18b20(void){
uchar x=0;
DQ=0;
delay5(120);
DQ=1;
delay5(16);
delay5(80);
}
uchar readbyte(void){
uchar i=0;
uchar date=0;
for(i=8;i>0;i–){
DQ=0;
delay5(1);
DQ=1;
date>>=1;
if(DQ)date|=0x80;
delay5(11);
}
return(date);
}
void writebyte(uchar dat){
uchar i=0;
for(i=8;i>0;i–){
DQ=0;
DQ=dat&0x01;
delay5(12);
DQ=1;
dat>>=1;
delay5(5);
}
}
uchar retemp(void){
uchar a,b,tt;
uint t;
init_ds18b20();
writebyte(0xcc);
writebyte(0x44);
init_ds18b20();
writebyte(0xcc);
writebyte(0xbe);
a=readbyte();
b=readbyte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
return(tt);
}
(3)效果圖
仿真運行狀態(tài)①(未操作溫度)
仿真運行狀態(tài)②(未操作溫度)
仿真運行狀態(tài)③(ds18b20按鈕按下,溫度增加)
仿真運行狀態(tài)④(ds18b20按鈕按下,溫度增加)
實驗結(jié)論及分析
1.程序的核心思想
①DS18B20與傳統(tǒng)的熱敏電阻不同,DS18B20 可直接將被測溫度轉(zhuǎn)換為串行數(shù)字信號,供單片機處理。通過對 DS18B20 編程可以實現(xiàn) 9~12 位的溫度讀數(shù),并可分別在 93.75ms 和 750ms 內(nèi)完成 9 位和 12 位的數(shù)字量。其測溫范圍-55℃~+125℃,最大分辨率為 0.0625℃,在一10℃~+85℃范圍內(nèi)其測溫準確度為±0.5℃。
②DS18B20也可以看作一個小的單片機系統(tǒng),它將溫度信息采集到自己的內(nèi)存中,然后通過一定的節(jié)拍將溫度信息一位一位地傳入at89c51單片機中進行二位數(shù)碼管的顯數(shù)。
2.實驗中遇到的問題
①lcd1602輸入信息時要記得初始化,否則不會顯數(shù)。
②注意DS18B20的溫度信息一位一位地傳入at89c51單片機中時嚴格把控節(jié)拍,節(jié)拍不正確將影響數(shù)據(jù)傳輸。
③at89c51單片機的時鐘頻率要設置成11.0592mhz。
審核編輯:湯梓紅
-
單片機
+關注
關注
6035文章
44554瀏覽量
634614 -
DS18B20
+關注
關注
10文章
779瀏覽量
80822 -
溫度測量系統(tǒng)
+關注
關注
0文章
25瀏覽量
21154
原文標題:單片機控制溫度傳感器控制電路圖
文章出處:【微信號:電路一點通,微信公眾號:電路一點通】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論