系統組成: (1)控制器。控制器是系統的核心部分,可以用工業計算機PLC、或者單片機。 (2)A /D轉換器。A/D轉換器可以把測得的模擬量轉換成數字量輸出,可以直接讀取。 (3)繼電器。繼電器在電路中起到斷電保護作用,是系統的安全保障。其種類很多,有電流繼電器、電壓及電器、速度繼電器等等。 (4)鍵盤。通過鍵盤可以設置限制電流大小。 (5)液晶顯顯示。液晶可以顯示設置電流以及實時電流值大小。 首先通過鍵盤設定電流值,然后檢測電流值,轉換成數字量通過數碼管顯示出來。當電流過大時繼電器動作,切斷電路,保護用電器。
1.jpg.png (146.06 KB, 下載次數: 93)
下載附件
仿真圖
2019-6-13 13:51 上傳
代碼如下: #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; } }
|