2 : 抽水按键,按一次,按设定的时间抽水,直到时间点结束.如果在设定时间内再按一次可以手动停止抽水.
3 : 时间选择,可以选择10秒,20秒,30秒,40秒.(定时)
4 : 内部有一个安全开关,只有断开才能作其他的操作.(中断)
#include
sbit P10=P1^0; //定义P10为驱动抽水马达的控制口
sbit P11=P1^1; //定义P11为时间选择的高位标志
sbit P12=P1^2; //定义P12为时间选择的低位标志
sbit P13=P1^3; //定义P13为抽水开关
sbit P14=P1^4; //定义P14为电源指示灯,开机长亮,抽水时闪亮
//保护开关 : 通过中断接口P3.2连接的独立按键
static char i;
void ISR_Key(void) interrupt 0 using 1
{
//ET0=0; //定时器中断关闭
TR0=0; //定时器开关关闭
P10=0; //进入中断程序执行程序
//P14=0;
//此时可以通过 EA=0指令暂时关掉中断
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void Timer0_isr(void) interrupt 1 using 1
{
static char s,t;
s++;
t++;
if(s==30)
{
P14=1;
s=0;
}
if(t==30*i)
{
P10=0;
t=0;
}
}
main()
{
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=0; //电平触发
P14=0;
while(P13==0)
{
//10秒定时
if(P11==0 &P12==0)
{
i=10;
Init_Timer0();
//TR0=0; //定时器开关关闭
}
//20秒定时
if(P11==0 &P12==1)
{
i=20;
Init_Timer0();
//TR0=0; //定时器开关关闭
}
//30秒定时
if(P11==1&P12==0)
{
i=30;
Init_Timer0();
//TR0=0; //定时器开关关闭
}
//40秒定时
if(P11==1&P12==0)
{
i=40;
Init_Timer0();
//TR0=0; //定时器开关关闭
}
}
}