利用DS18B20溫度傳感器,檢測到外界的溫度,通過數碼管顯示出來,同時還可以設置最高值和最低值,當溫度超過此范圍,蜂鳴器報警。
實物圖:
2345截圖20170806143611.jpg (62.26 KB, 下載次數: 192)
下載附件
2017-8-6 14:39 上傳
背面:
2345截圖20170806143627.jpg (96.05 KB, 下載次數: 167)
下載附件
2017-8-6 14:39 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (40.62 KB, 下載次數: 172)
下載附件
2017-8-6 20:21 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (22.36 KB, 下載次數: 173)
下載附件
2017-8-6 20:23 上傳
數字溫度報警器說明書
一、 概述:
主要實現:實時溫度測量及顯示,超出溫度范圍聲光報警,上下限溫度可通過按鍵設定等功能。
本數字溫度報警器是基于51單片機及溫度傳感器DS18B20來設計的,溫度測量范圍0到99.9攝氏度,精度為0.1攝氏度,可見測量溫度的范圍廣,精度高的特點。可設置上下限報警溫度,默認上限報警溫度為38℃、默認下限報警溫度為5℃(通過程序可以更改上下限值)。報警值可設置范圍:最低上限報警值等于當前下限報警值,最高下限報警值等于當前上限報警值。將下限報警值調為0時為關閉下限報警功能。
二、 使用說明:
1、 開機:打開電源,機器進入初始化狀態,此時數碼管顯示 - - - -;片刻即開始顯示當前溫度。
2、 查看當前上下限溫度范圍:按下【S1】鍵(左邊鍵),數碼管閃爍顯示Hxxx,H表示上限溫度,再次按下【S1】鍵,數碼管閃爍顯示Lxxx, L表示下限溫度。再按【S1】鍵時退出設置,數碼管顯示當前實時溫度。
3、 重新設定上下限溫度范圍:按下【S1】鍵一次,數碼管閃爍顯示Hxxx時,此時是設定上限溫度,按【S3】鍵加溫度,【S2】鍵減溫度。再按下【S1】鍵一次,此時是設定下限溫度,數碼管閃爍顯示Lxxx時,按【S3】鍵加溫度,【S2】鍵減溫度。再按下【S1】鍵一次,設置成功并退出設置。
4、 報警:當檢測到當前實時溫度高于上限溫度值,或者低于下限溫度值,系統會自動發出報警,報警為紅燈一直閃爍且蜂鳴器隨著燈的頻率響。除非重設上下限溫度范圍,否則報警一直持續。
單片機源程序如下:
- #include <AT89X52.h>
- #define uint unsigned int
- #define uchar unsigned char //宏定義
- #define SET P3_1 //定義調整鍵
- #define DEC P3_2 //定義減少鍵
- #define ADD P3_3 //定義增加鍵
- #define BEEP P3_6 //定義蜂鳴器
- #define ALAM P1_2 //定義燈光報警
- #define DQ P3_7 //定義DS18B20總線I/O
- bit shanshuo_st; //閃爍間隔標志
- bit beep_st; //蜂鳴器間隔標志
- sbit DIAN = P0^5; //小數點
- uchar x=0; //計數器
- signed char m; //溫度值全局變量
- uchar n; //溫度值全局變量
- uchar set_st=0; //狀態標志
- signed char shangxian=38; //上限報警溫度,默認值為38
- signed char xiaxian=5; //下限報警溫度,默認值為38
- //uchar code LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
- uchar code LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};
- //============================================================================================
- //====================================DS18B20=================================================
- //============================================================================================
- /*****延時子程序*****/
- 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; //高8位轉移到t
- t<<=8; //t數據左移8位
- t=t|a; //將t和a按位或,得到一個16位的數
- tt=t*0.0625; //將t乘以0.0625得到實際溫度值(溫度傳感器設置12位精度,最小分辨率是0.0625)
- t= tt*10+0.5; //放大10倍(將小數點后一位顯示出來)輸出并四舍五入
- return(t); //返回溫度值
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
Keil代碼與Proteus仿真文檔下載:
溫度傳感器.7z
(1.09 MB, 下載次數: 1196)
2022-12-10 16:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|