اطلاعیه

Collapse
No announcement yet.

کتابخانه ads7843 , TOUCH

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کتابخانه ads7843 , TOUCH

    سلام دوستان

    دوستان من جهت راه اندازی glcd از ای کتابخونه ها استفاده کردم که برای رسم خط هم تابع notpad تعریف شده . ولی هنگام استفاده رو سخت افزار کار نمیکنه می خواستم ببینم سخت افزار مشکل پیدا کرده که نکرده چون اولا برنامه تست شده دوما قلال هم جواب می داد ویا اگر نرم افزار مشکل داره مشکلش چیه.

    این کتابخونه ads7843 ; که برای اینشیالایزه

    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #define MOSI_DDR DDRB.2
    #define MOSI_PRT PORTB.2
    #define MISO_DDR DDRB.3
    #define MISO_PRT PORTB.3
    #define SCK_DDR DDRB.1
    #define SCK_PRT PORTB.1
    #define CS_DDR DDRA.4
    #define CS_PRT PORTA.4
    #define BUSY_DDR DDRA.3
    #define BUSY_PRT PORTA.3
    #define BUSY_IN PINA.3
    #define IRQ_DDR DDRE.4
    #define IRQ_PRT PORTE.4
    #define SS_DDR DDRB.0

    #define SPI_ENABLE 0x40
    #define SPI_INT_ENABLE 0x80
    #define SPI_INT_DISABLE 0x00
    #define SPI_LSB_FIRST 0x20
    #define SPI_MSB_FIRST 0x00
    #define SPI_MASTER 0x10
    #define SPI_SLAVE 0x00
    #define SPI_FAL_FIRST 0x08
    #define SPI_RIS_FIRST 0x00
    #define SPI_SET_FIRST 0x04
    #define SPI_SAM_FIRST 0x00
    #define SPI_CLK_DIV4 0x00
    #define SPI_CLK_DIV16 0x01
    #define SPI_CLK_DIV64 0x02
    #define SPI_CLK_DIV128 0x03
    #define TC_CR_X 0xD0 //DFR = 0, PD = 00
    #define TC_CR_Y 0x90 //DFR = 0, PD = 00

    volatile unsigned int tc_x,tc_y;
    int spi_cnt;
    int spi_ri;
    int spi_wi;

    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma used+
    void SPIMasterEnable(unsigned char clk_pol,unsigned char clk_phase,unsigned char clk_div,unsigned char order,unsigned char int_enable);
    void SPIMasterDisable(void);
    void SPIMasterTransfer(int len, unsigned char *buf);
    void TCInit(void); //initial touch screen controller
    //unsigned char TCIsPenOn(void); //TC_PEN_PIN is 0 when the screen is pressed
    void TCRead(void); //read analog voltage
    #pragma used-
    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma used+
    void TCInit(void)
    {
    MOSI_DDR = 1;
    MISO_DDR = 0;
    SCK_DDR = 1;
    CS_DDR = 1;
    BUSY_DDR = 0;
    IRQ_DDR = 0;
    SS_DDR = 1;

    MISO_PRT = 1;
    BUSY_PRT = 1;
    IRQ_PRT = 1;
    TCRead();
    }
    #pragma used-
    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma used+
    void TCRead(void) //read analog voltage
    {
    unsigned char spi_buf[8];
    spi_buf[0] = TC_CR_X; //read Y first
    spi_buf[1] = 0; //2nd byte is not used
    spi_buf[2] = TC_CR_Y; //then read X
    spi_buf[3] = 0; //3rd byte is not used
    spi_buf[4] = 0; //4th byte is not used

    SPIMasterEnable(SPI_RIS_FIRST,SPI_SAM_FIRST,SPI_CL K_DIV128,SPI_MSB_FIRST,SPI_INT_DISABLE);

    SPIMasterTransfer(5,spi_buf); //transfer data for 5 cycles
    SPIMasterDisable();

    tc_x = (spi_buf[1] << 5); //arrange received data
    tc_x |= (spi_buf[2] >> 3); //arrange received data
    tc_y = (spi_buf[3] << 5); //arrange received data
    tc_y |= (spi_buf[4] >> 3); //arrange received data
    }
    #pragma used-
    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma used+
    void SPIMasterEnable(unsigned char clk_pol,unsigned char clk_phase,unsigned char clk_div,unsigned char order,unsigned char int_enable)
    {
    unsigned char spcr_buf = SPI_MASTER;
    spcr_buf |= clk_pol | clk_phase | clk_div | order | int_enable;
    SPCR = spcr_buf;
    SPCR |= SPI_ENABLE;
    }
    #pragma used-
    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma used+
    void SPIMasterDisable()
    {
    SPCR &= ~SPI_ENABLE;
    }
    #pragma used-
    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma used+
    void SPIMasterTransfer(int len, unsigned char *buf)
    {
    spi_cnt = len;
    spi_wi = 0;
    spi_ri = 0;
    CS_PRT = 0;
    //while(BUSY_IN);

    while (spi_wi != spi_cnt)
    {
    SPDR = buf[spi_ri];
    spi_ri++;
    while((SPSR &(1<<SPIF))==0);
    buf[spi_wi] = SPDR;
    spi_wi++;
    }
    CS_PRT = 1;
    }
    #pragma used-

    و این هم توابع notpad kepad که تو کتابخونه touch

    #define WaitFORpen while(PINE.4==1);

    flash char Key[3][4]={
    {'1','4','7','* '},
    {'2','5','8','0 '},
    {'3','6','9','# '}
    };
    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma warn+
    void Calibration(void)
    {
    int x1,y1,x2,y2;
    fcolor=Red;
    bcolor=White;
    clrScr();
    fillCircle(5,5,5);
    while(PINE.4==0);
    delay_ms(1000);
    while(PINE.4==1);
    TCRead();
    x1=tc_x;
    y1=tc_y;

    fcolor=White;
    fillCircle(5,5,5);
    fcolor=Red;
    fillCircle(234,5,5);
    while(PINE.4==0);
    delay_ms(1000);
    while(PINE.4==1);
    TCRead();
    x2=tc_x;
    y1=(tc_y+y1)/2;

    fcolor=White;
    fillCircle(234,5,5);
    fcolor=Red;
    fillCircle(5,314,5);
    while(PINE.4==0);
    delay_ms(1000);
    while(PINE.4==1);
    TCRead();
    x1=(x1+tc_x)/2;
    y2=tc_y;

    fcolor=White;
    fillCircle(5,314,5);
    fcolor=Red;
    fillCircle(234,314,5);
    while(PINE.4==0);
    delay_ms(1000);
    while(PINE.4==1);
    TCRead();
    x2=(x2+tc_x)/2;
    y2=(y2+tc_y)/2;

    Calibre.Touch_x1 = x1;
    Calibre.Touch_x2 = x2;
    Calibre.Touch_y1 = y1;
    Calibre.Touch_y2 = y2;

    fcolor=Black;
    sprintf(str,"X1=%4d",Calibre.Touch_x1);
    print(str,0,0,0);
    sprintf(str,"X2=%4d",Calibre.Touch_x2);
    print(str,0,20,0);
    sprintf(str,"Y1=%4d",Calibre.Touch_y1);
    print(str,0,40,0);
    sprintf(str,"Y2=%4d",Calibre.Touch_y2);
    print(str,0,60,0);
    while(PINE.0==1);
    clrScr();
    delay_ms(1000);
    }
    #pragma warn-

    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma warn-
    void keypad(void)
    {
    char Column,Row,Counter=0;

    int x_Length,y_Length,x,y;
    double xx;

    x_Length = Calibre.Touch_x2 - Calibre.Touch_x1;
    y_Length = Calibre.Touch_y1 - Calibre.Touch_y2;

    bcolor=Blue;
    clrScr();
    fcolor=White;
    fillRoundRect(10,10,230,70);

    fcolor=Red;

    fillRoundRect(5,85,75,135);
    fillRoundRect(85,85,155,135);
    fillRoundRect(165,85,235,135);

    fillRoundRect(5,145,75,195);
    fillRoundRect(85,145,155,195);
    fillRoundRect(165,145,235,195);

    fillRoundRect(5,205,75,255);
    fillRoundRect(85,205,155,255);
    fillRoundRect(165,205,235,255);

    fillRoundRect(5,265,75,315);
    fillRoundRect(85,265,155,315);
    fillRoundRect(165,265,235,315);

    bcolor=Red;
    fcolor=Black;
    printChar('1',32,102);
    printChar('2',112,102);
    printChar('3',192,102);

    printChar('4',32,162);
    printChar('5',112,162);
    printChar('6',192,162);

    printChar('7',32,222);
    printChar('8',112,222);
    printChar('9',192,222);

    printChar('*',32,282);
    printChar('0',112,282);
    printChar('#',192,282);

    bcolor=White;
    while(1)
    {
    while(PINE.4==1);
    TCRead();
    xx = (tc_x-Calibre.Touch_x1);xx/=x_Length;xx*=239;
    x=(int)xx;
    xx = (tc_y-Calibre.Touch_y2);xx/=y_Length;xx*=319;
    y=(int)xx;
    y = 319 - y;

    if((x>15) && (x<65))
    Column=0;
    else
    if((x>95) && (x<145))
    Column=1;
    else
    if((x>175) && (x<225))
    Column=2;
    else
    Column=3;

    if((y>95) && (y<125))
    Row=0;
    else
    if((y>155) && (y<185))
    Row=1;
    else
    if((y>215) && (y<245))
    Row=2;
    else
    if((y>275) && (y<305))
    Row=3;
    else
    Row=4;

    if((Row<4) && (Column<3))
    {
    if(Counter<13)
    printChar(Key[Column][Row],(15+(Counter*16)),17);
    else
    if(Counter<26)
    printChar(Key[Column][Row],(15+((Counter-13)*16)),47);

    Counter++;
    if(Counter>25)
    Counter=0;
    }
    delay_ms(200);
    while(PINE.4==0);
    }
    }
    #pragma warn-
    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma warn+
    void Notepad(void)
    {
    int x_Length,y_Length,x,y;
    double xx;

    x_Length = Calibre.Touch_x2 - Calibre.Touch_x1;
    y_Length = Calibre.Touch_y1 - Calibre.Touch_y2;
    clrScr();
    sprintf(str,"Y=%4d",y_Length);
    print(str,0,20,0);
    sprintf(str,"X=%4d",x_Length);
    print(str,0,0,0);
    while(PINE.4==0);
    delay_ms(5000);
    clrScr();
    while(1)
    {
    while(PINE.4==1);
    TCRead();
    xx = (tc_x-Calibre.Touch_x1);xx/=x_Length;xx*=239;
    x=(int)xx;
    xx = (tc_y-Calibre.Touch_y2);xx/=y_Length;xx*=319;
    y=(int)xx;
    y = 319 - y;
    //sprintf(str,"X=%4d-y=%4d",x,y);
    //print(str,0,0,0);
    drawPixel(x,y);
    //fillCircle(x,y,1);
    delay_ms(10);
    }
    }
    #pragma warn-
    /************************************************** ************************************************** *******/
    //
    /************************************************** ************************************************** *******/
    #pragma warn+
    void DispTouchXY(void)
    {
    TCRead();
    sprintf(str,"X=%4d",Calibre.Touch_x1);
    print(str,0,40,0);
    sprintf(str,"Y=%4d",tc_y);
    print(str,0,20,0);
    }
    #pragma warn-
    و این هم دستور تو main
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 7/26/2012
    Author : Sweet
    Company :
    Comments:


    Chip type : ATmega128A
    Program type : Application
    AVR Core Clock frequency: 14.745600 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 1024
    ************************************************** ***/
    eeprom struct TochScraanCalibre
    {
    int Touch_x1;
    int Touch_x2;
    int Touch_y1;
    int Touch_y2;
    }Calibre;


    char str[30];


    #include <mega128a.h>
    #include <delay.h>
    #include <stdio.h>
    #include <TFT.C>
    #include <ads7843.c>
    #include <TOUCH.c>




    // Declare your global variables here

    void main(void)
    {

    #asm("sei&quot
    InitLCD();
    TCInit();
    while (1)
    {
    print("In the name of allah",150,0,90);
    clrScr();
    Notepad();
    }
    }
    ببینم چی کار میکنیدا اقا دم همه شما گرم
لطفا صبر کنید...
X