系统组成: (1)控制器。控制器是系统的核心部分,可以用工业计算机PLC、或者单片机。 (2)A /D转换器。A/D转换器可以把测得的模拟量转换成数字量输出,可以直接读取。 (3)继电器。继电器在电路中起到断电保护作用,是系统的安全保障。其种类很多,有电流继电器、电压及电器、速度继电器等等。 (4)键盘。通过键盘可以设置限制电流大小。 (5)液晶显显示。液晶可以显示设置电流以及实时电流值大小。 首先通过键盘设定电流值,然后检测电流值,转换成数字量通过数码管显示出来。当电流过大时继电器动作,切断电路,保护用电器。
代码如下: #include<reg51.h> #include"delay.h" #include"lcd602.h" #include"ds18b20.h" //**************端口定义******************* sbit LED = P1^0; sbit k1 = P1^4; sbit k2 = P1^5; sbit k3 = P1^6; //**************数组定义******************* uchar code tab2[]={"Temp: "}; //5 uchar code tab3[]={" H "}; //3 uchar code tab4[]={"L "}; //8 //**************变量定义******************* int temp1 = 400; //上限 int temp3 = 100; //下限 bit flag = 0; //上下限选择标志 int temp4; //当上限减到负数时 uchar temp5 = 0; /*******************按键********************/ void key() { if(flag == 0) //上限 { write_zifu(2,0,'*'); write_zifu(2,8,' '); if(k1 == 0) { delayxms(5); while(k1 == 0); temp1 += 10; }
if(k2 == 0) { delayxms(5); while(k2 == 0); temp1 -= 10; } }
if(flag == 1) //下限 { write_zifu(2,0,' '); write_zifu(2,8,'*'); if(k1 == 0) { delayxms(5); while(k1 == 0); temp3 += 10; }
if(k2 == 0) { delayxms(5); while(k2 == 0); temp3 -= 10; } }
if(k3 == 0) //上下限选择标志 { delayxms(5); while(k3 == 0); flag = ~flag; } } /*******************定时器T1初始化********************/ void T1_init() { TMOD = TMOD | 0x10; //设T1为方式1 TH1 = (65535-20000)/256; //计数20000个 TL1 = (65535-20000)%256; EA = 1; //开启总中断 ET1 = 1; //允许T1中断 TR1 = 1; //启动 } /*******************主函数********************/ void main() { chushihua();//lcd1602初始化 write_string(1,0,tab2); write_string(2,0,tab3); write_string(2,9,tab4); T1_init(); while(1) { key(); ds1820disp(); /*温度上限*/ if(temp1 < 0) { write_zifu(2,2,'-'); temp4 = temp1; temp4 = ~temp4; temp4 += 1; write_num3(2,3,temp4); write_zifu(2,7,' '); } else { write_zifu(2,2,'+'); if(temp1>=1000) { write_num4(2,3,temp1); } else { write_num3(2,3,temp1); } }
/*温度下限*/ if(temp3 < 0) { write_zifu(2,10,'-'); write_num3(2,11,-(temp3)); write_zifu(2,15,' '); } else { write_zifu(2,10,'+'); if(temp3>=1000) {write_num4(2,11,temp3);} else {write_num3(2,11,temp3);} }
/*报警*/ if(flag_temp == 1) //温度小于零 { if((-t)>temp1 || (-t)<temp3) {LED = 0;} else {LED = 1;} } else //温度大于零 { if(t>temp1 || t<temp3) {LED = 0;} else {LED = 1;} } } } /**************************定时器T1中断服务函数************************************/ void T1_time() interrupt 3 { TH1 = (65535-20000)/256; //计数20000个 TL1 = (65535-20000)%256; temp5 += 1; if(temp5 >= 25) { temp5 = 0; TR1 = 0; ReadTemperature(); TR1 = 1; } }
|