rem I2C genertor az uts adat utn nem kell ACK? De kell.Itt. A sorrend:7.-tl
' az 1-esig.
DIM x1 AS INTEGER, y1 AS INTEGER, buttons AS INTEGER, xx as ubyte
dim d(30) as integer:dim remd(30) as string
po=888: sdbit=1: clkbit=0: enbit=2: sdin=4: clkin=5:'portbitek defincii 
pau=5: byteszam=5
d(1)=194:d(2)=103:d(3)=52:d(4)=142:d(5)=80:d(6)=0:d(7)=0:d(8)=0:
remd(1)="eszkoz cime:11000XX0"
remd(2)="divider"
remd(3)="divider"
remd(4)="Charge pump"
remd(5)="output ports X000XXXX"
remd(6)=""
screen 12: out (po,3)               'kezdetnek mindkt kimenet H-n
print " bal klikk:toggle,    jobb klikk:D-out,    kozepso: Esc,    gorgo: fel-le"
gosub kiiratas

mouse:
DO        
GETMOUSE x1, y1,zu, buttons         'rnz az egrre
x=int(x1/8)-4:y=int(y1/16)-1
xx=8-x                  rem nem tudom mirt kellett, igy mx
LOCATE 29, 30
IF x < 0 THEN
PRINT "Mouse not available or not on window"
ELSE
PRINT"Mouse position:"; xx; y;"   "; zr;zu;"           " 'koordintk, grgszmll
IF zr<>zu then gosub encoder'ha mozdult a grg...
IF buttons AND 1 THEN gosub invertal    'bal gomb esetn
IF buttons AND 2 THEN gosub adatki      'jobb gomb esetn
IF buttons AND 4 THEN end               'kzps gomb
END IF
LOOP WHILE INKEY$ = ""
end

BINKI:    REM       BINARIS KIJELZES
OO = d(i):                                'oo=a szm letrolva
yy = 256:                                 '2. hatvny kezdrtke
FOR j = 7 TO 0 STEP -1
yy = yy / 2                               '2.hatvny ellltsa
IF OO / yy >= 1 THEN PRINT "1";           's sszehasonlts vele
IF OO / yy < 1 THEN PRINT "0"; : GOTO 9
OO = OO - yy
9 :
NEXT j
RETURN

invertal: 'a rkattintott bit invertlsa
if xx=251 and y=10 then gosub byteszam
if xx<0 or xx>27 then return         'ha az egr a hasznos terleten kvl van..
if y<0 or y>27 then return           'ha az egr a hasznos terleten kvl van..
if xx=251 then gosub byteszam       'ha a "bytehossz" mezben van a mutat...
if abs(bit(d(y),xx))=0 then d(y)=bitset (d(y),xx):sleep 200: gosub kiiratas:return
if abs(bit(d(y),xx))=1 then d(y)=bitreset (d(y),xx):sleep 200:gosub kiiratas:return

'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
adatki:locate 16,30:color 12: print "adat:ki" 'CLK=H-nl rvnyes az adat
gosub i2cstart
for i=1 to byteszam     'bjtok
for j=7 to 0 step -1    'bitek
if abs(bit(d(i),j))=1 then gosub sd1: else gosub sd0 'milyen a d(i) j-edik bitje?
sleep pau
gosub sck1:sleep pau: gosub sck0            'clock impulzus
next j:                                     'kilkte a bjtot
gosub sd1:gosub sck1                        'az adatot felengedjk az ACK-hoz, rajel fel
ack1:
acktimer=acktimer+1                         'ACK-ra vr szmll...
if acktimer>100000 then goto noack:          'ha nincs ACK, kilp
in = INP(po + 1):if abs(bit(in,sdin))=1 then goto ack1 'ha nem hzza le, vr valameddig
acktimer=0:gosub sck0                       'lehzta az SD-t, ACK volt, rajel LE
next i: locate 16,30:color 15: print "       ":
gosub i2cstop: return
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo

sd1: o=bitset (o,sdbit) :     OUT po, o: RETURN
sd0: o=bitreset (o,sdbit) :   OUT po, o: RETURN
sck1: o=bitset (o,clkbit) :   OUT po, o: RETURN
sck0: o=bitreset (o,clkbit) : OUT po, o: RETURN
enable: o = bitset (o,enbit): OUT po, o: sleep pau:
o = bitreset (o,enbit)::      OUT po, o: RETURN
i2cstart:gosub sd1:gosub sck1: gosub sd0:gosub sck0: return
i2cstop:gosub sd0: gosub sck1:gosub sd1:return

encoder:                    'ha mozdult a grg...
if zu>zr then d(y)=d(y)+1:  'ha a szmll nvekszik
if d(y)>255 then d(y)=255   'ha elrte a 255-t, lljon meg
gosub kiiratas
if zu<zr then d(y)=d(y)-1:  'ha a szmll cskken
if d(y)<0 then d(y)=0       'ha elrte a 0-t, lljon meg
gosub kiiratas: zr=zu: return

kiiratas:           'az egsz kperny kiratsa...majdnem     
for i=1 to byteszam
locate i+2,2:print i;"-"; :locate i+2,6:gosub binki: print d(i);"  ";tab(20) ;remd(i)
next i:
if abs(bit(d(1), 0))=1 then irany$="olvasas" else irany$="iras   "
locate 14,30:print "cim:"; int(d(1)/2);" adatirany:";irany$
locate 13,30 : print "bajtok szama:";byteszam
return

byteszam:       'a kirand bjtok szmnak a meghatrozsa
locate 12,30 : print "bajtok szma:";: color 12 :print byteszam
locate 12,40: input byteszam:color 15
locate 13,30 : print "bajtok szma:";: color 15 :print byteszam
return

noack:beep
locate 15,30: color 12:print i;".utan NO ACK":sleep 800:acktimer=0: 'kir, vr kicsit
locate 15,30:print "              ":locate 16,30:print "       ":color 15: goto mouse

