Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of TouchADS7843 by
Touch.h
00001 /* 00002 \file Touch.h 00003 \version: 1.0 00004 00005 \brief Este fichero contiene class para control de TouchScreen ADS7843 00006 00007 \web www.micros-designs.com.ar 00008 \date 16/01/11 00009 00010 *- Version Log --------------------------------------------------------------* 00011 * Fecha Autor Comentarios * 00012 *----------------------------------------------------------------------------* 00013 * 16/01/11 Suky Original * 00014 *----------------------------------------------------------------------------* 00015 /////////////////////////////////////////////////////////////////////////// 00016 //// //// 00017 //// //// 00018 //// (C) Copyright 2011 www.micros-designs.com.ar //// 00019 //// Este código puede ser usado, modificado y distribuido libremente //// 00020 //// sin eliminar esta cabecera y sin garantía de ningún tipo. //// 00021 //// //// 00022 //// //// 00023 /////////////////////////////////////////////////////////////////////////// 00024 // ********************************************************************** 00025 // ************************** EXAMPLE *********************************** 00026 // ********************************************************************** 00027 #include "mbed.h" 00028 #include "Touch.h" 00029 // ********************************************************************** 00030 #define TOUCH_X_MIN 30 00031 #define TOUCH_X_MAX 230 00032 #define TOUCH_Y_MIN 15 00033 #define TOUCH_Y_MAX 240 00034 // ********************************************************************** 00035 DigitalOut Led1(LED1); 00036 DigitalOut Led2(LED2); 00037 // ********************************************************************** 00038 TOUCH_DATA Coordenadas; 00039 volatile bool kbhit_irq=0; 00040 00041 TouchScreenADS7843 MyTouch(p9,p10,p11,p12,p8); // ADS7843-> SDO,SDI,SCK,CS,IRQ 00042 // ********************************************************************** 00043 void vISRTouchIRQ(void){ 00044 UINT_COORDxy Temp; 00045 00046 MyTouch.vTestTouchPanel(&Coordenadas); 00047 // Coordenadas dentro del rango de pantalla LCD: 00048 if((Coordenadas.x>TOUCH_X_MIN && Coordenadas.x<TOUCH_X_MAX) && (Coordenadas.y>TOUCH_Y_MIN && Coordenadas.y<TOUCH_Y_MAX)){ 00049 // Cambio de coordenada y escala: 00050 Temp=Coordenadas.y; 00051 Coordenadas.y=((float)((255-TOUCH_X_MIN)-Coordenadas.x)*(320.0/(TOUCH_X_MAX-TOUCH_X_MIN))); 00052 Coordenadas.x=((float)(Temp-TOUCH_Y_MIN)*(240.0/(TOUCH_Y_MAX-TOUCH_Y_MIN))); 00053 kbhit_irq=1; 00054 } 00055 } 00056 // ********************************************************************** 00057 int main(){ 00058 00059 //MyTouch.vInitADS7843(USE_12BITS,NULL); 00060 MyTouch.vInitADS7843(USE_8BITS,&vISRTouchIRQ); 00061 00062 Led1=0; 00063 Led2=0; 00064 00065 while(1){ 00066 Led2=!Led2; 00067 if(kbhit_irq==1){ 00068 kbhit_irq=0; 00069 if((Coordenadas.x<235 && Coordenadas.x>135) && (Coordenadas.y<320 && Coordenadas.y>250)){ 00070 Led1=!Led1; 00071 } 00072 } 00073 wait_ms(300); 00074 } 00075 } 00076 // ********************************************************************** 00077 */ 00078 #include "mbed.h" 00079 // ********************************************************************** 00080 #define USE_12BITS 12 00081 #define USE_8BITS 8 00082 #define ENABLE_INTERRUPT 1 00083 #define DISABLE_INTERRUPT 0 00084 // ********************************************************************** 00085 typedef unsigned short UINT_COORDxy; 00086 typedef struct { 00087 UINT_COORDxy x; 00088 UINT_COORDxy y; 00089 }TOUCH_DATA; 00090 // ********************************************************************** 00091 class TouchScreenADS7843 { 00092 public: 00093 TouchScreenADS7843(PinName PIN_SDO,PinName PIN_SDI,PinName PIN_CLK,PinName PIN_CS,PinName PIN_IRQ); 00094 void vInitADS7843(unsigned char Bits,void (*fptr)(void)); 00095 void vSetResolution(unsigned char Bits); 00096 void vTestTouchPanel(TOUCH_DATA *Data); 00097 void vEnableSetInterrupt(void (*fptr)(void)); 00098 void vDisableInterrupt(void); 00099 bool bReadPinIRQ(void); 00100 protected: 00101 #define __delay_CLK_ADS7843() wait_us(1) 00102 #define ADS7843_READ_X_8 0x98 // IRQ Enable 00103 #define ADS7843_READ_Y_8 0xD8 00104 #define ADS7843_READ_X_12 0x90 // IRQ Enable 00105 #define ADS7843_READ_Y_12 0xD0 00106 DigitalOut _PIN_SDI,_PIN_CS,_PIN_CLK; 00107 DigitalIn _PIN_SDO,_PIN_IRQ; 00108 InterruptIn ADS7843_Event_Touch; 00109 unsigned char Resolution; 00110 virtual UINT_COORDxy ADS7843WriteAndReadData(unsigned char Data); 00111 }; 00112 // ********************************************************************** 00113 TouchScreenADS7843::TouchScreenADS7843(PinName PIN_SDO,PinName PIN_SDI,PinName PIN_CLK,PinName PIN_CS,PinName PIN_IRQ) 00114 : _PIN_SDO(PIN_SDO),_PIN_SDI(PIN_SDI),_PIN_CS(PIN_CS),_PIN_CLK(PIN_CLK),_PIN_IRQ(PIN_IRQ),ADS7843_Event_Touch(PIN_IRQ) {} 00115 // ********************************************************************** 00116 void TouchScreenADS7843::vInitADS7843(unsigned char Bits,void (*fptr)(void)) { 00117 00118 _PIN_CS=1; 00119 _PIN_SDI=0; 00120 _PIN_CLK=0; 00121 Resolution=Bits; 00122 if (fptr!=NULL) { 00123 ADS7843_Event_Touch.fall(fptr); 00124 } 00125 } 00126 // ********************************************************************** 00127 void TouchScreenADS7843::vSetResolution(unsigned char Bits) { 00128 Resolution=Bits; 00129 } 00130 // ********************************************************************** 00131 void TouchScreenADS7843::vEnableSetInterrupt(void (*fptr)(void)) { 00132 ADS7843_Event_Touch.fall(fptr); 00133 } 00134 // ********************************************************************** 00135 void TouchScreenADS7843::vDisableInterrupt(void) { 00136 ADS7843_Event_Touch.fall(NULL); 00137 } 00138 // ********************************************************************** 00139 bool TouchScreenADS7843::bReadPinIRQ(void) { 00140 return(_PIN_IRQ); 00141 } 00142 // ********************************************************************** 00143 UINT_COORDxy TouchScreenADS7843::ADS7843WriteAndReadData(unsigned char Data) { 00144 unsigned char k; 00145 UINT_COORDxy Temp; 00146 00147 _PIN_CS=0; 00148 __delay_CLK_ADS7843(); 00149 // En cada flanco ascendente se toma el dato: 00150 for (k=0;k<8;k++) { 00151 _PIN_SDI=!!(Data&0x80); 00152 __delay_CLK_ADS7843(); 00153 _PIN_CLK=1; 00154 __delay_CLK_ADS7843(); 00155 Data<<=1; 00156 _PIN_CLK=0; 00157 00158 } 00159 __delay_CLK_ADS7843(); // Esperamos busy: 00160 _PIN_CLK=1; 00161 __delay_CLK_ADS7843(); 00162 _PIN_CLK=0; 00163 __delay_CLK_ADS7843(); 00164 __delay_CLK_ADS7843(); // Esperamos busy: 00165 00166 // En flanco descendente leemos data desde el ADS7843: 00167 _PIN_CLK=1; 00168 Temp=0; 00169 00170 if (Resolution==8) { 00171 for (k=0;k<8;k++) { 00172 Temp<<=1; 00173 _PIN_CLK=0; 00174 Temp+=_PIN_SDO; 00175 __delay_CLK_ADS7843(); 00176 _PIN_CLK=1; 00177 } 00178 } else { 00179 for (k=0;k<12;k++) { 00180 Temp<<=1; 00181 _PIN_CLK=0; 00182 Temp+=_PIN_SDO; 00183 __delay_CLK_ADS7843(); 00184 _PIN_CLK=1; 00185 } 00186 } 00187 __delay_CLK_ADS7843(); 00188 _PIN_CLK=0; 00189 _PIN_CS=1; 00190 00191 return(Temp); 00192 } 00193 // ********************************************************************** 00194 void TouchScreenADS7843::vTestTouchPanel(TOUCH_DATA *Data) { 00195 unsigned short TempX,TempY; 00196 unsigned char k; 00197 00198 wait_ms(1); 00199 00200 TempX=0; 00201 TempY=0; 00202 for (k=0;k<8;k++) { 00203 if (Resolution==8) { 00204 TempX+=ADS7843WriteAndReadData(ADS7843_READ_X_8); 00205 TempY+=ADS7843WriteAndReadData(ADS7843_READ_Y_8); 00206 } else { 00207 TempX+=ADS7843WriteAndReadData(ADS7843_READ_X_12); 00208 TempY+=ADS7843WriteAndReadData(ADS7843_READ_Y_12); 00209 } 00210 } 00211 00212 00213 Data->x=(TempX>>3); 00214 Data->y=(TempY>>3); 00215 00216 return; 00217 } 00218 // **********************************************************************
Generated on Wed Jul 20 2022 02:37:27 by
1.7.2
