【简要说明】
一、尺寸:长72mmX宽99mmX高20mm
二、 主要芯片:单片机、DS18B20、数码管
三、 工作电压:输入电压小于12V,另有24V 可选。功耗小于2W
四、 特点:1、具有输出电压指示灯。
2、输出具有指示灯。
3、采用螺旋压接端子。
4、强大的滤波电路。
5、具有四位数码管显示,可以显示小数点。
6、具有系统复位功能
7、具有完善的保护电路:电流限制、热关断电路、电源防接反功能、续流保护、光耦隔离等
8、可接两个DS18B20传感器
9、两路继电器独立工作控制
10、可以自由编程,提供参考程序
11、继电器所有触点全部输出
12、三个输入控制按键,通过程序也可以自由设定
13、工作稳定可靠。
14、工作温度范围-40℃~+70℃
15、工作湿度 40% ~ 80%RH
16、可装入槽型板,并安装在DIN导轨上。
GYJ-0033_双路可编程温度控制系统原理图及PCB图
元件清单:
实物图与接线图:
A为传感器1的当前温度,B为传感器2的当前温度,C为设定的差值温度。
当满足:(A-B)>=C,时,继电器吸合,不满足条件时继电器断开。
因为内部是6M晶振 外部是11.0592M 如果选择外部时钟,读取时间达不到60um就不能运行。
两路温控两个探头温度差控制单片机源程序如下:
/***********************************************************************
单品片机;60s2
板子; 双路温控继电器,两个温控探头,上面的温控探头是A面显示的温度, 下面的温控探头是B面显示的温度,
操作过程; 下完程序先设定C,先按加温度键,然后再按减温键,断一下电再上电,这样是为了设定掉电存储
板子功能; 当A的温度大于B的温度到设定值时,继电器A吸合,当再这个设定范围时,断开。有个问题,当B大于A时也会吸合
*************************************************************************/
#include
#include
#include "INTRINS.H"
#define uchar unsigned char
#define uint unsigned int
//数码管显示段码
code unsigned char duan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88, 0x83, 0xC6, 0xBF,0x7f};
unsigned char dong[4] = { 0xFF, 0xFF, 0xFF, 0xFF}; //数码管显示缓冲区
uchar i = 0; //数码管扫描动态索引
uint time2,time3;
uchar gai = 0;
uchar mode = 1; //换页变量
/********************掉电存储*********************************************/
typedef unsigned char INT8U;
typedef unsigned int INT16U;
sfr IAP_DATA = 0xC2;
sfr IAP_ADDRH = 0xC3;
sfr IAP_ADDRL = 0xC4;
sfr IAP_CMD = 0xC5;
sfr IAP_TRIG = 0xC6;
sfr IAP_CONTR = 0xC7;
#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值
union union_temp16
{
INT16U un_temp16;
INT8U un_temp8[2];
}my_unTemp16;
INT8U Byte_Read(INT16U add); //读一字节,调用前需打开IAP 功能
void Byte_Program(INT16U add, INT8U ch); //字节编程,调用前需打开IAP 功能
void Sector_Erase(INT16U add); //擦除扇区
void IAP_Disable(); //关闭IAP 功能
void Delay();
/******************************18b20*************************************************************/
bit flag1s = 0; //1s定时标志
extern bit Start18B20(); //18b20初始化函数
extern bit Get18B20Temp(int *temp); //18b20温度读取函数
/******************************第二路温控*************************************************/
bit flag1ss = 0; //1s定时标志
extern bit Start18B200(); //18b20初始化函数
extern bit Get18B20Tempp(int *tempp); //18b20温度读取函数
/*******************************************************************************************/
sbit wei1 = P2^3; //数码管的位断开关
sbit wei2 = P2^4;
sbit wei3 = P2^5;
sbit wei4 = P2^6;
bit d1 = 1; //换画面按键当前值
bit d2 = 1; //计数加按键当前值
bit d3 = 1; //计数减按键当前值
sbit s1 = P2^0; //计数加
sbit s2 = P2^1; //计数减
sbit s3 = P2^2; //换画面按钮
sbit out1 = P1^2; //高温启动
sbit out2 = P1^3; //低温启动
uchar T0RH = 0; //T0重载值的高字节
uchar T0RL = 0; //T0重载值的低字节
void peizhit0(uint ms); //配置t0定时器
void key(); //按键扫描函数
void main()
{
bit q1 = 1;
bit q2 = 1;
bit q3 = 1;
/***********************18b20***************************************/
int intT, decT; //温度值的整数和小数部分
bit res ;
int temp; //读取到的当前温度值
/***********************第二路18b20***************************************/
int intTT, decTT; //温度值的整数和小数部分
bit ress ;
int tempp; //读取到的当前温度值
Start18B20(); /*启动DS18B20*/
Start18B200(); /*启动DS18B20*/
/***********************开机读掉电存储内容******************************************************/
time2 = Byte_Read(0x03)*255+Byte_Read(0x02); //注意这是把高字节和低字节合在一起
time3 = Byte_Read(0x05)*255+Byte_Read(0x04); //读三的时间
EA = 1; //开总中断
peizhit0(1); //配置T0定时1ms
while(1)
{
/*********************第一个按键换页按键************************************/
if(d3 != q3)
{
q3 = d3;
if(d3 == 0)
{
mode = mode+1; //功能设置,4个参数,4个周期为一个循环
if(mode == 4)
{
mode = 1;
}
}
}
/*******************************第二个按键按下*************************/
if(d2 != q2)
{
q2 = d2;
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』