⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s_utility.c

📁 dragon ball vz328 上的一个例子程序。 用于做手持仪表用。
💻 C
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************************

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 + -