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

📄 keycontrol.c.svn-base

📁 由MSP430F135做控制器的温度控制详细程序
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
		case SYS_RTIME:
			sysstate = SYS_ORI;     
			break;
		case SYS_DTIME:
			error = ERR_NON;   
			sysstate = SYS_ORI;
			break;
		default:
			break;
		}
		if( (sysstate & 0x8f ) == SYS_RUN_RTIME_F){
		  	sysstate -= SYS_RUN_RTIME;
			error = ERR_NON; 
		}
	}
}

void pre_dis_tmp( int t )
{
	//i = k_tmp3;      	
	if( t < 0 ){
		t = -t;
		disbuf[0] = 11; //-
	}else
		disbuf[0] = 10; //none
	if( (t/10) == 0 )
		disbuf[1] = 10; //none
	else
		disbuf[1] = t/10;	
	disbuf[2] = t%10;	
}

void set_temp( void )
{
	//int i;
	int *p1;
	
	p1 = ( int *)&ref_temp;
	
	if(  key < 10 ){
		if( k_tmp1 == 2 ){
			k_tmp1 = 0;
			k_tmp3 = 0;
		}
		k_tmp3 = k_tmp3 * 10  + key;
		if( k_tmp3 > 40 ) k_tmp3 = 0;
		k_tmp1++;
	}else if( key == KEY_N ){
		k_tmp3 = -k_tmp3;
		k_tmp1 = 0;
	}else if( key == KEY_DONE ){
		//save temperature
                if(( k_tmp3 != ref_temp )&&( -10 < k_tmp3  )&&( k_tmp3 < 41 )){
			_DINT();
			flash_clr( p1); 	//clear flash
			flash_write_int( p1 ,k_tmp3);	
			_EINT();	
			if( sysstate == SYS_TEMP)
				sysstate = SYS_ORI;
			else    sysstate -= SYS_RUN_TEMP;
		}else{
			error = ERR_PARA;
		}
	}else if( key == KEY_CNCL ){
		if( sysstate == SYS_TEMP)
			sysstate = SYS_ORI;
		else    sysstate -= SYS_RUN_TEMP;
	}
}


///////////////RUN STATE///////////////
unsigned int set_run( void )
{
	unsigned int i,j;
	unsigned int *p;
	int *p1;

	p1 = ( int *)&rate_dis_st_f;
	
	p = ( unsigned int *)&ref_atime_f;
	
	i = ref_dtime_f;
	j = ref_rtime_f;
	i = ref_rpm_f;
	j =  ref_rotor_num_f;
	
	
	i = DOORINF;
	if( i != 0 ){
	  	error = ERR_DOOR;
	  	return(ERR_DOOR);
	}
	
	
	// check parameter
	if( (rotor_num < 6 ) && \
		(rpm_ref <= rotor_tbl[rotor_num*7 + 6]) && \
		( (rotor_tbl[rotor_num*7 + 2] <= atime ) &&\
		( atime <= rotor_tbl[rotor_num*7 + 3]) ) &&\
		( (rotor_tbl[rotor_num*7 + 4] <= dtime ) &&\
		( dtime <= rotor_tbl[rotor_num*7 + 5]) ) )
	{
		//open lock
		i = send_comm( SETP, MB_PLOCK, 0 );
		if( i != 0 )	return( i );
	  
		//stop hlp
		i = send_comm( STOP, NONE_P, NONE_P );
		if( i != 0 )	return( i );
		
		////// atime
		j = rotor_tbl[rotor_num*7 + 6]+200;
		i = (unsigned int)((float)atime*((float)j \
		     /(float)rpm_ref));
		i = send_comm( SETP, MB_ATIME, i*10 );
		if( i != 0 )	return( i );
		
		////// dtime
		dec_timer = (unsigned int)((float)dtime*((float)j\
		  /(float)rpm_ref));

		i = send_comm(  SETP, MB_DTIME, dec_timer*10 );
		if( i != 0 )	return( i );
		
		//////max f
		j = j + 100;
		i = (j/60) * 100 + ((j%60)*100)/60;
		
		i = send_comm(  SETP, MB_MAXF, i );
		if( i != 0 )	return( i );
		// rate
		i = (rpm_ref/60) * 100 + ((rpm_ref%60)*100)/60;
		ref_f = i;
		i = send_comm( SETF, NONE_P, ref_f );
		if( i != 0 )	return( i );
		
		///// run
		i = send_comm( RUNFR, NONE_P, NONE_P );
		if( i != 0 )	return( i );
		
		
		run_timer = atime; 
		
		//save set para
		_DINT();
		flash_clr( p1 ); 	//clear flash
		flash_write_uint( p ,atime);	
		flash_write_uint( (p+1) ,dtime);	
		flash_write_uint( (p+2) ,rtime);	
		flash_write_uint( (p+3) ,rpm_ref);	
		flash_write_uint( (p+4) ,rotor_num);	
		flash_write_uint( (p+5) ,rate_dis_st);
		_EINT();
		
		//close the door
		set_rl_(RL_DOOR,RL);
		
		
		return(0);
		
		
	}else{
		error = ERR_PARA;
		return (ERR_SET);
	}
}



unsigned int hlp_init(void)
{
	unsigned int i;
	
	//open lock
	//do{
	//i = send_comm( SETP, MB_PLOCK, 0 );
	//if( i != 0 )	return( i );
	//}while(1);

	
	
	
	//open lock
	i = send_comm( SETP, MB_PLOCK, 0 );
	if( i != 0 )	return( i );

	//运行指令来源
	i = send_comm( SETP, MB_RCOMM, 0x0200 );
	if( i != 0 )	return( i );
	
	//运行频率来源
	i = send_comm( SETP, MB_RFS, 0x0200 );
	if( i != 0 )	return( i );
	
	//stop hlp
	i = send_comm( STOP, NONE_P, NONE_P );
	if( i != 0 )	return( i );
	
	return(0);
}

void run( void )
{
	unsigned int i;
	
	switch( sysstate & 0x0f ){
	case SYS_RUN_RUN:
		switch (key){
		case KEY_STOP:
			i = send_comm( STOP,NONE_P,NONE_P );
			if( i == 0 )
				////// dtime
				i = send_comm( ACKOUTF, NONE_P, NONE_P );
				if( i == 0 ) error = ERR_NON;
				
				i = (unsigned int)((float)dtime*((float)ack_out_f\
				  /(float)ref_f));
				
				run_timer = i;
			
				sysstate = SYS_RUN_DEC_SEG;
			
			break;
		case KEY_RATE:
			if( sysstate == SYS_RUN_RUN_SEG ){
				if( rate_dis_st == DIS_RPM ){
					sysstate += SYS_RUN_RATE;
					k_tmp1 = 5;	    //adj location
					k_tmp2 = rpm_ref;   //load old 
					set_rate();
				}else{
					rate_dis_st = DIS_RPM;
				}
			}
			break;
		case KEY_RCF:
			if( sysstate == SYS_RUN_RUN_SEG ){
				if( rate_dis_st == DIS_RCF ){
					sysstate += SYS_RUN_RCF;
					k_tmp1 = 5;	    //adj location
					k_tmp2 = rpm_to_rcf(rpm_ref);
					set_rcf();
					
				}else{
					rate_dis_st = DIS_RCF;
				}
			}
			break;
		case KEY_TEMP:
			sysstate += SYS_RUN_TEMP;
			k_tmp1 = 2;	    	//adj location
			k_tmp3 = ref_temp;      //load old
			set_temp();
			break;
		case KEY_RTIME:
			if( sysstate == SYS_RUN_RUN_SEG ){
				sysstate += SYS_RUN_RTIME;
				
				k_tmp1 = 4;	    //adj location
				k_tmp2 = rtime/60;  //load old
				
				set_atime();
			}
			break;
		case KEY_P:
			if( sysstate == SYS_RUN_RUN_SEG ){
				if( ( rpm_ref+100 ) <= \
				   rotor_tbl[rotor_num*7 + 6] )
					rpm_ref += 100;
			}
			break;
		case KEY_N:
			if( sysstate == SYS_RUN_RUN_SEG ){
				if( rpm_ref > 100 )
					rpm_ref -= 100;
			}
			break;
		default: 
			break;
		}
		break;
	case SYS_RUN_RATE:
		set_rate();
		break;
	case SYS_RUN_RCF:
		set_rcf();
		break;
	case SYS_RUN_TEMP:
		set_temp();
		break;
	case SYS_RUN_RTIME:
		set_atime();
		break;
	default:
		break;
	}
}
///////////// END RUNE STATE ///////////////////////

void key_handle( void )
{

	key = get_key();
	adj_key_val(); 			// adjust key value 


	switch( (sysstate & 0xf0) ){
		//系统初始状态时
	case SYS_ORI:											     	
		switch( key ){
		case KEY_ROTOR:	//set rotor
			sysstate = SYS_ROTOR;
			
			k_tmp1 = 3;	    //adj location
			k_tmp2 = rotor_tbl[rotor_num*7];  
			
			set_rotor();
			break;
		case KEY_RATE:	//
			if( rate_dis_st == DIS_RPM ){
				sysstate = SYS_RATE;
				k_tmp1 = 5;	    //adj location
				k_tmp2 = rpm_ref;   //load old 
				set_rate();
			}else{
				rate_dis_st = DIS_RPM;
			}
			

			break;
		case KEY_RCF:	//
			if( rate_dis_st == DIS_RCF ){
				sysstate = SYS_RCF;
				k_tmp1 = 5;	    //adj location
				k_tmp2 = rpm_to_rcf(rpm_ref);
				set_rcf();
			}else{
				rate_dis_st = DIS_RCF;
			}
			break;
		case KEY_ATIME:	//
			sysstate = SYS_ATIME;
			
			k_tmp1 = 4;	    //adj location
			k_tmp2 = atime;     //load old
			
			
			set_atime();
			break;
		case KEY_RTIME:	//
			sysstate = SYS_RTIME;
			
			k_tmp1 = 4;	    //adj location
			k_tmp2 = rtime/60;     //load old
			
			set_atime();
			break;
		case KEY_DTIME:	//
			sysstate = SYS_DTIME;
			
			k_tmp1 = 4;	    //adj location
			k_tmp2 = dtime;     //load old
		
			set_atime();
			break;
		case KEY_TEMP:	// temprature
			sysstate = SYS_TEMP;
			
			k_tmp1 = 2;	    	//adj location
			k_tmp3 = ref_temp;      //load old
			
			set_temp();
			break;
		case KEY_RUN:	// run
			if ( set_run() == 0 ){
				sysstate = SYS_RUN_ACC_SEG;
			}
			break;
		default:
			break;
		}
		break;
	// set rotor state
	case SYS_ROTOR:							   	
		set_rotor();
		break;
	// set rate  state
	case SYS_RATE:							    
		set_rate();
		break;
	// set RCF  state
	case SYS_RCF:							    
		set_rcf();
		break;
	// set atime state
	case SYS_ATIME:							    
	case SYS_RTIME:							    
	case SYS_DTIME:							    
		set_atime();
		break;
	// set temprature  state
	case SYS_TEMP:							    
		set_temp();
		break;
	// run state	
	case SYS_RUN_ACC_SEG:
	case SYS_RUN_DEC_SEG:
	case SYS_RUN_RUN_SEG:
		run();
		break;
	default:
		break;
	}
}



⌨️ 快捷键说明

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