📄 s_utility.c
字号:
/***************************************************************************************
by nie Shanghai Sunray Technology Co.,Ltd 04/06/2004
****************************************************************************************/
#ifndef VZ328
#define VZ328
#endif
#include <stdlib.h>
#include <M68328.h>
#include <ppsm.h>
#include <errors.h>
#include <proto.h>
#include "sample.h"
#include "Pendev.h"
#include "Peninit.h"
#include "main.h"
#include "tools.h"
#include "Sunray.h"
#include "RTC.h"
void Memory_val(void);
/**
#define CROSS_SIZE 10
#define EDGE_MIN_LIMIT 20
#define EDGE_MAX_LIMIT 1010
extern U16 CROSS_X_SRC[CROSS_SIZE];
extern U16 CROSS_Y_SRC[CROSS_SIZE];
extern U16 CROSS_X_DEST[CROSS_SIZE];
extern U16 CROSS_Y_DEST[CROSS_SIZE];
extern S16 xIn[5];
extern S16 yIn[5];
extern void CrossSetup();
U16 Xpos[4][2]={{80,180},{80,60},{240,60},{240,180}}; // 05/03/26 calibration by nie
#define SCALE_UP_FACTOR 10
#define HALF_MAX_TOUCH 380
**/
/**********************************************************************
ConvertLCDX
Convert touch panel x co-ordinate to lcd x coordinates
**********************************************************************/
S16 ConvertLCDX_S( U16 valuex,U16 valuey ) // 05/03/26 calibration by nie
{ S16 x, y,result;
x=valuex;
y=valuey;
if ((x>0)&&(x<xIn[4])&&(y>yIn[4])&&(y<(yIn[0]+100))) {
if (x>xIn[0]) {
result=((x-xIn[0])*(160-15)/(xIn[4]-xIn[0]))+15;
} else if (x<=xIn[0]) {
result=15-((xIn[0]-x)*(160-15)/(xIn[4]-xIn[0]));
}
} else if ((x>0)&&(x<xIn[4])&&(y>0)&&(y<yIn[4])) {
if (x>xIn[1]) {
result=((x-xIn[1])*(160-15)/(xIn[4]-xIn[1]))+15;
} else if (x<=xIn[1]) {
result=15-((xIn[1]-x)*(160-15)/(xIn[4]-xIn[1]));
if (result<0)
result=0;
}
} else if ((x>=xIn[4])&&(x<(xIn[3]+100))&&(y>0)&&(y<yIn[4])) {
if (x==xIn[4]) {
result=160;
} else {
result=((x-xIn[4])*(305-160)/(xIn[2]-xIn[4]))+160;
if (result>320)
result=320;
}
} else if ((x>=xIn[4])&&(x<(xIn[3]+100))&&(y>yIn[4])&&(y<(yIn[3]+100))) {
if (x==xIn[4]) {
result=160;
} else {
result=((x-xIn[4])*(305-160)/(xIn[3]-xIn[4]))+160;
if (result>320)
result=320;
}
}
if (result<0)
result=0;
if (result>320)
result=320;
return result;
}
/**********************************************************************
ConvertLCDY
Convert touch panel y co-ordinate to lcd y coordinates
**********************************************************************/
S16 ConvertLCDY_S( U16 valuex,U16 valuey ) // 05/03/26 calibration by nie
{
S16 x, y,result;
x=valuex;
y=valuey;
//result = ( ( new_cal.yscale * yValue ) / 100 ) + new_cal.ytrans;
if ((x>0)&&(x<xIn[4])&&(y>yIn[4])&&(y<(yIn[0]+100))) {
if (y==yIn[4]) {
result=120;
} else {
result=((y-yIn[4])*(225-120)/(yIn[0]-yIn[4]))+120;
if (result>240)
result=240;
}
} else if ((x>0)&&(x<xIn[4])&&(y>0)&&(y<yIn[4])) {
if (y>yIn[1]) {
result=((y-yIn[1])*(120-15)/(yIn[4]-yIn[1]))+15;
} else if (y<=yIn[1]) {
result=15-((yIn[1]-y)*(120-15)/(yIn[4]-yIn[1]));
if (result<0)
result=0;
}
} else if ((x>=xIn[4])&&(x<(xIn[3]+100))&&(y>0)&&(y<yIn[4])) {
if (y>yIn[2]) {
result=((y-yIn[2])*(120-15)/(yIn[4]-yIn[2]))+15;
} else if (y<=yIn[2]) {
result=15-((yIn[2]-y)*(120-15)/(yIn[4]-yIn[2]));
if (result<0)
result=0;
}
} else if ((x>=xIn[4])&&(x<(xIn[3]+100))&&(y>yIn[4])&&(y<(yIn[3]+100))) {
if (y==yIn[4]) {
result=120;
} else {
result=((y-yIn[4])*(225-120)/(yIn[3]-yIn[4]))+120;
if (result>240)
result=240;
}
}
if (result<0)
result=0;
if (result>240)
result=240;
return result;
}
char CheckLCDLevel(void) // add by nie 2005/07/18
{
unsigned char i;
*(P_U8)M328_PFSEL |= 0x02;
*(P_U8)M328_PFDIR &= ~(0x02);
//*(P_U8)M328_PFPUEN |= (0x02);
i= (*(P_U8)M328_PFDATA & 0x02);
return i;
}
STATUS CalibratePen1( U16 logoFlag)
{
//STATUS rv;
int i;
U8 n;
U8 displaycross;
U32 delay;
U16 loop; /* loop counter */
U16 topDone1 = FALSE;
U16 topDone2 = FALSE;
U16 bottomDone1=FALSE;
U16 bottomDone2 = FALSE;
U16 checkDone = FALSE;
U16 middle=FALSE;
U32 xs,ys;
S16 tmpXY[5][2];
S16 x, y,x1,y1; /* input values buffers */
U32 tmpx,tmpy;
U8 DispX[5],DispY[5];
TEXT calibTxt[]={'请','点','击','十','字','标','志','校','准',0};
//TEXT centTxt[]={'桑','锐','无','线','系','统',0};
TEXT validate[]={'请','点','击','原','点','验','证','校','准',0} ;
TEXT DispLabelX[]={'X:',0};
TEXT DispLabelY[]={'Y:',0};
/* setup calibration crosses */
ReStartFlag:
EL_ON();
topDone1 = FALSE;
topDone2 = FALSE;
bottomDone1=FALSE;
bottomDone2 = FALSE;
checkDone = FALSE;
ClearScreen(WHITE);
PenIrptDisable();
loop=1;
while (loop) {
for (i=0;i<5;i++) {
DispX[i]=0;
DispY[i]=0;
}
PenReadDevice( &x, &y);
if (x >0 && y > 0) {
UTL_Word2Deci(x,DispX);
UTL_Word2Deci(y,DispY);
if (PutString270((P_TEXT)DispLabelX,80,120,16,16) !=PPSM_OK) rv=PPSM_ERROR;
if (PutString270((P_TEXT)DispX,100,120,16,16) !=PPSM_OK) rv=PPSM_ERROR;
if (PutString270((P_TEXT)DispLabelY,80,120,16,16) !=PPSM_OK) rv=PPSM_ERROR;
if (PutString270((P_TEXT)DispY,100,140,16,16) !=PPSM_OK) rv=PPSM_ERROR;
}
}
SetDotWidth(3, 0);
CrossSetup();
if (PutString270((P_TEXT)calibTxt,48,100,16,16) !=PPSM_OK) rv=PPSM_ERROR;
//if (PutString270((P_TEXT)centTxt,38,170,16,16) !=PPSM_OK) rv=PPSM_ERROR;
//111111111111111111111111111111111111111111111111
if ((topDone1==FALSE)) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[0], CROSS_Y_SRC[0],
CROSS_X_DEST[0], CROSS_Y_DEST[0],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[1], CROSS_Y_SRC[1],
CROSS_X_DEST[1], CROSS_Y_DEST[1],0,EXOR_STYLE);
**/
DrawHorz(BLACK, 5, 225, 20, 0, REPLACE_STYLE);
DrawVert(BLACK, 15, 215, 20, 0, REPLACE_STYLE);
}
loop=1;
while (loop) {
tmpx=0;
tmpy=0;
i=0;
if (CheckLCDLevel()==0) {
for (delay=0xFFFF;delay>0;delay--);
PenReadDevice( &x, &y);
} else {
x=PEN_UP_VALUE;
}
if ((x!=PEN_UP_VALUE) && ((x!=0)&&(y!=0))) {
if ((x<HALF_MAX_TOUCH)&&(y>HALF_MAX_TOUCH)&&(x>0)&&(topDone1 == FALSE)) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[0], CROSS_Y_SRC[0],
CROSS_X_DEST[0], CROSS_Y_DEST[0],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[1], CROSS_Y_SRC[1],
CROSS_X_DEST[1], CROSS_Y_DEST[1],0,EXOR_STYLE);
**/
ClearRec(WHITE,4,214,22,22,REPLACE_STYLE);
xIn[1] = x;
yIn[1] = y;
tmpXY[0][0]=x;
tmpXY[0][1]=y;
topDone1 = TRUE;
while (CheckLCDLevel()==0);
loop--;
}
}
}
//2222222222222222222222222222222222222222222222
if (topDone2==FALSE) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[2], CROSS_Y_SRC[2],
CROSS_X_DEST[2], CROSS_Y_DEST[2],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[3], CROSS_Y_SRC[3],
CROSS_X_DEST[3], CROSS_Y_DEST[3],0,EXOR_STYLE);
**/
DrawHorz(BLACK, 5, 15, 20, 0, REPLACE_STYLE);
DrawVert(BLACK, 15, 5, 20, 0, REPLACE_STYLE);
}
loop=1;
while (loop) {
tmpx=0;
tmpy=0;
i=0;
if (CheckLCDLevel()==0) {
for (delay=0xFFFF;delay>0;delay--);
PenReadDevice( &x, &y);
} else {
x=PEN_UP_VALUE;
}
if ((x!=PEN_UP_VALUE) && ((x!=0)&&(y!=0))) {
if ((x<HALF_MAX_TOUCH)&&(y<HALF_MAX_TOUCH)&&(x>0)&&(topDone2==FALSE)) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[0], CROSS_Y_SRC[0],
CROSS_X_DEST[0], CROSS_Y_DEST[0],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[1], CROSS_Y_SRC[1],
CROSS_X_DEST[1], CROSS_Y_DEST[1],0,EXOR_STYLE);
**/
ClearRec(WHITE,4,4,22,22,REPLACE_STYLE);
tmpXY[1][0]=x;
tmpXY[1][1]=y;
topDone2 = TRUE;
while (CheckLCDLevel()==0);
loop--;
}
}
}
//333333333333333333333333333333333333333333333333333
if (bottomDone1==FALSE) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[2], CROSS_Y_SRC[2],
CROSS_X_DEST[2], CROSS_Y_DEST[2],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[3], CROSS_Y_SRC[3],
CROSS_X_DEST[3], CROSS_Y_DEST[3],0,EXOR_STYLE);
**/
DrawHorz(BLACK, 295, 15, 20, 0, REPLACE_STYLE);
DrawVert(BLACK, 305, 5, 20, 0, REPLACE_STYLE);
}
loop=1;
while (loop) {
tmpx=0;
tmpy=0;
x=0;
y=0;
i=0;
if (CheckLCDLevel()==0) {
for (delay=0xFFFF;delay>0;delay--);
PenReadDevice( &x, &y);
} else {
x=PEN_UP_VALUE;
}
if ((x!=PEN_UP_VALUE) && ((x!=0)&&(y!=0))) {
if ((x>HALF_MAX_TOUCH)&&(y<HALF_MAX_TOUCH)&&(y>0)&&(bottomDone1==FALSE)) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[2], CROSS_Y_SRC[2],
CROSS_X_DEST[2], CROSS_Y_DEST[2],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[3], CROSS_Y_SRC[3],
CROSS_X_DEST[3], CROSS_Y_DEST[3],0,EXOR_STYLE);
**/
ClearRec(WHITE,294,4,22,22,REPLACE_STYLE);
xIn[0] = x;
yIn[0] = y;
tmpXY[2][0]=x;
tmpXY[2][1]=y;
bottomDone1 = TRUE;
while (CheckLCDLevel()==0);
loop--;
}
}
}
//444444444444444444444444444444444444444444444
if (bottomDone2==FALSE) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[2], CROSS_Y_SRC[2],
CROSS_X_DEST[2], CROSS_Y_DEST[2],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[3], CROSS_Y_SRC[3],
CROSS_X_DEST[3], CROSS_Y_DEST[3],0,EXOR_STYLE);
**/
DrawHorz(BLACK, 295, 225, 20, 0, REPLACE_STYLE);
DrawVert(BLACK, 305, 215, 20, 0, REPLACE_STYLE);
}
loop=1;
while (loop) {
tmpx=0;
tmpy=0;
x=0;
y=0;
i=0;
if (CheckLCDLevel()==0) {
for (delay=0xFFFF;delay>0;delay--);
PenReadDevice( &x, &y);
} else {
x=PEN_UP_VALUE;
}
if ((x!=PEN_UP_VALUE) && ((x!=0)&&(y!=0))) {
if ((x>HALF_MAX_TOUCH)&&(y>HALF_MAX_TOUCH)&&(y>0)&&(bottomDone2==FALSE)) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[2], CROSS_Y_SRC[2],
CROSS_X_DEST[2], CROSS_Y_DEST[2],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[3], CROSS_Y_SRC[3],
CROSS_X_DEST[3], CROSS_Y_DEST[3],0,EXOR_STYLE);
**/
ClearRec(WHITE,294,214,22,22,REPLACE_STYLE);
tmpXY[3][0]=x;
tmpXY[3][1]=y;
bottomDone2 = TRUE;
while (CheckLCDLevel()==0);
loop--;
}
}
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
if (checkDone==FALSE) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[2], CROSS_Y_SRC[2],
CROSS_X_DEST[2], CROSS_Y_DEST[2],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[3], CROSS_Y_SRC[3],
CROSS_X_DEST[3], CROSS_Y_DEST[3],0,EXOR_STYLE);
**/
ClearScreen(WHITE);
if (PutString270((P_TEXT)validate,48,80,16,16) !=PPSM_OK) rv=PPSM_ERROR;
//DrawHorz(BLACK, 150, 120, 20, 0, REPLACE_STYLE);
//DrawVert(BLACK, 160, 110, 20, 0, EXOR_STYLE);
DrawCircle(BLACK, 160,120, 5, EXOR_STYLE);
}
loop=1;
while (loop) {
tmpx=0;
tmpy=0;
x=0;
y=0;
i=0;
if (CheckLCDLevel()==0) {
for (delay=0xFFFF;delay>0;delay--);
PenReadDevice( &x, &y);
} else {
x=PEN_UP_VALUE;
}
if ((x!=PEN_UP_VALUE) && ((x!=0)&&(y!=0))) {
//if ((x>HALF_MAX_TOUCH)&&(y>HALF_MAX_TOUCH)&&(y>0)&&(checkDone==FALSE)) {
/**
LCDPutLine( BLACK, CROSS_X_SRC[2], CROSS_Y_SRC[2],
CROSS_X_DEST[2], CROSS_Y_DEST[2],0,EXOR_STYLE);
LCDPutLine( BLACK, CROSS_X_SRC[3], CROSS_Y_SRC[3],
CROSS_X_DEST[3], CROSS_Y_DEST[3],0,EXOR_STYLE);
**/
//ClearRec(WHITE,294,214,22,22,REPLACE_STYLE);
tmpXY[4][0]=x;
tmpXY[4][1]=y;
y=(tmpXY[0][1]+tmpXY[1][1])/2;
if (y>tmpXY[4][1]) {
if (y-tmpXY[4][1]>15) {
goto ReStartFlag;
}
} else {
if (tmpXY[4][1]-y>15) {
goto ReStartFlag;
}
}
y=(tmpXY[2][1]+tmpXY[3][1])/2;
if (y>tmpXY[4][1]) {
if (y-tmpXY[4][1]>15) {
goto ReStartFlag;
}
} else {
if (tmpXY[4][1]-y>15) {
goto ReStartFlag;
}
}
x=(tmpXY[3][0]+tmpXY[0][0])/2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -