51單片機ds18b20多點監(jiān)控+溫度報警+上下限溫度設(shè)定及存儲 仿真程序
//功能:1.可輪流檢測6個區(qū)域的溫度,實現(xiàn)5秒鐘自動切換功能,和手動切換
// 2.可顯示時間及調(diào)節(jié)時間
// 3.溫度高于上限或低于上限報警
// 4.可調(diào)整溫度上限及下限,并且?guī)У綦姳Wo
// 5.可對-20攝氏度——60攝氏度溫度測量,溫度過高或者過低顯示error
所謂多點溫度巡檢儀主要針對環(huán)境和設(shè)備內(nèi)溫度的集中檢測和管理,可以無人值守24小時不間斷檢測溫度,可實現(xiàn)高低溫報警和自動切換顯示區(qū)域。克服了管理人員手動測量和手工計算溫度的誤差,又提高了檢測速度和精度,省了大量的人力和物力。
自行設(shè)計并制作多點溫度巡檢儀 (以下簡稱巡檢儀 )。巡檢儀可以對6個以上的監(jiān)測點的溫度進行輪流檢測,檢測周期不能超過0.3分鐘。檢測溫度范圍-200C--600C,檢測的誤差不能超過0.3%。
二、要求巡檢儀可以對6個以上的監(jiān)測點的溫度進行輪流檢測,檢測周期不能超過0.3分鐘。檢測溫度范圍-200C--600C,檢測的誤差不能超過0.3%。
1. 基本要求 第(1)項 分別輪流檢測6個點的溫度,并顯示出來; 第(2)項 每5秒鐘自動切換一個溫度點,同時顯示日期和時間; 第(3)項 要求能通過按鍵切換當前顯示的溫度點;
2. 發(fā)揮部分 (1)溫度高于上限則報警,溫度低于下限則報警 ;計分5 (2)可以設(shè)置上限溫度的報警值和下限溫度的報警值,計分10;。 (3)系統(tǒng)關(guān)閉電源,報警的設(shè)定值不會丟失 , 計分15 。
三、說明
1. 顯示部分可以用液晶,也可以用數(shù)碼管顯示
2. 可用鍵盤設(shè)置目標報警點和時間日期調(diào)整
3. 測試要求與說明 - 溫度顯示
- 當前時間顯示
- 溫度顯示的手動切換
- 報警設(shè)置測試
- 報警輸出測試`
2. 方案選擇:根據(jù)設(shè)計任務(wù)要求,并且根據(jù)我們自己的需要而附加的功能,該電路的總體框圖可分為幾個基本的模塊,框圖如圖所示:
127.001.jpg (35.77 KB)
下載附件
2021-7-6 16:44 上傳
2.1時鐘模塊:
127.002.jpg (21.31 KB)
下載附件
2021-7-6 16:44 上傳
2.2 報警裝置:
127.003.jpg (17.69 KB)
下載附件
2021-7-6 16:44 上傳
2.3 溫度傳感器:
127.004.jpg (36.29 KB)
下載附件
2021-7-6 16:44 上傳
2.4 LCD1602顯示裝置:
127.005.jpg (41.75 KB)
下載附件
2021-7-6 16:44 上傳
2.5 LED指示燈:
127.006.jpg (32.32 KB)
下載附件
2021-7-6 16:44 上傳
2.6 按鍵模塊:
127.007.jpg (27.98 KB)
下載附件
2021-7-6 16:44 上傳
3. 程序框圖:單片機主程序框圖、速度感應(yīng)程序框圖和鐵片感應(yīng)程序框圖分別如圖所示。
127.008.jpg (42.9 KB)
下載附件
2021-7-6 16:44 上傳
4.系統(tǒng)的具體設(shè)計與實現(xiàn):4.1時鐘模塊:精準顯示年,月,日,時,分,秒,自帶備用電源,能掉電自動走時,功耗低,避免了每一次上電手動校時。 4.2 報警裝置:當溫度超過設(shè)定上限/下限,警報系統(tǒng)就會發(fā)出報警信號,讓人們知道哪個區(qū)域溫度高于或低于設(shè)置的溫度上限/下限
4.3 溫度傳感器:六個溫度傳感器采用的是18B20,可以并聯(lián),并且六個溫度傳感器只占用一個I/O口,既節(jié)省成本,也節(jié)省不必要的能耗 4.4 LCD1602顯示裝置:采用LCD1602顯示裝置,功耗低,顯示清晰 4.5 LED指示燈:調(diào)整日期和時間的提示,D1亮調(diào)分D2亮調(diào)時D3亮調(diào)日D4調(diào)月D5亮調(diào)年 4.6 按鍵模塊:七個按鍵調(diào)時間和報警溫度,既省節(jié)省成本也 方便操作
5.最小系統(tǒng)圖: 該系統(tǒng)主要用到的是單片機,所以主要的部分是最小系統(tǒng)圖,該最小系統(tǒng)圖如所示:
127.009.jpg (72.74 KB)
下載附件
2021-7-6 16:44 上傳
- #include <REG52.H>
- #include "lcd_1602.h"
- #include "ds18b20.h"
- #include "DS1302.h"
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char code table[]="0123456789+-.";
- unsigned char code table1[]="eroABCDEF";//error
- unsigned char table3[16]="00:00:00a 00000";
- unsigned char table4[16]="11-11-111+11100";
- //sbit SCLK = P1^1; // DS1302時鐘信號7腳
- //sbit DIO= P1^2; // DS1302數(shù)據(jù)信號6腳
- //sbit CE = P1^0; // DS1302片選5腳
- sbit LED1=P1^3;
- sbit LED2=P1^4;
- sbit LED3=P1^5;
- sbit LED4=P1^6;
- sbit LED5=P1^7;
- //sbit RW_LCD=P2^1;
- //sbit RS_LCD=P2^0;
- //sbit E_LCD=P2^2;
- sbit TM_BUT1=P2^3;
- sbit TM_BUT2=P2^4;
- sbit TM_BUT3=P2^5;
- sbit bee=P2^6;
- //sbit DS18B20_DQ=P3^0;
- sbit TEMP_BUT1=P3^2;
- sbit TEMP_BUT2=P3^3;
- sbit TEMP_BUT3=P3^4;
- sbit TEMP_BUT4=P3^5;
- sbit TEMP_BUT5=P3^6;
- void xianshi_ds18b20_lcd1602()//溫度顯示
- {
- uint ee;
- DS18B20_init();
- R_temp_DS18B20();
- ee=R_temp_DS18B20();
- table3[8]=table1[DS18b20_cs+3];
- ee=ee*6.25;
- if(fu_flag==1)
- {
- if(ee>2000)
- {
- table3[10]=table1[0];
- table3[11]=table1[1];
- table3[12]=table1[1];
- table3[13]=table1[2];
- table3[14]=table1[1];
- table3[15]=1;
- }
- else
- {
- table3[10]=table[11];
- table3[11]=table[ee/1000];
- table3[12]=table[ee/100%10];
- table3[13]=table[12];
- table3[14]=table[ee/10%10];
- table3[15]=3;
- }
- }
-
- if(fu_flag==0)
- {
- if(ee>6000)
- {
- table3[10]=table1[0];
- table3[11]=table1[1];
- table3[12]=table1[1];
- table3[13]=table1[2];
- table3[14]=table1[1];
- table3[15]=2;
- }
-
- else
- {
- table3[10]=table[10];
- table3[11]=table[ee/1000];
- table3[12]=table[ee/100%10];
- table3[13]=table[12];
- table3[14]=table[ee/10%10];
- table3[15]=3;
- }
- }
- }
- void t0_init()//初始化定時器t0
- {
- TMOD=0X01;
- TH0 = 0x3C;
- TL0 = 0x0B0;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void ds18b20_qiehuan()//按鍵切換區(qū)域溫度
- {
- if(TEMP_BUT1==0)
- {
- delay_ms(20);
- if(TEMP_BUT1==0)
- {
- DS18b20_cs++;
- }
- while(TEMP_BUT1!=1);
- }
-
- }
- void xianshi_DS1302_lcd1602()//用1602顯示時間
- {
- freshtime();
- table3[0]=table[hour_1];
- table3[1]=table[hour_0];
- table3[3]=table[minute_1];
- table3[4]=table[miunte_0];
- table3[6]=table[second_1];
- table3[7]=table[second_0];
-
- table4[0]=table[year_1];
- table4[1]=table[year_0];
- table4[3]=table[month_1];
- table4[4]=table[month_0];
- table4[6]=table[date_1];
- table4[7]=table[date_0];
- table4[8]=2;
- table4[12]=1;
- }
- void BUT_ds1302()//ds1302按鍵調(diào)時間
- {
- uchar temp,mun;
- freshtime();
- if(TM_BUT1==0)
- {
- delay_ms(10);
- if(TM_BUT1==0)
- {
- temp++;
- }
- while(TM_BUT1!=1);
- }
- switch(temp)
- {
- case 1: LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;
- if(TM_BUT2==0){delay_ms(10);if(TM_BUT2==0){
- mun=tab[0];mun++;
- if((mun&0x0f)>9)mun+=6;
- if(mun>0x59){mun=0;}Write1302 (WRITE_MINUTE,mun);while(TM_BUT2!=1);
- }}
- if(TM_BUT3==0){delay_ms(10);if(TM_BUT3==0){
- mun=tab[0];mun--;
- if((mun&0x0f)>9)mun-=6;
- if(mun>0x59){mun=0x59;}Write1302 (WRITE_MINUTE,mun);while(TM_BUT3!=1);
- }}break;
-
- case 2: LED1=1;LED2=0;LED3=1;LED4=1;LED5=1;
- if(TM_BUT2==0){delay_ms(10);if(TM_BUT2==0){
- mun=tab[1];mun++;
- if((mun&0x0f)>9)mun+=6;
- if(mun>0x23){mun=0;}Write1302 (WRITE_HOUR,mun);while(TM_BUT2!=1);
- }}
- if(TM_BUT3==0){delay_ms(10);if(TM_BUT3==0){
- mun=tab[1];mun--;
- if((mun&0x0f)>9)mun-=6;
- if(mun>0x23){mun=0x23;}Write1302 (WRITE_HOUR,mun);while(TM_BUT3!=1);
- }}break;
-
- case 3: LED1=1;LED2=1;LED3=0;LED4=1;LED5=1;
- if(TM_BUT2==0){delay_ms(10);if(TM_BUT2==0){
- mun=tab[2];mun++;
- if((mun&0x0f)>9)mun+=6;
- if(mun>0x31){mun=1;}Write1302 (WRITE_DATE,mun);while(TM_BUT2!=1);
- }}
- if(TM_BUT3==0){delay_ms(10);if(TM_BUT3==0){
- mun=tab[2];mun--;
- if((mun&0x0f)>9)mun-=6;
- if(mun<0x01){mun=0x31;}Write1302 (WRITE_DATE,mun);while(TM_BUT3!=1);
- }}break;
-
- case 4: LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;
- if(TM_BUT2==0){delay_ms(10);if(TM_BUT2==0){
- mun=tab[3];mun++;
- if((mun&0x0f)>9)mun+=6;
- if(mun>0x12){mun=1;}Write1302 (WRITE_MONTH,mun);while(TM_BUT2!=1);
- }}
- if(TM_BUT3==0){delay_ms(10);if(TM_BUT3==0){
- mun=tab[3];mun--;
- if((mun&0x0f)>9)mun-=6;
- if(mun<0x01){mun=0x12;}Write1302 (WRITE_MONTH,mun);while(TM_BUT3!=1);
- }}break;
-
- case 5: LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;
- if(TM_BUT2==0){delay_ms(10);if(TM_BUT2==0){
- mun=tab[4];mun++;
- if((mun&0x0f)>9)mun+=6;
- if(mun>0x99){mun=0;}Write1302 (WRITE_YEAR,mun);while(TM_BUT2!=1);
- }}
- if(TM_BUT3==0){delay_ms(10);if(TM_BUT3==0){
- mun=tab[4];mun--;
- if((mun&0x0f)>9)mun-=6;
- if(mun>0x99){mun=0x99;}Write1302 (WRITE_YEAR,mun);while(TM_BUT3!=1);
- }}break;
- case 6: temp=0;LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;break;
- }
- }
- void ds18b20_baojing()//溫度上下限報警
- {
- if(DS18b20_dat[2]>DS18b20_dat[0]|DS18b20_dat[2]<DS18b20_dat[1])
- {
- bee=0;
- }
- else bee=1;
- }
- void ds18b20_display_hl()//顯示上下限報警溫度
- {
- table4[10]=table[DS18b20_dat[0]/10];
- table4[11]=table[DS18b20_dat[0]%10];
- if((DS18b20_dat[1]&0x80)==0x80)
- {
- table4[13]=table[11];
- table4[14]=table[(~DS18b20_dat[1]+1)/10];
- table4[15]=table[(~DS18b20_dat[1]+1)%10];
- }
- else
- {
- table4[13]=table[10];
- table4[14]=table[DS18b20_dat[1]/10];
- table4[15]=table[DS18b20_dat[1]%10];
- }
- }
- void ds18b20_but_hl()//設(shè)置報警上下限
- {
- char temp;
- if(TEMP_BUT2==0)
- {
- delay_ms(10);
- if(TEMP_BUT2==0)
- {
- temp=DS18b20_dat[0];
- temp++;
- if(temp>0x3c)temp=0;
- DS18b20_dat[0]=temp;
- }
- while(TEMP_BUT2!=1);
- }
- if(TEMP_BUT3==0){delay_ms(10);if(TEMP_BUT3==0){
- temp=DS18b20_dat[0];temp--;if((temp&0x80)==0x80)temp=60;DS18b20_dat[0]=temp;}
- while(TEMP_BUT3!=1);}
-
- if(TEMP_BUT4==0)
- {
- delay_ms(10);
- if(TEMP_BUT4==0)
- {
- temp=DS18b20_dat[1];
- temp++;
- DS18b20_dat[1]=temp;
- }
- while(TEMP_BUT4!=1);
- }
-
- if(TEMP_BUT5==0){delay_ms(10);if(TEMP_BUT5==0){
- temp=DS18b20_dat[1];temp--;if(temp<-20)temp=0;DS18b20_dat[1]=temp;}
- while(TEMP_BUT5!=1);}
- }
- void main()
- {
- LCD_1602_init();
- DS1302_init();
- t0_init();
- read_t();
- while(1)
- {
- xianshi_DS1302_lcd1602();
- ds18b20_display_hl();
- xianshi_ds18b20_lcd1602();
- printf(table3,1,1);
- printf(table4,1,2);
- store_t();
- }
- }
- void t1zd()interrupt 1
- {
- uchar i;
- TH0 = 0x3C;
- TL0 = 0x0B0;
- i++;
- BUT_ds1302();
- ds18b20_qiehuan();
- ds18b20_baojing();
- ds18b20_but_hl();
- if(i==90)
- {
- DS18b20_cs++;
- i=0;
- }
- if(DS18b20_cs>=6)
- {
- DS18b20_cs=0;
- }
-
- }
復(fù)制代碼
192734pifxixtbhyub736o.png (62.46 KB)
下載附件
2021-7-6 16:44 上傳
源碼和仿真文件及完整文檔.zip
(409.83 KB, 售價: 2 E幣)
2021-7-6 16:47 上傳
點擊文件名下載附件
售價: 2 E幣 [記錄]
[ 購買]
【必讀】版權(quán)免責聲明
1、本主題所有言論和內(nèi)容純屬會員個人意見,與本論壇立場無關(guān)。2、本站對所發(fā)內(nèi)容真實性、客觀性、可用性不做任何保證也不負任何責任,網(wǎng)友之間僅出于學(xué)習(xí)目的進行交流。3、對提供的數(shù)字內(nèi)容不擁有任何權(quán)利,其版權(quán)歸原著者擁有。請勿將該數(shù)字內(nèi)容進行商業(yè)交易、轉(zhuǎn)載等行為,該內(nèi)容只為學(xué)習(xí)所提供,使用后發(fā)生的一切問題與本站無關(guān)。 4、本網(wǎng)站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網(wǎng)站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網(wǎng)站所有軟件和資料均為網(wǎng)友推薦收集整理而來,僅供學(xué)習(xí)用途使用,請務(wù)必下載后兩小時內(nèi)刪除,禁止商用。6、如有侵犯你版權(quán)的,請及時聯(lián)系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|