控制/MCU
一、功能简介
本项目使用Proteus8.12仿真51单片机控制器,使用报警模块、LCD1602显示模块、DS18B20温度模块、加热制冷模块、按键模块、HC05蓝牙模块等。
主要功能:
系统运行后,LCD1602显示传感器检测的温度值;
可通过按键K3设置恒定温度,K1和K2进行加减调节,恒定温度范围是0-10,设定好后可再次按下K3保存。系统会根据当前温度与目标温度比对,通过PID算法控制加热或制冷工作。若温度高于报警上限或低于报警下限值则蜂鸣器报警。检测温度会实时将数据通过串口传输到手机终端显示。
主要功能如下:
(1)温度实时检测;
(2)LCD1602液晶显示;
(3)手机终端显示;
(4)加热制冷PID调节;
(5)故障报警;
(6)范围0-10°C;
(7)按键设置恒定温度。
二、软件设计
//系统数据获取voidsys_data_get(void){staticu8 i=0;while(1) {//温度获取i++;if(i%10==0) { TR0=0; sys_ctrl.temp=ds18b20_read_temperture()*10; TR0=1; }break; } }//系统数据显示voidsys_data_show(void){ u8 buf[6]; u16 temp=sys_ctrl.temp;staticu8 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; } }//系统数据设置voidsys_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; }//减elseif(key==KEY2_PRESS) { sys_ctrl.temph--;if(sys_ctrl.temph<0)sys_ctrl.temph=10; pid.target_val=sys_ctrl.temph; } } }//应用控制系统voidappdemo_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();//串口初始化9600pwm_init(0XFF,0XD1,100,0);//初始时,PWM占空比为0sys_open_show();//系统开机界面显示while(1) { sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制} }
三、实验现象
全部0条评论
快来发表一下你的评论吧 !