fl { 2010.10.14 Using MPC3204C to get TouchScreen's value } 14 wconstant _cs \ P20 15 wconstant _Di \ P21 connect to MCP3204's Din 16 wconstant _Do \ P22 connect to MCP3204's Dout 17 wconstant _clk 18 wconstant _Xr 19 wconstant _Xl 1a wconstant _Yu 1b wconstant _Yd wvariable x_max wvariable x_min wvariable y_max wvariable y_min wvariable offset_x wvariable offset_y 1 _cs lshift constant _csm 1 _Di lshift constant _dim 1 _Do lshift constant _dom 1 _clk lshift constant _clkm 1 _Xr lshift constant _xrm 1 _Xl lshift constant _xlm 1 _Yu lshift constant _yum 1 _Yd lshift constant _ydm : _cs_out _cs pinout ; : _di_out _Di pinout ; : _do_in _Do pinin ; : _clk_out _clk pinout ; : _xr_out _Xr pinout ; : _xl_out _Xl pinout ; : _yu_out _Yu pinout ; : _yd_out _Yd pinout ; : _cs_l _csm _maskoutlo ; : _cs_h _csm _maskouthi ; : _di_l _dim _maskoutlo ; : _di_h _dim _maskouthi ; : _clk_l _clkm _maskoutlo ; : _clk_h _clkm _maskouthi ; : _xr_h _xrm _maskouthi ; : _yu_h _yum _maskouthi ; : get_a/d _cs_l 5 0 do dup 1 4 i - lshift and 0> if _di_h else _di_l then _clk_l _clk_h loop drop _clk_l _clk_h 0 d 0 do _clk_l _clk_h ina COG@ _dom and 0> if 1+ then 1 lshift loop 1 rshift _cs_h ; : get_pos 18 4 0 do dup pinin 1+ loop drop \ set P24-P27 to input _yu_out _yd_out _yu_h a 0 do 19 get_a/d loop \ ch1 X-axis 9 0 do + loop a u/ \ dup . _Yu pinin _Yd pinin _xr_out _xl_out _xr_h a 0 do 18 get_a/d loop \ ch0 Y-axis 9 0 do + loop a u/ \ dup . _Xr pinin _Xl pinin \ cr ; : init_TS _cs_out _di_out _clk_out _cs_h _di_h _clk_h _do_in 0 dup offset_y W! offset_x W! 64 delms a 0 do get_pos dup offset_y W@ > if 10 + offset_y W! else drop then dup offset_x W@ > if 10 + offset_x W! else drop then a delms loop \ ." offset_y=" offset_y W@ . ." offset_x=" offset_x W@ . cr ; : cal begin get_pos dup offset_y W@ < if swap dup offset_x W@ < if 2drop 0 else swap 1 then else 1 then if dup dup a u/ + y_max W! dup a u/ - y_min W! dup dup a u/ + x_max W! dup a u/ - x_min W! 64 delms \ get_pos dup y_min W@ y_max W@ between if begin get_pos offset_y W@ < if offset_x W@ < if 1 else 0 then \ else drop 0 \ then get_pos dup y_min W@ y_max W@ between if swap dup x_min W@ x_max W@ between if swap 1 else 2drop 0 then else 2drop 0 then else 0 then until begin get_pos offset_y W@ < if offset_x W@ < if 1 else 0 then else drop 0 then until \ dup ." AD_y=" . swap dup ." AD_x=" . swap ; : sense begin get_pos dup offset_y W@ < if swap dup offset_x W@ < if 2drop 0 else swap 1 then else 1 then if dup dup a u/ + y_max W! dup a u/ - y_min W! dup dup a u/ + x_max W! dup a u/ - x_min W! 64 delms get_pos dup y_min W@ y_max W@ between if swap dup x_min W@ x_max W@ between if swap 1 else 2drop 0 then else 2drop 0 then else state W@ if 0 state W! arrow arrow1 then 0 then until ;