⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sangna.c

📁 用HOLTEK单片机做的一个实际项目
💻 C
📖 第 1 页 / 共 2 页
字号:
   _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 + -