一、功能簡介
本項目使用Proteus8.12仿真51單片機控制器,使用報警模塊、LCD1602顯示模塊、DS18B20溫度模塊、加熱制冷模塊、按鍵模塊、HC05藍牙模塊等。
主要功能:
可通過按鍵K3設置恒定溫度,K1和K2進行加減調節,恒定溫度范圍是0-10,設定好后可再次按下K3保存。系統會根據當前溫度與目標溫度比對,通過PID算法控制加熱或制冷工作。若溫度高于報警上限或低于報警下限值則蜂鳴器報警。檢測溫度會實時將數據通過串口傳輸到手機終端顯示。
主要功能如下:
(1)溫度實時檢測;
(2)LCD1602液晶顯示;
(3)手機終端顯示;
(4)加熱制冷PID調節;
(5)故障報警;
(6)范圍0-10°C;
(7)按鍵設置恒定溫度。
二、軟件設計
//系統數據獲取
void sys_data_get(void)
{
static u8 i=0;
while(1)
{
//溫度獲取
i++;
if(i%10==0)
{
TR0=0;
sys_ctrl.temp=ds18b20_read_temperture()*10;
TR0=1;
}
break;
}
}
//系統數據顯示
void sys_data_show(void)
{
u8 buf[6];
u16 temp=sys_ctrl.temp;
static u8 i=0;
while(1)
{
//溫度顯示
if(sys_ctrl.temp >=0)
{
buf[0]=' ';
}
else
{
temp=-sys_ctrl.temp;
buf[0]='-';
}
buf[1]=temp/100+0x30;
buf[2]=temp%100/10+0x30;
buf[3]='.';
buf[4]=temp%100%10+0x30;
buf[5]='?';
lcd1602_show_string(5,0,buf);
//溫度閾值顯示
lcd1602_show_nums(8,1,sys_ctrl.temph,2,0);
//閾值閃爍指示
if(sys_ctrl.mode!=0)
{
lcd1602_show_string(8,1," ");
delay_ms(50);
lcd1602_show_nums(8,1,sys_ctrl.temph,2,0);
}
//串口終端輸出
i++;
if(i%20==0)
{
UART_SendString("rn當前溫度:");
UART_SendString(buf);
UART_SendString("°Crn");
}
break;
}
}
//系統數據設置
void sys_data_set(void)
{
u8 key=0;
key=key_scan(0);
//閾值模式設置
if(key==KEY3_PRESS)
{
sys_ctrl.mode=!sys_ctrl.mode;
}
//閾值設置模式下,K1和K2加減
if(sys_ctrl.mode!=0)
{
//加
if(key==KEY1_PRESS)
{
sys_ctrl.temph++;
if(sys_ctrl.temph >10)sys_ctrl.temph=0;
pid.target_val=sys_ctrl.temph;
}
//減
else if(key==KEY2_PRESS)
{
sys_ctrl.temph--;
if(sys_ctrl.temph< 0)sys_ctrl.temph=10;
pid.target_val=sys_ctrl.temph;
}
}
}
//應用控制系統
void appdemo_show(void)
{
u8 i=10;
sys_parm_init();//系統參數初始化
lcd1602_init();
ds18b20_init();
//讀取溫度數據,等待穩定
while(i--)
{
sys_ctrl.temp=ds18b20_read_temperture()*10;
delay_ms(100);
}
UART_Init();//串口初始化9600
pwm_init(0XFF,0XD1,100,0);//初始時,PWM占空比為0
sys_open_show();//系統開機界面顯示
while(1)
{
sys_data_get();//系統數據獲取
sys_data_show();//系統數據顯示
sys_data_set();//系統數據設置
sys_fun_ctrl();//系統功能控制
}
}
三、實驗現象
評論
查看更多