124 lines
2.2 KiB
C
124 lines
2.2 KiB
C
#include "key.h"
|
|
#include "lcd.h"
|
|
#include "tim.h"
|
|
#include "ads1220.h"
|
|
#include "linear.h"
|
|
#include "24cxx.h"
|
|
#include "events_init.h"
|
|
|
|
int key_flag = 0;
|
|
int ct_type = 0;
|
|
int mid_point = 0;
|
|
int finish_flag = 0;
|
|
const char* type_str = "null";
|
|
|
|
void key_scan()
|
|
{
|
|
if(screen_id == 1 && test_status == 1)
|
|
{
|
|
__HAL_TIM_SetCounter(&htim1,30000); //编码器初始值10000
|
|
point_cnt = 0;
|
|
memset(point_v,0,1024);
|
|
memset(point_l,0,1024);
|
|
test_status = 2;
|
|
maxv = -999999;
|
|
maxv_loca = 0;
|
|
minv = 999999;
|
|
minv_loca = 0;
|
|
linearity = 0;
|
|
point_data.cnt = 0;
|
|
}
|
|
if(screen_id == 1 && test_status == 3)
|
|
{
|
|
test_status = 0;
|
|
|
|
//确认磁条型号
|
|
if(abs(maxv_loca - minv_loca) < 500)
|
|
{
|
|
ct_type = 1;//#25磁条
|
|
type_str = "#25";
|
|
}
|
|
else if(abs(maxv_loca - minv_loca) < 1100)
|
|
{
|
|
ct_type = 2;//#50磁条
|
|
type_str = "#50";
|
|
}
|
|
else if(abs(maxv_loca - minv_loca) < 2100)
|
|
{
|
|
ct_type = 3;//#110磁条
|
|
type_str = "#100";
|
|
}
|
|
else
|
|
{
|
|
ct_type = 4;//#210磁条
|
|
type_str = "#200";
|
|
}
|
|
|
|
//确认有用数据范围
|
|
int mid_point_v = 9999;
|
|
int start_cnt = 0,end_cnt = 0;
|
|
if(max_point_cnt > min_point_cnt)
|
|
{
|
|
start_cnt = min_point_cnt;
|
|
end_cnt = max_point_cnt;
|
|
}
|
|
else
|
|
{
|
|
start_cnt = max_point_cnt;
|
|
end_cnt = min_point_cnt;
|
|
}
|
|
for(int i = start_cnt;i < end_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++;
|
|
}
|
|
}
|
|
|
|
//得到线性度
|
|
get_linearity();
|
|
|
|
finish_flag = 1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|