1062 lines
23 KiB
C
1062 lines
23 KiB
C
/**************************************************************************
|
||
**************************************************************************/
|
||
#include "Define_Global.h"
|
||
#if !_MODE_IHDEBUG_ && (_MODE_COMM_NO_ || !_MODE_COMM_HAVE_)
|
||
|
||
/**************************************************************************
|
||
* 函数名称:DealMode_CleanRam
|
||
* 函数功能:清模式处理寄存器
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void DealMode_CleanRam()
|
||
{
|
||
Sec_Mode = Min_Mode = 0;
|
||
Cnt1_Mode = Cnt2_Mode = 0;
|
||
B_TmprStop = 0;
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:WriteData8Bits
|
||
* 函数功能:1628芯片8bit送码
|
||
* 入口参数:data=被传送的数据
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void WriteData8Bits(unsigned char data)
|
||
{
|
||
volatile unsigned char i;
|
||
|
||
Pin_SDA = 0;
|
||
Pin_STB = 0;
|
||
|
||
for(i = 8; i > 0; i--)
|
||
{
|
||
Pin_SCK = 0;
|
||
|
||
if(data & 0x1)
|
||
{
|
||
Pin_SDA = 1;
|
||
}
|
||
else
|
||
{
|
||
Pin_SDA = 0;
|
||
}
|
||
data >>= 1;
|
||
|
||
NOP();
|
||
NOP();
|
||
Pin_SCK = 1;
|
||
}
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:Display
|
||
* 函数功能:显示输出
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void Display()
|
||
{
|
||
volatile unsigned char cnt;
|
||
|
||
Pin_STB = 1;
|
||
WriteData8Bits(0x03); //7*10
|
||
Pin_STB = 1;
|
||
|
||
WriteData8Bits(0x40); //地址自增、送数据
|
||
Pin_STB = 1;
|
||
|
||
WriteData8Bits(0xC0); //从00H地址开始送数据
|
||
|
||
for(cnt = 0; cnt < 14; cnt++)
|
||
{
|
||
WriteData8Bits(ShowData[cnt]);
|
||
}
|
||
Pin_STB = 1;
|
||
|
||
WriteData8Bits(0x8A); //按照设置亮度,显示输出
|
||
Pin_STB = 1;
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:KeyScan
|
||
* 函数功能:按键扫描
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void KeyScan()
|
||
{
|
||
static unsigned char CntKey_Old,Delay_KeyScan;
|
||
|
||
volatile unsigned char cnt,i;
|
||
volatile unsigned char data[5];
|
||
//---------------------------------------------------------------------
|
||
Io_SDA = 0;
|
||
Pin_STB = 1;
|
||
WriteData8Bits(0x42); //读扫键数据
|
||
|
||
Io_SDA = 1;
|
||
Pin_SCK = 1;
|
||
Pin_STB = 0;
|
||
Delay_Xus(40); //延时40us
|
||
|
||
for(cnt = 40; cnt > 0;)
|
||
{
|
||
Pin_SCK = 0;
|
||
Delay_Xus(10); //延时10us
|
||
data[0] >>= 1;
|
||
|
||
if(Pin_SDA)
|
||
{
|
||
SetBit(data[0],7);
|
||
}
|
||
Pin_SCK = 1;
|
||
Delay_Xus(10); //延时10us
|
||
|
||
cnt--;
|
||
if(0 == (cnt & 0x07))
|
||
{
|
||
if(0xFF != data[0])
|
||
{
|
||
i = (unsigned)cnt >> 3;
|
||
data[i] = data[0];
|
||
}
|
||
}
|
||
}
|
||
|
||
Pin_STB = 1;
|
||
Io_SDA = 0;
|
||
//---------------------------------------------------------------------
|
||
while(1)
|
||
{
|
||
cnt = 0;
|
||
cnt++; if(C_Key_OnOff) break; //开关键
|
||
cnt++; if(C_Key_Add) break; //加键
|
||
cnt++; if(C_Key_Sub) break; //减键
|
||
cnt++; if(C_Key_Time) break; //时间键
|
||
cnt = 0; break;
|
||
}
|
||
//---------------------------------------------------------------------
|
||
if(cnt == CntKey_Old)
|
||
{
|
||
if(++Delay_KeyScan & 0x08) //消抖
|
||
{
|
||
Delay_KeyScan = 0;
|
||
KeyValue = CntKey_Old;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
CntKey_Old = cnt;
|
||
Delay_KeyScan = 0;
|
||
}
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:DealKey_Com
|
||
* 函数功能:按键共用处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void DealKey_Com()
|
||
{
|
||
Delay_Sec = Delay_5S = 0;
|
||
Delay_NoPan = Delay_Error = 0;
|
||
Wait_Flash = Delay_Flash = 0;
|
||
B_DispFlash = 0;
|
||
|
||
if(!B_KeyLong)
|
||
{
|
||
Buzz_Short_One(); //蜂鸣器短鸣1声
|
||
}
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:DealKey_OnOff
|
||
* 函数功能:开关键处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void DealKey_OnOff()
|
||
{
|
||
DealMode_CleanRam(); //清模式处理寄存器
|
||
|
||
if(B_Adjust_SlopeCurr)
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
SlopeCurr_Adjust = 0x80; //电流斜率调整值回到默认值
|
||
}
|
||
else if(B_OnOff)
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
|
||
Flag1_Error = 0; //清硬件故障标志
|
||
B_OnOff = 0; //关机
|
||
DangWei = 0;
|
||
|
||
B_DingShi = 0; //退出定时功能
|
||
B_TimeSet = 0; //退出时间设定
|
||
|
||
Hour_Set = Min_Set = 0;
|
||
Delay_DS = 0;
|
||
}
|
||
else
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
|
||
B_OnOff = 1;
|
||
DangWei = 10; //默认工作功率
|
||
|
||
B_DingShi = 0; //退出定时功能
|
||
B_TimeSet = 0; //退出时间设定
|
||
|
||
Min_Set = 0; //默认定时时间为2小时
|
||
Hour_Set = 2;
|
||
Delay_DS = 0;
|
||
}
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:DealKey_Time
|
||
* 函数功能:时间键处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void DealKey_Time()
|
||
{
|
||
if(B_KeyLong)
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
Buzz_Short_One(); //蜂鸣器短鸣1声
|
||
|
||
B_Adjust_SlopeCurr = 1; //电流斜率调节
|
||
}
|
||
else if(B_OnOff) //关机,不进入处理
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
|
||
if(!B_DingShi)
|
||
{
|
||
B_DingShi = 1; //开启定时功能
|
||
B_TimeSet = 1; //进行时间设定
|
||
|
||
Min_Set = Hour_Set = 0;
|
||
Delay_DS = 0;
|
||
}
|
||
else if(!B_TimeSet)
|
||
{
|
||
B_DingShi = 1; //开启定时功能
|
||
B_TimeSet = 1; //进行时间设定
|
||
Delay_DS = 0;
|
||
}
|
||
else
|
||
{
|
||
B_DingShi = 0; //退出定时功能
|
||
B_TimeSet = 0; //退出时间设定
|
||
|
||
Min_Set = 0; //默认定时时间为2小时
|
||
Hour_Set = 2;
|
||
Delay_DS = 0;
|
||
}
|
||
}
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:DealKey_Add
|
||
* 函数功能:加键处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void DealKey_Add()
|
||
{
|
||
if(B_Adjust_SlopeCurr)
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
SlopeCurr_Adjust--; //电流斜率调整值-1(功率增加)
|
||
}
|
||
else if(B_OnOff) //关机,不进入处理
|
||
{
|
||
if(B_TimeSet)
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
Delay_DS = 0;
|
||
|
||
if(B_KeyLong)
|
||
{
|
||
Min_Set += 10; //+10
|
||
}
|
||
else
|
||
{
|
||
Min_Set++; //+1
|
||
}
|
||
|
||
if(B_DingShi && (Hour_Set >= 3))
|
||
{
|
||
Min_Set = Hour_Set = 0;
|
||
}
|
||
else if(Min_Set >= 60)
|
||
{
|
||
if(B_DingShi && (Hour_Set < 3)) //定时最大时间为3:00
|
||
{
|
||
Min_Set = 0;
|
||
Hour_Set++;
|
||
}
|
||
else
|
||
{
|
||
Min_Set = Hour_Set = 0;
|
||
}
|
||
}
|
||
}
|
||
else if(!B_KeyLong) //长按键无效
|
||
{
|
||
if(DangWei < 20) //最大工作档位=20
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
|
||
B_DispTurn = 0; //显示功率
|
||
DangWei++; //档位+1
|
||
|
||
DealMode_CleanRam(); //清模式处理寄存器
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:DealKey_Sub
|
||
* 函数功能:减键处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void DealKey_Sub()
|
||
{
|
||
if(B_Adjust_SlopeCurr)
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
SlopeCurr_Adjust++; //电流斜率调整值+1(功率减小)
|
||
}
|
||
else if(B_OnOff) //关机,不进入处理
|
||
{
|
||
if(B_TimeSet)
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
Delay_DS = 0;
|
||
|
||
if(B_KeyLong)
|
||
{
|
||
Min_Set -= 10; //-10
|
||
}
|
||
else
|
||
{
|
||
Min_Set--; //-1
|
||
}
|
||
|
||
if(Min_Set >= 60)
|
||
{
|
||
if(Hour_Set) //最小设定定时时间为0:00
|
||
{
|
||
Min_Set -= 196;
|
||
Hour_Set--;
|
||
}
|
||
else
|
||
{
|
||
Min_Set = 0;
|
||
Hour_Set = 3; //定时最大时间3:00
|
||
}
|
||
}
|
||
}
|
||
else if(!B_KeyLong) //长按键无效
|
||
{
|
||
if(DangWei > 1)
|
||
{
|
||
DealKey_Com(); //按键有效,进行相应处理
|
||
|
||
B_DispTurn = 0; //显示功率
|
||
DangWei--; //档位-1
|
||
|
||
DealMode_CleanRam(); //清模式处理寄存器
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:Deal_Key
|
||
* 函数功能:按键处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void Deal_Key()
|
||
{
|
||
static unsigned int KeyValue_Old;
|
||
static unsigned int Del_KeyLong;
|
||
|
||
volatile unsigned char i;
|
||
//---------------------------------------------------------------------
|
||
if((!B_Dly_PowerOn && (C_KeyValue_Time != KeyValue)) ||
|
||
((Flag1_Error || Flag2_Error) && (C_KeyValue_OnOff != KeyValue)))
|
||
{ //上电延时并且非时间键、通信故障、硬件故障并且非开关键
|
||
i = 0; //按键无效
|
||
}
|
||
else
|
||
{
|
||
i = KeyValue;
|
||
}
|
||
//---------------------------------------------------------------------
|
||
if(i)
|
||
{
|
||
if(B_TimeSet && ((C_KeyValue_Add == i) || (C_KeyValue_Sub == i)))
|
||
{
|
||
Wait_Flash = Delay_Flash = 0;
|
||
B_DispFlash = 0;
|
||
}
|
||
|
||
if(i != KeyValue_Old)
|
||
{
|
||
B_KeyLong = 0;
|
||
|
||
if(C_KeyValue_Time == i)
|
||
{
|
||
Del_KeyLong = 950/C_TimeMS_Main; //950ms
|
||
}
|
||
else
|
||
{
|
||
Del_KeyLong = 300/C_TimeMS_Main; //300ms
|
||
}
|
||
|
||
switch(i)
|
||
{
|
||
case 1: DealKey_OnOff(); break; //开关键
|
||
case 2: DealKey_Add(); break; //加键
|
||
case 3: DealKey_Sub(); break; //减键
|
||
case 4: DealKey_Time(); break; //时间键
|
||
default: break;
|
||
}
|
||
|
||
KeyValue_Old = i;
|
||
}
|
||
else if(Del_KeyLong)
|
||
{
|
||
Del_KeyLong--;
|
||
}
|
||
else
|
||
{
|
||
if(C_KeyValue_Time == i)
|
||
{
|
||
if(!B_KeyLong && !B_Dly_PowerOn)
|
||
{
|
||
B_KeyLong = 1;
|
||
DealKey_Time(); //时间键长按
|
||
}
|
||
}
|
||
else if((C_KeyValue_Add == i) || (C_KeyValue_Sub == i))
|
||
{
|
||
Del_KeyLong = 100/C_TimeMS_Main; //100ms
|
||
B_KeyLong = 1;
|
||
|
||
if(C_KeyValue_Add == i)
|
||
{
|
||
DealKey_Add(); //加键长按
|
||
}
|
||
else
|
||
{
|
||
DealKey_Sub(); //减键长按
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
KeyValue_Old = 0;
|
||
}
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:Dec_to_Hex
|
||
* 函数功能:256以内HEX转BCD
|
||
* 入口参数:data=被转换的数据
|
||
* 出口参数:i=转换结果
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
unsigned int Dec_to_Hex(unsigned char data)
|
||
{
|
||
volatile unsigned int i = 0;
|
||
|
||
while(data > 99)
|
||
{
|
||
data -= 100;
|
||
i += 0x100;
|
||
}
|
||
while(data > 9)
|
||
{
|
||
data -= 10;
|
||
i += 0x10;
|
||
}
|
||
i += data;
|
||
return i;
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:SetDispPower
|
||
* 函数功能:功率显示
|
||
* 入口参数:i=功率档位
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void SetDispPower(unsigned char i)
|
||
{
|
||
volatile unsigned char x;
|
||
|
||
x = (unsigned)Tab_DispPower[i] & 0xF0;
|
||
if(x)
|
||
{
|
||
x = ((unsigned)Tab_DispPower[i] >> 4) & 0x0F;
|
||
Smg_Data1 = Tab_Smg[x]; //功率显示
|
||
}
|
||
x = (unsigned)Tab_DispPower[i] & 0x0F;
|
||
Smg_Data2 = Tab_Smg[x];
|
||
|
||
Smg_Data3 = SMG_0;
|
||
Smg_Data4 = SMG_0;
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:SetDispTime
|
||
* 函数功能:时间显示
|
||
* 入口参数:i=时,j=分
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void SetDispTime(unsigned char i,unsigned char j)
|
||
{
|
||
volatile unsigned char x;
|
||
|
||
if(i >= 10)
|
||
{
|
||
x = (Dec_to_Hex(i) >> 4) & 0x0F;
|
||
Smg_Data1 = Tab_Smg[x]; //时显示
|
||
}
|
||
x = Dec_to_Hex(i) & 0x0F;
|
||
Smg_Data2 = Tab_Smg[x];
|
||
|
||
x = (Dec_to_Hex(j) >> 4) & 0x0F;
|
||
Smg_Data3 = Tab_Smg[x]; //分显示
|
||
x = Dec_to_Hex(j) & 0x0F;
|
||
Smg_Data4 = Tab_Smg[x];
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:Set_DispData
|
||
* 函数功能:显示数据设置
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void Set_DispData()
|
||
{
|
||
volatile unsigned char i,j;
|
||
|
||
for(i = 0; i < sizeof(ShowData); i++)
|
||
{
|
||
ShowData[i] = 0; //清显示寄存器
|
||
}
|
||
/**********************************************************************
|
||
测试显示
|
||
**********************************************************************/
|
||
#ifdef _TEST_DISP_
|
||
static unsigned char TestRam[2];
|
||
static unsigned int Delay_TestDisp;
|
||
//---------------------------------------------------------------------
|
||
if(++Delay_TestDisp & 0x100)
|
||
{
|
||
TestRam[0] = C_Data1_TestDisp >> 8;
|
||
TestRam[1] = C_Data1_TestDisp;
|
||
}
|
||
else
|
||
{
|
||
TestRam[0] = C_Data2_TestDisp >> 8;
|
||
TestRam[1] = C_Data2_TestDisp;
|
||
}
|
||
//---------------------------------------------------------------------
|
||
i = (TestRam[0] >> 4) & 0x0F;
|
||
j = TestRam[0] & 0x0F;
|
||
|
||
Smg_Data1 = Tab_Smg[i]; //高2位
|
||
Smg_Data2 = Tab_Smg[j];
|
||
|
||
i = (TestRam[1] >> 4) & 0x0F;
|
||
j = TestRam[1] & 0x0F;
|
||
|
||
Smg_Data3 = Tab_Smg[i]; //低2位
|
||
Smg_Data4 = Tab_Smg[j];
|
||
//---------------------------------------------------------------------
|
||
if(B_PPGDP_Dis) On_Led_M1; //M1指示灯
|
||
if(Status_PPGDP & 0x02) On_Led_M2; //M2指示灯
|
||
if(B_Pan_Iron) On_Led_M3; //M3指示灯
|
||
if(B_Protect_BackPress) On_Led_M4; //M4指示灯
|
||
if(B_Zero_No) On_Led_M5; //M5指示灯
|
||
if(B_Zero_60Hz) On_Led_M6; //M6指示灯
|
||
if(B_Pan_No) On_Led_M7; //M7指示灯
|
||
|
||
return;
|
||
#endif
|
||
/**********************************************************************
|
||
电流斜率调节显示
|
||
**********************************************************************/
|
||
if(B_Adjust_SlopeCurr)
|
||
{
|
||
i = ((unsigned)PowerWork >> 4) & 0x0F;
|
||
j = (unsigned)PowerWork & 0x0F;
|
||
|
||
Smg_Data1 = Tab_Smg[i]; //高2位
|
||
Smg_Data2 = Tab_Smg[j];
|
||
|
||
i = ((unsigned)SlopeCurr_Adjust >> 4) & 0x0F;
|
||
j = (unsigned)SlopeCurr_Adjust & 0x0F;
|
||
|
||
Smg_Data3 = Tab_Smg[i]; //低2位
|
||
Smg_Data4 = Tab_Smg[j];
|
||
|
||
Led_Data1 = 0xFF;
|
||
Led_Data2 = 0xFF;
|
||
Led_Data3 = 0xFF;
|
||
return;
|
||
}
|
||
/**********************************************************************
|
||
上电显示
|
||
**********************************************************************/
|
||
if(!B_Dly_PowerOn) //上电延时,显示全亮
|
||
{
|
||
Smg_Data1 = 0xFF;
|
||
Smg_Data2 = 0xFF;
|
||
Smg_Data3 = 0xFF;
|
||
Smg_Data4 = 0xFF;
|
||
|
||
Led_Data1 = 0xFF;
|
||
Led_Data2 = 0xFF;
|
||
Led_Data3 = 0xFF;
|
||
return;
|
||
}
|
||
/**********************************************************************
|
||
正常显示
|
||
**********************************************************************/
|
||
if(Flag1_Error || Flag2_Error) //故障显示
|
||
{
|
||
if(!B_DispFlash)
|
||
{
|
||
Smg_Data2 = SMG_E;
|
||
|
||
if(B_EPanOpen) Smg_Data3 = SMG_2; //锅底NTC开路故障
|
||
else if(B_EPanClose) Smg_Data3 = SMG_2; //锅底NTC短路故障
|
||
else if(B_EIgbtOpen) Smg_Data3 = SMG_1; //IGBT-NTC开路故障
|
||
else if(B_EIgbtClose) Smg_Data3 = SMG_1; //IGBT-NTC短路故障
|
||
else if(B_EVolHigh) Smg_Data3 = SMG_3; //市电高压故障
|
||
else if(B_EVolLow) Smg_Data3 = SMG_4; //市电低压故障
|
||
else if(B_EPanOver) Smg_Data3 = SMG_5; //锅底NTC超温故障
|
||
else if(B_EIgbtOver) Smg_Data3 = SMG_6; //IGBT-NTC超温故障
|
||
|
||
else if(B_Comm_Error) Smg_Data3 = SMG_C; //通信故障
|
||
}
|
||
}
|
||
else if(B_OnOff) //开机显示
|
||
{
|
||
if(B_Pan_No) //无锅显示
|
||
{
|
||
if(!B_DispFlash)
|
||
{
|
||
Smg_Data2 = SMG_E;
|
||
Smg_Data3 = SMG_0; //无锅显示E0
|
||
}
|
||
}
|
||
else if(B_TimeSet || (B_DingShi && B_DispTurn)) //定时显示
|
||
{
|
||
if(!B_TimeSet || !B_DispFlash)
|
||
{
|
||
SetDispTime(Hour_Set,Min_Set); //显示时间
|
||
}
|
||
if(B_TimeSet || !B_DispFlash)
|
||
{
|
||
On_Smg_MH; //数码管冒号
|
||
}
|
||
}
|
||
else
|
||
{
|
||
SetDispPower(DangWei);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Smg_Data1 = SMG_GG;
|
||
Smg_Data2 = SMG_GG;
|
||
Smg_Data3 = SMG_GG;
|
||
Smg_Data4 = SMG_GG;
|
||
}
|
||
//---------------------------------------------------------------------
|
||
if(B_PPGDP_Dis) On_Led_M1; //M1指示灯
|
||
if(Status_PPGDP & 0x02) On_Led_M2; //M2指示灯
|
||
if(B_Pan_Iron) On_Led_M3; //M3指示灯
|
||
if(B_Protect_BackPress) On_Led_M4; //M4指示灯
|
||
if(B_Zero_No) On_Led_M5; //M5指示灯
|
||
if(B_Zero_60Hz) On_Led_M6; //M6指示灯
|
||
if(B_Pan_No) On_Led_M7; //M7指示灯
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:DealMode_HandCom
|
||
* 函数功能:手动模式处理
|
||
* 入口参数:dang=工作档位,tmproff=高温停止温度AD值,tmpron=高温恢复温度AD值
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void DealMode_HandCom(unsigned char dang,unsigned char tmproff,unsigned char tmpron)
|
||
{
|
||
volatile unsigned int data;
|
||
//---------------------------------------------------------------------
|
||
DangOut = dang; //工作功率
|
||
|
||
if(dang >= 10)
|
||
{ //>=10档
|
||
Num_LxLowOn = 0;
|
||
Num_LxLowOff = 0;
|
||
}
|
||
else
|
||
{ //<10档
|
||
Num_LxLowOn = Tab_LxLowNum[dang]; //连续低功率开个数
|
||
Num_LxLowOff = Tab_LxLowNum[dang] >> 8; //连续低功率关个数
|
||
}
|
||
//---------------------------------------------------------------------
|
||
if(AD_TmprPan <= tmpron)
|
||
{
|
||
Cnt2_Mode = 0;
|
||
|
||
if(++Cnt1_Mode & 0x04) //消抖
|
||
{
|
||
Cnt1_Mode = 0;
|
||
B_TmprStop = 0; //锅底高温恢复
|
||
}
|
||
}
|
||
else if(AD_TmprPan >= tmproff)
|
||
{
|
||
Cnt1_Mode = 0;
|
||
|
||
if(++Cnt2_Mode & 0x04) //消抖
|
||
{
|
||
Cnt2_Mode = 0;
|
||
B_TmprStop = 1; //锅底高温
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Cnt1_Mode = Cnt2_Mode = 0;
|
||
}
|
||
}
|
||
/**************************************************************************
|
||
* 函数名称:DealMode_HandTmpr
|
||
* 函数功能:手动温度模式处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
/*void DealMode_HandTmpr()
|
||
{
|
||
DealMode_HandCom(DangWei,Tab_ModeTmpr[DangWei]>>8,Tab_ModeTmpr[DangWei]);
|
||
}*/
|
||
/**************************************************************************
|
||
* 函数名称:DealMode_HandPower
|
||
* 函数功能:手动功率模式处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
/*void DealMode_HandPower()
|
||
{
|
||
DealMode_HandCom(DangWei,C_TmprPan_120C,C_TmprPan_110C);
|
||
}*/
|
||
/**************************************************************************
|
||
* 函数名称:DealMode_Water
|
||
* 函数功能:烧水模式处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
/*void DealMode_Water()
|
||
{
|
||
volatile unsigned char dang;
|
||
|
||
if(++Sec_Mode >= 60000/C_TimeMS_Main) //1min
|
||
{
|
||
Sec_Mode = 0;
|
||
Min_Mode++;
|
||
}
|
||
|
||
if(Min_Mode >= 20) //20min
|
||
{
|
||
Min_Mode = 0;
|
||
DealKey_OnOff(); //时间到,自动关机
|
||
}
|
||
else
|
||
{
|
||
if(Min_Mode >= 15) //15min
|
||
{
|
||
dang = 8; //第8档功率
|
||
}
|
||
else
|
||
{
|
||
dang = 20; //第20档功率
|
||
}
|
||
|
||
DealMode_HandCom(dang,C_TmprPan_120C,C_TmprPan_110C);
|
||
}
|
||
}*/
|
||
/**************************************************************************
|
||
* 函数名称:Deal_Mode
|
||
* 函数功能:模式处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void Deal_Mode()
|
||
{
|
||
if(!B_Heat_En)
|
||
{
|
||
DangOut = 0;
|
||
DealMode_CleanRam(); //清模式处理寄存器
|
||
}
|
||
else
|
||
{
|
||
DealMode_HandCom(DangWei,C_TmprPan_180C,C_TmprPan_170C);
|
||
}
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:Deal_Time
|
||
* 函数功能:时间处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void Deal_Time()
|
||
{
|
||
volatile unsigned char i;
|
||
//---------------------------------------------------------------------
|
||
if(++Delay_Flash >= 500/C_TimeMS_Main) //0.5s
|
||
{
|
||
Delay_Flash = 0;
|
||
|
||
if(Wait_Flash)
|
||
{
|
||
Wait_Flash--;
|
||
}
|
||
else
|
||
{
|
||
B_DispFlash = ~B_DispFlash; //显示闪烁
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------
|
||
if(++Delay_Sec >= 1000/C_TimeMS_Main) //1s
|
||
{
|
||
Delay_Sec = 0;
|
||
B_Dly_PowerOn = 1; //上电延时完成
|
||
|
||
if(++Delay_5S >= 5) //5s
|
||
{
|
||
Delay_5S = 0;
|
||
|
||
B_Adjust_SlopeCurr = 0; //退出电流斜率调节
|
||
B_DispTurn = ~B_DispTurn; //显示交替
|
||
|
||
if(B_DingShi && B_TimeSet)
|
||
{
|
||
B_TimeSet = 0; //退出时间设定
|
||
Delay_DS = 0;
|
||
|
||
if(Min_Set || Hour_Set)
|
||
{
|
||
B_DispTurn = 1; //显示时间
|
||
}
|
||
else
|
||
{
|
||
B_DingShi = 0; //退出定时功能
|
||
|
||
Min_Set = 0; //默认定时时间为2小时
|
||
Hour_Set = 2;
|
||
}
|
||
}
|
||
}
|
||
|
||
if(B_OnOff && B_Pan_No)
|
||
{
|
||
if(++Delay_NoPan >= 60)
|
||
{
|
||
Delay_NoPan = 0;
|
||
DealKey_OnOff(); //无锅,自动关机
|
||
}
|
||
|
||
if(Delay_NoPan & 0x01) //每2秒
|
||
{
|
||
Buzz_Short_One(); //蜂鸣器短鸣1声
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Delay_NoPan = 0;
|
||
}
|
||
|
||
if(B_OnOff && Flag1_Error)
|
||
{
|
||
if(++Delay_Error >= 60)
|
||
{
|
||
Delay_Error = 0;
|
||
DealKey_OnOff(); //硬件故障,自动关机
|
||
}
|
||
|
||
if(Delay_Error & 0x01) //每2秒
|
||
{
|
||
Buzz_Short_One(); //蜂鸣器短鸣1声
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Delay_Error = 0;
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------
|
||
if(Flag1_Error || Flag2_Error || !B_OnOff || B_TimeSet)
|
||
{
|
||
Time_HMI = 0;
|
||
Delay_DS = 0; //故障、关机、时间设置中
|
||
}
|
||
else
|
||
{
|
||
if(!B_Zero_60Hz || B_Zero_No)
|
||
{
|
||
i = 100; //10ms*100=1s
|
||
}
|
||
else
|
||
{
|
||
i = 120; //8.333ms*120=1s
|
||
}
|
||
|
||
if(Time_HMI >= i)
|
||
{
|
||
Time_HMI = 0;
|
||
|
||
if(++Delay_DS >= 60) //1min
|
||
{
|
||
Delay_DS = 0;
|
||
|
||
if(Min_Set)
|
||
{
|
||
Min_Set--;
|
||
}
|
||
else if(Hour_Set)
|
||
{
|
||
Min_Set = 59;
|
||
Hour_Set--;
|
||
}
|
||
}
|
||
}
|
||
|
||
if((0 == Min_Set) && (0 == Hour_Set))
|
||
{
|
||
if(B_OnOff)
|
||
{
|
||
DealKey_OnOff(); //定时时间到,自动关机
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:Set_Work
|
||
* 函数功能:工作设置
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:内部调用
|
||
**************************************************************************/
|
||
void Set_Work()
|
||
{
|
||
if(B_Adjust_SlopeCurr)
|
||
{
|
||
PowerWork = Tab_DangOut[10]; //工作功率值
|
||
|
||
B_Heat_En = 1; //加热使能
|
||
B_Fan_En = 1; //风扇使能
|
||
|
||
B_HeatStop_NoCheck = 0;
|
||
B_HeatStop_CheckPan = 0;
|
||
}
|
||
else
|
||
{
|
||
PowerWork = Tab_DangOut[DangOut]; //工作功率值
|
||
|
||
B_HeatStop_CheckPan = 0;
|
||
|
||
if(B_OnOff && !Flag1_Error && !Flag2_Error)
|
||
{
|
||
B_Heat_En = 1; //加热使能
|
||
B_Fan_En = 1; //风扇使能
|
||
|
||
if(B_TmprStop)
|
||
{
|
||
B_HeatStop_NoCheck = 1; //不加热不检锅
|
||
}
|
||
else
|
||
{
|
||
B_HeatStop_NoCheck = 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
B_Heat_En = 0; //加热关闭
|
||
B_Fan_En = 0; //风扇关闭
|
||
|
||
B_HeatStop_NoCheck = 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:Init_HMI
|
||
* 函数功能:初始化人机界面
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:初始化调用
|
||
**************************************************************************/
|
||
void Init_HMI()
|
||
{
|
||
volatile unsigned char i;
|
||
|
||
for(i = 0; i < sizeof(ShowData); i++)
|
||
{
|
||
ShowData[i] = 0xFF; //显示全亮
|
||
}
|
||
Display(); //显示输出
|
||
}
|
||
|
||
/**************************************************************************
|
||
* 函数名称:Deal_HMI
|
||
* 函数功能:人机界面处理
|
||
* 入口参数:无
|
||
* 出口参数:无
|
||
* 备 注:主循环调用
|
||
**************************************************************************/
|
||
void Deal_HMI()
|
||
{
|
||
KeyScan(); //按键扫描
|
||
Display(); //显示输出
|
||
Set_DispData(); //显示数据设置
|
||
Deal_Key(); //按键处理
|
||
|
||
Deal_Time(); //时间处理
|
||
Deal_Mode(); //模式处理
|
||
Set_Work(); //工作设置
|
||
}
|
||
|
||
/**************************************************************************
|
||
**************************************************************************/
|
||
#endif
|
||
|