|
/******************************************************************************************
電加熱蒸汽鍋爐全自動(dòng)控制板說明
1、按上圖所示接線;
2、上電后,供水設(shè)備工作(加水指示燈亮),報(bào)警設(shè)備工作;
3、水位信號(hào)到(水位指示燈亮),供水設(shè)備延時(shí)1秒停止工作(加水指示燈熄滅),加熱設(shè)
備延時(shí)2秒工作(加熱指示燈亮)。
4、水位信號(hào)斷開(水位指示燈熄滅),加水設(shè)備延時(shí)啟動(dòng)(延時(shí)時(shí)間用撥碼開關(guān)可以調(diào)節(jié),
詳細(xì)說明見后),加熱設(shè)備延時(shí)10 秒停止。水位信號(hào)接通保持時(shí),加熱設(shè)備不停止工作。
加熱設(shè)備也可以通過手動(dòng)按鈕控制開啟或停止。
4位撥碼開關(guān)都在數(shù)字這邊時(shí),水位信號(hào)斷開時(shí),加水設(shè)備啟動(dòng)(不延時(shí)),
“4”位往上撥,延時(shí)1秒;
“3”位往上撥,延時(shí)2秒;
“2”位往上撥,延時(shí)4秒;
“1”位往上撥,延時(shí)8秒;
也可以多種組合,如:“2”、“3”和“4”位往上撥,延時(shí)7秒。同理。
***********************************************************************************************/
#include <STC8H.h>
#define uchar unsigned char
#define uint unsigned int
sbit JR_JDQ = P3^3;
sbit JS_JDQ = P5^5;
sbit DCF_JDQ = P3^2;
sbit KEY1 = P3^0;
sbit ERR_LED = P5^4;
bit t0zd0b=0;
bit t1zd0b=0;
uchar count;
char sec,min;
bit flag;
uint i=0,j=0;
uchar t0IntCnt = 0; //T0中斷計(jì)數(shù)變量
uint ledFlashCnt = 0; //ERR_LED指示燈閃爍周期計(jì)數(shù)
uchar Flag2ms = 0; //2MS到標(biāo)志
uchar u8Flag15min = 0; //15分鐘到標(biāo)志
void TM0_init() //5毫秒@11.0592MHz
{
AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x00; //設(shè)置定時(shí)初始值
TH0 = 0xEE; //設(shè)置定時(shí)初始值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
ET0 = 1; //使能定時(shí)器0中斷
EA = 1;
}
void Timer1_Init(void) //250微秒@11.0592MHz
{
AUXR &= 0xBF; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0x0F; //設(shè)置定時(shí)器模式
TL1 = 0x1A; //設(shè)置定時(shí)初始值
TH1 = 0xFF; //設(shè)置定時(shí)初始值
EA = 1; //開總中斷
TF1 = 0; //清除TF1標(biāo)志
TR1 = 1; //定時(shí)器1開始計(jì)時(shí)
ET1 = 1; //開T0中斷
}
/*
必須開啟T0中斷,延時(shí)函數(shù)才起作用
*/
void delay_1ms(void)
{
uchar i = 4; //每次256us,1ms中斷4次
while (i) {
if (t1zd0b)
{
t1zd0b = 0; //清除時(shí)間中斷標(biāo)志
--i;
}
}
}
void delay_ms(uint var)//延時(shí)單位為毫秒,最多延時(shí)65.535秒(65535mS)
{
while (var--)
{
delay_1ms();
}
}
#define d_s(s) delay_ms((s)*1000ul)//延時(shí)單位為秒
void IO_init()
{
P3M0 = 0xe4; P3M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
ERR_LED = 1;
d_s(1);//延時(shí)1秒
JS_JDQ = 1;
ERR_LED = 0;
d_s(2);//延時(shí)2秒
DCF_JDQ = 1;
d_s(1);//延時(shí)1秒
JR_JDQ = 0;
}
void TM0_Isr() interrupt 1 //250毫秒
{
if(TF0) //定時(shí)器 0 上溢中斷
{
TF0 = 0;
t0zd0b = 1;
t0IntCnt++;
if(t0IntCnt>=8) //8*250 = 2ms
{
t0IntCnt = 0;
Flag2ms=1;
ledFlashCnt ++;
}
}
}
void TM1_Isr() interrupt 3
{
if(TF1)
TF1=0;
t1zd0b=1;
}
void main()
{
TM0_init();Timer1_Init();
IO_init();
delay_ms(80);
while (1)
{
if(KEY1 == 1 ) //缺水時(shí)
{
DCF_JDQ = 1;
d_s(1);//延時(shí)1秒
JS_JDQ = 1;
d_s(3);//延時(shí)1秒
DCF_JDQ = 0;
JR_JDQ = 0;
if(flag)
{
flag=0;
if(++count >= 200) //200*5=1000ms
{
count = 0;
sec++;
if(sec >= 60)
{
sec = 0;
min++;
if(min >= 1)
min=0;
u8Flag15min = 1;
}
}
JS_JDQ = 0;
DCF_JDQ = 0;
JR_JDQ = 0;
//break;
}
else //15分鐘到,執(zhí)行LED閃爍 3、如果第一個(gè)動(dòng)作水位一直不能到,
//也就是開關(guān)一直斷開高電平,則故障燈閃爍,
//加水加熱電磁閥燈全部熄滅。
{
if (ledFlashCnt>=200) //200*5=1000ms
{
ledFlashCnt = 0;
ERR_LED = 1;
}
}
}
else if(KEY1==0) //b、第二步只要水位到了,也就是開關(guān)接通低電平,延時(shí)一秒
//加熱燈點(diǎn)亮,延時(shí)五秒后,電磁閥燈熄滅,又過一秒,加水燈熄滅。
{
u8Flag15min = 0;
ERR_LED = 0;
DCF_JDQ = 0;
d_s(1);
JS_JDQ = 0;
d_s(2);
JR_JDQ = 1;
}
}
}
|
|