Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <xc.h>
- #include <p18f4550.h>
- #define _XTAL_FREQ 8000000 // Need for __delay_ms function
- #include <delays.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include "config.h"
- #include "touchscreen.h"
- #include "GLCD.h"
- #define ADC_THRESHOLD 10
- extern unsigned const char font5x7[];
- extern unsigned const char font5x72[];
- byte zeros[128];
- byte cal_x_min, cal_y_min, cal_x_max, cal_y_max;
- int x_coord_old, y_coord_old, x_coord64, y_coord128;
- byte tpCoord (byte x, byte y);
- #define DADES PORTBbits.RB0
- #define CLOCK PORTBbits.RB6
- #define LATCH PORTBbits.RB2
- #define ENABLE PORTBbits.RB4
- #define BLAU 0x3FF00000
- #define ROIG 0x000FFC00
- #define VERD 0x000003FF
- #define BLANC 0x3FFFFFFF
- #define NEGRE 0x00000000
- void spi_bb_init()
- {
- TRISB = 0x00; //Port B output
- }
- void spi_bb_send32(unsigned long int b)
- {
- LATCH = 0;
- CLOCK = 0;
- ENABLE = 0;
- int i;
- for (i = 0; i < 32; i++) {
- DADES = (b>>(31-i)) & 0b1;
- CLOCK = 1;
- __delay_ms(1);
- CLOCK = 0;
- }
- CLOCK = 0;
- LATCH = 1;
- ENABLE = 1;
- LATCH = 0;
- }
- void main()
- {
- cal_x_min = 47; cal_y_min = 14; // Valor cal·libracio per defecte
- cal_x_max = 221; cal_y_max = 222; // Son els necessaris per la simulacio en PROTEUS
- tpInit();
- spi_bb_init();
- while (1) {
- byte tsX = tpGetY();
- __delay_ms(1);
- byte tsY = tpGetX();
- //Pressionat
- if ((tsX > ADC_THRESHOLD) && (tsY > ADC_THRESHOLD)) {
- if (tpCoord(tsX, tsY)) {
- //Superior
- if (x_coord64 < 32) {
- //Esquerra
- if (y_coord128 < 64) {
- spi_bb_send32(VERD);
- } else { //Dreta
- spi_bb_send32(BLAU);
- }
- } else { //Inferior
- //Esquerra
- if (y_coord128 < 64) {
- spi_bb_send32(BLANC);
- } else { //Dreta
- spi_bb_send32(ROIG);
- }
- }
- }
- } else { //No pressionat
- spi_bb_send32(NEGRE);
- }
- }
- }
- byte tpCoord (byte x, byte y)
- {
- int x_coord, y_coord, x_coord_diff, y_coord_diff;
- // After a PRESS is detected read X-Y and convert it to 64x128 space
- x_coord = (int)x - cal_x_min;
- y_coord = (int)y - cal_y_min;
- // When lifting pen from the touchpanel surface tpGetX and tpGetY readings
- // (after correct PressDetect reading) may be incorrect
- if ( x_coord > x_coord_old ) { x_coord_diff = x_coord - x_coord_old; } // Compare with old values
- else { x_coord_diff = x_coord_old - x_coord; };
- if ( y_coord > y_coord_old ) { y_coord_diff = y_coord - y_coord_old; }
- else { y_coord_diff = y_coord_old - y_coord; };
- x_coord_old = x_coord; // Save old values
- y_coord_old = y_coord;
- if ( (x_coord_diff>15) || (y_coord_diff>15) ) return (0); // If difference is too big then ignore the reading
- y_coord128 = (y_coord * 128) / (cal_y_max - cal_y_min);
- x_coord64 = (64 -(x_coord *64) / (cal_x_max - cal_x_min));
- /* if ((x_coord64 < 0) || (x_coord64 > 63)) return(0);
- if ((y_coord128 < 0) || (y_coord128 > 127)) return(0); */
- if (x_coord64 < 0) x_coord64=0;
- if (x_coord64 > 63) x_coord64=63;
- if (y_coord128 < 0) y_coord128=0;
- if (y_coord128 > 127) y_coord128=127;
- return(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement