📄 main.c
字号:
#include <reg52.h>
#include <intrins.h>
#include <math.h>
#include "TypeDefines.h"
#include "1335c51.h"
#include "delay.h"
#include "ADS8364.h"
#include "Iap.h"
#include "STEP_MOTOR.h"
#include "Menu.h"
#include "ziku.h"
#define EEPROM_H 0x80
#define EEPROM_L 0x00
#define X1 0 //定义P1点坐标(单位:0.01mm)
#define Y1 (-180)
#define X2 0
#define Y2 180
#define X3 (-180)
#define Y3 0
#define X4 180
#define Y4 0
#define X5 (-245)
#define Y5 114
#define X6 (-245)
#define Y6 767
#define X7 230
#define Y7 135
#define X8 230
#define Y8 788
#define TT_AD 1 //定义TT面上4根传感器为1(用于调用READ_ADS8364()时作参数传递用。
#define POLE_AD 2 //定义导杆上4根传感器为2(用于调用READ_ADS8364()时作参数传递用。
#define CHECK_TIMES 5 //定义采样次数
#define UP 0 //马达运转方向
#define DOWN 1
char ALLOW_UP=5; //允许误差
char ALLOW_LOW=-5;
int data Data1[4]; //TT面上的4个点高度
int data Data2[4]; //导杆上的4个点高度
uint idata origin1[4]; //TT面上4个点的原点
uint idata origin2[4]; //导杆上4个点的原点
uint data para1[4]={7000,7000,7000,7000}; //TT面上4个点的计算参数
uint data para2[4]={7000,7000,7000,7000}; //TT面上4个点的计算参数
uint idata step_run0; //马达0运转的步数
uint idata step_run1; //马达1运转的步数
uint idata step_run2; //马达2运转的步数
uint idata step_run3; //马达3运转的步数
int idata h5; //P5点应该调整到的位移(目标值)
int idata h6; //P6点应该调整到的位移(目标值)
int idata h7; //P7点应该调整到的位移(目标值)
int idata h8; //P8点应该调整到的位移(目标值)
int idata hight_limit; //高度限制值
int idata sensitive_limit; //精度限制值
int idata delay_value; //延时值(ms)
extern uchar idata KeyFuncIndex;
void systeminit();
void zero();
void check();
void calculate();
void NormalDisp();
void disp_4point(uchar flag);
void disp_target();
uchar keyscan();
void adjustset();
void parasave();
void pararead();
main()
{
delay_xms(200);
systeminit();
NormalDisp();
while(1)
{
delay_xms(200);
ADS8364_read(TT_AD,CHECK_TIMES);
ADS8364_read(POLE_AD,CHECK_TIMES);
disp_4point(TT_AD);
disp_4point(POLE_AD);
adjustset();
/*
if(keyscan()==KEY_START)
{
check();
}
*/
if(keyscan()==KEY_ADJUST)
{
zero();
}
/*
do
{
GetKeyInput();
delay_xms(200);
}while(KeyFuncIndex!=0); */
}
}
uchar keyscan()
{
if((STOP==0)&&(KEY_2==1)&&(START==1))
{
delay_xms(30);
if((STOP==0)&&(KEY_2==1)&&(START==1))
{
return KEY_STOP;
}
}
else if((START==0)&&(KEY_2==1)&&(STOP==1))
{
delay_xms(30);
if((START==0)&&(KEY_2==1)&&(STOP==1))
{
return KEY_START;
}
}
else if((KEY_2==0)&&(STOP==0)&&(START==0))
{
delay_xms(30);
if((KEY_2==0)&&(STOP==0)&&(START==0))
{
return KEY_ADJUST;
}
}
}
void systeminit() //系统初始化
{
LcmInition();
time_init();
step_motor_init();
pararead();
// zero();
}
void zero() //较零
{
int tmp16[8];
delay_xms(300);
origin1[0]=0;
origin1[1]=0;
origin1[2]=0;
origin1[3]=0;
origin2[0]=0;
origin2[1]=0;
origin2[2]=0;
origin2[3]=0;
while(1)
{
ADS8364_read(TT_AD,CHECK_TIMES);
ADS8364_read(POLE_AD,CHECK_TIMES);
tmp16[0]=Data1[0];
tmp16[1]=Data1[1];
tmp16[2]=Data1[2];
tmp16[3]=Data1[3];
tmp16[4]=Data2[0];
tmp16[5]=Data2[1];
tmp16[6]=Data2[2];
tmp16[7]=Data2[3];
delay_xms(50);
ADS8364_read(TT_AD,CHECK_TIMES);
ADS8364_read(POLE_AD,CHECK_TIMES);
/*
if((tmp16[0]-Data1[0])>ALLOW_LOW && (tmp16[0]-Data1[0])<ALLOW_UP &&
(tmp16[1]-Data1[1])>ALLOW_LOW && (tmp16[1]-Data1[1])<ALLOW_UP &&
(tmp16[2]-Data1[2])>ALLOW_LOW && (tmp16[2]-Data1[2])<ALLOW_UP &&
(tmp16[3]-Data1[3])>ALLOW_LOW && (tmp16[3]-Data1[3])<ALLOW_UP &&
(tmp16[4]-Data2[0])>ALLOW_LOW && (tmp16[4]-Data2[0])<ALLOW_UP &&
(tmp16[5]-Data2[1])>ALLOW_LOW && (tmp16[5]-Data2[1])<ALLOW_UP &&
(tmp16[6]-Data2[2])>ALLOW_LOW && (tmp16[6]-Data2[2])<ALLOW_UP &&
(tmp16[7]-Data2[3])>ALLOW_LOW && (tmp16[7]-Data2[3])<ALLOW_UP)
{ */
origin1[0]=Data1[0];
origin1[1]=Data1[1];
origin1[2]=Data1[2];
origin1[3]=Data1[3];
origin2[0]=Data2[0];
origin2[1]=Data2[1];
origin2[2]=Data2[2];
origin2[3]=Data2[3];
break;
// }
}
ADS8364_read(TT_AD,CHECK_TIMES);
ADS8364_read(POLE_AD,CHECK_TIMES);
disp_4point(TT_AD);
disp_4point(POLE_AD);
}
void calculate() //计算调整目标值
{
int h51,h52,h61,h62,h71,h72,h81,h82;
ADS8364_read(TT_AD, CHECK_TIMES);
h51=(Y5-Y1)/(Y2-Y1)*(Data1[1]-Data1[0])+Data1[0];
h52=Data1[2]-(X3-X5)/(X4-X3)*(Data1[3]-Data1[2]);
h5=h51+h52;
h61=(Y6-Y1)/(Y2-Y1)*(Data1[1]-Data1[0])+Data1[0];
h62=Data1[2]-(X3-X6)/(X4-X3)*(Data1[3]-Data1[2]);
h6=h61+h62;
h71=(Y7-Y1)/(Y2-Y1)*(Data1[1]-Data1[0])+Data1[0];
h72=Data1[3]+(X7-X4)/(X4-X3)*(Data1[3]-Data1[2]);
h7=h71+h72;
h81=(Y8-Y1)/(Y2-Y1)*(Data1[1]-Data1[0])+Data1[0];
h82=Data1[3]+(X8-X4)/(X4-X3)*(Data1[3]-Data1[2]);
h8=h81+h82;
disp_target();
}
void check()
{
calculate();
TR1=1;
while(1)
{
if(keyscan()==KEY_STOP)
{
TR1=0;
EN=1;
break;
}
TR1=1;
EN=0;
ADS8364_read(POLE_AD,CHECK_TIMES);
disp_4point(POLE_AD);
if(Data2[0]-h5>ALLOW_UP)
{
CR0=DOWN;
step_run0=abs(Data2[0]-h5);
}
else if(Data2[0]-h5<ALLOW_LOW)
{
CR0=UP;
step_run0=abs(Data2[0]-h5);
}
else
{
step_run0=0;
}
if(Data2[1]-h6>ALLOW_UP)
{
CR1=DOWN;
step_run1=abs(Data2[1]-h6);
}
else if(Data2[1]-h6<ALLOW_LOW)
{
CR1=UP;
step_run1=abs(Data2[1]-h6);
}
else
{
step_run1=0;
}
if(Data2[2]-h7>ALLOW_UP)
{
CR2=DOWN;
step_run2=abs(Data2[2]-h7);
}
else if(Data2[2]-h7<ALLOW_LOW)
{
CR2=UP;
step_run2=abs(Data2[2]-h7);
}
else
{
step_run2=0;
}
if(Data2[3]-h8>ALLOW_UP)
{
CR3=DOWN;
step_run3=abs(Data2[3]-h8);
}
else if(Data2[3]-h8<ALLOW_LOW)
{
CR3=UP;
step_run3=abs(Data2[3]-h8);
}
else
{
step_run3=0;
}
if((Data2[0]-h5)>ALLOW_LOW && (Data2[0]-h5<ALLOW_UP) &&
(Data2[1]-h6)>ALLOW_LOW && (Data2[1]-h6<ALLOW_UP) &&
(Data2[2]-h7)>ALLOW_LOW && (Data2[2]-h7<ALLOW_UP) &&
(Data2[3]-h8)>ALLOW_LOW && (Data2[3]-h8<ALLOW_UP))
{
calculate();
if((Data2[0]-h5)>ALLOW_LOW && (Data2[0]-h5<ALLOW_UP) &&
(Data2[1]-h6)>ALLOW_LOW && (Data2[1]-h6<ALLOW_UP) &&
(Data2[2]-h7)>ALLOW_LOW && (Data2[2]-h7<ALLOW_UP) &&
(Data2[3]-h8)>ALLOW_LOW && (Data2[3]-h8<ALLOW_UP))
{
TR1=0;
EN=1;
step_run0=0;
step_run1=0;
step_run2=0;
step_run3=0;
break;
}
}
}
}
void NormalDisp()
{
Linexy(L1_X0, L1_Y0, L1_X1, L1_Y1, 1);
Linexy(L2_X0, L2_Y0, L2_X1, L2_Y1, 1);
Linexy(L3_X0, L3_Y0, L3_X1, L3_Y1, 1);
Linexy(L4_X0, L4_Y0, L4_X1, L4_Y1, 1);
Linexy(L5_X0, L5_Y0, L5_X1, L5_Y1, 1);
Linexy(L6_X0, L6_Y0, L6_X1, L6_Y1, 1);
Linexy(L7_X0, L7_Y0, L7_X1, L7_Y1, 1);
Linexy(L8_X0, L8_Y0, L8_X1, L8_Y1, 1);
Linexy(L9_X0, L9_Y0, L9_X1, L9_Y1, 1);
Linexy(L10_X0, L10_Y0, L10_X1, L10_Y1, 1);
PutCdotInGraph(HIGHT_X, HIGHT_Y,16, hight[0]);
PutCdotInGraph(HIGHT_X+2, HIGHT_Y,16, hight[1]);
PutCdotInGraph(HIGHT_X+4, HIGHT_Y,16, hight[2]);
PutCdotInGraph(HIGHT_X+6, HIGHT_Y,16, hight[3]);
PutSdotInGraph(HIGHT_X+8, HIGHT_Y, ":");
PutCdotInGraph(HIGHT_X+9, HIGHT_Y,16, fuhao);
PutCdotInGraph(SENSITIVE_X, SENSITIVE_Y,16, sensitive[0]);
PutCdotInGraph(SENSITIVE_X+2, SENSITIVE_Y,16, sensitive[1]);
PutCdotInGraph(SENSITIVE_X+4, SENSITIVE_Y,16, sensitive[2]);
PutCdotInGraph(SENSITIVE_X+6, SENSITIVE_Y,16, sensitive[3]);
PutSdotInGraph(SENSITIVE_X+8, SENSITIVE_Y, ":");
PutCdotInGraph(SENSITIVE_X+9, SENSITIVE_Y,16, fuhao);
PutCdotInGraph(DELAY_X, DELAY_Y,16, delay[0]);
PutCdotInGraph(DELAY_X+2, DELAY_Y,16, delay[1]);
PutCdotInGraph(DELAY_X+4, DELAY_Y,16, delay[2]);
PutCdotInGraph(DELAY_X+6, DELAY_Y,16, delay[3]);
PutSdotInGraph(DELAY_X+8, DELAY_Y, ":");
PutCdotInGraph(DELAY_X+9, DELAY_Y,16, fuhao);
PutCdotInGraph(RESULT_X, RESULT_Y,16, result[0]);
PutCdotInGraph(RESULT_X+2, RESULT_Y,16, result[1]);
PutSdotInGraph(RESULT_X+4, RESULT_Y, ":");
PutCdotInGraph(NOWVALUE_X, NOWVALUE_Y,16, nowvalue[0]);
PutCdotInGraph(NOWVALUE_X+2, NOWVALUE_Y,16, nowvalue[1]);
PutCdotInGraph(TARGET_X, TARGET_Y,16, target[0]);
PutCdotInGraph(TARGET_X+2, TARGET_Y,16, target[1]);
PutCdotInGraph(P5_X, P5_Y,16, p5dot);
PutCdotInGraph(P6_X, P6_Y,16, p6dot);
PutCdotInGraph(P7_X, P7_Y,16, p7dot);
PutCdotInGraph(P8_X, P8_Y,16, p8dot);
PutCdotInGraph(TTH_X, TTH_Y,16, tthdot[0]);
PutCdotInGraph(TTH_X+2, TTH_Y,16, tthdot[1]);
PutCdotInGraph(TTH_X+4, TTH_Y,16, tthdot[2]);
NumDisp_816(HIGHT_V_X, HIGHT_V_Y, 5, hight_limit);
NumDisp_816(SENSITIVE_V_X, SENSITIVE_V_Y, 5, sensitive_limit);
NumDisp_816(DELAY_VALUE_X, DELAY_VALUE_Y, 5, delay_value);
PutCdotInGraph(RESULT_V_X, RESULT_V_Y, 24, pass[0]);
PutCdotInGraph(RESULT_V_X+3, RESULT_V_Y, 24, pass[1]);
PutCdotInGraph(RESULT_V_X+6, RESULT_V_Y, 24, pass[2]);
PutCdotInGraph(RESULT_V_X+9, RESULT_V_Y, 24, pass[3]);
BmpDisp(16,0,192,240,bmp);
ram_clear(RESULT_V_X, RESULT_V_Y, 96, 24);
}
void disp_4point(uchar flag)
{
int tmp32;
if(flag==TT_AD)
{
NumDisp(P1_X_V, P1_Y_V, Data1[0]);
NumDisp(P2_X_V, P2_Y_V, Data1[1]);
NumDisp(P3_X_V, P3_Y_V, Data1[2]);
NumDisp(P4_X_V, P4_Y_V, Data1[3]);
}
if(flag==POLE_AD)
{
NumDisp_816(P5NOW_X, P5NOW_Y, 0, Data2[0]);
NumDisp_816(P6NOW_X, P6NOW_Y, 0, Data2[1]);
NumDisp_816(P7NOW_X, P7NOW_Y, 0, Data2[2]);
NumDisp_816(P8NOW_X, P8NOW_Y, 0, Data2[3]);
tmp32=((Data1[0]+Data1[1]+Data1[2]+Data1[3])-(Data2[0]+Data2[1]+Data2[2]+Data2[3]))>>2;
NumDisp_816(TTH_CHECK_X, TTH_CHECK_Y, 0, tmp32);
}
}
void disp_target()
{
NumDisp_816(P5TAR_X, P5TAR_Y, 0, h5);
NumDisp_816(P6TAR_X, P6TAR_Y, 0, h6);
NumDisp_816(P7TAR_X, P7TAR_Y, 0, h7);
NumDisp_816(P8TAR_X, P8TAR_Y, 0, h8);
}
#if 1
void adjustset()
{
uchar i=0;
if(START==0)
{
delay_xms(100);
if(START==0)
{
while(1)
{
delay_xms(100);
if((KEY_1==1)&&(KEY_2==1)&&(KEY_3==0)) //按下“MENU”键
{
delay_xms(30);
if((KEY_1==1)&&(KEY_2==1)&&(KEY_3==0))
{
i++;
if(i>=8)
i=0;
}
}
if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==1)) //按下“UP”键
{
delay_xms(30);
if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==1))
{
if(i<4)
para1[i]++;
else
para2[i-4]++;
}
}
if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==1)) //按下“DOWN”键
{
delay_xms(30);
if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==1))
{
if(i<4)
para1[i]--;
else
para2[i-4]--;
}
}
if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==0)) //按下“LEFT”键
{
delay_xms(30);
if((KEY_1==1)&&(KEY_2==0)&&(KEY_3==0))
{
if(i<4)
para1[i]-=20;
else
para2[i-4]-=20;
}
}
if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==0)) //按下“RIGHT”键
{
delay_xms(30);
if((KEY_1==0)&&(KEY_2==1)&&(KEY_3==0))
{
if(i<4)
para1[i]+=20;
else
para2[i-4]+=20;
}
}
NumDisp(16, 13, para1[0]);
NumDisp(16, 14, para1[1]);
NumDisp(16, 15, para1[2]);
NumDisp(16, 16, para1[3]);
NumDisp(16, 17, para2[0]);
NumDisp(16, 18, para2[1]);
NumDisp(16, 19, para2[2]);
NumDisp(16, 20, para2[3]);
ADS8364_read(TT_AD,CHECK_TIMES);
ADS8364_read(POLE_AD,CHECK_TIMES);
disp_4point(TT_AD);
disp_4point(POLE_AD);
if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==1)) //按下“ESC”键
{
delay_xms(30);
if((KEY_1==0)&&(KEY_2==0)&&(KEY_3==1))
{
break;
}
}
}
parasave();
}
}
}
#endif
void parasave()
{
uchar tmp[22];
tmp[0]=(uchar)hight_limit;
tmp[1]=(uchar)(hight_limit>>8);
tmp[2]=(uchar)sensitive_limit;
tmp[3]=(uchar)(sensitive_limit>>8);
tmp[4]=(uchar)delay_value;
tmp[5]=(uchar)(delay_value>>8);
tmp[6]=(uchar)para1[0];
tmp[7]=(uchar)(para1[0]>>8);
tmp[8]=(uchar)para1[1];
tmp[9]=(uchar)(para1[1]>>8);
tmp[10]=(uchar)para1[2];
tmp[11]=(uchar)(para1[2]>>8);
tmp[12]=(uchar)para1[3];
tmp[13]=(uchar)(para1[3]>>8);
tmp[14]=(uchar)para2[0];
tmp[15]=(uchar)(para2[0]>>8);
tmp[16]=(uchar)para2[1];
tmp[17]=(uchar)(para2[1]>>8);
tmp[18]=(uchar)para2[2];
tmp[19]=(uchar)(para2[2]>>8);
tmp[20]=(uchar)para2[3];
tmp[21]=(uchar)(para2[3]>>8);
WritEEEprom(EEPROM_H, EEPROM_L, 22, tmp);
}
void pararead()
{
uchar tmp[22];
REadEEprom(EEPROM_H, EEPROM_L, 22, tmp);
hight_limit=tmp[1];
hight_limit<<=8;
hight_limit+=tmp[0];
sensitive_limit=tmp[3];
sensitive_limit<<=8;
sensitive_limit+=tmp[2];
delay_value=tmp[5];
delay_value<<=8;
delay_value+=tmp[4];
para1[0]=tmp[7];
para1[0]<<=8;
para1[0]+=tmp[6];
para1[1]=tmp[9];
para1[1]<<=8;
para1[1]+=tmp[8];
para1[2]=tmp[11];
para1[2]<<=8;
para1[2]+=tmp[10];
para1[3]=tmp[13];
para1[3]<<=8;
para2[3]+=tmp[12];
para2[0]=tmp[15];
para2[0]<<=8;
para2[0]+=tmp[14];
para2[1]=tmp[17];
para2[1]<<=8;
para2[1]+=tmp[16];
para2[2]=tmp[19];
para2[2]<<=8;
para2[2]+=tmp[18];
para2[3]=tmp[21];
para2[3]<<=8;
para2[3]+=tmp[20];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -