menü navigáció

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
doncarlos
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2007. október 14. vasárnap, 6:00

menü navigáció

HozzászólásSzerző: doncarlos » 2012. november 2. péntek, 1:08

Sziasztok!

Adott a következő elrendezésű menü:

Kód: Egész kijelölése

xxxx|v1|v2|v3|v4
 x  |xx|xx|xx|xx


A fejléc és a második sor első x értéke kiíródik a képernyőre, utána a következő módon szeretném az értékeket (xx) megadni. Alapból az első XX első X-én áll a kurzor, a 4x4-es billről beírok egy számot utána ugrik a második X-re. Ez idáig működik is. Majd a második után szeretném ha a kurzor visszaugrana az első X-re és így felülírhatom az előbbi bevitelt. Ha megnyomom a #-gombot (R kód) akkor ugorjon át a második XX első karakterére és így tovább. Ez a rész viszont furcsán viselkedik. A két karaktert be tudom írni ám a kurzor nem követi a mozgást, egy hellyel mindig előrébb van. a #-lenyomása után nem ugrik át csak az első "új" karakter lenyomása után kerül a helyére (a XX második X-hez). Bárhogy variáltam az alábbi kis rutint nem sikerült a kurzort rendesen pakolgatni. Érdekes viszont hogy a 4. XX után ha #-t nyomok akkor rendesen odaugrik az első X-re. Tehát csak a kurzormozgatással van gond, az értékek rendesen bekerülnek a megfelelő tömbbe stb... Érdekesség, hogy variáltam a kezdő if feltételét és ha <> "?" akkor úgy néz ki hogy a kurzor jó mozog mégis megjelennek olyan karakterek az X-ek helyén amit fel kellett volna hogy dolgozzon a program (E, R).

Remélem sikerült érthetően leírnom a helyzetet. Van valakinek valamilyen ötlete erre, esetleg hogy lenne ezt optimálisan/jobban/egyszerűbben csinálni?

Kód: Egész kijelölése

$regfile = "m32def.dat"
$crystal = 11059200
$baud = 115200
$lib "mcsbyteint.lbx"                                       'a kisebb kod miatt
$lib "LUC_lcd4busy_timeout.lbx"                             'Luciano's fast LCD lib
$hwstack = 100
$swstack = 200
$framesize = 100


Index = 1
   Locate 2 , 1 : Lcd " " ; Str(x) ; "  |"
Bevitel:

   Keychar = ""
   Temp_str = ""
   Do
   If Keychar <> "?" And Keychar <> "" Then
         If Keychar = "A" Then Exit Do
         If Keychar = "E" Then Goto Eleje
         If Keychar = "R" Then
            If Index = 4 Then
               Keychar = ""
               Index = 1
            Else
            Ido_bajt(index) = Val(temp_str)
            Incr Index
            Goto Bevitel
            End If
         End If
         If Len(temp_str) > 1 Then Temp_str = ""
         If Keychar = "?" Then Keychar = ""
         'Waitms 100
         Temp_str = Temp_str + Keychar
         Select Case Index
            Case 1 : Locate 2 , 6
            Case 2 : Locate 2 , 9
            Case 3 : Locate 2 , 12
            Case 4 : Locate 2 , 15
         End Select
         Lcd Temp_str
         Keychar = ""
      End If
   Loop

A billentyűzet egy 4x4 hagyományos bill megszakításból kezelve. A kezelése az oldalon található bascom leírásból van kiemelve. BASCOM 2.0.7.3

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10047
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. november 2. péntek, 7:45

Ez a program igaz csak részlet?

A DIM-ek hiányából és a gombkezelés nemlátásából gondolom....
Így a logikai bukfenceidet nem lehet látni benne:(

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3348
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. november 2. péntek, 11:11

Kód: Egész kijelölése

 Index = 1
    Locate 2 , 1 : Lcd " " ; Str(x) ; "  |"
 Bevitel:

    Keychar = ""
    Temp_str = ""
    Do
    If Keychar <> "?" Or Keychar <> "" Then