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

📄 main_c.c

📁 加热足浴盆picc源程序,芯片pic16c57
💻 C
📖 第 1 页 / 共 2 页
字号:
//创建时期:
//----------------------------------------------------------------------
void disp()           //Led display                  
{ 
	char	led_data_temp;
	led_data_temp=real_temp;
	if(!CHONLANG_FG)
		led_data_temp=t3;
	if(TIME_DISP_FG)
		led_data_temp=t3;
	if(TEMP_DISP_FG)
		led_data_temp=tem_data1;
	led_data=led_data_temp;
	led_pub_sel++;
	if(led_pub_sel>=3)
		led_pub_sel=0;
	switch(led_pub_sel)
	{
		case 0	:	led_gw_cl();		break;
		case 1	:	led_sw_cl();		break;	
		case 2	:	led_led();			break;
		default:	return;
	}
		
} 

//----------------------------------------------------------------------
//函数功能:蜂鸣器驱动
//输入参数:beep_fg,beep_delay
//返回参数:beep_fg,beep_delay,beep
//创建时期:
//----------------------------------------------------------------------
void	beep_cl()			//蜂鸣器驱动
{
//static volatile unsigned char	beep_delay;
	if(beep_fg)
		{	beep=1;
			beep_delay++;
			if(beep_delay>=50)
				{	beep_fg=0;
					beep=0;	
					beep_delay=0;
				}	
		}         	
}

//----------------------------------------------------------------------
//函数功能:功能处理
//输入参数:
//返回参数:
//创建时期:
//----------------------------------------------------------------------
void	function1() //function1
{
	if(!JIRE_FG_0)			//
	{
		if(tem_data1<real_temp)
			{
				CHAOWEN_FG=1;
				CHAOWEN_FG_LED=1;
				GN1_OUT=0;
			}
		else
			if(tem_data1==real_temp)
				{
					CHAOWEN_FG=1;
					CHAOWEN_FG_LED=0;
					GN1_OUT=0;
				}
			else			
			//	if(tem_data1>real_temp)
				{
					CHAOWEN_FG_LED=0;				
					if(real_temp<=(tem_data1-2))		
						CHAOWEN_FG=0;
					if(!power_fg|CHAOWEN_FG)
						GN1_OUT=0;
					else
						if(JIRE_FG)	
							GN1_OUT=1;	
				}	
	}		
	else				//为保证在第一次按下温度加或减键不会马上加热,要等到数码管闪烁完后再开始加热		
		GN1_OUT=0;	
//					
	if(CHONLANG_FG)
		GN2_OUT=1;
	else
		GN2_OUT=0;	
	if(ZHENDON_FG)
		GN3_OUT=1;
	else
		GN3_OUT=0;		
	if(QP_FG)
		GN4_OUT=1;
	else
		GN4_OUT=0;
	if(CY_FG)
		GN5_OUT=1;
	else
		GN5_OUT=0;		
}

//**************************************************************************************************************************
//----------------------------------------------------------------------
//函数功能:测温电容放电处理
//输入参数:RA1
//返回参数:RA1
//创建时期:
//----------------------------------------------------------------------
void	dschrg()
{
	PORTA=0x07;
	TRISA=0x07;
	asm("nop");
	do
	{
		asm("clrwdt");
	}while(RA1);
	
}

//----------------------------------------------------------------------
//函数功能:测量校准电阻(10K)充电时间Tc
//输入参数:RA3
//返回参数:temp_tc
//创建时期:
//----------------------------------------------------------------------
void	m_teime_tc()
{
	temp_tc=0;			//测量校准电阻(10K)充电时间Tc
	PORTA=0x07;
	TRISA=0x0d;
	while(!RA3)
	{
		temp_tc++;
	}
}
//----------------------------------------------------------------------
//函数功能:测量校准电阻(10K)充电时间Tm
//输入参数:RA3
//返回参数:temp_tm
//创建时期:
//----------------------------------------------------------------------
void	m_teime_tm()
{
	temp_tm=0;		//测量校准电阻(10K)充电时间Tm
	PORTA=0x07;
	TRISA=0x0b;	
	while(!RA3)
	{
		temp_tm++;	
	}
}
//----------------------------------------------------------------------
//函数功能:16位乘法处理
//输入参数:(_real_rm+3,_real_rm+2,_real_rm+1,_real_rm)=(_temp_tm+1,_temp_tm)*(_RC_XX+1,_RC_XX)
//返回参数:
//创建时期:
//----------------------------------------------------------------------

void	mpy_()
{
//	RC_XX=10000;

	#asm

	bcf		0x4,5
	bcf		0x4,6
	movlw	0x10
	movwf	_TEMP		//		H		L			H		L				H		L			H		L	
mpy_0					//(_real_rm+3,_real_rm+2,_real_rm+1,_real_rm)=(_temp_tm+1,_temp_tm)*(_RC_XX+1,_RC_XX)
	rrf		_temp_tc+1;	//H
	rrf		_temp_tc;		//L
	btfss	0x03,0
	goto	mpy_1;
//
	movf	_temp_tm,w
	addwf	_real_rm+2
	btfsc	0x03,0
	incf	_real_rm+3
	movf	_temp_tm+1,w
	addwf	_real_rm+3
//	
mpy_1
	rrf		_real_rm+3
	rrf		_real_rm+2
	rrf		_real_rm+1
	rrf		_real_rm
	decfsz	_TEMP
	goto	mpy_0
	nop
	#endasm
//--------------------------------------------
}
//----------------------------------------------------------------------
//函数功能:除法处理
//输入参数:real_temp0000=(_real_rm+3,_real_rm+2,_real_rm+1,_real_rm)/temp_tc+(_real_rm+1,_real_rm)
//返回参数:
//创建时期:
//----------------------------------------------------------------------
void	div_()
{
	#asm
	bcf		0x4,5
	bcf		0x4,6
div_	
			//real_temp0000=(_real_rm+3,_real_rm+2,_real_rm+1,_real_rm)/temp_tc+(_real_rm+1,_real_rm)
	movlw	0x20
	movwf	_TEMP
	clrf	_div_xx
	clrf	_div_xx+1
	clrf	_div_yy
	clrf	_div_yy+1
dloop
	bcf		0x03,0
	rlf		_real_rm	
	rlf		_real_rm+1
	rlf		_real_rm+2	
	rlf		_real_rm+3
	rlf		_div_xx
	rlf		_div_xx+1	
	movf	_temp_tc+1,w
	subwf	_div_xx+1,w
	btfss	0x03,2
	goto	nochk
	movf	_temp_tc,w
	subwf	_div_xx,w
nochk
	btfss	0x03,0
	goto	nogo
	movf	_temp_tc,w
	subwf	_div_xx
	btfss	0x03,0
	decf	_div_xx+1
	movf	_temp_tc+1,w
	subwf	_div_xx+1
	bsf		0x03,0
nogo
	rlf		_div_yy
	rlf		_div_yy+1
	decfsz	_TEMP
	goto	dloop
	nop
	#endasm

}

//----------------------------------------------------------------------
//函数功能:温度测量,Rm=(Tm*REAL_Rc)/Tc
//输入参数:
//返回参数:
//创建时期:
//----------------------------------------------------------------------
//----------------------------------------------------
void	Temp_Measure()
{
	dschrg();
	if(led_pub_sel&0x01)
	{
		m_teime_tc();
		temp_tc_bank2=temp_tc;
	}	
	else
		{	m_teime_tm();
			real_rm=0;
			temp_tc=10000;
			mpy_();//real_rm=temp_tm*temp_tc
			temp_tc=temp_tc_bank2;
			div_();//div_yy=real_rm/temp_tc
			i=0;
			while(div_yy<temp_table[i])//查表得出温度值
			{
				i++;
				if(i>=60)
					break;
			}				
		}
		if(i!=real_temp_old)
			{	count++;
				if(count>=10)
				{	real_temp_old=real_temp=i;
					count=0;
				}
				
			}
		else
			count=0;


}
//----------------------------------------------------------------------
//函数功能:定时处理
//输入参数:
//返回参数:
//创建时期:
//----------------------------------------------------------------------
void	time()		//定时
{
//
	if(power_fg)
	{
		asm("clrwdt");
		if(!CHAOWEN_FG_LED&!FALSH_FG_0)
			FALSH_FG=1;
		else
			{
				SEC_0++;
				if(SEC_0<125)
					;
				else
					{
						GN_flag^=0x02;
						SEC_0=0;
						SEC_1++;
						if(SEC_1>=6)
						{
							SEC_1=0;
							FALSH_FG_0=0;
							JIRE_FG_0=0;
							TIME_DISP_FG=0;
							TEMP_DISP_FG=0;
						}
					}		
			}
	}
//
	t1++;
	if(t1>=250)		//4ms*250=1S
		{t2++;t1=0;}
	if(t2>=60)
		{t3--;t2=0;}
	if(t3==0)	
	{	power_fg=0;	beep_fg=1;	}
//
	while(TMR0<250)
	{
		asm("clrwdt");
	}
	OPTION=0x03;
	TMR0=0;
}
//----------------------------------------------------------------------
//函数功能:关处理
//输入参数:
//返回参数:
//创建时期:
//----------------------------------------------------------------------
off_fun()
{
	
	GN_flag=0;
	flag0&=6;		//关机时按键标志不能清零。
	flag3=0;
	FALSH_FG_0=0;
	FALSH_FG=1;
	TIME_DISP_FG=0;
	TEMP_DISP_FG=0;
//	t1=0;t2=0;
//	t3=TIME_DEFINE;
}

//#######################################################

main()
{	
	while(1)
  	{
		init();
		beep_fg=1;
    	while(1)
		{		
			asm("clrwdt");	
  	    	KeyScan();
  	    	disp();			//
			beep_cl();		//
			function1();
			Temp_Measure();
  	    	time();			//
			if(!power_fg)
				off_fun();
		}
  	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -