' {$STAMP BS2p} ' {$PBASIC 2.5} PAUSE 5000 CS PIN 0 'chip select Clock PIN 1 'clock Data_In PIN 2 'Data input pin Data_Out PIN 3 'Data output pin Start_Bit CON 1 'required in the shiftout call SE VAR Nib 'binary string for single ended config LCD_Tx PIN 10 'Stamp serial transmit pin LCD_Rx PIN 11 'Stamp serial receive pin ack VAR Byte lobyte VAR Byte hibyte VAR Byte x VAR Word GOSUB clr_scn GOSUB set_ldscp GOSUB touch_initialize DO GOSUB touch_get PAUSE 10 LOOP END ack_check: SERIN LCD_Rx, 240, 2000, timeout, [ack] IF ack = 0 THEN DEBUG CR, CR, "serial receive acknowledge fail." ENDIF RETURN '------------------------------------------------------------ serin_read: SERIN LCD_Rx, 240, 2000, timeout, [ack, hibyte, lobyte] IF ack = 0 THEN DEBUG CR, CR, "serin_read fail." ENDIF RETURN '----------------------------------------------------------------------- timeout: DEBUG CR,CR, "serial receive timed out..." RETURN '--------------------------------------------------------------------- clr_scn: SEROUT LCD_Tx, 240, [$FF,$CD] GOSUB ack_check PAUSE 3000 RETURN '----------------------------------------------------------------------- set_ldscp: SEROUT LCD_Tx, 240, [$FF,$9E] SEROUT LCD_Tx, 240, [$00,$00] 'landscape code GOSUB ack_check 'only care about ack RETURN touch_initialize: SEROUT LCD_Tx, 240, [$FF,$38] 'enable touch SEROUT LCD_Tx, 240, [$00,$00] 'mode 0 GOSUB ack_check SEROUT LCD_Tx, 240, [$FF,$38] SEROUT LCD_Tx, 240, [$00,$02] 'full screen GOSUB ack_check RETURN touch_get: x = 0 SEROUT LCD_Tx, 240, [$FF,$37] SEROUT LCD_Tx, 240, [$00,$00] SERIN LCD_Rx, 240, 2000, timeout, [ack, lobyte] IF lobyte <> 0 THEN DO 'wait till touch stops SEROUT LCD_Tx, 240, [$FF,$37] SEROUT LCD_Tx, 240, [$00,$00] SERIN LCD_Rx, 240, 2000, timeout, [ack, lobyte] LOOP UNTIL (lobyte = 0) SEROUT LCD_Tx, 240, [$FF,$37] 'touch get SEROUT LCD_Tx, 240, [$00,$01] 'get x value SERIN LCD_Rx, 240, 2000, timeout, [ack, x.HIGHBYTE, x.LOWBYTE] 'IF ack = 80 THEN 'x = x + 256 'ENDIF DEBUG HOME, DEC x, " " ENDIF RETURN