📄 keycontrol.c.svn-base
字号:
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 + -