📄 wkq.c
字号:
#include<reg51.h>
#define int0delayH1 0x9e
#define int0delayL1 0x58
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
#define KEY_NULL 0xff
#define KEY_SETTIME 0x0f /* 定时*/
#define KEY_INC 0x27 /* 递增*/
#define KEY_OFFSET 0x17 /* 移位*/
#define KEY_IN_WATER 0x2e /* 手动上水*/
#define KEY_SETTEMP 0x1f /* 定温*/
#define KEY_HOTUP1 0x1d /* 加热1*/
#define KEY_HOTUP2 0x2d /* 加热2*/
#define KEY_RUN 0x1e /* 运行*/
#define KEY_VERIFY_TIME 0x1b /* 校时*/
#define KEY_RST 0x2b /* 复位 */
#define KEY_SET_DEF 0x2a /* 默认 =复位+手动上水*/
/*以下输出定义*/
sbit OUT_HOTUP1 = P1^6 ; /* 加热1*/
sbit OUT_HOTUP2 = P1^5 ; /* 加热2*/
sbit OUT_WATER = P1^4 ; /* 水泵运行控制*/
sbit OUT_WARNING = P1^1 ; /* 报警*/
sbit OUT_IN_WATER = P1^0 ; /*上水*/
sbit OUT_CHECK_TEMP = P1^7 ; /* 测温*/
#define OUT_DISP_COM P2
#define OUT_DISP_DATA P0
#define KEYIN P2
sbit KEY_COM1 = P2^6;
sbit KEY_COM2 = P2^7;
sbit CHECK_POWER = P3^3;
/*以下输入定义*/
sbit IN_WATER_SCARCITY = P1^2 ; /* 缺水*/
sbit IN_OVER_WATER = P1^3 ; /*满水*/
sbit IN_CHECK_TEMP = P3^2 ; /* 测温*/
/////////////
sbit clock_dat=P3^0;
sbit clock_clk=P3^6;
sbit clock_rst=P3^1;
/////////////////////////////////////////////////////
uchar bdata FlagBit;
sbit F_HotFlag1 = FlagBit^0;//加热1标志
sbit F_HotFlag2 = FlagBit^1;//加热2标志
sbit F_RuningFlag = FlagBit^2;//运行标志
sbit F_HotUpingFlag = FlagBit^3;//加热标志
sbit Bit_Flag = FlagBit^4;//设定闪烁标志
sbit F_DcFlag = FlagBit^5;//秒显示标志
sbit F_OutWaterFlag = FlagBit^6;//水泵运行标志
sbit F_TempHeightFlag = FlagBit^7;//最高温度标志
uchar bdata FlagBit2;
sbit F_TimeChange = FlagBit2^0;//时间改变
sbit F_OutTempFlag = FlagBit2^1;//测温标志
sbit F_CheckWaterFlag = FlagBit2^2; //缺水标志
sbit F_WarningFlag = FlagBit2^3; //报警标志
sbit F_KeyPressHot1Flag = FlagBit2^4;
sbit F_KeyPressHot2Flag = FlagBit2^5;
sbit F_InWaterFlag = FlagBit2^6;//上水标志
sbit F_KeyPressRunFlag = FlagBit2^7;
uchar data KeyIn,State,KeyCode,KeyDelay;//键盘
uchar data DispBuf[6];
uchar data Offset_Bit;
ushort data DispDelay_Bit,HotKeyDelay;
ushort data DelayStartWater,DelayEndWater,DelayInWater;//上水
struct TIME {
uchar sec;
uchar min;
uchar hour;
uchar day;
uchar month;
uchar week;
uchar year;
};*/
struct TIME CurTime;
//struct DATE date;
uchar SetTime[2];
uchar SetNum;
uchar SetTemp,CurTemp;
uchar data DispBuf[6];
uchar data Offset_Bit;
uchar DispDelay;KeyDelay;
ushort data DelayStartWater,DelayEndWater,DelayInWater;//上水
ushort data OutTempDelay;
/*==================================================*/
extern void Read_Ram(uchar cpu_addr,uchar dsram_addr,uchar i);
extern void Write_Ram(uchar cpu_addr,uchar dsram_addr,uchar i);
extern void v_Get1302(uchar ucCurtime[]) ;
extern void v_Set1302(uchar *pSecDa) ;
////////////////////////////////////
void main(void)
{
INIT_SYS();
strart:
while(1)
{
CheckWater();
GetCurTemp();
GetCUrTime();
if(F_auto_Flag)
AutoRunSub();
else SdRunSub();
SetDispSub();
KeyIN=ScanKey();
switch(KeyIn)
{
case KEY_RST:
goto start;
return;
case KEY_SETTIME:
SetTimeSub();
F_TimeChange =1;
State=0;
break;
case KEY_SETTEMP:
SetTempSub();
F_TimeChange =1;
State=0;
break;
case KEY_VERIFY_TIME:
SetChangTimeSub();
F_TimeChange =1;
State=0;
break;
case KEY_HOTUP1:
HotKeyDelay = 0;
F_HotFlag1=!F_HotFlag1;
F_KeyPressHot1Flag =1;
if(F_HotUpingFlag)
SetHotUp(1);
DelayStartWater =0;
DelayEndWater =0;
F_TimeChange =1;
break;
case KEY_HOTUP2:
HotKeyDelay=0;
F_HotFlag2=!F_HotFlag2;
F_KeyPressHot2Flag = 1;
if(F_HotUpingFlag)
SetHotUp(1);
DelayStartWater =0;
DelayEndWater =0;
F_TimeChange =1;
break;
case KEY_RUN:
F_WarningFlag=!F_WarningFlag;
if(F_WarningFlag)
{
SetHotUp(0);
SetWater(0);
F_InWaterFlag=0;
OUT_IN_WATER=1;
}
F_TempHeightFlag =0;
F_TimeChange =1;
F_KeyPressRunFlag=1;
HotKeyDelay=0;
break;
case KEY_IN_WATER:
F_InWaterFlag=!F_InWaterFlag;
F_CheckWaterFlag=!F_InWaterFlag;
DelayInWater =0;
F_TimeChange =1;
break;
case KEY_SET_DEF:
x5045_write(DefSetBuf,0,13);
goto IniMain;
break;
default:
break;
}
}
goto strart;
}
//##################################################################
void INIT_SYS()
{
KeyIn=KeyCode =0x1f;
OUT_DISP_COM =0x00;
IniMain:
EA =0;
IN_WATER_SCARCITY =0;
IN_OVER_WATER =0;
for(State=0;State<8;State++)
SetTimeBuf[State]=0;
FlagBit =0x03;
FlagBit2=0;
// SetTemp =50;
// CurTime =0;
state=read_clock(0xc0|0x00);
if(State!=0x55)
{
State=0x55;
write_clock(0xc1|0x00,0x55);
SetClock();
}
watchdog();
read_clockT(uchar *CurTime)
start:
EA =0;
PCON =0x00; /*电源控制寄存器 地址97H*/
TMOD =0X10;
//定时器0
// TH0 =int0delayH; // 6M 1ms
// TL0 =int0delayL;
TR0=1;
ET0=1;
//定时器1
TH1 =int0delayH1; // 6M 1ms
TL1 =int0delayL1;
TR1=1;
ET1=1;
//外部0
IT0=1;
EX0=1;
//外部1
IT1=1;
EX1=1;
watchdog();
OUT_HOTUP1 =1;
OUT_HOTUP2 =1;
OUT_WATER =1;
OUT_WARNING =1;
OUT_IN_WATER =1;
Dc_TimeCount =0;
OutTempDelay =0;
DelayStartWater =0;
DelayEndWater =0;
DelayInWater =0;
F_KeyPressHot1Flag = 0;
F_KeyPressHot2Flag = 0;
F_KeyPressRunFlag = 0;
F_HotUpingFlag=0;
F_OutWaterFlag=0;
Bit_Flag=1;
F_DcFlag=1;
F_TimeChange =1;
F_OutTempFlag =0;
F_CheckWaterFlag =0;
F_WarningFlag =0;
F_TempHeightFlag =0;
watchdog();
KeyDelay=0;
State =0;
EA =1;
}
void Int_Timer1(void) interrupt 3 //using 2
{
TH1 = int0delayH1;
TL1 = int0delayL1;
DelayStartWater++;
HotKeyDelay++;
DispDelay_Bit++;
KeyDelay++;
DispDelay++;
DelayInWater++;
TimeCount++;
Dc_TimeCount++;
delaydog++;
if(delaydog>4)
{
x5045_reset_watchdog();
delaydog=0;
}
if(HotKeyDelay>DefKeyHotDelay)
{
F_KeyPressHot1Flag =0;
F_KeyPressHot2Flag =0;
F_KeyPressRunFlag =0;
}
if(Dc_TimeCount>=DefDcTime)
{
Dc_TimeCount=0;
F_DcFlag=!F_DcFlag;
}
if(CHECK_POWER) PowerDown=0;
if(TimeCount>=DefMinute)
{
F_TimeChange =1;
TimeCount=0;
CurTime++;
if(CurTime>=1440)
CurTime =0;
DelayEndWater++;
}
}
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void CheckWater()
{
if(F_WarningFlag)
{
if(DelayInWater>DefWarningTime)
{
F_CheckWaterFlag=0;
OUT_WARNING =1;
}
return ;
}
if(!F_CheckWaterFlag&&(!IN_WATER_SCARCITY||F_InWaterFlag))
{
F_InWaterFlag =1;
F_CheckWaterFlag =1;
OUT_IN_WATER =0;
DelayInWater =0;
SetHotUp(0);
}
if(F_CheckWaterFlag&&(!IN_OVER_WATER||!F_InWaterFlag))
{
F_WarningFlag =0;
F_InWaterFlag =0;
F_CheckWaterFlag =0;
OUT_IN_WATER =1;
OUT_WARNING =1;
F_TimeChange =1;
return;
}
if(DelayInWater>DefInWaterTime&&F_InWaterFlag)
{
if(!IN_WATER_SCARCITY)
{
F_WarningFlag =1;
F_CheckWaterFlag=0;
F_InWaterFlag =0;
OUT_WARNING =0;
OUT_IN_WATER =1;
SetWater(0);
DelayInWater=0;
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -