Высказывания и цитаты:

Государство, которое стремится избежать войны за счёт собственного унижения, получит и войну, и унижение.
Уинстон Черчилль.

  • 30Ноя

    Урок №4. Да, сегодня я в ударе, не иначе — написать третью статью за день. В проекте из архива TouchPanel.rar  калибровку touch экрана приходится делать каждый раз при включении питания, что не очень удобно, ведь можно использовать для калибровки под конкретный дисплей константы, заранее записанные в памяти микроконтроллера.
    IMG00675
    Итак, открываем файл TouchPanel.c, калибровка происходт по трем точкам, еще эти точки являются местом для появления курсора.
    Coordinate DisplaySample[3] = {{45,45},{45,270},{190,190}};

    Теперь нам нужна функция
    void TouchPanel_Calibrate(void)
    {
    uint8_t i;
    Coordinate * Ptr;
    for(i=0;i<3;i++)
    { LCD_Clear(Black);
    GUI_Text(10,10,"Touch crosshair to calibrate",0xffff,Black); delay_ms(500);
    DrawCross(DisplaySample[i].x,DisplaySample[i].y);
    do { Ptr=Read_Ads7846(); } while( Ptr == (void*)0 );
    ScreenSample[i].x= Ptr->x; ScreenSample[i].y= Ptr->y;
    }
    setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix ) ;
    LCD_Clear(Black);
    }


    Эта функция вызывается каждый раз при включении. Заменим ее на следующую

    void TouchPanel_Calibrate(uint8_t CalSiNo)
    {
    uint8_t i;
    Coordinate * Ptr;
    GetFormat();
    if(!CalSiNo){
    // калибровка прописана заранее
    ScreenSample[0].x = 0xD10; ScreenSample[1].x = 0x355; ScreenSample[2].x = 0x06D2;
    ScreenSample[0].y = 0x0369; ScreenSample[1].y = 0x35B; ScreenSample[2].y = 0x0C36;
    }
    else { // калибровку делаем заново
    for(i=0;i<3;i++)
    {
    LCD_Clear(Black);
    GUI_Text(10,10,"Touch crosshair to calibrate",0xffff,Black);
    delay_ms(500);
    DrawCross(DisplaySample[i].x,DisplaySample[i].y);
    do
    {
    Ptr=Read_Ads7846();
    }
    while( Ptr == (void*)0 );
    ScreenSample[i].x= Ptr->x; ScreenSample[i].y= Ptr->y;
    } }
    setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix ) ;
    LCD_Clear(my_color);
    }

    В файле touchpanel.h необходимо также поменять прототип функции
    void TouchPanel_Calibrate(void); на
    void TouchPanel_Calibrate(uint8_t CalSiNo);
    потому что функция теперь использует параметр CalSiNo. И при вызове функции написать TouchPanel_Calibrate(0); Вот и всё.

Ваш ответ

Внимание: Модератор оставляет за собой право редактировать или удалять комментарии.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: