本設(shè)計(jì)是基于51單片機(jī)的多路溫度采集控制系統(tǒng)的設(shè)計(jì)
(仿真+源碼+原理圖+視頻講解+硬件清單)
仿真:proteus8.9
程序編譯器:keil 4
編程語言:C語言
編號C0008
下載地址
C0008 網(wǎng)盤鏈接
功能說明:
本設(shè)計(jì)是基于單片機(jī)的多路溫度采集控制系統(tǒng)的設(shè)計(jì),主要實(shí)現(xiàn)以下功能:
1.可實(shí)現(xiàn)通過三個DS18B20采集三個不同位置的溫度值,并通過RS485傳送給主機(jī);
2.可實(shí)現(xiàn)通過繼電器控制加熱降溫模塊,進(jìn)行異常溫度處理;
3.可實(shí)現(xiàn)通過按鍵調(diào)整初始設(shè)定的最大最小溫度閾值;
4.可實(shí)現(xiàn)通過主機(jī)的LCD1602顯示溫度值、繼電器狀態(tài)、上下限溫度閾值等信息
仿真圖(提供源文件):
原理圖(提供源文件):
源程序(提供源文件):
從機(jī)main函數(shù)
/***
**函數(shù)名:main()
**功能: 主函數(shù)
****/
void main()
{
int ans;
int ans1; //讀取的溫度寄存器
int ans2; //讀取的溫度寄存器
int ans3; //讀取的溫度寄存器
uchar flag; //正負(fù)位標(biāo)志
UART_init();
while(1)
{
key_scan();
/************* 正常溫度*********************/
if(Uart_flag == 0)
{
DS18B20_start_change1(); //開始讀溫度
delay(100);
ans1=DS18B20_read_date1();
DS18B20_start_change2(); //開始讀溫度
delay(100);
ans2=DS18B20_read_date2();
DS18B20_start_change3();
delay(100);
ans3=DS18B20_read_date3();
delay(100);
ans=(ans1+ans2+ans3)/3;
if(ans < TL)
{
P0=0x3f;
beep=0;
RELAY1=0;
RELAY2=1;
}
else if(ans > TH)
{
P0=0xcf;
beep=0;
RELAY1=1;
RELAY2=0;
}
else
{
P0=0xff;
beep=1;
RELAY1=1;
RELAY2=1;
}
UART_sent('1');
_nop_();
_nop_();
UART_sent( ( uchar )ans);
}
/**********調(diào)節(jié)上限溫度*****************/
if(Uart_flag == 1)
{
UART_sent('2'); //調(diào)節(jié)上限溫度標(biāo)志
_nop_();
_nop_();
UART_sent(TH); //發(fā)送上限溫度標(biāo)志
}
/**********調(diào)節(jié)下限溫度**************/
if(Uart_flag == 2)
{
UART_sent('3'); //調(diào)節(jié)下限溫度標(biāo)志
_nop_();
_nop_();
UART_sent(TL); //發(fā)送下限溫度標(biāo)志
}
}
}
主機(jī)mian函數(shù)
/****
******* 主函數(shù)
*****/
void main()
{
Temp_H = 30;
Temp_L = 10;
uart_init();
lcd_init();
lcd_write_str(0x80, tab1);
lcd_write_str(0x80+0x40, tab2);
lcd_write_str(0x80+0x0d,"T_H:30C");
lcd_write_str(0x80+0x4d,"T_L:10C");
while(1)
{
if(Temp > Temp_H)
{
P1=0xf3;
lcd_write_str(0x80+0x46, "Cool ");
}
else if(Temp < Temp_L)
{
P1=0xfc;
lcd_write_str(0x80+0x46, "Heat ");
}
else
{
P1=0xff;
lcd_write_str(0x80+0x40, tab2);
}
if(flag == 0)
{
lcd_wendu(0x85,Temp);
}
if(flag == 1) //顯示限溫最高值
{
lcd_wendu(0x80 + 0x11,Temp_H);
}
if(flag == 2) //顯示限溫最低值
{
lcd_wendu(0x80 + 0x51,Temp_L);
}
}
}
軟件設(shè)計(jì)介紹:
資料清單如下: