#include "key.h" #include "lcd.h" #include "tim.h" #include "ads1220.h" #include "linear.h" int key_flag = 0; int ct_type = 0; int mid_point = 0; void key_scan() { if(key_flag == KEY2_DOWN && test_flag == 0) { __HAL_TIM_SetCounter(&htim1,10000); //编码器初始值10000 point_cnt = 0; memset(point_v,0,1024); memset(point_l,0,1024); LCD_ShowString(10,0,"testing",RED,WHITE,32,0); test_flag = 1; maxv = -999999; maxv_loca = 0; minv = 999999; minv_loca = 0; point_data.cnt = 0; } if(key_flag == KEY3_DOWN && test_flag == 1) { test_flag = 0; LCD_ShowString(10,0,"ready ",RED,WHITE,32,0); //确认磁条型号 if(abs(maxv_loca - minv_loca) < 500) ct_type = 1;//#25磁条 else if(abs(maxv_loca - minv_loca) < 1100) ct_type = 2;//#50磁条 else if(abs(maxv_loca - minv_loca) < 2100) ct_type = 3;//#110磁条 else ct_type = 4;//#210磁条 //确认有用数据范围 int mid_point_v = 9999; for(int i = 0;i < point_data.cnt;i++) { if(abs(point_data.vol[i]) <= mid_point_v) { mid_point_v = abs(point_data.vol[i]); mid_point = i; } } int start_l = 0,end_l = 0; if(ct_type == 1) { start_l = point_data.loca[mid_point] - 354; end_l = point_data.loca[mid_point] + 354; } else if(ct_type == 2) { start_l = point_data.loca[mid_point] - 708; end_l = point_data.loca[mid_point] + 708; } else if(ct_type == 3) { start_l = point_data.loca[mid_point] - 1559; end_l = point_data.loca[mid_point] + 1559; } else if(ct_type == 4) { start_l = point_data.loca[mid_point] - 2976; end_l = point_data.loca[mid_point] + 2976; } //提取有用数据范围 for(int i = 0;i < point_data.cnt;i++) { if(point_data.loca[i] >= start_l && point_data.loca[i] <= end_l) { point_v[point_cnt] = point_data.vol[i]; point_l[point_cnt] = point_data.loca[i]; point_cnt++; } } // bubblesort(point_v,point_cnt); // bubblesort(point_l,point_cnt); //得到线性度 get_linearity(); } } void bubblesort(long arr[], int size) { long i, j, tmp; for (i = 0; i < size - 1; i++) { for (j = 0; j < size - i - 1; j++) { if (arr[j] > arr[j+1]) { tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } }