msg_pt100/users/key.c

112 lines
2.3 KiB
C

#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;
}
}
}
}