小項目實戰:51單片機控制的DS18B20溫度測量報警系統(可設置範圍) 硬件,接線圖,源代碼

最近南方天天下大雨,下的人心情都鬱悶了,最近應一個粉絲的留言,說畢業設計課題是一個單片機的溫度自動測量報警裝置。希望我可以幫幫他, 我就用常見的DS18B20做了一個報警系統,供大家學習和參考。

需要的功能及作用
單片機DS18B20溫度測量系統的測量範圍爲0-99.9攝氏度,可設置上限報 警溫度、下限報 警溫度(即高於上限值或者低於下限值時蜂鳴器報 警),默認上限報 警溫度爲38℃、默認下限報 警溫度爲5℃。報警值可設置範圍:最低上限報警值等於當前下限報警值,最高下限報 警值等於當前上限報 警值。將下限報 警值調爲0時爲關閉下限報 警功能。電源電壓VCC爲5V,可以焊一隻USB座到板上,然後用相應的USB線連接至電腦,通過電腦USB口供電;DS18B20也可以根據需要用屏蔽電纜引出來。K1爲進入/退出設置鍵;K2爲增加鍵;K3爲減少鍵。

廢話不多說,先上實物圖
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
因爲項目比較簡單就不放一些具體的工藝圖片了

本項目C語言參考源代碼 如下:

#include <AT89X52.h>
#define DQ P3_6 //定義DS18B20總線I/O
/延時子程序/
void Delay_DS18B20(int num)
{
while(num–) ;
}
/初始化DS18B20/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復位
Delay_DS18B20(8); //稍做延時
DQ = 0; //單片機將DQ拉低
Delay_DS18B20(80); //精確延時,大於480us
DQ = 1; //拉高總線
Delay_DS18B20(14);
x = DQ; //稍做延時後,如果x=0則初始化成功,x=1則初始化失敗
Delay_DS18B20(20);
}
/讀一個字節/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i–)
{
DQ = 0; // 給脈衝信號
dat>>=1;
DQ = 1; // 給脈衝信號
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
/寫一個字節/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i–)
{
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
}
}
/讀取溫度/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0x44); //啓動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器
a=ReadOneChar(); //讀低8位
b=ReadOneChar(); //讀高8位
t=b;
t<<=8;
t=t|a;
tt=t0.0625;
t= tt
10+0.5; //放大10倍輸出並四捨五入
return(t);
}

鑑於篇幅有限,只能寫部分代碼,如需要完整技術文件請私信我或者在下方留言,看到後會第一時間回覆。如果有不同的意見或者建議歡迎大家批評指正,讓我們一起學習,共同進步!
最後祝大家學業有成,祝各位將要高考的考生金榜題名!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章