예제 #1
0
void sens_calibrate(unsigned char t)
{
	unsigned long sum[8] = {0,0,0,0,0,0,0,0};

	adc_wait_stop();
	for(unsigned char i = 0; i < t; i++)
	{
		for(unsigned char j = 0; j < 8; j++)
		{
			adc_start(j, 0);
			while(bit_is_set(ADCSRA, ADSC));
			sum[j] += ADC;
		}
	}
	for(unsigned char j = 0; j < 8; j++)
	{
		adc_offset[j] = calc_multi(sum[j], 1, t);
	}
	adc_start(0, _BV(ADIE));
}
예제 #2
0
/* main */
int main (int argc, char** argv)   
{
    unsigned int calc_mod = 0;
    double idata  = 0;
    double kdata  = 0;
    double result = 0;
    
    if(argc < 2 || argc > 4)
    {
        printf("enter cmd numbers must greater than 2 and less than 5!!!\n\n");
	    printf("命令格式如下所示:\n");
    	printf("./calc_sim 1 xxx xxx      add\n");
    	printf("./calc_sim 2 xxx xxx      sub\n");
    	printf("./calc_sim 3 xxx xxx      multi\n");
    	printf("./calc_sim 4 xxx xxx      div\n");
    	printf("./calc_sim 5              PI\n");
    	printf("./calc_sim 6 xxx          sin\n");
    	printf("./calc_sim 7 xxx          cos\n");
    	printf("./calc_sim 8 xxx          tan\n");
    	printf("./calc_sim 9 xxx          fabs\n");
    	printf("./calc_sim 10 xxx         exp\n");
    	printf("./calc_sim 11 xxx         log\n");
    	printf("./calc_sim 12 xxx         log10\n");
   	    printf("./calc_sim 13 xxx xxx     pow\n");
    	printf("./calc_sim 14             rand\n");

    	return -1;
    }

    argv++;
    calc_mod=atoi(*argv);

    if(calc_mod < 1 || calc_mod > 14){
	     printf("命令格式如下所示:\n");
    	     printf("./calc_sim 1 xxx xxx      add\n");
    	     printf("./calc_sim 2 xxx xxx      sub\n");
    	     printf("./calc_sim 3 xxx xxx      multi\n");
    	     printf("./calc_sim 4 xxx xxx      div\n");
    	     printf("./calc_sim 5              PI\n");
    	     printf("./calc_sim 6 xxx          sin\n");
    	     printf("./calc_sim 7 xxx          cos\n");
    	     printf("./calc_sim 8 xxx          tan\n");
    	     printf("./calc_sim 9 xxx          fabs\n");
    	     printf("./calc_sim 10 xxx         exp\n");
    	     printf("./calc_sim 11 xxx         log\n");
    	     printf("./calc_sim 12 xxx         log10\n");
   	     printf("./calc_sim 13 xxx xxx     pow\n");
    	     printf("./calc_sim 14             rand\n");
	return -1;
	
        }

    
    if(argc==2){
	
	    printf("Enter is mod<%d>  \n", calc_mod);
    
        switch(calc_mod){
            case 5:
                result = calc_PI();
                printf("calc PI result is %f\n",result);
                break;
	        case 14:
                result = calc_rand();
                printf("calc rand result is %f\n",result);
                break;
            default:
                if(calc_mod==1)
                    printf("add 格式:./calc_sim 1 xxx xxx\n");
                if(calc_mod==2)
                    printf("sub 格式:./calc_sim 2 xxx xxx\n");
                if(calc_mod==3)
                    printf("multi 格式:./calc_sim 3 xxx xxx\n");
                if(calc_mod==4)
                    printf("div 格式:./calc_sim 4 xxx xxx\n");
                if(calc_mod==5)
                    printf("PI 格式:./calc_sim 5\n");
                if(calc_mod==6)
                    printf("sin 格式:./calc_sim 6 xxx\n");
                if(calc_mod==7)
                    printf("cos 格式:./calc_sim 7 xxx\n");
                if(calc_mod==8)
                    printf("tan 格式:./calc_sim 8 xxx\n");
                if(calc_mod==9)
                    printf("fabs 格式:./calc_sim 9 xxx\n");
                if(calc_mod==10)
                    printf("exp 格式:./calc_sim 10 xxx\n");
                if(calc_mod==11)
                    printf("log 格式:./calc_sim 11 xxx\n");
                if(calc_mod==12)
                    printf("log10 格式:./calc_sim 12 xxx\n");
                if(calc_mod==13)
                    printf("pow 格式:./calc_sim 13 xxx xxx\n");
                if(calc_mod==14)
                    printf("rand 格式:./calc_sim 14\n");
                
                break;
	
        }   
    }

    if(argc==3){

        argv ++;
        idata = atof(*argv);

	    printf("Enter is mod<%d> data_f<%f> \n", calc_mod, idata);

	    switch(calc_mod){
	        case 6:
                result = calc_sin(idata);
                printf("calc sin (%f) result is %f\n",idata,result);
                break;

            case 7:
                result = calc_cos(idata);
                printf("calc cos (%f) result is %f\n",idata,result);
                break;

            case 8:
                result = calc_tan(idata);
                printf("calc tan (%f) result is %f\n",idata,result);
                break;

            case 9:
                result = calc_fabs(idata);
                printf("calc fabs (%f) result is %f\n",idata,result);
                break;

            case 10:
                result = calc_exp(idata);
                printf("calc exp (%f) result is %f\n",idata,result);
                break;

            case 11:
                if(idata<=0){
                printf("真数必须大于0\n");
                break;
                }
                result = calc_log(idata);
                printf("calc log (%f) result is %f\n",idata,result);
	            break;

            case 12:
                if(idata<=0){
                printf("真数必须大于0\n");
                break;
                }
                result = calc_log10(idata);
                printf("calc log10 (%f) result is %f\n",idata,result);
                break;
            default:
		if(calc_mod==1)
                    printf("add 格式:./calc_sim 1 xxx xxx\n");
                if(calc_mod==2)
                    printf("sub 格式:./calc_sim 2 xxx xxx\n");
                if(calc_mod==3)
                    printf("multi 格式:./calc_sim 3 xxx xxx\n");
                if(calc_mod==4)
                    printf("div 格式:./calc_sim 4 xxx xxx\n");
                if(calc_mod==5)
                    printf("PI 格式:./calc_sim 5\n");
                if(calc_mod==6)
                    printf("sin 格式:./calc_sim 6 xxx\n");
                if(calc_mod==7)
                    printf("cos 格式:./calc_sim 7 xxx\n");
                if(calc_mod==8)
                    printf("tan 格式:./calc_sim 8 xxx\n");
                if(calc_mod==9)
                    printf("fabs 格式:./calc_sim 9 xxx\n");
                if(calc_mod==10)
                    printf("exp 格式:./calc_sim 10 xxx\n");
                if(calc_mod==11)
                    printf("log 格式:./calc_sim 11 xxx\n");
                if(calc_mod==12)
                    printf("log10 格式:./calc_sim 12 xxx\n");
                if(calc_mod==13)
                    printf("pow 格式:./calc_sim 13 xxx xxx\n");
                if(calc_mod==14)
                    printf("rand 格式:./calc_sim 14\n");
                
                break;
        }
	}

    if(argc==4){

        argv ++;
        idata = atof(*argv);
        argv ++;    
        kdata = atof(*argv);    
    
        printf("Enter is mod<%d> data_f<%f> data_b<%f> \n", calc_mod, idata, kdata);
    
        switch(calc_mod)
        {
    	    case 1:
    	        result = calc_add(idata, kdata);   
                printf("Calc add (%f + %f) result is %f\n", idata, kdata, result);  	    	
    	        break;
    	    	
    	    case 2:
    	        result = calc_sub(idata, kdata);
                printf("Calc sub (%f - %f) result is %f\n", idata, kdata, result);     	    	    
    	        break;
    	    
	        case 3:
	            result = calc_multi(idata,kdata);
	            printf("calc multi(%f * %f) result is %f\n",idata,kdata,result);
	            break;
		
	        case 4:
                if(kdata==0){
                    printf("除数不能为0\n");
                    break;}
                else
	            result = calc_div(idata,kdata);
	            printf("calc div(%f / %f) result is %f\n",idata,kdata,result);             
	            break;

            case 13:
                result = calc_pow(idata,kdata);
                printf("calc pow (%f , %f) result is %f\n",idata,kdata,result);
                break;

            default:
		if(calc_mod==1)
                    printf("add 格式:./calc_sim 1 xxx xxx\n");
                if(calc_mod==2)
                    printf("sub 格式:./calc_sim 2 xxx xxx\n");
                if(calc_mod==3)
                    printf("multi 格式:./calc_sim 3 xxx xxx\n");
                if(calc_mod==4)
                    printf("div 格式:./calc_sim 4 xxx xxx\n");
                if(calc_mod==5)
                    printf("PI 格式:./calc_sim 5\n");
                if(calc_mod==6)
                    printf("sin 格式:./calc_sim 6 xxx\n");
                if(calc_mod==7)
                    printf("cos 格式:./calc_sim 7 xxx\n");
                if(calc_mod==8)
                    printf("tan 格式:./calc_sim 8 xxx\n");
                if(calc_mod==9)
                    printf("fabs 格式:./calc_sim 9 xxx\n");
                if(calc_mod==10)
                    printf("exp 格式:./calc_sim 10 xxx\n");
                if(calc_mod==11)
                    printf("log 格式:./calc_sim 11 xxx\n");
                if(calc_mod==12)
                    printf("log10 格式:./calc_sim 12 xxx\n");
                if(calc_mod==13)
                    printf("pow 格式:./calc_sim 13 xxx xxx\n");
                if(calc_mod==14)
                    printf("rand 格式:./calc_sim 14\n");
    	     
    	        break;
        }
    }
    
    return 0;
}