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