📄 sangna.c
字号:
_nop();
_nop();
SDA=0;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
SCL=0;
_nop();
_nop();
_nop();
_nop();
}
void Stop_I2C(void) //结束I2C总线
{
SDA=0;
_nop();
_nop();
_nop();
_nop();
_nop();
SCL=1;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
SDA=1;
_nop();
_nop();
_nop();
_nop();
_nop();
}
void SendByte(unsigned char c)
{
unsigned char counter;
for(counter=0;counter<8;counter++)
{
if((c<<counter)&0x80)
SDA=1;
else
SDA=0;
_nop();
SCL=1;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
SCL=0;
}
_nop();
_nop();
_nop();
_nop();
SDA=1;
_nop();
_nop();
_nop();
_nop();
SCL=1;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
SCL=0;
_nop();
_nop();
_nop();
_nop();
}
unsigned char RcvByte(void)
{
unsigned char retc,counter;
retc=0;
SDA=1;
SDA_IN();
for(counter=0;counter<8;counter++)
{
_nop();
_nop();
_nop();
SCL=0;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
SCL=1;
_nop();
_nop();
retc<<=1;
if(SDA)
retc++;
_nop();
_nop();
}
SCL=0;
_nop();
_nop();
_nop();
_nop();
SDA_OUT();
return(retc);
}
void Ack_I2C(bit a)
{
if(a)
SDA=1;
else
SDA=0;
_nop();
_nop();
_nop();
_nop();
_nop();
SCL=1;
_nop();
_nop();
_nop();
_nop();
_nop();
_nop();
SCL=0;
_nop();
_nop();
_nop();
_nop();
}
void SettingRD(void)
{
Start_I2C();
SendByte(AT24ADDR);
SendByte(0);
Start_I2C();
SendByte(AT24ADDR+1);
_PreSettedTemperature=RcvByte();
Ack_I2C(0);
_Timer=RcvByte();
Ack_I2C(1);
Stop_I2C();
_Timer*=60;
}
void SettingWR(void)
{
Start_I2C();
SendByte(AT24ADDR);
SendByte(0);
SendByte(_PreSettedTemperature);
SendByte(_Timer/60);
Stop_I2C();
}
void main()
{
unsigned int i;
unsigned char temp;
safeguard_init();
_LedSequence=0;
OUTPUT_DRAIN=0;
OUTPUT_POWER=0; //剩余30分时关排水,开消毒
OUTPUT_FAN=0;
OUTPUT_HEAT=0;
OUTPUT_LIGHT=0;
OUTPUT_DISINFACT=0;
_SysState=IDLE;
_DrainTimer=0;
_DisinfactTimer=0;
_Timer=0;
_Flag_Power=0;
_Flag_KeyPressed=0;
_InputReg=0xFF;
_PreInputReg=0xFF;
SettingRD();
if(_PreSettedTemperature>SAFE_TEMPERATURE)
{
_PreSettedTemperature=SAFE_TEMPERATURE;
}
_ton=1;
while(1)
{
//****************************************************************************************************************
//*************************************** Timer Counter Section ***********************************
//****************************************************************************************************************
//****************************************************************************************************************
//*************************************** Disinfact Timer Section ***********************************
//****************************************************************************************************************
if(_DisinfactTimer)
{
OUTPUT_DISINFACT=1;
}
else
{
OUTPUT_DISINFACT=0;
}
//****************************************************************************************************************
//*************************************** Timer Counter Section ***********************************
//****************************************************************************************************************
if(_DrainTimer)
{
OUTPUT_DRAIN=1;
}
else
{
OUTPUT_DRAIN=0;
}
//****************************************************************************************************************
//**************************************** Check Input Section ***********************************
//****************************************************************************************************************
if(!_ButtonScanTimer)
{
bit _flag_delay;
BEEP=0;
_flag_delay=0;
SER_CLK1=0;
SER_DATA1=0;
SER_CLK1=1;
SER_DATA1=1;
_InputReg=0;
for(i=8;i--;)
{
_InputReg>>=1;
if(KEY_COM)
{
_InputReg+=0x80;
}
SER_CLK1=0;
SER_CLK1=1;
}
if((_PreInputReg==_InputReg)&&(_PreInputReg!=0xFF))
{
_Flag_KeyPressed=1;
}
if(_Flag_KeyPressed)
{
if((_InputReg==0xFF)||((~_InputReg)&0x05))
{
temp=~_PreInputReg;
temp&=0x7F;
for(i=8;(i--)&&temp;)
{
if(temp&0x80)
{
switch(i)
{
case KEY_POWER : if(_SysState==IDLE)
{
_SysState=RUN;
_DrainTimer=0;
_DisinfactTimer=0;
_Flag_Power=1;
OUTPUT_POWER=1;
SettingRD();
if(_PreSettedTemperature>SAFE_TEMPERATURE)
{
_PreSettedTemperature=SAFE_TEMPERATURE;
}
}
else
{
OUTPUT_HEAT=0;
OUTPUT_POWER=0;
OUTPUT_FAN=0;
OUTPUT_LIGHT=0;
_Timer=0;
_Flag_Power=0;
_SysState=IDLE;
_DrainTimer=DRAIN_TIMER;
_DisinfactTimer=DISINFACT_TIMER;
}
BEEP=1;
break;
case KEY_DISINFACT : if(_Flag_Power)
{
if(!_DisinfactTimer)
{
_DisinfactTimer=DISINFACT_TIMER;
}
else
{
_DisinfactTimer=0;
}
BEEP=1;
}
break;
case KEY_LIGHT : if(_Flag_Power)
{
OUTPUT_LIGHT=!OUTPUT_LIGHT;
BEEP=1;
}
break;
case KEY_FAN : if(_Flag_Power)
{
OUTPUT_FAN=!OUTPUT_FAN;
BEEP=1;
}
break;
case KEY_UP : if(_Flag_Power)
{
switch(_SysState)
{
case SET_TIME : if(_Timer<5880)
{
_Timer+=60;
}
else
{
_Timer=5940;
}
break;
case SET_TEMPERATURE : if(_PreSettedTemperature<SAFE_TEMPERATURE)
{
_PreSettedTemperature++;
}
else
{
_PreSettedTemperature=SAFE_TEMPERATURE;
}
break;
default : break;
}
}
break;
case KEY_DOWN : if(_Flag_Power)
{
switch(_SysState)
{
case SET_TIME : if(_Timer>60)
{
_Timer-=60;
}
else
{
_Timer=0;
}
break;
case SET_TEMPERATURE : if(_PreSettedTemperature>0)
{
_PreSettedTemperature--;
}
break;
default : break;
}
}
break;
case KEY_SET : if(_Flag_Power)
{
switch(_SysState)
{
case SET_TIME : _SysState=SET_TEMPERATURE;
break;
case SET_TEMPERATURE : SettingWR();
_SysState=RUN;
_DrainTimer=0;
_DisinfactTimer=0;
_Flag_Power=1;
OUTPUT_POWER=1;
if(_PreSettedTemperature>SAFE_TEMPERATURE)
{
_PreSettedTemperature=SAFE_TEMPERATURE;
}
break;
case IDLE :
case RUN : _SysState=SET_TIME;
SettingRD();
if(_PreSettedTemperature>SAFE_TEMPERATURE)
{
_PreSettedTemperature=SAFE_TEMPERATURE;
}
break;
default : break;
}
BEEP=1;
}
break;
default : break;
}
}
temp<<=1;
}
_Flag_KeyPressed=0;
}
_flag_delay=1;
}
_PreInputReg=_InputReg;
if(_flag_delay)
{
_ButtonScanTimer=DELAY_INTERVAL;
}
else
{
_ButtonScanTimer=NEXT_SCAN_INTERVAL;
}
}
//****************************************************************************************************************
//**************************************** AD Section ***********************************
//****************************************************************************************************************
if(!_ADTimer)
{
_start=0;
_start=1;
_start=0;
_ADTimer=AD_TIMER;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -