• 方案介紹
    • 1.? 簡介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報告
    • 6.? 資料清單
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的多路溫度檢測報警系統(tǒng)設(shè)計(jì)(二)!!!

04/09 09:01
768
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個文件

資料清單:C程序+仿真+設(shè)計(jì)報告+使用說明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語言:C語言

設(shè)計(jì)編號:【E05】

1.? 簡介

? 本文提出了一種基于51單片機(jī)的多路溫度檢測報警系統(tǒng)。該設(shè)計(jì)采用數(shù)字溫度傳感器DS18B20,此傳感器讀取被測量溫度值并進(jìn)行轉(zhuǎn)換。將轉(zhuǎn)換后的多路數(shù)據(jù)送到單片機(jī)處理,再通過LCD1602顯示出來。同時,可手動設(shè)置每路溫度的上下限值,當(dāng)實(shí)時溫度超出時,對應(yīng)的工作指示燈亮,蜂鳴器報警。

2.? 主要功能

a.通過LCD1602顯示當(dāng)前溫度值,溫度測量范圍:0-99攝氏度。

b.通過獨(dú)立按鍵設(shè)置多路溫度上下限值,第一次按下設(shè)置鍵設(shè)置溫度上限值,第二次按下設(shè)置鍵設(shè)置溫度下限值,再按加減鍵就可以修改溫度值。

c.當(dāng)溫度低于下限或高于上限溫度時,蜂鳴器和LED燈同時報警。

d.可通過按鍵設(shè)置LCD1602溫度顯示模式:循環(huán)或手動。

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。

//宏定義
#define uchar unsigned char
#define uint  unsigned int

bit ZF1,ZF2,ZF3,ZF4;	//溫度的符號位,=0為正數(shù),=1為負(fù)數(shù)
bit flag,shanshuo;
//頭函數(shù)
#include<reg52.h>
#include<Lcd.h>
#include<DS18B20.h>
//函數(shù)聲明


//IO說明
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;

sbit BUZZER=P2^0;

sbit K1  =P3^3;
sbit K2  =P3^4;
sbit K3  =P3^5;
sbit K4  =P3^6;
sbit K5  =P3^7;

//變量聲明
uchar Mode=0;//
uchar S=0;
uint  SI=0;
uint  TT0=0,TT1=0,TT2=0,TT3=0;//溫度變量

bit flag_BJ1,flag_BJ2,flag_BJ3,flag_BJ4,flag_BJ5,flag_BJ6,flag_BJ7,flag_BJ8;
bit ZFH1=0,ZFL1=0,ZFH2=0,ZFL2=0,ZFH3=0,ZFL3=0,ZFH4=0,ZFL4=0;
char TEMH1=30,TEML1=20,TEMH2=31,TEML2=21,TEMH3=32,TEML3=22,TEMH4=33,TEML4=23;
uchar set;

void delay(uint ms)
{
	uint i,j;
	for(i=0;i<ms;i++)
	for(j=0;j<110;j++);
}

void key()
{
	if(K1==0)
	{
		delay(10);
		if(K1==0)
		{
			set++;
			if(set>=3)
			{
				set=0;
				flag=0;
			}
		}
		while(!K1);
	}
	if(set!=0)
	{
		flag=1;
		BUZZER=1;
		flag_BJ1=0;flag_BJ2=0;flag_BJ3=0;flag_BJ4=0;
		LED1=1;LED2=1;LED3=1;LED4=1;
	}
	if(K2==0)
	{
		delay(10);
		if(K2==0)
		{
			if(set==1)
			{
				if(Mode==0)
				{
					if(ZFH1==0)
					{
						 TEMH1++;
						 if(TEMH1>=99)
						 TEMH1=99;
					}
					else
					{
						TEMH1--;
						if(TEMH1==0)
						ZFH1=0;
					}
					
				}
				if(Mode==1)
				{
					if(ZFH2==0)
					{
						 						 TEMH2++;
						 if(TEMH2>=99)
						 TEMH2=99;
					}
					else
					{
						TEMH2--;
						if(TEMH2==0)
						ZFH2=0;
					}
					
				}
				if(Mode==2)
				{
					if(ZFH3==0)
					{
						 TEMH3++;
						 if(TEMH3>=99)
						 TEMH3=99;
					}
					else
					{
						TEMH3--;
						if(TEMH3==0)
						ZFH3=0;
					}
					
				}
				if(Mode==3)
				{
					if(ZFH4==0)
					{
						 TEMH4++;
						 if(TEMH4>=99)
						 TEMH4=99;
					}
					else
					{
						TEMH4--;
						if(TEMH4==0)
						ZFH4=0;
					}
					
				}
			}
			if(set==2)
			{
				if(Mode==0)
				{
					if(ZFL1==0)
					{
						 TEML1++;
						 if(TEML1==TEMH1)
						 TEML1=TEMH1-1;
						 if(TEML1>=99)
						 TEML1=99;
					}
					else
					{
						TEML1--;
						if(ZFH1==1&&TEML1==TEMH1)
						TEML1=TEMH1+1;
						else if(ZFH1==0&&TEMH1==0&&TEML1==0)
						TEML1=1;
						if(TEML1==0)
						ZFL1=0;
					}
					
				}
				if(Mode==1)
				{
					if(ZFL2==0)
					{
						 TEML2++;
						 if(TEML2==TEMH2)
						 TEML2=TEMH2-1;
						 if(TEML2>=99)
						 TEML2=99;
					}
					else
					{
						TEML2--;
						if(ZFH2==1&&TEML2==TEMH2)
						TEML2=TEMH2+1;
						else if(ZFH2==0&&TEMH2==0&&TEML2==0)
						TEML2=1;
						if(TEML2==0)
						ZFL2=0;
					}
					
				}
				if(Mode==2)
				{
					if(ZFL3==0)
					{
						 TEML3++;
						 if(TEML3==TEMH3)
						 TEML3=TEMH3-1;
						 if(TEML3>=99)
						 TEML3=99;
					}
					else
					{
						TEML3--;
						if(ZFH3==1&&TEML3==TEMH3)
						TEML3=TEMH3+1;
						else if(ZFH3==0&&TEMH3==0&&TEML3==0)
						TEML3=1;
						if(TEML3==0)
						ZFL3=0;
					}
					
				}
				if(Mode==3)
				{
					if(ZFL4==0)
					{
						 TEML4++;
						 if(TEML4==TEMH4)
						 TEML4=TEMH4-1;
						 if(TEML4>=99)
						 TEML4=99;
					}
					else
					{
						TEML4--;
						if(ZFH4==1&&TEML4==TEMH4)
						TEML4=TEMH4+1;
						else if(ZFH4==0&&TEMH4==0&&TEML4==0)
						TEML4=1;
						if(TEML4==0)
						ZFL4=0;
					}
					
				}
			}
		}

4.? 仿真proteus8.6

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。

T1當(dāng)前溫度:

T2當(dāng)前溫度:

T3當(dāng)前溫度:

T4當(dāng)前溫度:

當(dāng)溫度高于上限時,蜂鳴器和LED燈報警:

當(dāng)溫度低于下限時,蜂鳴器和LED燈報警:

5.? 設(shè)計(jì)報告

設(shè)計(jì)報告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。

6.? 資料清單

設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報告+使用說明+元件清單+操作視頻等。

百度網(wǎng)盤下載鏈接:【E05】百度網(wǎng)盤下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦