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

📄 keycontrol.c.svn-base

📁 由MSP430F135做控制器的温度控制详细程序
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
#include<msp430x13x.h>
#include<math.h>
#include<iccext.h>
#include"..\inc\vit_flash_var.h"
#include"..\inc\resources.h"
#include"..\inc\const_def.h"
#include"..\inc\flashfunc.h"

//port 4.5 :door info
//#define DOORINF	P4IN & 0x20

#define SPACE    10
#define NEGATIVE 11
#define COLON    12
#define shil	 13
#define shir	 14
#define fenl	 15
#define fenr	 16
#define miaol	 17
#define miaor	 18


/*system state*/
extern unsigned char sysstate,sysstate_set;		

#define KL_LOAD1_BIT      0x02

extern unsigned int dec_timer;		//减速时间

extern unsigned int  rotor_num;		//rotor number
extern unsigned char rcv_pkg_ok; //receive pakage flag

unsigned int const  d_num[ ] = {1, 10, 100, 1000, 10000};

unsigned int const  rotor_tbl[] = {
//rotor_num,D(mm),acc_min_time,acc_max_time,dc_min_time,dc_max_time,max_rate
	GL_21	,101	,120	,600	,180	,660	,21000	,
	GL_18	,109	,120	,600	,180	,660	,18000	,
	GL_16	,113	,180	,660	,240	,720	,16000	,
	GL_12	,138	,240	,720	,300	,780	,12000	,
	GL_10	,158	,240	,720	,300	,780	,10000	,
	GL_08	,168	,300	,780	,360	,840	,8000	,
	0	,0	,0	,0	,0	,0	,0	};

unsigned int const  def_tbl[] = {
//rotor_num,D(mm),acc_min_time,acc_max_time,dc_min_time,dc_max_time,max_rate
180	,240	,20000	,
180	,360	,18000,
200	,420	,16000,
240	,450	,12000,
240	,450	,10000,
420	,480	,8000,

};

extern unsigned int error;

extern unsigned char rate_dis_st;	//state of reta display 


extern unsigned int atime;	
extern unsigned int rtime;	
extern unsigned int dtime;	

extern unsigned int  rpm_ref;		//rotor number
extern unsigned int  rcf_ref;		//rotor number
extern unsigned int  ack_out_f;
extern unsigned int  ref_f;


extern unsigned int key;
extern unsigned char sysstate;		//system state
extern unsigned char substate;		//sub system stste
extern unsigned int  k_tmp1,k_tmp2; 	//system state temp variable
extern  int k_tmp3; 			//system state temp variable

extern unsigned int time;		//sysem time 0 ~ (24*60 - 1) minute
extern unsigned int second;		// 0 ~ (60 * 4 -1)
extern unsigned int systimer0;		//system timer 0 
extern unsigned int run_timer;

/*display buffers, last byte is twinkle control */

extern unsigned char disbuf[10];

extern unsigned char time_flag;


extern unsigned char txnumber;	//receive number



////////////////////////////
extern unsigned int get_key( void );



unsigned int adj_rotor_num( unsigned int rt )
{
	unsigned int i;
	switch (rt){
		case GL_21: i = 0; break;
		case GL_18: i = 1; break;
		case GL_16: i = 2; break;
		case GL_12: i = 3; break;
		case GL_10: i = 4; break;
		case GL_08: i = 5; break;
		default:    i = 6; break;
	}
	return(i);
}


void adj_key_val( void )
{
	switch (key){
		case KEY_0: key = 0; break;
		case KEY_1: key = 1; break;
		case KEY_2: key = 2; break;
		case KEY_3: key = 3; break;
		case KEY_4: key = 4; break;
		case KEY_5: key = 5; break;
		case KEY_6: key = 6; break;
		case KEY_7: key = 7; break;
		case KEY_8: key = 8; break;
		case KEY_9: key = 9; break;
		default:             break;
	}
}

unsigned int rcf_to_rpm(unsigned int rcf)
{
	return( (unsigned int)( sqrt( (rcf * exp10(6.0))/\
		(1.118 * (rotor_tbl[rotor_num*7 + 1]) ))));
}

unsigned int rpm_to_rcf(unsigned int rpm)
{
	
	return( (unsigned int)(1.118 * (rotor_tbl[rotor_num*7 + 1])\
		* rpm * rpm * exp10(-6)) );
}


unsigned int check_hlp_comm(unsigned int num)
{

	sysdelay( 30 );  //set delay 0.5s
	while( (rcv_pkg_ok == FALSE)&&(systimer0 != 0 ));
	if( systimer0 == 0){
		//error
		error = ERR_RS485;
		return(ERR_RS485);
	}else{
		//check pkg
		if( check_pkg_lcr(num) == 1 ){
			error = ERR_BPQ;
			return(ERR_BPQ);
		}
	}
	error = ERR_NON;
        return(0);
	
}


unsigned int send_comm( unsigned int comm,unsigned int p1,unsigned int p2 )
{
	unsigned int i,j;
	
	j = 0;
	do{
		comm_bld( comm, p1, p2 );
		i = check_hlp_comm( comm );
		j++;
	}while( (i != 0) &&  (j < 2) );
	
	return( i );
}

void pre_dis_rotor( unsigned int rt )
{
	unsigned int i;
	
	i = rt/100;
	
	disbuf[0] = i;		
	
	i = rt%100;
	
	disbuf[1] = i/10;	
	disbuf[2] = i%10;
	
}

void set_rotor( void )
{
	unsigned int i;
	if(  key < 10 ){
		if( k_tmp1 == 3 ){
			k_tmp1 = 0;
			k_tmp2 = 0;
		}
		k_tmp2 = k_tmp2 * 10  + key;
		k_tmp1++;
	}
	else if( key == KEY_DONE ){
		
		i = adj_rotor_num( k_tmp2 );
		
		if( i == 6 ){
			error = ERR_PARA;
		}else{
			sysstate = SYS_ORI;
			rotor_num = i;
			error = ERR_NON;
			///set default para
			
			atime = def_tbl[i*3];
			dtime = def_tbl[i*3 + 1];
			rpm_ref = def_tbl[i*3 + 2];
			sysstate_set = 0xff; //re_displayy
			
			
			
		}
	}
	else if( key == KEY_CNCL ){
		sysstate = SYS_ORI;
		error = ERR_NON;
	}
}

void pre_dis_rate( unsigned int rt )
{
	unsigned int i;
	
	i = rt /10000;
	disbuf[0] = i;
	i = rt%10000;
	disbuf[1] = i/1000;	
	i = i%1000;
	disbuf[2] = i/100;	
	i = i%100;
	disbuf[3] = i/10;	
	disbuf[4] = i%10;	
}

void set_rate( void )
{
	//unsigned int i;
	
	if(  key < 10 ){
		if( k_tmp1 == 5 ){
			k_tmp1 = 0;
			k_tmp2 = 0;
		}
		k_tmp2 = k_tmp2 * 10  + key;
		k_tmp1++;
		if( k_tmp2 > 30000 ) k_tmp2 = 0;
	}else if( key == KEY_DONE ){
		//check error
		if( k_tmp2 <= rotor_tbl[rotor_num*7 + 6] ){
			if( sysstate == SYS_RATE){
				sysstate = SYS_ORI;
			}else{ 
				sysstate -= SYS_RUN_RATE;
			}
			error = ERR_NON;
			rpm_ref = k_tmp2;
		}else   error = ERR_PARA;			
	}else if( key == KEY_CNCL ){
		if( sysstate == SYS_RATE)
			sysstate = SYS_ORI;
		else    sysstate -= SYS_RUN_RATE;
		error = ERR_NON;
	}
	
}


void set_rcf( void )
{
	unsigned int i;
	
	if(  key < 10 ){
		if( k_tmp1 == 5 ){
			k_tmp1 = 0;
			k_tmp2 = 0;
		}
		k_tmp2 = k_tmp2 * 10  + key;
		k_tmp1++;
		if( k_tmp2 > 50000 ) k_tmp2 = 0;
	}else if( key == KEY_DONE ){
		//check error
		i = rcf_to_rpm(k_tmp2);
		
		if( i <= rotor_tbl[rotor_num*7 + 6] ){
			if( sysstate == SYS_RCF){
				sysstate = SYS_ORI;
			}else{ 
				sysstate -= SYS_RUN_RCF;
			}
			error = ERR_NON;
			rpm_ref = i;
		}else   error = ERR_PARA;	
	}else if( key == KEY_CNCL ){
		if( sysstate == SYS_RCF)
			sysstate = SYS_ORI;
		else    sysstate -= SYS_RUN_RCF;
		error = ERR_NON;
	}
}

void pre_dis_adtime( unsigned int t )
{
	unsigned int i;
	
	i = t/60;      // minute
	
	disbuf[0] = i/10;
	disbuf[1] = i%10;
	
	disbuf[2] = fenl;
	disbuf[3] = fenr;
	
	i = t%60;      // second
	
	disbuf[4] = i/10;	
	disbuf[5] = i%10;	
	
	disbuf[6] = miaol;
	disbuf[7] = miaor;
	
}

void pre_dis_rtime( unsigned int t )
{
	unsigned int i;
	
	i = t/60;      // hour
	
	disbuf[0] = i/10;
	disbuf[1] = i%10;
	
	disbuf[2] = shil;
	disbuf[3] = shir;
	
	i = t%60; // minute
	
	disbuf[4] = i/10;	
	disbuf[5] = i%10;	
	
	disbuf[6] = fenl;
	disbuf[7] = fenr;
}


void set_atime( void )
{
	
	if(  key < 10 ){
		if( k_tmp1 == 4 ){
			k_tmp1 = 0;
			k_tmp2 = 0;
		}
		if( k_tmp1 == 0 ){
			k_tmp2 = key *600;
		}else if( k_tmp1 == 1 ){
			k_tmp2 = k_tmp2 + key *60;
			
		}else if( k_tmp1 == 2 ){
			k_tmp2 = k_tmp2 + key*10;
		}else if( k_tmp1 == 3 ){	
			k_tmp2 = k_tmp2 + key;
		}
		k_tmp1++;
	}
	else if( key == KEY_DONE ){
		if( sysstate == SYS_ATIME ){ 
			if((rotor_tbl[rotor_num*7 + 2] <= k_tmp2 ) &&\
			( k_tmp2 <= rotor_tbl[rotor_num*7 + 3])){		
				sysstate = SYS_ORI;
				atime = k_tmp2;      //save
				error = ERR_NON;
			}else error = ERR_PARA;
		}else if( sysstate == SYS_RTIME ){
			if( k_tmp2 < 960 ){
				rtime = k_tmp2 * 60; //save
				sysstate = SYS_ORI;
				error = ERR_NON;
			}else   error = ERR_PARA;
		}else if( (sysstate & 0x8f ) == SYS_RUN_RTIME_F){
			
			//change runtimer
			if( k_tmp2 < 960 ){
				if( (k_tmp2*60) > (rtime -run_timer + 5) ){
					run_timer = ((k_tmp2*60) + run_timer \
						- rtime);
					rtime = k_tmp2*60;
					sysstate -= SYS_RUN_RTIME;
					error = ERR_NON;
					
				}else error = ERR_PARA;
			}else   error = ERR_PARA;
			
		}else if( sysstate == SYS_DTIME ){
			if( (rotor_tbl[rotor_num*7 + 4] <= k_tmp2 ) &&\
			( k_tmp2 <= rotor_tbl[rotor_num*7 + 5]) ){
				sysstate = SYS_ORI;
				dtime = k_tmp2; 
				error = ERR_NON;
			}else error = ERR_PARA;
		}
	}else if( key == KEY_CNCL ){
		switch(sysstate){
		case SYS_ATIME:
			error = ERR_NON;
			sysstate = SYS_ORI;
			break;

⌨️ 快捷键说明

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