功能
本设计采用51单片机+DS18B20温度传感器+数码管显示+继电器+功能按键组成。DS18B20温度传感器检测水温并将水温信息转换成电信号传送给单片机,单片机将得到的数据进行处理、显示与控制。上电后数码管显示当前的水温温度,通过按键可设置水温值,当检测到的水温低于设置的水温值时,继电器吸合接通外部加热装置,使水温达到设定水温值。当水温值超过设定水温值时,继电器断开,停止加热。温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM中,按键还具有连加、减功能。
原理图
PCB图
程序源码
#include//调用单片机头文件 #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include sbit dq = P1^5; //18b20 IO口的定义 sbit beep = P1^4; //蜂鸣器IO口定义 uint temperature ; // bit flag_300ms ; bit flag_lj_en; //按键连加使能 bit flag_lj_3_en; //按键连3次连加后使能 加的数就越大了 uchar key_time,key_value; //用做连加的中间变量 bit key_500ms ; sbit relay1 = P1^6; //加热继电器IO口定义 sbit relay2 = P1^3; //加水继电器IO口定义 uchar code table_num[]="0123456789abcdefg"; sbit rs=P1^0; //寄存器选择信号 H:数据寄存器 L:指令寄存器 sbit rw=P1^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器 sbit e =P1^2; //片选信号 下降沿触发 /****************主函数***************/ void main() { beep = 0; //开机叫一声 delay_1ms(150); P0 = P1 = P2 = P3 = 0xff; init_1602(); //1602初始化 time_init(); //初始化定时器 while(1) { if(flag_300ms == 1) //300ms 处理一次温度程序 { flag_300ms = 0; temperature = read_temp(); //先读出温度的值 shuiwei_dis() ; //水位显示 send_wave(); //测距离函数 clock_h_l(); //报警函数 write_sfm3_18B20(1,8,temperature); dingshi_dis(); //定时控制 if(distance > 10 + sw_jz) //说明水位出错 { beep = 1; write_string(2,8,"--.-m"); }else { if(sw_jz >= distance) { shuiwei = sw_jz - distance; //计算出液位 }else shuiwei = 0; write_sfm3(2,8,shuiwei); } } key(); //按键程序 key_with(); //设置报警温度 } } /*************定时器0中断服务程序***************/ void time0_int() interrupt 1 { static uchar value; TH0 = 0x3c; TL0 = 0xb0; // 50ms value ++; if(value % 6 == 0) { flag_300ms = 1; //300ms value = 0; } if(flag_lj_en == 1) //按下按键使能 { key_time ++; if(key_time >= 10) //500ms { key_time = 0; key_500ms = 1; //500ms key_value ++; if(key_value > 3) { key_value = 10; flag_lj_3_en = 1; //3次后1.5秒连加大些 } } } }
元器件清单
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !