仿真版本: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ì)合集