/******************************************************************************************
电加热蒸汽锅炉全自动控制板说明
1、按上图所示接线;
2、上电后,供水设备工作(加水指示灯亮),报警设备工作;
3、水位信号到(水位指示灯亮),供水设备延时1秒停止工作(加水指示灯熄灭),加热设
备延时2秒工作(加热指示灯亮)。
4、水位信号断开(水位指示灯熄灭),加水设备延时启动(延时时间用拨码开关可以调节,
详细说明见后),加热设备延时10 秒停止。水位信号接通保持时,加热设备不停止工作。
加热设备也可以通过手动按钮控制开启或停止。
4位拨码开关都在数字这边时,水位信号断开时,加水设备启动(不延时),
“4”位往上拨,延时1秒;
“3”位往上拨,延时2秒;
“2”位往上拨,延时4秒;
“1”位往上拨,延时8秒;
也可以多种组合,如:“2”、“3”和“4”位往上拨,延时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中断计数变量
uint ledFlashCnt = 0; //ERR_LED指示灯闪烁周期计数
uchar Flag2ms = 0; //2MS到标志
uchar u8Flag15min = 0; //15分钟到标志
void TM0_init() //5毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0xEE; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA = 1;
}
void Timer1_Init(void) //250微秒@11.0592MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x1A; //设置定时初始值
TH1 = 0xFF; //设置定时初始值
EA = 1; //开总中断
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //开T0中断
}
/*
必须开启T0中断,延时函数才起作用
*/
void delay_1ms(void)
{
uchar i = 4; //每次256us,1ms中断4次
while (i) {
if (t1zd0b)
{
t1zd0b = 0; //清除时间中断标志
--i;
}
}
}
void delay_ms(uint var)//延时单位为毫秒,最多延时65.535秒(65535mS)
{
while (var--)
{
delay_1ms();
}
}
#define d_s(s) delay_ms((s)*1000ul)//延时单位为秒
void IO_init()
{
P3M0 = 0xe4; P3M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
ERR_LED = 1;
d_s(1);//延时1秒
JS_JDQ = 1;
ERR_LED = 0;
d_s(2);//延时2秒
DCF_JDQ = 1;
d_s(1);//延时1秒
JR_JDQ = 0;
}
void TM0_Isr() interrupt 1 //250毫秒
{
if(TF0) //定时器 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 ) //缺水时
{
DCF_JDQ = 1;
d_s(1);//延时1秒
JS_JDQ = 1;
d_s(3);//延时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分钟到,执行LED闪烁 3、如果第一个动作水位一直不能到,
//也就是开关一直断开高电平,则故障灯闪烁,
//加水加热电磁阀灯全部熄灭。
{
if (ledFlashCnt>=200) //200*5=1000ms
{
ledFlashCnt = 0;
ERR_LED = 1;
}
}
}
else if(KEY1==0) //b、第二步只要水位到了,也就是开关接通低电平,延时一秒
//加热灯点亮,延时五秒后,电磁阀灯熄灭,又过一秒,加水灯熄灭。
{
u8Flag15min = 0;
ERR_LED = 0;
DCF_JDQ = 0;
d_s(1);
JS_JDQ = 0;
d_s(2);
JR_JDQ = 1;
}
}
}
|